[mapguide-commits] r8556 - in trunk/Tools/Maestro: . Maestro Maestro/packages Maestro.AddIn.Local Maestro.AddIn.Rest Maestro.AddIn.Rest/Commands Maestro.AddIn.Rest/Model Maestro.AddIn.Rest/Properties Maestro.AddIn.Rest/Resources Maestro.AddIn.Rest/Resources/Images Maestro.AddIn.Rest/UI Maestro.AddIn.Rest/UI/Methods Maestro.AddIn.Rest/UI/Representation Maestro.Editors/Common Maestro.Shared.UI

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Mar 4 05:59:24 PST 2015


Author: jng
Date: 2015-03-04 05:59:24 -0800 (Wed, 04 Mar 2015)
New Revision: 8556

Added:
   trunk/Tools/Maestro/Maestro.AddIn.Rest/
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Commands/
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Commands/StartupCommand.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/ExtensionMethods.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Maestro.AddIn.Rest.csproj
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Manifest.addin
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/BoxedValue.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/DataConfigurationList.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/DataFileList.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/RestSourceContext.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Properties/
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/blue-document--plus.png
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/cross-script.png
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/pencil.png
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/plus.png
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Strings.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/Strings.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/IRepresentationCtrl.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.cs
   trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.resx
   trunk/Tools/Maestro/Maestro.AddIn.Rest/packages.config
Modified:
   trunk/Tools/Maestro/Maestro.AddIn.Local/Maestro.AddIn.Local.csproj
   trunk/Tools/Maestro/Maestro.Editors/Common/ExpressionEditor.cs
   trunk/Tools/Maestro/Maestro.Editors/Common/IExpressionEditor.cs
   trunk/Tools/Maestro/Maestro.Editors/Common/MonoCompatibleExpressionEditor.cs
   trunk/Tools/Maestro/Maestro.Shared.UI/WorkbenchBase.cs
   trunk/Tools/Maestro/Maestro/Maestro_All.sln
   trunk/Tools/Maestro/Maestro/packages/
   trunk/Tools/Maestro/Maestro/packages/repositories.config
Log:
#2506: First cut of a dedicated addin for working with mapguide-rest. This consists of:
 - A new sidebar pane with a tree explorer to list all available configurations
 - A configuration editor with shortcuts to add the desired feature/layer source and desired representations

This was made possible with the introduction of data configuration management APIs introduced with mapguide-rest 1.0 RC1, as such this is the minimum required version of mapguide-rest required for this addin to work.

Modified: trunk/Tools/Maestro/Maestro/Maestro_All.sln
===================================================================
--- trunk/Tools/Maestro/Maestro/Maestro_All.sln	2015-03-02 12:19:20 UTC (rev 8555)
+++ trunk/Tools/Maestro/Maestro/Maestro_All.sln	2015-03-04 13:59:24 UTC (rev 8556)
@@ -122,6 +122,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OSGeo.FDO.Expressions", "..\OSGeo.FDO.Expressions\OSGeo.FDO.Expressions.csproj", "{DA2CC031-200B-4F99-A0A9-2E95374BE78F}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro.AddIn.Rest", "..\Maestro.AddIn.Rest\Maestro.AddIn.Rest.csproj", "{2BFC5B13-3179-4FF9-9877-0D6CE9911A74}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -268,6 +270,10 @@
 		{DA2CC031-200B-4F99-A0A9-2E95374BE78F}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{DA2CC031-200B-4F99-A0A9-2E95374BE78F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{DA2CC031-200B-4F99-A0A9-2E95374BE78F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2BFC5B13-3179-4FF9-9877-0D6CE9911A74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2BFC5B13-3179-4FF9-9877-0D6CE9911A74}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2BFC5B13-3179-4FF9-9877-0D6CE9911A74}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2BFC5B13-3179-4FF9-9877-0D6CE9911A74}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -306,5 +312,6 @@
 		{28224492-7383-46BD-AE64-2DA35243175C} = {7507E52A-413B-4E0D-A1FF-7D293E462C1B}
 		{D32BE7DB-D0C3-4805-A057-18312370C57E} = {7507E52A-413B-4E0D-A1FF-7D293E462C1B}
 		{DA2CC031-200B-4F99-A0A9-2E95374BE78F} = {0DA73D0B-B89E-464B-AD24-CD370242F641}
+		{2BFC5B13-3179-4FF9-9877-0D6CE9911A74} = {D5A5B73D-6F2D-4199-8F1E-6786CE41B83D}
 	EndGlobalSection
 EndGlobal


Property changes on: trunk/Tools/Maestro/Maestro/packages
___________________________________________________________________
Modified: svn:ignore
   - DockPanelSuite.2.9.0.0
fleesharp.0.9.27-pre
IronPython.2.7.4
IronPython.StdLib.2.7.4
NUnit.2.6.3
SharpZipLib.0.86.0
TreeViewAdv.1.7.0.0
mapguide-api-base-x86.2.5.2.7949
mg-desktop-net40-x86.2.5.2.7949
mg-desktop-viewer-net40-x86.2.5.2.7949
RestSharp.105.0.1
Moq.4.2.1409.1722
NUnit.2.6.2
IronPython.2.7.5
IronPython.StdLib.2.7.5
Irony.0.9.0
mapguide-api-base-x86.2.6.0.8316
mg-desktop-viewer-x86.2.6.0.8316
mg-desktop-x86.2.6.0.8316
GeoAPI.1.7.3
NetTopologySuite.1.13.3.2
ProjNET4GeoAPI.1.3.0.4

   + DockPanelSuite.2.9.0.0
fleesharp.0.9.27-pre
IronPython.2.7.4
IronPython.StdLib.2.7.4
NUnit.2.6.3
SharpZipLib.0.86.0
TreeViewAdv.1.7.0.0
mapguide-api-base-x86.2.5.2.7949
mg-desktop-net40-x86.2.5.2.7949
mg-desktop-viewer-net40-x86.2.5.2.7949
RestSharp.105.0.1
Moq.4.2.1409.1722
NUnit.2.6.2
IronPython.2.7.5
IronPython.StdLib.2.7.5
Irony.0.9.0
mapguide-api-base-x86.2.6.0.8316
mg-desktop-viewer-x86.2.6.0.8316
mg-desktop-x86.2.6.0.8316
GeoAPI.1.7.3
NetTopologySuite.1.13.3.2
ProjNET4GeoAPI.1.3.0.4
Newtonsoft.Json.6.0.8


Modified: trunk/Tools/Maestro/Maestro/packages/repositories.config
===================================================================
--- trunk/Tools/Maestro/Maestro/packages/repositories.config	2015-03-02 12:19:20 UTC (rev 8555)
+++ trunk/Tools/Maestro/Maestro/packages/repositories.config	2015-03-04 13:59:24 UTC (rev 8556)
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <repositories>
   <repository path="..\..\Maestro.AddIn.Local\packages.config" />
+  <repository path="..\..\Maestro.AddIn.Rest\packages.config" />
   <repository path="..\..\Maestro.AddIn.Scripting\packages.config" />
   <repository path="..\..\Maestro.AddInManager\packages.config" />
   <repository path="..\..\Maestro.Base\packages.config" />

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/Maestro.AddIn.Local.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Local/Maestro.AddIn.Local.csproj	2015-03-02 12:19:20 UTC (rev 8555)
+++ trunk/Tools/Maestro/Maestro.AddIn.Local/Maestro.AddIn.Local.csproj	2015-03-04 13:59:24 UTC (rev 8556)
@@ -143,6 +143,7 @@
     <ProjectReference Include="..\Maestro.Shared.UI\Maestro.Shared.UI.csproj">
       <Project>{CFD19053-2172-41D3-8460-0FD2123A1E88}</Project>
       <Name>Maestro.Shared.UI</Name>
+      <Private>False</Private>
     </ProjectReference>
     <ProjectReference Include="..\OSGeo.MapGuide.MaestroAPI.Local\OSGeo.MapGuide.MaestroAPI.Local.csproj">
       <Project>{3DDF6501-0148-474C-8674-7C7DA49C7F02}</Project>


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.Rest
___________________________________________________________________
Added: svn:ignore
   + bin
obj


Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Commands/StartupCommand.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Commands/StartupCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Commands/StartupCommand.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,47 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using ICSharpCode.Core;
+using Maestro.AddIn.Rest.UI;
+using Maestro.Base;
+using Maestro.Base.Services;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Maestro.AddIn.Rest.Commands
+{
+    public class StartupCommand : AbstractCommand
+    {
+        public override void Run()
+        {
+            ResourceService.RegisterNeutralStrings(Strings.ResourceManager);
+
+            Workbench.WorkbenchInitialized += (sender, e) =>
+            {
+                var mgr = ServiceRegistry.GetService<ViewContentManager>();
+                mgr.OpenContent<RestExplorer>(Shared.UI.ViewRegion.Right);
+            };
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/ExtensionMethods.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/ExtensionMethods.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/ExtensionMethods.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,53 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using RestSharp;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Maestro.AddIn.Rest
+{
+    public static class ExtensionMethods
+    {
+        public static void UIThreadInvoke(this Control control, Action action)
+        {
+            if (control.InvokeRequired)
+                control.Invoke(action);
+            else
+                action();
+        }
+
+        public static RestRequestAsyncHandle ExecuteGetRequestAsync<T>(this RestClient client, string uriPart, Action<T, Exception> callback) where T : new()
+        {
+            var req = new RestRequest(uriPart);
+            return client.ExecuteAsync<T>(req, (resp) =>
+            {
+                if (resp.StatusCode != System.Net.HttpStatusCode.OK)
+                    throw new Exception(resp.Content);
+                callback(resp.Data, resp.ErrorException);
+            });
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Maestro.AddIn.Rest.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Maestro.AddIn.Rest.csproj	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Maestro.AddIn.Rest.csproj	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{2BFC5B13-3179-4FF9-9877-0D6CE9911A74}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Maestro.AddIn.Rest</RootNamespace>
+    <AssemblyName>Maestro.AddIn.Rest</AssemblyName>
+    <TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\Maestro\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\out\Debug\AddIns\Rest\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\out\Release\AddIns\Local\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="ICSharpCode.TextEditor">
+      <HintPath>..\SDK\bin\ICSharpCode.TextEditor.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Maestro\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
+    <Reference Include="RestSharp">
+      <HintPath>..\Maestro\packages\RestSharp.105.0.1\lib\net4\RestSharp.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Commands\StartupCommand.cs" />
+    <Compile Include="ExtensionMethods.cs" />
+    <Compile Include="Model\BoxedValue.cs" />
+    <Compile Include="Model\DataConfigurationList.cs" />
+    <Compile Include="Model\DataFileList.cs" />
+    <Compile Include="Model\RestSourceContext.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Strings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Strings.resx</DependentUpon>
+    </Compile>
+    <Compile Include="UI\Methods\GetMethodCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UI\Methods\GetMethodCtrl.Designer.cs">
+      <DependentUpon>GetMethodCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\NewRepresentationDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\NewRepresentationDialog.Designer.cs">
+      <DependentUpon>NewRepresentationDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\Representation\CsvRepresentationCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UI\Representation\CsvRepresentationCtrl.Designer.cs">
+      <DependentUpon>CsvRepresentationCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\Representation\ImageRepresentationCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UI\Representation\ImageRepresentationCtrl.Designer.cs">
+      <DependentUpon>ImageRepresentationCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\Representation\IRepresentationCtrl.cs" />
+    <Compile Include="UI\Representation\PermissionsCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UI\Representation\PermissionsCtrl.Designer.cs">
+      <DependentUpon>PermissionsCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\Representation\CruddableRepresentationCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UI\Representation\CruddableRepresentationCtrl.Designer.cs">
+      <DependentUpon>CruddableRepresentationCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\Representation\TemplateRepresentationCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UI\Representation\TemplateRepresentationCtrl.Designer.cs">
+      <DependentUpon>TemplateRepresentationCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\RestConfigurationEditor.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\RestConfigurationEditor.Designer.cs">
+      <DependentUpon>RestConfigurationEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\RestExplorer.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UI\RestExplorer.Designer.cs">
+      <DependentUpon>RestExplorer.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\RestLoginDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\RestLoginDialog.Designer.cs">
+      <DependentUpon>RestLoginDialog.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Maestro.Base\Maestro.Base.csproj">
+      <Project>{f1e2f468-5030-4dba-968c-9620284afaa1}</Project>
+      <Name>Maestro.Base</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\Maestro.Editors\Maestro.Editors.csproj">
+      <Project>{5ad2cdba-952e-4148-98a1-31d2e0d540d5}</Project>
+      <Name>Maestro.Editors</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\Maestro.Shared.UI\Maestro.Shared.UI.csproj">
+      <Project>{cfd19053-2172-41d3-8460-0fd2123a1e88}</Project>
+      <Name>Maestro.Shared.UI</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\OSGeo.MapGuide.MaestroAPI\OSGeo.MapGuide.MaestroAPI.csproj">
+      <Project>{80fa3158-8b5f-48d1-a393-0378afe48a7e}</Project>
+      <Name>OSGeo.MapGuide.MaestroAPI</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\OSGeo.MapGuide.ObjectModels\OSGeo.MapGuide.ObjectModels.csproj">
+      <Project>{48c5eb23-45ae-4c4c-8fab-635428ae8ca1}</Project>
+      <Name>OSGeo.MapGuide.ObjectModels</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\Thirdparty\SharpDevelop\ICSharpCode.Core\ICSharpCode.Core.csproj">
+      <Project>{35cef10f-2d4c-45f2-9dd1-161e0fec583c}</Project>
+      <Name>ICSharpCode.Core</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Manifest.addin">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <None Include="packages.config" />
+    <None Include="Resources\Images\pencil.png" />
+    <None Include="Resources\Images\blue-document--plus.png" />
+    <None Include="Resources\Images\cross-script.png" />
+    <None Include="Resources\Images\plus.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Strings.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Strings.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\Methods\GetMethodCtrl.resx">
+      <DependentUpon>GetMethodCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\NewRepresentationDialog.resx">
+      <DependentUpon>NewRepresentationDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\Representation\CsvRepresentationCtrl.resx">
+      <DependentUpon>CsvRepresentationCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\Representation\ImageRepresentationCtrl.resx">
+      <DependentUpon>ImageRepresentationCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\Representation\PermissionsCtrl.resx">
+      <DependentUpon>PermissionsCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\Representation\CruddableRepresentationCtrl.resx">
+      <DependentUpon>CruddableRepresentationCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\Representation\TemplateRepresentationCtrl.resx">
+      <DependentUpon>TemplateRepresentationCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\RestConfigurationEditor.resx">
+      <DependentUpon>RestConfigurationEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\RestExplorer.resx">
+      <DependentUpon>RestExplorer.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\RestLoginDialog.resx">
+      <DependentUpon>RestLoginDialog.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
+  </Target>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Manifest.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Manifest.addin	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Manifest.addin	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,25 @@
+<AddIn name="Maestro.AddIn.Rest"
+       author="Jackie Ng"
+       url="http://trac.osgeo.org/mapguide/wiki/maestro"
+       description="MapGuide Maestro AddIn to support publishing spatial data to a mapguide-rest instance"
+       addInManagerHidden="preinstalled">
+
+  <Manifest>
+    <Identity name="Maestro.AddIn.Rest" />
+  </Manifest>
+
+  <Runtime>
+    <Import assembly=":Maestro.Base" />
+    <Import assembly="Maestro.AddIn.Rest.dll" />
+  </Runtime>
+
+  <!-- Auto-start commands -->
+  <Path name="/Workspace/Autostart">
+    <Class id="Startup" class="Maestro.AddIn.Rest.Commands.StartupCommand" />
+  </Path>
+
+  <!-- Singleton view content -->
+  <Path name="/Maestro/Shell/SingleViewContent">
+    <Class id="RestExplorer" class="Maestro.AddIn.Rest.UI.RestExplorer" />
+  </Path>
+</AddIn>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/BoxedValue.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/BoxedValue.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/BoxedValue.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,44 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Maestro.AddIn.Rest.Model
+{
+    public class PrimitiveValueResponse
+    {
+        public PrimitiveValueResponse() { }
+
+        public PrimitiveValue PrimitiveValue { get; set; }
+    }
+
+    public class PrimitiveValue
+    {
+        public PrimitiveValue() { }
+
+        public string Type { get; set; }
+        public object Value { get; set; }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/DataConfigurationList.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/DataConfigurationList.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/DataConfigurationList.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,71 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Maestro.AddIn.Rest.Model
+{
+    public class DataConfigurationResponse
+    {
+        public DataConfigurationResponse() { }
+
+        /// <summary>
+        /// The list of data configurations
+        /// </summary>
+        public DataConfigurationList DataConfigurationList { get; set; }
+    }
+
+    public class DataConfigurationList
+    {
+        public DataConfigurationList() { }
+
+        /// <summary>
+        /// The base endpoint URI for mapguide-rest
+        /// </summary>
+        public string RootUri { get; set; }
+        /// <summary>
+        /// The associated mapagent URL
+        /// </summary>
+        public string MapAgentUrl { get; set; }
+        /// <summary>
+        /// The array of configured published data sources
+        /// </summary>
+        public List<DataConfiguration> Configuration { get; set; }
+    }
+
+    public class DataConfiguration
+    {
+        public DataConfiguration() { }
+
+        /// <summary>
+        /// The relative URI part to read/write the configuration file
+        /// </summary>
+        public string ConfigUriPart { get; set; }
+        /// <summary>
+        /// The relative URI part to access the API documentation for this data configuration
+        /// </summary>
+        public string DocUriPart { get; set; }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/DataFileList.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/DataFileList.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/DataFileList.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,43 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Maestro.AddIn.Rest.Model
+{
+    public class DataFileListResponse
+    {
+        public DataFileListResponse() { }
+
+        public DataFileList DataConfigurationFileList { get; set; }
+    }
+
+    public class DataFileList
+    {
+        public DataFileList() { }
+
+        public List<string> File { get; set; }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/RestSourceContext.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/RestSourceContext.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Model/RestSourceContext.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,103 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using Maestro.Editors.Common;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.MaestroAPI.Schema;
+using OSGeo.MapGuide.MaestroAPI.Services;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Maestro.AddIn.Rest.Model
+{
+    public class RestSource
+    {
+        public string FeatureSource { get; set; }
+
+        public string ClassName { get; set; }
+    }
+
+    public class RestSourceContext
+    {
+        private RestSource _source;
+        private IServerConnection _conn;
+        private ClassDefinition _cls;
+
+        public RestSourceContext(IServerConnection conn, RestSource source)
+        {
+            _conn = conn;
+            _source = source;
+        }
+
+        private ClassDefinition GetClass()
+        {
+            if (_cls == null)
+                _cls = _conn.FeatureService.GetClassDefinition(_source.FeatureSource, _source.ClassName);
+
+            return _cls;
+        }
+
+        internal IList<string> GetPropertyNames()
+        {
+            var list = new List<string>();
+            var cls = GetClass();
+            list.AddRange(cls.Properties.Select(p => p.Name));
+            return list;
+        }
+
+        internal string EditExpression(string expr)
+        {
+            var editor = FdoExpressionEditorFactory.Create();
+            editor.Initialize(_conn, GetClass(), _source.FeatureSource, ExpressionEditorMode.Expression);
+            if (editor.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                return editor.Expression;
+            }
+            return null;
+        }
+
+        internal string PickCoordinateSystemCode()
+        {
+            CoordinateSystemPicker picker = new CoordinateSystemPicker(_conn.CoordinateSystemCatalog);
+            if (picker.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                var cs = picker.SelectedCoordSys;
+                return cs.Code;
+            }
+            return null;
+        }
+
+        internal IList<string> GetGroups()
+        {
+            var list = new List<string>();
+
+            ISiteService site = (ISiteService)_conn.GetService((int)ServiceType.Site);
+            list.AddRange(site.EnumerateGroups().Group.Select(g => g.Name));
+
+            return list;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Properties/AssemblyInfo.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Properties/AssemblyInfo.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Maestro.AddIn.Rest")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Maestro.AddIn.Rest")]
+[assembly: AssemblyCopyright("Copyright ©  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("e00b3cd6-9d5a-46a2-97da-c0bea22b644a")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/blue-document--plus.png
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/blue-document--plus.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/cross-script.png
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/cross-script.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/pencil.png
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/pencil.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/plus.png
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.Rest/Resources/Images/plus.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Strings.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Strings.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Strings.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,171 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.34209
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Maestro.AddIn.Rest {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Strings {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Strings() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Maestro.AddIn.Rest.Strings", typeof(Strings).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Configuration deleted.
+        /// </summary>
+        internal static string ConfigurationDeleted {
+            get {
+                return ResourceManager.GetString("ConfigurationDeleted", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Configuration saved.
+        /// </summary>
+        internal static string ConfigurationSaved {
+            get {
+                return ResourceManager.GetString("ConfigurationSaved", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Delete configuration.
+        /// </summary>
+        internal static string DeleteConfiguration {
+            get {
+                return ResourceManager.GetString("DeleteConfiguration", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Error saving configuration: {0}.
+        /// </summary>
+        internal static string ErrorSavingConfiguration {
+            get {
+                return ResourceManager.GetString("ErrorSavingConfiguration", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to FDO Class.
+        /// </summary>
+        internal static string FdoClass {
+            get {
+                return ResourceManager.GetString("FdoClass", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Configuration has a missing or invalid source configuration.
+        /// </summary>
+        internal static string InvalidSourceConfiguration {
+            get {
+                return ResourceManager.GetString("InvalidSourceConfiguration", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to No source specified. Please specify a source from a Feature Source or Layer Definition first.
+        /// </summary>
+        internal static string NoSourceInConfiguration {
+            get {
+                return ResourceManager.GetString("NoSourceInConfiguration", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Not a vector layer: {0}.
+        /// </summary>
+        internal static string NotAVectorLayer {
+            get {
+                return ResourceManager.GetString("NotAVectorLayer", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Delete this configuration?.
+        /// </summary>
+        internal static string PromptDeleteConfiguration {
+            get {
+                return ResourceManager.GetString("PromptDeleteConfiguration", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to REST Explorer.
+        /// </summary>
+        internal static string RestExplorer {
+            get {
+                return ResourceManager.GetString("RestExplorer", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Select class name.
+        /// </summary>
+        internal static string SelectClassName {
+            get {
+                return ResourceManager.GetString("SelectClassName", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Please enter the URI part for this configuration. If the URI part already exists, saving will overwrite the existing configuration.
+        /// </summary>
+        internal static string UriPartRequrired {
+            get {
+                return ResourceManager.GetString("UriPartRequrired", resourceCulture);
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/Strings.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/Strings.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/Strings.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,156 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RestExplorer" xml:space="preserve">
+    <value>REST Explorer</value>
+  </data>
+  <data name="FdoClass" xml:space="preserve">
+    <value>FDO Class</value>
+  </data>
+  <data name="SelectClassName" xml:space="preserve">
+    <value>Select class name</value>
+  </data>
+  <data name="ErrorSavingConfiguration" xml:space="preserve">
+    <value>Error saving configuration: {0}</value>
+  </data>
+  <data name="ConfigurationSaved" xml:space="preserve">
+    <value>Configuration saved</value>
+  </data>
+  <data name="NoSourceInConfiguration" xml:space="preserve">
+    <value>No source specified. Please specify a source from a Feature Source or Layer Definition first</value>
+  </data>
+  <data name="NotAVectorLayer" xml:space="preserve">
+    <value>Not a vector layer: {0}</value>
+  </data>
+  <data name="InvalidSourceConfiguration" xml:space="preserve">
+    <value>Configuration has a missing or invalid source configuration</value>
+  </data>
+  <data name="PromptDeleteConfiguration" xml:space="preserve">
+    <value>Delete this configuration?</value>
+  </data>
+  <data name="DeleteConfiguration" xml:space="preserve">
+    <value>Delete configuration</value>
+  </data>
+  <data name="ConfigurationDeleted" xml:space="preserve">
+    <value>Configuration deleted</value>
+  </data>
+  <data name="UriPartRequrired" xml:space="preserve">
+    <value>Please enter the URI part for this configuration. If the URI part already exists, saving will overwrite the existing configuration</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,185 @@
+namespace Maestro.AddIn.Rest.UI.Methods
+{
+    partial class GetMethodCtrl
+    {
+        /// <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 Component 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()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GetMethodCtrl));
+            this.chkMaxCount = new System.Windows.Forms.CheckBox();
+            this.chkPageSize = new System.Windows.Forms.CheckBox();
+            this.numPageSize = new System.Windows.Forms.NumericUpDown();
+            this.numMaxCount = new System.Windows.Forms.NumericUpDown();
+            this.chkTransformTo = new System.Windows.Forms.CheckBox();
+            this.txtTransformTo = new System.Windows.Forms.TextBox();
+            this.btnBrowseCs = new System.Windows.Forms.Button();
+            this.chkComputedProperties = new System.Windows.Forms.CheckBox();
+            this.grdComputedProperties = new System.Windows.Forms.DataGridView();
+            this.lstProperties = new System.Windows.Forms.ListBox();
+            this.chkProperties = new System.Windows.Forms.CheckBox();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnEditExpression = new System.Windows.Forms.ToolStripButton();
+            ((System.ComponentModel.ISupportInitialize)(this.numPageSize)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.numMaxCount)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.grdComputedProperties)).BeginInit();
+            this.panel1.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // chkMaxCount
+            // 
+            resources.ApplyResources(this.chkMaxCount, "chkMaxCount");
+            this.chkMaxCount.Name = "chkMaxCount";
+            this.chkMaxCount.UseVisualStyleBackColor = true;
+            // 
+            // chkPageSize
+            // 
+            resources.ApplyResources(this.chkPageSize, "chkPageSize");
+            this.chkPageSize.Name = "chkPageSize";
+            this.chkPageSize.UseVisualStyleBackColor = true;
+            // 
+            // numPageSize
+            // 
+            resources.ApplyResources(this.numPageSize, "numPageSize");
+            this.numPageSize.Name = "numPageSize";
+            // 
+            // numMaxCount
+            // 
+            resources.ApplyResources(this.numMaxCount, "numMaxCount");
+            this.numMaxCount.Name = "numMaxCount";
+            // 
+            // chkTransformTo
+            // 
+            resources.ApplyResources(this.chkTransformTo, "chkTransformTo");
+            this.chkTransformTo.Name = "chkTransformTo";
+            this.chkTransformTo.UseVisualStyleBackColor = true;
+            // 
+            // txtTransformTo
+            // 
+            resources.ApplyResources(this.txtTransformTo, "txtTransformTo");
+            this.txtTransformTo.Name = "txtTransformTo";
+            this.txtTransformTo.ReadOnly = true;
+            // 
+            // btnBrowseCs
+            // 
+            resources.ApplyResources(this.btnBrowseCs, "btnBrowseCs");
+            this.btnBrowseCs.Name = "btnBrowseCs";
+            this.btnBrowseCs.UseVisualStyleBackColor = true;
+            this.btnBrowseCs.Click += new System.EventHandler(this.btnBrowseCs_Click);
+            // 
+            // chkComputedProperties
+            // 
+            resources.ApplyResources(this.chkComputedProperties, "chkComputedProperties");
+            this.chkComputedProperties.Name = "chkComputedProperties";
+            this.chkComputedProperties.UseVisualStyleBackColor = true;
+            // 
+            // grdComputedProperties
+            // 
+            this.grdComputedProperties.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            resources.ApplyResources(this.grdComputedProperties, "grdComputedProperties");
+            this.grdComputedProperties.Name = "grdComputedProperties";
+            this.grdComputedProperties.SelectionChanged += new System.EventHandler(this.grdComputedProperties_SelectionChanged);
+            // 
+            // lstProperties
+            // 
+            this.lstProperties.FormattingEnabled = true;
+            resources.ApplyResources(this.lstProperties, "lstProperties");
+            this.lstProperties.Name = "lstProperties";
+            this.lstProperties.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple;
+            // 
+            // chkProperties
+            // 
+            resources.ApplyResources(this.chkProperties, "chkProperties");
+            this.chkProperties.Name = "chkProperties";
+            this.chkProperties.UseVisualStyleBackColor = true;
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.grdComputedProperties);
+            this.panel1.Controls.Add(this.toolStrip1);
+            resources.ApplyResources(this.panel1, "panel1");
+            this.panel1.Name = "panel1";
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnEditExpression});
+            resources.ApplyResources(this.toolStrip1, "toolStrip1");
+            this.toolStrip1.Name = "toolStrip1";
+            // 
+            // btnEditExpression
+            // 
+            resources.ApplyResources(this.btnEditExpression, "btnEditExpression");
+            this.btnEditExpression.Name = "btnEditExpression";
+            this.btnEditExpression.Click += new System.EventHandler(this.btnEditExpression_Click);
+            // 
+            // GetMethodCtrl
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.lstProperties);
+            this.Controls.Add(this.chkProperties);
+            this.Controls.Add(this.chkComputedProperties);
+            this.Controls.Add(this.btnBrowseCs);
+            this.Controls.Add(this.txtTransformTo);
+            this.Controls.Add(this.chkTransformTo);
+            this.Controls.Add(this.numMaxCount);
+            this.Controls.Add(this.numPageSize);
+            this.Controls.Add(this.chkPageSize);
+            this.Controls.Add(this.chkMaxCount);
+            this.Name = "GetMethodCtrl";
+            ((System.ComponentModel.ISupportInitialize)(this.numPageSize)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.numMaxCount)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.grdComputedProperties)).EndInit();
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.CheckBox chkMaxCount;
+        private System.Windows.Forms.CheckBox chkPageSize;
+        private System.Windows.Forms.NumericUpDown numPageSize;
+        private System.Windows.Forms.NumericUpDown numMaxCount;
+        private System.Windows.Forms.CheckBox chkTransformTo;
+        private System.Windows.Forms.TextBox txtTransformTo;
+        private System.Windows.Forms.Button btnBrowseCs;
+        private System.Windows.Forms.CheckBox chkComputedProperties;
+        private System.Windows.Forms.DataGridView grdComputedProperties;
+        private System.Windows.Forms.ListBox lstProperties;
+        private System.Windows.Forms.CheckBox chkProperties;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnEditExpression;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,160 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Dynamic;
+using Maestro.AddIn.Rest.Model;
+
+namespace Maestro.AddIn.Rest.UI.Methods
+{
+    internal partial class GetMethodCtrl : UserControl
+    {
+        class ComputedProperty : INotifyPropertyChanged
+        {
+            private string _alias;
+            private string _expression;
+
+            public ComputedProperty()
+            {
+                _alias = "";
+                _expression = "";
+            }
+
+            public string Alias
+            {
+                get { return _alias; }
+                set
+                {
+                    if (value != _alias)
+                    {
+                        _alias = value;
+                        var h = this.PropertyChanged;
+                        if (h != null)
+                            h(this, new PropertyChangedEventArgs("Alias")); //NOXLATE
+                    }
+                }
+            }
+            public string Expression
+            {
+                get { return _expression; }
+                set
+                {
+                    if (value != _expression)
+                    {
+                        _expression = value;
+                        var h = this.PropertyChanged;
+                        if (h != null)
+                            h(this, new PropertyChangedEventArgs("Expression")); //NOXLATE
+                    }
+                }
+            }
+
+            public event PropertyChangedEventHandler PropertyChanged;
+        }
+
+        private RestSourceContext _context;
+        private BindingList<ComputedProperty> _props;
+
+        public GetMethodCtrl()
+        {
+            InitializeComponent();
+            _props = new BindingList<ComputedProperty>();
+            grdComputedProperties.DataSource = _props;
+        }
+
+        public void Init(RestSourceContext context)
+        {
+            _context = context;
+            numMaxCount.Minimum = 0;
+            numMaxCount.Maximum = Int32.MaxValue;
+            numPageSize.Minimum = 0;
+            numPageSize.Maximum = Int32.MaxValue;
+
+            numMaxCount.Value = 500;
+            numPageSize.Value = 100;
+
+            lstProperties.DataSource = context.GetPropertyNames();
+        }
+
+        public dynamic WriteOptions()
+        {
+            dynamic opts = new ExpandoObject();
+
+            if (chkPageSize.Checked)
+                opts.PageSize = Convert.ToInt32(numPageSize.Value);
+
+            if (chkMaxCount.Checked)
+                opts.MaxCount = Convert.ToInt32(numMaxCount.Value);
+
+            if (chkTransformTo.Checked)
+                opts.TransformTo = txtTransformTo.Text;
+
+            if (chkProperties.Checked)
+                opts.Properties = new List<string>(lstProperties.SelectedItems.Cast<object>().Select(o => o.ToString()));
+
+            if (chkComputedProperties.Checked)
+            {
+                opts.ComputedProperties = new ExpandoObject();
+                var dict = (IDictionary<string, object>)opts.ComputedProperties;
+                foreach (var prop in _props)
+                {
+                    dict.Add(prop.Alias, prop.Expression);
+                }
+            }
+
+            return opts;
+        }
+
+        private void grdComputedProperties_SelectionChanged(object sender, EventArgs e)
+        {
+            btnEditExpression.Enabled = grdComputedProperties.SelectedRows.Count == 1;
+        }
+
+        private void btnEditExpression_Click(object sender, EventArgs e)
+        {
+            if (grdComputedProperties.SelectedRows.Count == 1)
+            {
+                var prop = grdComputedProperties.SelectedRows[0].DataBoundItem as ComputedProperty;
+                if (prop != null)
+                {
+                    string expr = _context.EditExpression(prop.Expression);
+                    if (expr != null)
+                        prop.Expression = expr;
+                }
+            }
+        }
+
+        private void btnBrowseCs_Click(object sender, EventArgs e)
+        {
+            string code = _context.PickCoordinateSystemCode();
+            if (code != null)
+                txtTransformTo.Text = code;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Methods/GetMethodCtrl.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,480 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="chkMaxCount.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="chkMaxCount.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 26</value>
+  </data>
+  <data name="chkMaxCount.Size" type="System.Drawing.Size, System.Drawing">
+    <value>77, 17</value>
+  </data>
+  <data name="chkMaxCount.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="chkMaxCount.Text" xml:space="preserve">
+    <value>Max Count</value>
+  </data>
+  <data name=">>chkMaxCount.Name" xml:space="preserve">
+    <value>chkMaxCount</value>
+  </data>
+  <data name=">>chkMaxCount.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkMaxCount.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkMaxCount.ZOrder" xml:space="preserve">
+    <value>10</value>
+  </data>
+  <data name="chkPageSize.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="chkPageSize.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 3</value>
+  </data>
+  <data name="chkPageSize.Size" type="System.Drawing.Size, System.Drawing">
+    <value>74, 17</value>
+  </data>
+  <data name="chkPageSize.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="chkPageSize.Text" xml:space="preserve">
+    <value>Page Size</value>
+  </data>
+  <data name=">>chkPageSize.Name" xml:space="preserve">
+    <value>chkPageSize</value>
+  </data>
+  <data name=">>chkPageSize.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkPageSize.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkPageSize.ZOrder" xml:space="preserve">
+    <value>9</value>
+  </data>
+  <data name="numPageSize.Location" type="System.Drawing.Point, System.Drawing">
+    <value>149, 0</value>
+  </data>
+  <data name="numPageSize.Size" type="System.Drawing.Size, System.Drawing">
+    <value>83, 20</value>
+  </data>
+  <data name="numPageSize.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name=">>numPageSize.Name" xml:space="preserve">
+    <value>numPageSize</value>
+  </data>
+  <data name=">>numPageSize.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>numPageSize.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>numPageSize.ZOrder" xml:space="preserve">
+    <value>8</value>
+  </data>
+  <data name="numMaxCount.Location" type="System.Drawing.Point, System.Drawing">
+    <value>149, 23</value>
+  </data>
+  <data name="numMaxCount.Size" type="System.Drawing.Size, System.Drawing">
+    <value>83, 20</value>
+  </data>
+  <data name="numMaxCount.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name=">>numMaxCount.Name" xml:space="preserve">
+    <value>numMaxCount</value>
+  </data>
+  <data name=">>numMaxCount.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>numMaxCount.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>numMaxCount.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="chkTransformTo.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="chkTransformTo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 50</value>
+  </data>
+  <data name="chkTransformTo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>133, 17</value>
+  </data>
+  <data name="chkTransformTo.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="chkTransformTo.Text" xml:space="preserve">
+    <value>Transform Features To</value>
+  </data>
+  <data name=">>chkTransformTo.Name" xml:space="preserve">
+    <value>chkTransformTo</value>
+  </data>
+  <data name=">>chkTransformTo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkTransformTo.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkTransformTo.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="txtTransformTo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>149, 48</value>
+  </data>
+  <data name="txtTransformTo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>83, 20</value>
+  </data>
+  <data name="txtTransformTo.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name=">>txtTransformTo.Name" xml:space="preserve">
+    <value>txtTransformTo</value>
+  </data>
+  <data name=">>txtTransformTo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtTransformTo.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>txtTransformTo.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="btnBrowseCs.Location" type="System.Drawing.Point, System.Drawing">
+    <value>238, 46</value>
+  </data>
+  <data name="btnBrowseCs.Size" type="System.Drawing.Size, System.Drawing">
+    <value>27, 23</value>
+  </data>
+  <data name="btnBrowseCs.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
+  </data>
+  <data name="btnBrowseCs.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name=">>btnBrowseCs.Name" xml:space="preserve">
+    <value>btnBrowseCs</value>
+  </data>
+  <data name=">>btnBrowseCs.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>btnBrowseCs.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>btnBrowseCs.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="chkComputedProperties.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="chkComputedProperties.Location" type="System.Drawing.Point, System.Drawing">
+    <value>288, 3</value>
+  </data>
+  <data name="chkComputedProperties.Size" type="System.Drawing.Size, System.Drawing">
+    <value>124, 17</value>
+  </data>
+  <data name="chkComputedProperties.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="chkComputedProperties.Text" xml:space="preserve">
+    <value>Computed Properties</value>
+  </data>
+  <data name=">>chkComputedProperties.Name" xml:space="preserve">
+    <value>chkComputedProperties</value>
+  </data>
+  <data name=">>chkComputedProperties.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkComputedProperties.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkComputedProperties.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="grdComputedProperties.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="grdComputedProperties.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 25</value>
+  </data>
+  <data name="grdComputedProperties.Size" type="System.Drawing.Size, System.Drawing">
+    <value>256, 179</value>
+  </data>
+  <data name="grdComputedProperties.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
+  </data>
+  <data name=">>grdComputedProperties.Name" xml:space="preserve">
+    <value>grdComputedProperties</value>
+  </data>
+  <data name=">>grdComputedProperties.Type" xml:space="preserve">
+    <value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grdComputedProperties.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name=">>grdComputedProperties.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="lstProperties.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 96</value>
+  </data>
+  <data name="lstProperties.Size" type="System.Drawing.Size, System.Drawing">
+    <value>262, 134</value>
+  </data>
+  <data name="lstProperties.TabIndex" type="System.Int32, mscorlib">
+    <value>17</value>
+  </data>
+  <data name=">>lstProperties.Name" xml:space="preserve">
+    <value>lstProperties</value>
+  </data>
+  <data name=">>lstProperties.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>lstProperties.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>lstProperties.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="chkProperties.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="chkProperties.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 73</value>
+  </data>
+  <data name="chkProperties.Size" type="System.Drawing.Size, System.Drawing">
+    <value>73, 17</value>
+  </data>
+  <data name="chkProperties.TabIndex" type="System.Int32, mscorlib">
+    <value>16</value>
+  </data>
+  <data name="chkProperties.Text" xml:space="preserve">
+    <value>Properties</value>
+  </data>
+  <data name=">>chkProperties.Name" xml:space="preserve">
+    <value>chkProperties</value>
+  </data>
+  <data name=">>chkProperties.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkProperties.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkProperties.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="btnEditExpression.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnEditExpression.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACSSURBVDhPYxgFmICRkbERiNfgwI1QZXgBJ1BhDxCvB7J1
+        IEJgoAMVIwqADJkAxFuAbD2IEBjoQmmiABfQgClAvBPI1ocIkQYMgJr3A/EMIJsLIkQ8MAJqPArEc4Fs
+        ZM1GUBovMAFqPAPEi4FsZM1gcSgbJ+AEYlBIP8SBNwAxXu+ADBAGYikcWBSISQ6PQQ0YGADEYBhjFBYm
+        UAAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="btnEditExpression.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnEditExpression.Size" type="System.Drawing.Size, System.Drawing">
+    <value>105, 22</value>
+  </data>
+  <data name="btnEditExpression.Text" xml:space="preserve">
+    <value>Edit Expression</value>
+  </data>
+  <data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>256, 25</value>
+  </data>
+  <data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
+    <value>16</value>
+  </data>
+  <data name="toolStrip1.Text" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name=">>toolStrip1.Name" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name=">>toolStrip1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>toolStrip1.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name=">>toolStrip1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>288, 26</value>
+  </data>
+  <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>256, 204</value>
+  </data>
+  <data name="panel1.TabIndex" type="System.Int32, mscorlib">
+    <value>18</value>
+  </data>
+  <data name=">>panel1.Name" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name=">>panel1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>panel1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>panel1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>547, 236</value>
+  </data>
+  <data name=">>btnEditExpression.Name" xml:space="preserve">
+    <value>btnEditExpression</value>
+  </data>
+  <data name=">>btnEditExpression.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>$this.Name" xml:space="preserve">
+    <value>GetMethodCtrl</value>
+  </data>
+  <data name=">>$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,92 @@
+namespace Maestro.AddIn.Rest.UI
+{
+    partial class NewRepresentationDialog
+    {
+        /// <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.btnSave = new System.Windows.Forms.Button();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.panelSettings = new System.Windows.Forms.Panel();
+            this.SuspendLayout();
+            // 
+            // btnSave
+            // 
+            this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnSave.Location = new System.Drawing.Point(439, 507);
+            this.btnSave.Name = "btnSave";
+            this.btnSave.Size = new System.Drawing.Size(75, 23);
+            this.btnSave.TabIndex = 1;
+            this.btnSave.Text = "Save";
+            this.btnSave.UseVisualStyleBackColor = true;
+            this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+            // 
+            // btnCancel
+            // 
+            this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.btnCancel.Location = new System.Drawing.Point(520, 507);
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.Size = new System.Drawing.Size(75, 23);
+            this.btnCancel.TabIndex = 2;
+            this.btnCancel.Text = "Cancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+            // 
+            // panelSettings
+            // 
+            this.panelSettings.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.panelSettings.Location = new System.Drawing.Point(13, 13);
+            this.panelSettings.Name = "panelSettings";
+            this.panelSettings.Size = new System.Drawing.Size(582, 488);
+            this.panelSettings.TabIndex = 3;
+            // 
+            // NewRepresentationDialog
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.btnCancel;
+            this.ClientSize = new System.Drawing.Size(607, 542);
+            this.ControlBox = false;
+            this.Controls.Add(this.panelSettings);
+            this.Controls.Add(this.btnCancel);
+            this.Controls.Add(this.btnSave);
+            this.Name = "NewRepresentationDialog";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "New Representation";
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button btnSave;
+        private System.Windows.Forms.Button btnCancel;
+        private System.Windows.Forms.Panel panelSettings;
+    }
+}
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,99 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using Maestro.AddIn.Rest.Model;
+using Maestro.AddIn.Rest.UI.Representation;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Dynamic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Maestro.AddIn.Rest.UI
+{
+    public partial class NewRepresentationDialog : Form
+    {
+        private NewRepresentationDialog()
+        {
+            InitializeComponent();
+        }
+
+        private string _rep;
+        private IRepresentationCtrl _ctrl;
+        private dynamic _config;
+        private RestSourceContext _context;
+
+        public NewRepresentationDialog(string rep, dynamic config, RestSourceContext context)
+            : this()
+        {
+            _context = context;
+            _config = config;
+            _rep = rep;
+            switch(rep)
+            {
+                case "xml":
+                case "geojson":
+                    _ctrl = new CruddableRepresentationCtrl(rep, context);
+                    break;
+                case "csv":
+                    _ctrl = new CsvRepresentationCtrl(context);
+                    break;
+                case "image":
+                    _ctrl = new ImageRepresentationCtrl(context);
+                    break;
+                case "template":
+                    _ctrl = new TemplateRepresentationCtrl(context);
+                    break;
+            }
+
+            if (_ctrl != null)
+            {
+                _ctrl.Dock = DockStyle.Fill;
+                panelSettings.Controls.Add((Control)_ctrl);
+            }
+        }
+
+        private void btnCancel_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+        }
+
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            dynamic repr = null;
+            if (!((IDictionary<string, object>)_config).ContainsKey("Representations")) 
+            {
+                _config.Representation = new ExpandoObject();   
+            }
+            repr = _config.Representation;
+
+            dynamic conf = _ctrl.GetOptions();
+            ((IDictionary<string, object>)repr)[_rep] = conf;
+
+            this.DialogResult = System.Windows.Forms.DialogResult.OK;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/NewRepresentationDialog.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,120 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,245 @@
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    partial class CruddableRepresentationCtrl
+    {
+        /// <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 Component 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()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CruddableRepresentationCtrl));
+            this.chkGet = new System.Windows.Forms.CheckBox();
+            this.chkPost = new System.Windows.Forms.CheckBox();
+            this.chkPut = new System.Windows.Forms.CheckBox();
+            this.chkDelete = new System.Windows.Forms.CheckBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.tabs = new System.Windows.Forms.TabControl();
+            this.TAB_GET = new System.Windows.Forms.TabPage();
+            this.grpGetPerms = new System.Windows.Forms.GroupBox();
+            this.getPermsCtrl = new Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.getMethodCtrl1 = new Maestro.AddIn.Rest.UI.Methods.GetMethodCtrl();
+            this.TAB_POST = new System.Windows.Forms.TabPage();
+            this.grpPostPerms = new System.Windows.Forms.GroupBox();
+            this.postPermsCtrl = new Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl();
+            this.TAB_PUT = new System.Windows.Forms.TabPage();
+            this.grpPutPerms = new System.Windows.Forms.GroupBox();
+            this.putPermsCtrl = new Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl();
+            this.TAB_DELETE = new System.Windows.Forms.TabPage();
+            this.grpDeletePerms = new System.Windows.Forms.GroupBox();
+            this.deletePermsCtrl = new Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl();
+            this.tabs.SuspendLayout();
+            this.TAB_GET.SuspendLayout();
+            this.grpGetPerms.SuspendLayout();
+            this.groupBox1.SuspendLayout();
+            this.TAB_POST.SuspendLayout();
+            this.grpPostPerms.SuspendLayout();
+            this.TAB_PUT.SuspendLayout();
+            this.grpPutPerms.SuspendLayout();
+            this.TAB_DELETE.SuspendLayout();
+            this.grpDeletePerms.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // chkGet
+            // 
+            resources.ApplyResources(this.chkGet, "chkGet");
+            this.chkGet.Name = "chkGet";
+            this.chkGet.UseVisualStyleBackColor = true;
+            this.chkGet.CheckedChanged += new System.EventHandler(this.chkGet_CheckedChanged);
+            // 
+            // chkPost
+            // 
+            resources.ApplyResources(this.chkPost, "chkPost");
+            this.chkPost.Name = "chkPost";
+            this.chkPost.UseVisualStyleBackColor = true;
+            this.chkPost.CheckedChanged += new System.EventHandler(this.chkPost_CheckedChanged);
+            // 
+            // chkPut
+            // 
+            resources.ApplyResources(this.chkPut, "chkPut");
+            this.chkPut.Name = "chkPut";
+            this.chkPut.UseVisualStyleBackColor = true;
+            this.chkPut.CheckedChanged += new System.EventHandler(this.chkPut_CheckedChanged);
+            // 
+            // chkDelete
+            // 
+            resources.ApplyResources(this.chkDelete, "chkDelete");
+            this.chkDelete.Name = "chkDelete";
+            this.chkDelete.UseVisualStyleBackColor = true;
+            this.chkDelete.CheckedChanged += new System.EventHandler(this.chkDelete_CheckedChanged);
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // tabs
+            // 
+            resources.ApplyResources(this.tabs, "tabs");
+            this.tabs.Controls.Add(this.TAB_GET);
+            this.tabs.Controls.Add(this.TAB_POST);
+            this.tabs.Controls.Add(this.TAB_PUT);
+            this.tabs.Controls.Add(this.TAB_DELETE);
+            this.tabs.Name = "tabs";
+            this.tabs.SelectedIndex = 0;
+            // 
+            // TAB_GET
+            // 
+            this.TAB_GET.Controls.Add(this.grpGetPerms);
+            this.TAB_GET.Controls.Add(this.groupBox1);
+            resources.ApplyResources(this.TAB_GET, "TAB_GET");
+            this.TAB_GET.Name = "TAB_GET";
+            this.TAB_GET.UseVisualStyleBackColor = true;
+            // 
+            // grpGetPerms
+            // 
+            this.grpGetPerms.Controls.Add(this.getPermsCtrl);
+            resources.ApplyResources(this.grpGetPerms, "grpGetPerms");
+            this.grpGetPerms.Name = "grpGetPerms";
+            this.grpGetPerms.TabStop = false;
+            // 
+            // getPermsCtrl
+            // 
+            resources.ApplyResources(this.getPermsCtrl, "getPermsCtrl");
+            this.getPermsCtrl.Name = "getPermsCtrl";
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Controls.Add(this.getMethodCtrl1);
+            resources.ApplyResources(this.groupBox1, "groupBox1");
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.TabStop = false;
+            // 
+            // getMethodCtrl1
+            // 
+            resources.ApplyResources(this.getMethodCtrl1, "getMethodCtrl1");
+            this.getMethodCtrl1.Name = "getMethodCtrl1";
+            // 
+            // TAB_POST
+            // 
+            this.TAB_POST.Controls.Add(this.grpPostPerms);
+            resources.ApplyResources(this.TAB_POST, "TAB_POST");
+            this.TAB_POST.Name = "TAB_POST";
+            this.TAB_POST.UseVisualStyleBackColor = true;
+            // 
+            // grpPostPerms
+            // 
+            this.grpPostPerms.Controls.Add(this.postPermsCtrl);
+            resources.ApplyResources(this.grpPostPerms, "grpPostPerms");
+            this.grpPostPerms.Name = "grpPostPerms";
+            this.grpPostPerms.TabStop = false;
+            // 
+            // postPermsCtrl
+            // 
+            resources.ApplyResources(this.postPermsCtrl, "postPermsCtrl");
+            this.postPermsCtrl.Name = "postPermsCtrl";
+            // 
+            // TAB_PUT
+            // 
+            this.TAB_PUT.Controls.Add(this.grpPutPerms);
+            resources.ApplyResources(this.TAB_PUT, "TAB_PUT");
+            this.TAB_PUT.Name = "TAB_PUT";
+            this.TAB_PUT.UseVisualStyleBackColor = true;
+            // 
+            // grpPutPerms
+            // 
+            this.grpPutPerms.Controls.Add(this.putPermsCtrl);
+            resources.ApplyResources(this.grpPutPerms, "grpPutPerms");
+            this.grpPutPerms.Name = "grpPutPerms";
+            this.grpPutPerms.TabStop = false;
+            // 
+            // putPermsCtrl
+            // 
+            resources.ApplyResources(this.putPermsCtrl, "putPermsCtrl");
+            this.putPermsCtrl.Name = "putPermsCtrl";
+            // 
+            // TAB_DELETE
+            // 
+            this.TAB_DELETE.Controls.Add(this.grpDeletePerms);
+            resources.ApplyResources(this.TAB_DELETE, "TAB_DELETE");
+            this.TAB_DELETE.Name = "TAB_DELETE";
+            this.TAB_DELETE.UseVisualStyleBackColor = true;
+            // 
+            // grpDeletePerms
+            // 
+            this.grpDeletePerms.Controls.Add(this.deletePermsCtrl);
+            resources.ApplyResources(this.grpDeletePerms, "grpDeletePerms");
+            this.grpDeletePerms.Name = "grpDeletePerms";
+            this.grpDeletePerms.TabStop = false;
+            // 
+            // deletePermsCtrl
+            // 
+            resources.ApplyResources(this.deletePermsCtrl, "deletePermsCtrl");
+            this.deletePermsCtrl.Name = "deletePermsCtrl";
+            // 
+            // CruddableRepresentationCtrl
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.tabs);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.chkDelete);
+            this.Controls.Add(this.chkPut);
+            this.Controls.Add(this.chkPost);
+            this.Controls.Add(this.chkGet);
+            this.Name = "CruddableRepresentationCtrl";
+            this.tabs.ResumeLayout(false);
+            this.TAB_GET.ResumeLayout(false);
+            this.grpGetPerms.ResumeLayout(false);
+            this.groupBox1.ResumeLayout(false);
+            this.TAB_POST.ResumeLayout(false);
+            this.grpPostPerms.ResumeLayout(false);
+            this.TAB_PUT.ResumeLayout(false);
+            this.grpPutPerms.ResumeLayout(false);
+            this.TAB_DELETE.ResumeLayout(false);
+            this.grpDeletePerms.ResumeLayout(false);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.CheckBox chkGet;
+        private System.Windows.Forms.CheckBox chkPost;
+        private System.Windows.Forms.CheckBox chkPut;
+        private System.Windows.Forms.CheckBox chkDelete;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TabControl tabs;
+        private System.Windows.Forms.TabPage TAB_GET;
+        private Methods.GetMethodCtrl getMethodCtrl1;
+        private System.Windows.Forms.TabPage TAB_POST;
+        private System.Windows.Forms.TabPage TAB_PUT;
+        private System.Windows.Forms.TabPage TAB_DELETE;
+        private System.Windows.Forms.GroupBox grpGetPerms;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private PermissionsCtrl getPermsCtrl;
+        private System.Windows.Forms.GroupBox grpPostPerms;
+        private PermissionsCtrl postPermsCtrl;
+        private System.Windows.Forms.GroupBox grpPutPerms;
+        private PermissionsCtrl putPermsCtrl;
+        private System.Windows.Forms.GroupBox grpDeletePerms;
+        private PermissionsCtrl deletePermsCtrl;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,130 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Dynamic;
+using Maestro.AddIn.Rest.Model;
+
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    internal partial class CruddableRepresentationCtrl : UserControl, IRepresentationCtrl
+    {
+        private string _type;
+
+        public CruddableRepresentationCtrl(string type, RestSourceContext context)
+        {
+            InitializeComponent();
+            getMethodCtrl1.Init(context);
+            getPermsCtrl.Init(context);
+            postPermsCtrl.Init(context);
+            putPermsCtrl.Init(context);
+            deletePermsCtrl.Init(context);
+            this.CheckStates();
+            switch(type.ToLower())
+            {
+                case "xml":
+                    _type = "FeatureSetXml";
+                    break;
+                case "geojson":
+                    _type = "FeatureSetGeoJson";
+                    break;
+            }
+        }
+
+        public dynamic GetOptions()
+        {
+            dynamic opts = new ExpandoObject();
+            opts.Adapter = _type;
+            opts.Methods = new ExpandoObject();
+            if (chkGet.Checked)
+            {
+                var getOpts = getMethodCtrl1.WriteOptions();
+                getPermsCtrl.UpdateConfiguration(getOpts);
+                opts.Methods.GET = getOpts;
+            }
+            if (chkPost.Checked)
+            {
+                var postOpts = new ExpandoObject();
+                postPermsCtrl.UpdateConfiguration(postOpts);
+                opts.Methods.POST = postOpts;
+            }
+            if (chkPut.Checked)
+            {
+                var putOpts = new ExpandoObject();
+                putPermsCtrl.UpdateConfiguration(putOpts);
+                opts.Methods.PUT = putOpts;
+            }
+            if (chkDelete.Checked)
+            {
+                var deleteOpts = new ExpandoObject();
+                deletePermsCtrl.UpdateConfiguration(deleteOpts);
+                opts.Methods.DELETE = deleteOpts;
+            }
+
+            return opts;
+        }
+
+        private void CheckStates()
+        {
+            tabs.TabPages.Clear();
+
+            if (chkGet.Checked)
+                tabs.TabPages.Add(TAB_GET);
+
+            if (chkPost.Checked)
+                tabs.TabPages.Add(TAB_POST);
+
+            if (chkPut.Checked)
+                tabs.TabPages.Add(TAB_PUT);
+
+            if (chkDelete.Checked)
+                tabs.TabPages.Add(TAB_DELETE);
+        }
+
+        private void chkGet_CheckedChanged(object sender, EventArgs e)
+        {
+            this.CheckStates();
+        }
+
+        private void chkPost_CheckedChanged(object sender, EventArgs e)
+        {
+            this.CheckStates();
+        }
+
+        private void chkPut_CheckedChanged(object sender, EventArgs e)
+        {
+            this.CheckStates();
+        }
+
+        private void chkDelete_CheckedChanged(object sender, EventArgs e)
+        {
+            this.CheckStates();
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CruddableRepresentationCtrl.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,819 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="chkGet.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="chkGet.Location" type="System.Drawing.Point, System.Drawing">
+    <value>104, 9</value>
+  </data>
+  <data name="chkGet.Size" type="System.Drawing.Size, System.Drawing">
+    <value>48, 17</value>
+  </data>
+  <data name="chkGet.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="chkGet.Text" xml:space="preserve">
+    <value>GET</value>
+  </data>
+  <data name=">>chkGet.Name" xml:space="preserve">
+    <value>chkGet</value>
+  </data>
+  <data name=">>chkGet.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkGet.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkGet.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="chkPost.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="chkPost.Location" type="System.Drawing.Point, System.Drawing">
+    <value>158, 9</value>
+  </data>
+  <data name="chkPost.Size" type="System.Drawing.Size, System.Drawing">
+    <value>55, 17</value>
+  </data>
+  <data name="chkPost.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="chkPost.Text" xml:space="preserve">
+    <value>POST</value>
+  </data>
+  <data name=">>chkPost.Name" xml:space="preserve">
+    <value>chkPost</value>
+  </data>
+  <data name=">>chkPost.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkPost.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkPost.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="chkPut.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="chkPut.Location" type="System.Drawing.Point, System.Drawing">
+    <value>219, 9</value>
+  </data>
+  <data name="chkPut.Size" type="System.Drawing.Size, System.Drawing">
+    <value>48, 17</value>
+  </data>
+  <data name="chkPut.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="chkPut.Text" xml:space="preserve">
+    <value>PUT</value>
+  </data>
+  <data name=">>chkPut.Name" xml:space="preserve">
+    <value>chkPut</value>
+  </data>
+  <data name=">>chkPut.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkPut.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkPut.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="chkDelete.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="chkDelete.Location" type="System.Drawing.Point, System.Drawing">
+    <value>273, 9</value>
+  </data>
+  <data name="chkDelete.Size" type="System.Drawing.Size, System.Drawing">
+    <value>68, 17</value>
+  </data>
+  <data name="chkDelete.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="chkDelete.Text" xml:space="preserve">
+    <value>DELETE</value>
+  </data>
+  <data name=">>chkDelete.Name" xml:space="preserve">
+    <value>chkDelete</value>
+  </data>
+  <data name=">>chkDelete.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkDelete.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkDelete.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 10</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>84, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Enable Methods</value>
+  </data>
+  <data name=">>label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name=">>label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>label1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="tabs.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
+  <data name=">>TAB_GET.Name" xml:space="preserve">
+    <value>TAB_GET</value>
+  </data>
+  <data name=">>TAB_GET.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>TAB_GET.Parent" xml:space="preserve">
+    <value>tabs</value>
+  </data>
+  <data name=">>TAB_GET.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>TAB_POST.Name" xml:space="preserve">
+    <value>TAB_POST</value>
+  </data>
+  <data name=">>TAB_POST.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>TAB_POST.Parent" xml:space="preserve">
+    <value>tabs</value>
+  </data>
+  <data name=">>TAB_POST.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name=">>TAB_PUT.Name" xml:space="preserve">
+    <value>TAB_PUT</value>
+  </data>
+  <data name=">>TAB_PUT.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>TAB_PUT.Parent" xml:space="preserve">
+    <value>tabs</value>
+  </data>
+  <data name=">>TAB_PUT.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name=">>TAB_DELETE.Name" xml:space="preserve">
+    <value>TAB_DELETE</value>
+  </data>
+  <data name=">>TAB_DELETE.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>TAB_DELETE.Parent" xml:space="preserve">
+    <value>tabs</value>
+  </data>
+  <data name=">>TAB_DELETE.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="tabs.Location" type="System.Drawing.Point, System.Drawing">
+    <value>6, 35</value>
+  </data>
+  <data name="tabs.Size" type="System.Drawing.Size, System.Drawing">
+    <value>603, 485</value>
+  </data>
+  <data name="tabs.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name=">>tabs.Name" xml:space="preserve">
+    <value>tabs</value>
+  </data>
+  <data name=">>tabs.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>tabs.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>tabs.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>grpGetPerms.Name" xml:space="preserve">
+    <value>grpGetPerms</value>
+  </data>
+  <data name=">>grpGetPerms.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grpGetPerms.Parent" xml:space="preserve">
+    <value>TAB_GET</value>
+  </data>
+  <data name=">>grpGetPerms.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>groupBox1.Name" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name=">>groupBox1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>groupBox1.Parent" xml:space="preserve">
+    <value>TAB_GET</value>
+  </data>
+  <data name=">>groupBox1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="TAB_GET.Location" type="System.Drawing.Point, System.Drawing">
+    <value>4, 22</value>
+  </data>
+  <data name="TAB_GET.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
+    <value>3, 3, 3, 3</value>
+  </data>
+  <data name="TAB_GET.Size" type="System.Drawing.Size, System.Drawing">
+    <value>595, 459</value>
+  </data>
+  <data name="TAB_GET.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="TAB_GET.Text" xml:space="preserve">
+    <value>GET</value>
+  </data>
+  <data name=">>TAB_GET.Name" xml:space="preserve">
+    <value>TAB_GET</value>
+  </data>
+  <data name=">>TAB_GET.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>TAB_GET.Parent" xml:space="preserve">
+    <value>tabs</value>
+  </data>
+  <data name=">>TAB_GET.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>getPermsCtrl.Name" xml:space="preserve">
+    <value>getPermsCtrl</value>
+  </data>
+  <data name=">>getPermsCtrl.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>getPermsCtrl.Parent" xml:space="preserve">
+    <value>grpGetPerms</value>
+  </data>
+  <data name=">>getPermsCtrl.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="grpGetPerms.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="grpGetPerms.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 268</value>
+  </data>
+  <data name="grpGetPerms.Size" type="System.Drawing.Size, System.Drawing">
+    <value>589, 188</value>
+  </data>
+  <data name="grpGetPerms.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="grpGetPerms.Text" xml:space="preserve">
+    <value>Permissions</value>
+  </data>
+  <data name=">>grpGetPerms.Name" xml:space="preserve">
+    <value>grpGetPerms</value>
+  </data>
+  <data name=">>grpGetPerms.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grpGetPerms.Parent" xml:space="preserve">
+    <value>TAB_GET</value>
+  </data>
+  <data name=">>grpGetPerms.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="getPermsCtrl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="getPermsCtrl.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 16</value>
+  </data>
+  <data name="getPermsCtrl.Size" type="System.Drawing.Size, System.Drawing">
+    <value>583, 169</value>
+  </data>
+  <data name="getPermsCtrl.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name=">>getPermsCtrl.Name" xml:space="preserve">
+    <value>getPermsCtrl</value>
+  </data>
+  <data name=">>getPermsCtrl.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>getPermsCtrl.Parent" xml:space="preserve">
+    <value>grpGetPerms</value>
+  </data>
+  <data name=">>getPermsCtrl.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>getMethodCtrl1.Name" xml:space="preserve">
+    <value>getMethodCtrl1</value>
+  </data>
+  <data name=">>getMethodCtrl1.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Methods.GetMethodCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>getMethodCtrl1.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name=">>getMethodCtrl1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 3</value>
+  </data>
+  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>589, 265</value>
+  </data>
+  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="groupBox1.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name=">>groupBox1.Name" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name=">>groupBox1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>groupBox1.Parent" xml:space="preserve">
+    <value>TAB_GET</value>
+  </data>
+  <data name=">>groupBox1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="getMethodCtrl1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>6, 19</value>
+  </data>
+  <data name="getMethodCtrl1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>578, 262</value>
+  </data>
+  <data name="getMethodCtrl1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name=">>getMethodCtrl1.Name" xml:space="preserve">
+    <value>getMethodCtrl1</value>
+  </data>
+  <data name=">>getMethodCtrl1.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Methods.GetMethodCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>getMethodCtrl1.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name=">>getMethodCtrl1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>grpPostPerms.Name" xml:space="preserve">
+    <value>grpPostPerms</value>
+  </data>
+  <data name=">>grpPostPerms.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grpPostPerms.Parent" xml:space="preserve">
+    <value>TAB_POST</value>
+  </data>
+  <data name=">>grpPostPerms.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="TAB_POST.Location" type="System.Drawing.Point, System.Drawing">
+    <value>4, 22</value>
+  </data>
+  <data name="TAB_POST.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
+    <value>3, 3, 3, 3</value>
+  </data>
+  <data name="TAB_POST.Size" type="System.Drawing.Size, System.Drawing">
+    <value>595, 459</value>
+  </data>
+  <data name="TAB_POST.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="TAB_POST.Text" xml:space="preserve">
+    <value>POST</value>
+  </data>
+  <data name=">>TAB_POST.Name" xml:space="preserve">
+    <value>TAB_POST</value>
+  </data>
+  <data name=">>TAB_POST.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>TAB_POST.Parent" xml:space="preserve">
+    <value>tabs</value>
+  </data>
+  <data name=">>TAB_POST.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name=">>postPermsCtrl.Name" xml:space="preserve">
+    <value>postPermsCtrl</value>
+  </data>
+  <data name=">>postPermsCtrl.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>postPermsCtrl.Parent" xml:space="preserve">
+    <value>grpPostPerms</value>
+  </data>
+  <data name=">>postPermsCtrl.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="grpPostPerms.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="grpPostPerms.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 3</value>
+  </data>
+  <data name="grpPostPerms.Size" type="System.Drawing.Size, System.Drawing">
+    <value>589, 453</value>
+  </data>
+  <data name="grpPostPerms.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="grpPostPerms.Text" xml:space="preserve">
+    <value>Permissions</value>
+  </data>
+  <data name=">>grpPostPerms.Name" xml:space="preserve">
+    <value>grpPostPerms</value>
+  </data>
+  <data name=">>grpPostPerms.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grpPostPerms.Parent" xml:space="preserve">
+    <value>TAB_POST</value>
+  </data>
+  <data name=">>grpPostPerms.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="postPermsCtrl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="postPermsCtrl.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 16</value>
+  </data>
+  <data name="postPermsCtrl.Size" type="System.Drawing.Size, System.Drawing">
+    <value>583, 434</value>
+  </data>
+  <data name="postPermsCtrl.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name=">>postPermsCtrl.Name" xml:space="preserve">
+    <value>postPermsCtrl</value>
+  </data>
+  <data name=">>postPermsCtrl.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>postPermsCtrl.Parent" xml:space="preserve">
+    <value>grpPostPerms</value>
+  </data>
+  <data name=">>postPermsCtrl.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>grpPutPerms.Name" xml:space="preserve">
+    <value>grpPutPerms</value>
+  </data>
+  <data name=">>grpPutPerms.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grpPutPerms.Parent" xml:space="preserve">
+    <value>TAB_PUT</value>
+  </data>
+  <data name=">>grpPutPerms.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="TAB_PUT.Location" type="System.Drawing.Point, System.Drawing">
+    <value>4, 22</value>
+  </data>
+  <data name="TAB_PUT.Size" type="System.Drawing.Size, System.Drawing">
+    <value>595, 459</value>
+  </data>
+  <data name="TAB_PUT.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="TAB_PUT.Text" xml:space="preserve">
+    <value>PUT</value>
+  </data>
+  <data name=">>TAB_PUT.Name" xml:space="preserve">
+    <value>TAB_PUT</value>
+  </data>
+  <data name=">>TAB_PUT.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>TAB_PUT.Parent" xml:space="preserve">
+    <value>tabs</value>
+  </data>
+  <data name=">>TAB_PUT.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name=">>putPermsCtrl.Name" xml:space="preserve">
+    <value>putPermsCtrl</value>
+  </data>
+  <data name=">>putPermsCtrl.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>putPermsCtrl.Parent" xml:space="preserve">
+    <value>grpPutPerms</value>
+  </data>
+  <data name=">>putPermsCtrl.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="grpPutPerms.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="grpPutPerms.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="grpPutPerms.Size" type="System.Drawing.Size, System.Drawing">
+    <value>595, 459</value>
+  </data>
+  <data name="grpPutPerms.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="grpPutPerms.Text" xml:space="preserve">
+    <value>Permissions</value>
+  </data>
+  <data name=">>grpPutPerms.Name" xml:space="preserve">
+    <value>grpPutPerms</value>
+  </data>
+  <data name=">>grpPutPerms.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grpPutPerms.Parent" xml:space="preserve">
+    <value>TAB_PUT</value>
+  </data>
+  <data name=">>grpPutPerms.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="putPermsCtrl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="putPermsCtrl.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 16</value>
+  </data>
+  <data name="putPermsCtrl.Size" type="System.Drawing.Size, System.Drawing">
+    <value>589, 440</value>
+  </data>
+  <data name="putPermsCtrl.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name=">>putPermsCtrl.Name" xml:space="preserve">
+    <value>putPermsCtrl</value>
+  </data>
+  <data name=">>putPermsCtrl.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>putPermsCtrl.Parent" xml:space="preserve">
+    <value>grpPutPerms</value>
+  </data>
+  <data name=">>putPermsCtrl.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>grpDeletePerms.Name" xml:space="preserve">
+    <value>grpDeletePerms</value>
+  </data>
+  <data name=">>grpDeletePerms.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grpDeletePerms.Parent" xml:space="preserve">
+    <value>TAB_DELETE</value>
+  </data>
+  <data name=">>grpDeletePerms.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="TAB_DELETE.Location" type="System.Drawing.Point, System.Drawing">
+    <value>4, 22</value>
+  </data>
+  <data name="TAB_DELETE.Size" type="System.Drawing.Size, System.Drawing">
+    <value>595, 459</value>
+  </data>
+  <data name="TAB_DELETE.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="TAB_DELETE.Text" xml:space="preserve">
+    <value>DELETE</value>
+  </data>
+  <data name=">>TAB_DELETE.Name" xml:space="preserve">
+    <value>TAB_DELETE</value>
+  </data>
+  <data name=">>TAB_DELETE.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>TAB_DELETE.Parent" xml:space="preserve">
+    <value>tabs</value>
+  </data>
+  <data name=">>TAB_DELETE.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name=">>deletePermsCtrl.Name" xml:space="preserve">
+    <value>deletePermsCtrl</value>
+  </data>
+  <data name=">>deletePermsCtrl.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>deletePermsCtrl.Parent" xml:space="preserve">
+    <value>grpDeletePerms</value>
+  </data>
+  <data name=">>deletePermsCtrl.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="grpDeletePerms.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="grpDeletePerms.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="grpDeletePerms.Size" type="System.Drawing.Size, System.Drawing">
+    <value>595, 459</value>
+  </data>
+  <data name="grpDeletePerms.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="grpDeletePerms.Text" xml:space="preserve">
+    <value>Permissions</value>
+  </data>
+  <data name=">>grpDeletePerms.Name" xml:space="preserve">
+    <value>grpDeletePerms</value>
+  </data>
+  <data name=">>grpDeletePerms.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grpDeletePerms.Parent" xml:space="preserve">
+    <value>TAB_DELETE</value>
+  </data>
+  <data name=">>grpDeletePerms.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="deletePermsCtrl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="deletePermsCtrl.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 16</value>
+  </data>
+  <data name="deletePermsCtrl.Size" type="System.Drawing.Size, System.Drawing">
+    <value>589, 440</value>
+  </data>
+  <data name="deletePermsCtrl.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name=">>deletePermsCtrl.Name" xml:space="preserve">
+    <value>deletePermsCtrl</value>
+  </data>
+  <data name=">>deletePermsCtrl.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>deletePermsCtrl.Parent" xml:space="preserve">
+    <value>grpDeletePerms</value>
+  </data>
+  <data name=">>deletePermsCtrl.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>612, 523</value>
+  </data>
+  <data name=">>$this.Name" xml:space="preserve">
+    <value>CruddableRepresentationCtrl</value>
+  </data>
+  <data name=">>$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,62 @@
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    partial class CsvRepresentationCtrl
+    {
+        /// <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 Component 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()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CsvRepresentationCtrl));
+            this.getMethodCtrl1 = new Maestro.AddIn.Rest.UI.Methods.GetMethodCtrl();
+            this.permissionsCtrl1 = new Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl();
+            this.SuspendLayout();
+            // 
+            // getMethodCtrl1
+            // 
+            resources.ApplyResources(this.getMethodCtrl1, "getMethodCtrl1");
+            this.getMethodCtrl1.Name = "getMethodCtrl1";
+            // 
+            // permissionsCtrl1
+            // 
+            resources.ApplyResources(this.permissionsCtrl1, "permissionsCtrl1");
+            this.permissionsCtrl1.Name = "permissionsCtrl1";
+            // 
+            // CsvRepresentationCtrl
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.permissionsCtrl1);
+            this.Controls.Add(this.getMethodCtrl1);
+            this.Name = "CsvRepresentationCtrl";
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private Methods.GetMethodCtrl getMethodCtrl1;
+        private PermissionsCtrl permissionsCtrl1;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,57 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Dynamic;
+using Maestro.AddIn.Rest.Model;
+
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    internal partial class CsvRepresentationCtrl : UserControl, IRepresentationCtrl
+    {
+        public CsvRepresentationCtrl(RestSourceContext context)
+        {
+            InitializeComponent();
+            getMethodCtrl1.Init(context);
+            permissionsCtrl1.Init(context);
+        }
+
+        public dynamic GetOptions()
+        {
+            dynamic opts = new ExpandoObject();
+
+            opts.Adapter = "FeatureSetCsv"; //NOXLATE
+            opts.Methods = new ExpandoObject();
+            dynamic getOpts = getMethodCtrl1.WriteOptions();
+            permissionsCtrl1.UpdateConfiguration(getOpts);
+            opts.Methods.GET = getOpts;
+            return opts;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/CsvRepresentationCtrl.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,183 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="getMethodCtrl1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="getMethodCtrl1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 3</value>
+  </data>
+  <data name="getMethodCtrl1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>547, 236</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="getMethodCtrl1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name=">>getMethodCtrl1.Name" xml:space="preserve">
+    <value>getMethodCtrl1</value>
+  </data>
+  <data name=">>getMethodCtrl1.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Methods.GetMethodCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>getMethodCtrl1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>getMethodCtrl1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="permissionsCtrl1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 236</value>
+  </data>
+  <data name="permissionsCtrl1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>304, 153</value>
+  </data>
+  <data name="permissionsCtrl1.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name=">>permissionsCtrl1.Name" xml:space="preserve">
+    <value>permissionsCtrl1</value>
+  </data>
+  <data name=">>permissionsCtrl1.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>permissionsCtrl1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>permissionsCtrl1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>550, 393</value>
+  </data>
+  <data name=">>$this.Name" xml:space="preserve">
+    <value>CsvRepresentationCtrl</value>
+  </data>
+  <data name=">>$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/IRepresentationCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/IRepresentationCtrl.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/IRepresentationCtrl.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    internal interface IRepresentationCtrl
+    {
+        dynamic GetOptions();
+
+        DockStyle Dock { get; set; }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,62 @@
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    partial class ImageRepresentationCtrl
+    {
+        /// <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 Component 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()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ImageRepresentationCtrl));
+            this.permissionsCtrl1 = new Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl();
+            this.getMethodCtrl1 = new Maestro.AddIn.Rest.UI.Methods.GetMethodCtrl();
+            this.SuspendLayout();
+            // 
+            // permissionsCtrl1
+            // 
+            resources.ApplyResources(this.permissionsCtrl1, "permissionsCtrl1");
+            this.permissionsCtrl1.Name = "permissionsCtrl1";
+            // 
+            // getMethodCtrl1
+            // 
+            resources.ApplyResources(this.getMethodCtrl1, "getMethodCtrl1");
+            this.getMethodCtrl1.Name = "getMethodCtrl1";
+            // 
+            // ImageRepresentationCtrl
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.permissionsCtrl1);
+            this.Controls.Add(this.getMethodCtrl1);
+            this.Name = "ImageRepresentationCtrl";
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private PermissionsCtrl permissionsCtrl1;
+        private Methods.GetMethodCtrl getMethodCtrl1;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,58 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Dynamic;
+using Maestro.AddIn.Rest.Model;
+
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    internal partial class ImageRepresentationCtrl : UserControl, IRepresentationCtrl
+    {
+        public ImageRepresentationCtrl(RestSourceContext context)
+        {
+            InitializeComponent();
+            getMethodCtrl1.Init(context);
+            permissionsCtrl1.Init(context);
+        }
+
+        public dynamic GetOptions()
+        {
+            dynamic opts = new ExpandoObject();
+
+            opts.Adapter = "MapImage"; //NOXLATE
+            opts.Methods = new ExpandoObject();
+            dynamic getOpts = getMethodCtrl1.WriteOptions();
+            permissionsCtrl1.UpdateConfiguration(getOpts);
+            opts.Methods.GET = getOpts;
+
+            return opts;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/ImageRepresentationCtrl.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,179 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="permissionsCtrl1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 236</value>
+  </data>
+  <data name="permissionsCtrl1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>306, 153</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="permissionsCtrl1.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name=">>permissionsCtrl1.Name" xml:space="preserve">
+    <value>permissionsCtrl1</value>
+  </data>
+  <data name=">>permissionsCtrl1.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>permissionsCtrl1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>permissionsCtrl1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="getMethodCtrl1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 3</value>
+  </data>
+  <data name="getMethodCtrl1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>547, 236</value>
+  </data>
+  <data name="getMethodCtrl1.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name=">>getMethodCtrl1.Name" xml:space="preserve">
+    <value>getMethodCtrl1</value>
+  </data>
+  <data name=">>getMethodCtrl1.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Methods.GetMethodCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>getMethodCtrl1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>getMethodCtrl1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>554, 393</value>
+  </data>
+  <data name=">>$this.Name" xml:space="preserve">
+    <value>ImageRepresentationCtrl</value>
+  </data>
+  <data name=">>$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,92 @@
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    partial class PermissionsCtrl
+    {
+        /// <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 Component 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()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PermissionsCtrl));
+            this.chkAllowRoles = new System.Windows.Forms.CheckBox();
+            this.lstAllowGroups = new System.Windows.Forms.ListBox();
+            this.chkAllowGroups = new System.Windows.Forms.CheckBox();
+            this.chkAllowAnonymous = new System.Windows.Forms.CheckBox();
+            this.txtRoles = new System.Windows.Forms.TextBox();
+            this.SuspendLayout();
+            // 
+            // chkAllowRoles
+            // 
+            resources.ApplyResources(this.chkAllowRoles, "chkAllowRoles");
+            this.chkAllowRoles.Name = "chkAllowRoles";
+            this.chkAllowRoles.UseVisualStyleBackColor = true;
+            // 
+            // lstAllowGroups
+            // 
+            resources.ApplyResources(this.lstAllowGroups, "lstAllowGroups");
+            this.lstAllowGroups.FormattingEnabled = true;
+            this.lstAllowGroups.Name = "lstAllowGroups";
+            this.lstAllowGroups.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple;
+            // 
+            // chkAllowGroups
+            // 
+            resources.ApplyResources(this.chkAllowGroups, "chkAllowGroups");
+            this.chkAllowGroups.Name = "chkAllowGroups";
+            this.chkAllowGroups.UseVisualStyleBackColor = true;
+            // 
+            // chkAllowAnonymous
+            // 
+            resources.ApplyResources(this.chkAllowAnonymous, "chkAllowAnonymous");
+            this.chkAllowAnonymous.Name = "chkAllowAnonymous";
+            this.chkAllowAnonymous.UseVisualStyleBackColor = true;
+            // 
+            // txtRoles
+            // 
+            resources.ApplyResources(this.txtRoles, "txtRoles");
+            this.txtRoles.Name = "txtRoles";
+            // 
+            // PermissionsCtrl
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.txtRoles);
+            this.Controls.Add(this.chkAllowRoles);
+            this.Controls.Add(this.lstAllowGroups);
+            this.Controls.Add(this.chkAllowGroups);
+            this.Controls.Add(this.chkAllowAnonymous);
+            this.Name = "PermissionsCtrl";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.CheckBox chkAllowRoles;
+        private System.Windows.Forms.ListBox lstAllowGroups;
+        private System.Windows.Forms.CheckBox chkAllowGroups;
+        private System.Windows.Forms.CheckBox chkAllowAnonymous;
+        private System.Windows.Forms.TextBox txtRoles;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,59 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Maestro.AddIn.Rest.Model;
+
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    internal partial class PermissionsCtrl : UserControl
+    {
+        public PermissionsCtrl()
+        {
+            InitializeComponent();
+        }
+
+        public void Init(RestSourceContext context)
+        {
+            lstAllowGroups.DataSource = context.GetGroups();
+        }
+
+        public void UpdateConfiguration(dynamic methodConfig)
+        {
+            if (chkAllowAnonymous.Checked)
+                methodConfig.AllowAnonymous = true;
+
+            if (chkAllowGroups.Checked)
+                methodConfig.AllowGroups = new List<string>(lstAllowGroups.SelectedItems.Cast<object>().Select(o => o.ToString()));
+
+            if (chkAllowRoles.Checked)
+                methodConfig.AllowRoles = new List<string>(txtRoles.Lines);
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/PermissionsCtrl.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,270 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="chkAllowRoles.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="chkAllowRoles.Location" type="System.Drawing.Point, System.Drawing">
+    <value>129, 30</value>
+  </data>
+  <data name="chkAllowRoles.Size" type="System.Drawing.Size, System.Drawing">
+    <value>172, 17</value>
+  </data>
+  <data name="chkAllowRoles.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="chkAllowRoles.Text" xml:space="preserve">
+    <value>Allow Roles (enter one per line)</value>
+  </data>
+  <data name=">>chkAllowRoles.Name" xml:space="preserve">
+    <value>chkAllowRoles</value>
+  </data>
+  <data name=">>chkAllowRoles.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkAllowRoles.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkAllowRoles.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="lstAllowGroups.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left</value>
+  </data>
+  <data name="lstAllowGroups.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 53</value>
+  </data>
+  <data name="lstAllowGroups.Size" type="System.Drawing.Size, System.Drawing">
+    <value>120, 95</value>
+  </data>
+  <data name="lstAllowGroups.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name=">>lstAllowGroups.Name" xml:space="preserve">
+    <value>lstAllowGroups</value>
+  </data>
+  <data name=">>lstAllowGroups.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>lstAllowGroups.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>lstAllowGroups.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="chkAllowGroups.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="chkAllowGroups.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 30</value>
+  </data>
+  <data name="chkAllowGroups.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 17</value>
+  </data>
+  <data name="chkAllowGroups.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="chkAllowGroups.Text" xml:space="preserve">
+    <value>Allow Groups</value>
+  </data>
+  <data name=">>chkAllowGroups.Name" xml:space="preserve">
+    <value>chkAllowGroups</value>
+  </data>
+  <data name=">>chkAllowGroups.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkAllowGroups.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkAllowGroups.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="chkAllowAnonymous.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="chkAllowAnonymous.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 6</value>
+  </data>
+  <data name="chkAllowAnonymous.Size" type="System.Drawing.Size, System.Drawing">
+    <value>109, 17</value>
+  </data>
+  <data name="chkAllowAnonymous.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="chkAllowAnonymous.Text" xml:space="preserve">
+    <value>Allow Anonymous</value>
+  </data>
+  <data name=">>chkAllowAnonymous.Name" xml:space="preserve">
+    <value>chkAllowAnonymous</value>
+  </data>
+  <data name=">>chkAllowAnonymous.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkAllowAnonymous.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>chkAllowAnonymous.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="txtRoles.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
+  <data name="txtRoles.Location" type="System.Drawing.Point, System.Drawing">
+    <value>129, 53</value>
+  </data>
+  <data name="txtRoles.Multiline" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="txtRoles.Size" type="System.Drawing.Size, System.Drawing">
+    <value>171, 94</value>
+  </data>
+  <data name="txtRoles.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
+  </data>
+  <data name=">>txtRoles.Name" xml:space="preserve">
+    <value>txtRoles</value>
+  </data>
+  <data name=">>txtRoles.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtRoles.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>txtRoles.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>303, 153</value>
+  </data>
+  <data name=">>$this.Name" xml:space="preserve">
+    <value>PermissionsCtrl</value>
+  </data>
+  <data name=">>$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,62 @@
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    partial class TemplateRepresentationCtrl
+    {
+        /// <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 Component 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()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TemplateRepresentationCtrl));
+            this.permissionsCtrl1 = new Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl();
+            this.getMethodCtrl1 = new Maestro.AddIn.Rest.UI.Methods.GetMethodCtrl();
+            this.SuspendLayout();
+            // 
+            // permissionsCtrl1
+            // 
+            resources.ApplyResources(this.permissionsCtrl1, "permissionsCtrl1");
+            this.permissionsCtrl1.Name = "permissionsCtrl1";
+            // 
+            // getMethodCtrl1
+            // 
+            resources.ApplyResources(this.getMethodCtrl1, "getMethodCtrl1");
+            this.getMethodCtrl1.Name = "getMethodCtrl1";
+            // 
+            // TemplateRepresentationCtrl
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.permissionsCtrl1);
+            this.Controls.Add(this.getMethodCtrl1);
+            this.Name = "TemplateRepresentationCtrl";
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private PermissionsCtrl permissionsCtrl1;
+        private Methods.GetMethodCtrl getMethodCtrl1;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,58 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Dynamic;
+using Maestro.AddIn.Rest.Model;
+
+namespace Maestro.AddIn.Rest.UI.Representation
+{
+    internal partial class TemplateRepresentationCtrl : UserControl, IRepresentationCtrl
+    {
+        public TemplateRepresentationCtrl(RestSourceContext context)
+        {
+            InitializeComponent();
+            getMethodCtrl1.Init(context);
+            permissionsCtrl1.Init(context);
+        }
+
+        public dynamic GetOptions()
+        {
+            dynamic opts = new ExpandoObject();
+
+            opts.Adapter = "Template"; //NOXLATE
+            opts.Methods = new ExpandoObject();
+            dynamic getOpts = getMethodCtrl1.WriteOptions();
+            permissionsCtrl1.UpdateConfiguration(getOpts);
+            opts.Methods.GET = getOpts;
+
+            return opts;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/Representation/TemplateRepresentationCtrl.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,179 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="permissionsCtrl1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 236</value>
+  </data>
+  <data name="permissionsCtrl1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>303, 153</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="permissionsCtrl1.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name=">>permissionsCtrl1.Name" xml:space="preserve">
+    <value>permissionsCtrl1</value>
+  </data>
+  <data name=">>permissionsCtrl1.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Representation.PermissionsCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>permissionsCtrl1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>permissionsCtrl1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="getMethodCtrl1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 3</value>
+  </data>
+  <data name="getMethodCtrl1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>547, 236</value>
+  </data>
+  <data name="getMethodCtrl1.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name=">>getMethodCtrl1.Name" xml:space="preserve">
+    <value>getMethodCtrl1</value>
+  </data>
+  <data name=">>getMethodCtrl1.Type" xml:space="preserve">
+    <value>Maestro.AddIn.Rest.UI.Methods.GetMethodCtrl, Maestro.AddIn.Rest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name=">>getMethodCtrl1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>getMethodCtrl1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>551, 394</value>
+  </data>
+  <data name=">>$this.Name" xml:space="preserve">
+    <value>TemplateRepresentationCtrl</value>
+  </data>
+  <data name=">>$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,257 @@
+namespace Maestro.AddIn.Rest.UI
+{
+    partial class RestConfigurationEditor
+    {
+        /// <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()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RestConfigurationEditor));
+            this.txtJson = new ICSharpCode.TextEditor.TextEditorControl();
+            this.btnSave = new System.Windows.Forms.Button();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.label1 = new System.Windows.Forms.Label();
+            this.txtUriPart = new System.Windows.Forms.TextBox();
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.toolStripButton1 = new System.Windows.Forms.ToolStripDropDownButton();
+            this.featureSourceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.layerDefinitionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripButton2 = new System.Windows.Forms.ToolStripDropDownButton();
+            this.xMLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.geoJSONToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.cSVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.imageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.templateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // txtJson
+            // 
+            this.txtJson.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.txtJson.IsReadOnly = false;
+            this.txtJson.Location = new System.Drawing.Point(13, 63);
+            this.txtJson.Name = "txtJson";
+            this.txtJson.ShowSpaces = true;
+            this.txtJson.ShowTabs = true;
+            this.txtJson.Size = new System.Drawing.Size(695, 410);
+            this.txtJson.TabIndex = 0;
+            // 
+            // btnSave
+            // 
+            this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnSave.Location = new System.Drawing.Point(552, 490);
+            this.btnSave.Name = "btnSave";
+            this.btnSave.Size = new System.Drawing.Size(75, 23);
+            this.btnSave.TabIndex = 1;
+            this.btnSave.Text = "Save";
+            this.btnSave.UseVisualStyleBackColor = true;
+            this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+            // 
+            // btnCancel
+            // 
+            this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.btnCancel.Location = new System.Drawing.Point(633, 490);
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.Size = new System.Drawing.Size(75, 23);
+            this.btnCancel.TabIndex = 2;
+            this.btnCancel.Text = "Cancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(14, 40);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(48, 13);
+            this.label1.TabIndex = 3;
+            this.label1.Text = "URI Part";
+            // 
+            // txtUriPart
+            // 
+            this.txtUriPart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtUriPart.Location = new System.Drawing.Point(137, 37);
+            this.txtUriPart.Name = "txtUriPart";
+            this.txtUriPart.Size = new System.Drawing.Size(289, 20);
+            this.txtUriPart.TabIndex = 4;
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.toolStripButton1,
+            this.toolStripButton2});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(720, 25);
+            this.toolStrip1.TabIndex = 5;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // toolStripButton1
+            // 
+            this.toolStripButton1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.featureSourceToolStripMenuItem,
+            this.layerDefinitionToolStripMenuItem});
+            this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
+            this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.toolStripButton1.Name = "toolStripButton1";
+            this.toolStripButton1.Size = new System.Drawing.Size(91, 22);
+            this.toolStripButton1.Text = "Set Source";
+            // 
+            // featureSourceToolStripMenuItem
+            // 
+            this.featureSourceToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("featureSourceToolStripMenuItem.Image")));
+            this.featureSourceToolStripMenuItem.Name = "featureSourceToolStripMenuItem";
+            this.featureSourceToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.featureSourceToolStripMenuItem.Text = "Feature Source";
+            this.featureSourceToolStripMenuItem.Click += new System.EventHandler(this.featureSourceToolStripMenuItem_Click);
+            // 
+            // layerDefinitionToolStripMenuItem
+            // 
+            this.layerDefinitionToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("layerDefinitionToolStripMenuItem.Image")));
+            this.layerDefinitionToolStripMenuItem.Name = "layerDefinitionToolStripMenuItem";
+            this.layerDefinitionToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.layerDefinitionToolStripMenuItem.Text = "Layer Definition";
+            this.layerDefinitionToolStripMenuItem.Click += new System.EventHandler(this.layerDefinitionToolStripMenuItem_Click);
+            // 
+            // toolStripButton2
+            // 
+            this.toolStripButton2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.xMLToolStripMenuItem,
+            this.geoJSONToolStripMenuItem,
+            this.cSVToolStripMenuItem,
+            this.imageToolStripMenuItem,
+            this.templateToolStripMenuItem});
+            this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
+            this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.toolStripButton2.Name = "toolStripButton2";
+            this.toolStripButton2.Size = new System.Drawing.Size(140, 22);
+            this.toolStripButton2.Text = "Add Representation";
+            // 
+            // xMLToolStripMenuItem
+            // 
+            this.xMLToolStripMenuItem.Name = "xMLToolStripMenuItem";
+            this.xMLToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+            this.xMLToolStripMenuItem.Text = "XML";
+            this.xMLToolStripMenuItem.Click += new System.EventHandler(this.xmlToolStripMenuItem_Click);
+            // 
+            // geoJSONToolStripMenuItem
+            // 
+            this.geoJSONToolStripMenuItem.Name = "geoJSONToolStripMenuItem";
+            this.geoJSONToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+            this.geoJSONToolStripMenuItem.Text = "GeoJSON";
+            this.geoJSONToolStripMenuItem.Click += new System.EventHandler(this.geoJSONToolStripMenuItem_Click);
+            // 
+            // cSVToolStripMenuItem
+            // 
+            this.cSVToolStripMenuItem.Name = "cSVToolStripMenuItem";
+            this.cSVToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+            this.cSVToolStripMenuItem.Text = "CSV";
+            this.cSVToolStripMenuItem.Click += new System.EventHandler(this.csvToolStripMenuItem_Click);
+            // 
+            // imageToolStripMenuItem
+            // 
+            this.imageToolStripMenuItem.Name = "imageToolStripMenuItem";
+            this.imageToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+            this.imageToolStripMenuItem.Text = "Image";
+            this.imageToolStripMenuItem.Click += new System.EventHandler(this.imageToolStripMenuItem_Click);
+            // 
+            // templateToolStripMenuItem
+            // 
+            this.templateToolStripMenuItem.Name = "templateToolStripMenuItem";
+            this.templateToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+            this.templateToolStripMenuItem.Text = "Template";
+            this.templateToolStripMenuItem.Click += new System.EventHandler(this.templateToolStripMenuItem_Click);
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(96, 40);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(38, 13);
+            this.label2.TabIndex = 6;
+            this.label2.Text = "/data/";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(432, 40);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(41, 13);
+            this.label3.TabIndex = 7;
+            this.label3.Text = "/config";
+            // 
+            // RestConfigurationEditor
+            // 
+            this.AcceptButton = this.btnSave;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.btnCancel;
+            this.ClientSize = new System.Drawing.Size(720, 525);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.toolStrip1);
+            this.Controls.Add(this.txtUriPart);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.btnCancel);
+            this.Controls.Add(this.btnSave);
+            this.Controls.Add(this.txtJson);
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.Name = "RestConfigurationEditor";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "REST Configuration";
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private ICSharpCode.TextEditor.TextEditorControl txtJson;
+        private System.Windows.Forms.Button btnSave;
+        private System.Windows.Forms.Button btnCancel;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox txtUriPart;
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripDropDownButton toolStripButton1;
+        private System.Windows.Forms.ToolStripMenuItem featureSourceToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem layerDefinitionToolStripMenuItem;
+        private System.Windows.Forms.ToolStripDropDownButton toolStripButton2;
+        private System.Windows.Forms.ToolStripMenuItem xMLToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem geoJSONToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem cSVToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem imageToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem templateToolStripMenuItem;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+    }
+}
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,269 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using Maestro.AddIn.Rest.Model;
+using Maestro.Editors.Common;
+using Maestro.Editors.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using Newtonsoft.Json.Linq;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using RestSharp;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Dynamic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Maestro.AddIn.Rest.UI
+{
+    public partial class RestConfigurationEditor : Form
+    {
+        private RestConfigurationEditor()
+        {
+            InitializeComponent();
+            txtJson.EnableFolding = true;
+            txtJson.SetHighlighting("JavaScript"); //Close enough
+        }
+
+        private IRestClient _client;
+        private IServerConnection _conn;
+
+        public RestConfigurationEditor(IServerConnection conn, IRestClient client, string json, string uriPart, bool isNew)
+            : this()
+        {
+            _conn = conn;
+            _client = client;
+            if (!isNew)
+            {
+                var dataLen = "data/".Length;
+                var configLen = "/config".Length;
+                txtUriPart.Text = uriPart.Substring(uriPart.IndexOf("data/") + dataLen, uriPart.Length - dataLen - configLen);
+            }
+            txtUriPart.ReadOnly = !isNew;
+            txtJson.Text = json;
+        }
+
+        public bool IsNew
+        {
+            get { return !txtUriPart.ReadOnly; }
+        }
+
+        public string GetUriPart()
+        {
+            return "data/" + txtUriPart.Text + "/config";
+        }
+
+        public string GetJson()
+        {
+            string json = txtJson.Text;
+
+            return json;
+        }
+
+        private void btnCancel_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+        }
+
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            if (!txtUriPart.ReadOnly && string.IsNullOrEmpty(txtUriPart.Text))
+            {
+                MessageBox.Show(Maestro.AddIn.Rest.Strings.UriPartRequrired);
+                txtUriPart.Focus();
+                return;
+            }
+
+            var req = new RestRequest(this.GetUriPart(), Method.POST);
+            req.AddFile("data", Encoding.UTF8.GetBytes(this.GetJson()), "restcfg.json");
+
+            var resp = _client.Execute(req);
+            if (resp.StatusCode != System.Net.HttpStatusCode.OK)
+                MessageBox.Show(string.Format(Maestro.AddIn.Rest.Strings.ErrorSavingConfiguration, resp.Content));
+            else
+                MessageBox.Show(Maestro.AddIn.Rest.Strings.ConfigurationSaved);
+
+            this.DialogResult = System.Windows.Forms.DialogResult.OK;
+        }
+
+        private void featureSourceToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            using (var picker = new ResourcePicker(_conn, ResourceTypes.FeatureSource.ToString(), ResourcePickerMode.OpenResource))
+            {
+                if (picker.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                {
+                    dynamic conf = GetConfigurationObject();
+                    dynamic source = new ExpandoObject();
+                    source.Type = "MapGuide"; //NOXLATE
+                    source.FeatureSource = picker.ResourceID;
+
+                    string[] classNames = _conn.FeatureService.GetClassNames(picker.ResourceID, null);
+                    string className = GenericItemSelectionDialog.SelectItem(Maestro.AddIn.Rest.Strings.FdoClass, Maestro.AddIn.Rest.Strings.SelectClassName, classNames);
+                    if (className != null)
+                    {
+                        source.FeatureClass = className;
+                        conf.Source = source;
+                        txtJson.Text = JsonConvert.SerializeObject(conf, Formatting.Indented);
+                    }
+                }
+            }
+        }
+
+        private void layerDefinitionToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            using (var picker = new ResourcePicker(_conn, ResourceTypes.LayerDefinition.ToString(), ResourcePickerMode.OpenResource))
+            {
+                if (picker.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                {
+                    dynamic conf = GetConfigurationObject();
+                    dynamic source = new ExpandoObject();
+                    source.Type = "MapGuide"; //NOXLATE
+                    source.LayerDefinition = picker.ResourceID;
+                    conf.Source = source;
+
+                    txtJson.Text = JsonConvert.SerializeObject(conf, Formatting.Indented);
+                }
+            }
+        }
+
+        private dynamic GetConfigurationObject()
+        {
+            var converter = new ExpandoObjectConverter();
+            dynamic conf = JsonConvert.DeserializeObject<ExpandoObject>(txtJson.Text, converter);
+            return conf;
+        }
+
+        private RestSourceContext GetSourceContext(dynamic conf)
+        {
+            var source = conf.Source as IDictionary<string, object>;
+            if (source.ContainsKey("LayerDefinition"))
+            {
+                string resId = conf.Source.LayerDefinition;
+                ILayerDefinition ldf = (ILayerDefinition)_conn.ResourceService.GetResource(resId);
+                IVectorLayerDefinition vl = ldf.SubLayer as IVectorLayerDefinition;
+                if (vl == null)
+                    throw new InvalidOperationException(string.Format(Maestro.AddIn.Rest.Strings.NotAVectorLayer, resId));
+
+                return new RestSourceContext(_conn, new RestSource()
+                {
+                    FeatureSource = vl.ResourceId,
+                    ClassName = vl.FeatureName
+                });
+            }
+            else if (source.ContainsKey("FeatureSource"))
+            {
+                string resId = conf.Source.FeatureSource;
+
+                return new RestSourceContext(_conn, new RestSource()
+                {
+                    FeatureSource = resId,
+                    ClassName = conf.Source.FeatureClass
+                });
+            }
+
+            throw new InvalidOperationException(Maestro.AddIn.Rest.Strings.InvalidSourceConfiguration);
+        }
+
+        private void xmlToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var conf = GetConfigurationObject();
+            if (!((IDictionary<string, object>)conf).ContainsKey("Source"))
+            {
+                MessageBox.Show(Maestro.AddIn.Rest.Strings.NoSourceInConfiguration);
+                return;
+            }
+            var ctx = GetSourceContext(conf);
+            if (new NewRepresentationDialog("xml", conf, ctx).ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                txtJson.Text = JsonConvert.SerializeObject(conf, Formatting.Indented);
+            }
+        }
+
+        private void geoJSONToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var conf = GetConfigurationObject();
+            if (!((IDictionary<string, object>)conf).ContainsKey("Source"))
+            {
+                MessageBox.Show(Maestro.AddIn.Rest.Strings.NoSourceInConfiguration);
+                return;
+            }
+            var ctx = GetSourceContext(conf);
+            if (new NewRepresentationDialog("geojson", conf, ctx).ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                txtJson.Text = JsonConvert.SerializeObject(conf, Formatting.Indented);
+            }
+        }
+
+        private void csvToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var conf = GetConfigurationObject();
+            if (!((IDictionary<string, object>)conf).ContainsKey("Source"))
+            {
+                MessageBox.Show(Maestro.AddIn.Rest.Strings.NoSourceInConfiguration);
+                return;
+            }
+            var ctx = GetSourceContext(conf);
+            if (new NewRepresentationDialog("csv", conf, ctx).ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                txtJson.Text = JsonConvert.SerializeObject(conf, Formatting.Indented);
+            }
+        }
+
+        private void imageToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var conf = GetConfigurationObject();
+            if (!((IDictionary<string, object>)conf).ContainsKey("Source"))
+            {
+                MessageBox.Show(Maestro.AddIn.Rest.Strings.NoSourceInConfiguration);
+                return;
+            }
+            var ctx = GetSourceContext(conf);
+            if (new NewRepresentationDialog("image", conf, ctx).ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                txtJson.Text = JsonConvert.SerializeObject(conf, Formatting.Indented);
+            }
+        }
+
+        private void templateToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var conf = GetConfigurationObject();
+            if (!((IDictionary<string, object>)conf).ContainsKey("Source"))
+            {
+                MessageBox.Show(Maestro.AddIn.Rest.Strings.NoSourceInConfiguration);
+                return;
+            }
+            var ctx = GetSourceContext(conf);
+            if (new NewRepresentationDialog("template", conf, ctx).ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                txtJson.Text = JsonConvert.SerializeObject(conf, Formatting.Indented);
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestConfigurationEditor.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,688 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHBSURBVDhPjc9NS2JhFAdwi4koKyoKHLxGhKDpFTOC5lKS
+        dsF8yVxcJbiYimYhKTODRRtdRrgMBuZL9AFat2thBL0QBUFE21YDA0Gd/kclIiXvH35ceJ5zznOPTmty
+        udxkqVT6XalULI0j7QmHw/ZEIrF7c3NPyWRyp3HcNn6oCoKw7vV6y9XqNTmdzj1JksT69dfZhNNisUj8
+        PT4+I5PJ9MdqtU7zZbt1HAaD4aJQKFA2m6V8Ps9DzvR6fYEvtaxTlmX5KZPJUDQapXg8Tul0moecG43G
+        DS3rHCqK8j8SiRBeo1AoRMFgkHw+Hw+5/LxOq5zg5ZdAIEB4jWw2kQRhjCyWSbLbHTzkGuv8rJc2Jwy3
+        /OuSNIcmkcxm2ztRdGGgk4fc1qo/ZQXuUqkUzc97yOWSaGrqx7uZmbkarmnUNuWemxcXfeR2L2HIEsny
+        Mnk8/tfZ2YXniQnLv76+/gfU/aqXN+cAHlU1TX5/jBRljV97hCs4gn1wQcuoQLFYjJueVHWj9gUF2uZj
+        M/sLz7AKmvKxeQtGYBgGYQD6QQ890A1d8A06oQN0u8DN22AHK5hhHAT4DqMwBDysF3gQhug63wCbhbW0
+        /QkwqgAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="toolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIRSURBVDhPjZJNSJRRFIa/pdHORa2FZiEILYKQaFWQLhIk
+        LVy4cGM11BAjwwjOyECbtjER2QgDgobUmE7+hJS/48AgSC5qQBHEYExkqJz//9fzftzxFk7SC2dxP973
+        +c499xhV3RscbLvr8dw/qzo9nkvKflqdLteDdKmEX/k8DjMZxFIpfE8msZdImBVcXQU9d9xui4r8rfaB
+        gYfJQgFxCf44OsJuPI6tgwN829/H11gMY3NzoOirCWlzOq0pAfxMp2tCXoyOnpSlpcWtYlq3HY5HmWIR
+        v6X9f0HYCa9Dr4pp3bLbH2dlBols9kwIAfSqmNZNm82WE8DWzg7WIhFEt7dPIF+iUcyvrCC0uWkOll4V
+        07phtT4plMv4MDODrHTxPhhEcHYWU3J+NzlpfhsLBMzXoVfFtK739tqLAgiFw3g9PIzlUAgBCfI6n+Tv
+        3qEhfFxcxKGA6FUxrWs9PX2lSgV5uUZOhpmRF3kzPn5qJtwTelVM62p3t6MsAHZRhfhHRpDK5RDZ2MDb
+        iQmE19eREDC9KqZ1pavLWZFFKQmgCpmansYrnw8vpX3OwOf3g8tGr4ppXe7o6OemVaSLPyHs5PPSEp57
+        vZhfWEBazvSqmJaltdVFAFULwpnwOlw2elXM1DmpCxebm5+qvClehzPhYAniE3NP8nKmlxmVNeqlmuoa
+        GvrONzY++5+ilxnDMOqPAY/4PMei9SzEAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="featureSourceToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACnElEQVQ4T5XRa0hTYRzH8WfV
+        i4ZvglJ8EQbdKBLfTIQVyRiBubG5mqtYVwi0zQrLXihpFwwchGKKuYu5JW6h4qW5zc1LOi/zsuNUZGo3
+        dYpzqIESZZDw65yBicvCXnzhPIfDh/P8/0Qmk4UmokvZRsx35A9ALBanLCwsYHJyEl6vFxQ1DKu1G3b7
+        AHp6xul3fszNfYdIJFJKJJKtAb/fD4/Hg9bWVlgsNujKqmGoMKPR0o2+/veY9i3/L1AFfUUDzNZO9A6M
+        Ycr3ZQPg8YShAEehUDRqtVqo1WqoVCpkZmYiOzs7+FxaWoqMjIwmGogLAhERcaFAyAyGYGlywuLoQodr
+        EEPej5ieW9z4A0JObEK2uoJWb4Kusgq1Njs63RQ++GY3A0z/AjR6I7TGN6hpsqLD3Y+Jmam/AzeSTm9r
+        BgKBIE4oFAaBQSapVJrKZJDvdYy8UsKtVcJTlw+3y4lGRxvqmx1w9DrRN+bBhP8zeDxeKp/PJyQ9vQgS
+        yX2sra3BbDYDn6qC/RyvxGxzHppVySjPvQm1oRhGey1aqHaMzowhJiYmLUuwn5DExDRwuVcQCARgMpmw
+        6tFhpafod98oDSZqs1D/OBHGlw9grs6HrUCOQhHb1XZjl5LExl5AdHRScG0ajQZf+0owXJ4GZ8FltKhk
+        GDHcweK75/hBw6/vngRVdgvLNMycG+Q7dSQhQQEOR4b5+XlERkY+fSENH+0vubrke/sIlCYFtlwJ9Le5
+        0KbGoj1fjllzzmpX3llvneJQh/7cjov0EI+sMIWFheWx2ex7p6LItYfxpKbw/L5RV+GlpYAtF+sx5+Lk
+        8KFnfFbJmYMsrvgYi9kCiaI7ThdNd5juKB2Hhq4z0BMeodbLiSfV8QcIs/w9dLsJIaxfLDsc751acxMA
+        AAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="layerDefinitionToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABuklEQVQ4T6XS6SsEcRzH8e8z
+        yTMkUUpJjuT6D/wDPFFSruQWyfXIXyBHrqWUnKXGHuy6Voq19rAe2Ad23W1mrbGzWLdH6/cZZJU0svVq
+        Zn77fc/VUCAQ+BfKbtdDHJPLFMqEWTREWW2rkGc58i1d+V9tgv/F+hvMYBYNWspsXYEi4fZlx+V91MuB
+        WTRoKaNlGYo9N8+mM+FhRQ7MokFL6c1LUOr2PRmPPfeLcmAWDVpKa9JBGbs1g4O/0wbbc90qjU5xQm+/
+        HNLuXvSqrHwnmI98M2jQUmrjApSfCo8bdpdfA7unNxyLRuYsfDdnPu+SmL4YHN4pNGgppWEeKg499+ss
+        VG7ueydVVncfZ+J7ObOkR9ri+H2tx+AQZ9CgpaR6NVTt83dra3ZhnF11YM78TX8QaY2dYBYNWkqsVUKN
+        7eRap7Tww4ziA/aDjz/XFAanl0ODlhKqOagzHohqtdU9+ok9huSn/S2nqEaDluIrZqGBvVmdxuYek+x8
+        bH/C/sMsGrQUEp1MsSWTldMbJ8vsE13cPhC1v8EMZtGgxS88LC03JyJ/sCmyYLRDDsyiQYsThDJRTMwf
+        sYZC3wAh5nPvZl53vQAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA
+        BAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ
+        AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm
+        AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP//
+        /wAAAAAAAAAAAAAAAIeHAAAAAAAAAAAAAAAAAAAAAAAAAAd8RsTEfEdwAAAAAAAAAAAAAAAAAAAAhGxH
+        d4iIx2xMdwAAAAAAAAAAAAAAAACEx3iPiIjo+PiHxHcAAAAAAAAAAAAAAAbHd2iOjufn7oiIh8xwAAAA
+        AAAAAAAACEV4ZiZo7Oznzm7uiIfEgAAAAAAAAAAAfGiOI2Nmjo6O6Ox+zoiERwAAAAAAAAAHx4iHYnpy
+        6Ofs7O7n5+6PxlAAAAAAAAB8aI7oanpyZ+jo6OjO7sjoh8cAAAAAAAfHiI6Ocno3pn6Ofn7ozu7IZ3yA
+        AAAAAAbPjo6I4nOnJyaO5+fu6M7uZnZAAAAAAHyIjo5+hienp6Zo5+fsjujoYmhlAAAAB0BgYERAUCBj
+        pzNo6MZCQEBAACBEcAAABAAAAAAAAAACenpmjgAAAAAAAAAAYAAAgAEBAQEhAhAANjYyhgAQEAECEBAQ
+        WAAAYzMzMzMzMzMzY6em6HMzMzMzMzMzdAAAwzMzMzMzMzMzNqZ4jhMzMzMzMzMzPAAHczkzOTOTOTOT
+        Yojo6HMzkzkzkzM5d3AMb4gzMzMzNzNqIAAABo6HJzMzM5M2dsAHz445M5M2JqemAAAABI6GejMzkzN6
+        d0AGf4gzMzMyYmJgMzMzM0jmNjMTMzM2KEAMiOgzMzk3iI8DEzkzMxaGpyMzMzN6Z8CGiI45MzM4iIYT
+        MzMzkzCGJyOTOTM3KGh8iIgzOTM4iOEzOTMzMzNIYjMzMzNqZ8eMiOczMzMX6BMzMzOTM5M2hiMzkzOG
+        aHeGj3YzM5M2djMzM5czMzMxaCEzMzfo+McMjiIzkzMyITM5MziHOTMzNmMzOTN2aEAGgmIzMzM1MzMz
+        M4iIMzMzMSOTMzMmKEAMdiczM5MwMzkzmI6Ogzk5MxMzMzNyZ8AHx6czkzMzOTMzjoiI5zMzMzM5M5N6
+        dnAIZ2MzMzOTMzMzj46OiHMzOTMzMzM2jHAAyCYzM5MzMzk2Zojo6OOTMzOTMzNidgAAdnIzkzMzkzNj
+        Jo6I6IdzMzMzkzMnxwAAhzOTMzMzMzN6Z+jo6O5zOTOTMzkzdwAAAxMzMzkzOXpyaIiOjo6HMzMzMzMz
+        EAAAAzMzOTM5MmImjo546M7sczkzOTOTcAAAAHdzMzd3hiYo6IZijo6Od3d3d4d3AAAAAAR3ZqaOiCam
+        jnpyZ+jn7u7u6IZAAAAAAAjHYnJo56Y2b2Knpifo7OzoiMdwAAAAAAB2hiemaCYmfnZ6c2Yn6OjohscA
+        AAAAAAAHyGJiKGJo6Go2Onpmjs6Ix3AAAAAAAAAAfIiGaGfo6Cenpzc26I+MfAAAAAAAAAAACGyGqI6I
+        52pzanqmeI5HcAAAAAAAAAAAAAZ3iI/iYnOnp6ciflxwAAAAAAAAAAAAAAB8bIh2JqYmImZ4fHcAAAAA
+        AAAAAAAAAAAAhsZ4d3eHh4fGyAAAAAAAAAAAAAAAAAAAAAjGxsZsbGyAAAAAAAAAAAAAAAAAAAAAAAAA
+        CIiIgAAAAAAAAAAAAAD///w///8AAP//gAH//wAA//wAAD//AAD/8AAAD/8AAP/gAAAH/wAA/4AAAAH/
+        AAD/AAAAAP8AAP4AAAAAfwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAPAADgAAAAAAcAAOAA
+        AAAABwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB
+        AACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABAACAAAAAAAEAAIAA
+        AAAAAQAAgAAAAAABAACAAAAAAAEAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAOAAAAAABwAA4AAAAAAH
+        AADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/g
+        AAAH/wAA//AAAA//AAD//AAAP/8AAP//gAH//wAA///4H///AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAB3dwAAAAAAAAAAAAAAAHRlyMfHRwAAAAAAAAAAAHx4
+        j46IiIx8AAAAAAAAAIR3Zo7n7u6Ih0gAAAAAAAfIhicn7n7O7OiMcAAAAAB8iOenpo5+js7uiMcAAAAI
+        yI6OJzYo5+fo7OZ2gAAABojo6Gp6dn6Ofs6GZ8AAAFBAQAQAJ6No5EAkACAHAAAAIAIQAQJ6Z2AAEAAQ
+        BAAHMzMzMzMzY2dzMzMzMzNwDDM5MzMzNyjo4zMzMzM3UAeIMzkzc3IAAHiHM5M5N2CM+DMzNiYgMzNO
+        diMzM3J4d44zMziIIzMTNeNjMzN6yH6IOTN4hjOTMzN2MzkzJnd4hzMzN3MzMzMxN2MzM4eMfIYzOTYz
+        Ezh5MzNjMzNud4hiMzMwMzN4hzMzEzEzcngGYzMzMzk3iOhzMzMzM3bAB2czkzkzN4iOgzkzE5MncAdy
+        MzMzM3JuiOczMzMzZ3AAMzM5MzNqiOjoczkzMzcAADOTMzNyd+jo7oYzM5MzAAAHcnOHYmiGZ47IaHeH
+        UAAACMcmeGam46Zn7u7ujIAAAAB+cmaKZ4ZzpyjsiMcAAAAAB3fihn6Cp6cuiIyAAAAAAACMdo6OY2N6
+        dofIAAAAAAAAAHaIYiamJnfHAAAAAAAAAAAAfIeHeHdnAAAAAAAAAAAAAAAIyMjgAAAAAAAA//w////A
+        A///AAD//AAAP/gAAB/wAAAP4AAAB+AAAAfAAAADwAAAA4AAAAGAAAABgAAAAQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAIAAAAGAAAABgAAAAcAAAAPAAAAD4AAAB+AAAAfwAAAP+AAAH/wAAD//AAD//8AD///4
+        H/8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA
+        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAd8cAAAAAAAAA
+        AAd3iIiMcAAAAAAAB2Zo7O5ohnAAAAAAaIZ2fo7uyIwAAAAHh+MnbufO7oZwAAB36OdqN36OjOZ3AABA
+        QAADan5AAAAEAAcTExMwemgDMzExYAczMzMzJ44zEzMzcIeDMzY2AAGOMzM3aHjjEzdyMzNnYzEzZ8iD
+        M3hzMzMXYzM2d3jjM3czM5MzYzM4jHdjkzIzGIMzcxM2Z4ZzMxMziOczMTM3eAdjMzOTeI5zMzMycAcz
+        M5M2boiHM5M3cAgzEzNqiO7nMzMxAAB3N4dmhneOd+h3AAAGYmemhqZn7njAAAAAd24243o26IwAAAAA
+        B3iOenNqjHAAAAAAAAaGdmdncAAAAAAAAAAId36AAAAAAP/D/wD+AH8A+AAfAPAADwDgAAcAwAADAMAA
+        AwCAAAEAgAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAQCAAAEAgAADAMAAAwDgAAcA8AAPAPgA
+        HwD+AH8A/4H/ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAd3cA
+        AAAAAHaOjowAAAB4Z25+yIcAAI6GNujuZgAAQAAndgBAUAMzMzZ3MzMweDM3IydzM3d4M3gzM2MzJ34z
+        czNTdjOHhpMxOIMzk2cGMzN+hzMzYAMzM2joczMwAHOGdn7n5wAAhmZ2o2h4AAAAeONnZwAAAAAAd3gA
+        AAD8PwAA8A8AAMADAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAAwAMAAPAP
+        AAD8PwAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAATDwgACxsFABgS
+        BwAADhMAARYdACUOCgA2FQ4AKhUUADwQEAAMIwsAGD8GABkkEQARMhUANigIAD8wDgAnIxQANioXAAAd
+        JwAMJy0AAiw6ADYvIQAuOCwANTMvACAwMQBFHhUAQT42ABpQGgAkWQIAI0sQACx0DAA1dwYAK3kYAD5+
+        HwATUC4AJF8kADhcLAAebDsAJX44AGxTGwBCfA4AUkQjAFpXOQABOUgAAkFPAAFDVgASSlYAGndJABdy
+        WQA2Zl4AKn1VAAFVcAA9WGwAEm5hABBzZQAEYXkAGmF5AAlzfQA/YHcAUk1OAHxRUwBRcEMAemZWAExV
+        YwBlYmEAnCwqAJ8wKwCMLzEAnjAwAKQ3KwCjOjYArEEsALJKLAC3US8ArEY3ALJMNQC4VTcAiG83AKtK
+        RQCrUUkAtVdHAK9UUwCyW1kAkXxAAK1kTQC7ZVQAn312ALhmYwC/cGUAu3l3AMVyVwDEeGkAwnx5ADeI
+        BgA3jRMAOJIXADWNKQA4myYAKogzADWYPgA5ozcAQ4sLAEmOEgBViRgATZIYAFaUGQBnmR8AW5ooAFeL
+        OQBmmyUAcZ8qAGiaNwB0oS0AZ6A1AHmmOgAbg18AIYZMADWeQQAkjVQAKptbADmsRwAuoFgAG4ZmAC6D
+        awAklWUAd5NTAHalSgBWgn8AfZ9hAHaZdwCIqTkA/LkeAMyfOADcoygA26k6AOerJgDssS0A/rwnAOKs
+        MwDvuj0A/78wAP7BNwCZnksAmZpWAK+OQgCzkkkAvJ9eAImsRACXsEgAiKhcALi3RQCtrV8AoLlcALK7
+        WQCtmnsAt5pzAIKlZgCapW0AmbhhAJuwfACjoWoAqLFpAKugdwDJoEEA3KxEAN+xTADEt1kA2rFWAOm5
+        TgDnulcAyoVrAMqIdQDQjnoAw5J2ANCQfQDBtmgA1L1tAOi/ZAC6wmgAvMVzAMvDXgD+xkYA/MpXAP/Q
+        XgDHxGcA2sVpANnNdgDpxWkA+8xjAP3QaQDnyXsA8ct3AOzRcwD91HYAAmiIAAd2iAAAbpMAB3GRABp5
+        kwAle4gARWyCAGR6iAAvgpMAR4aBAG6VigB5o5YAup2FAI6nhACYqYUAjKyaALihhwCttYUAurCFAKq4
+        lwC/v58AyImGAMqUiQDUmYgAzZSSANOckwDLo4YAz6yfANillwDfsqMA47+zAKnGgQC9xJ8AxMeMAN3H
+        jADFyZUA2suTAM3UlgDc15MA59OFAPzYhgDv3JsA+9uTAP3hnADLwqQA1sOkANnYpQDWzrQA7d6sAOfG
+        uADs1roA+N+yANfgtQD946cA/ui5ANrSyQDu08MA89zGAPvpxQD56dMA/vHVAP///wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA2tfX2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxOQkJC
+        QkJERERBRE5ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANdOQkJCSlJc19ra11tSREFEQUbX
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXR0ZQW976/vz39+3t7ff8/vTXT0RERNcAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAE5HT62VaOfsu6mlpIaGpKSoscHt/PNXREFGAAAAAAAAAAAAAAAAAAAAAAAAAADX
+        R0JY02VeXiiOp6SKiIiIiIeFhYWkqer481FBRNcAAAAAAAAAAAAAAAAAAAAAAFhHRdv+nl1jY2Afgry1
+        jY2MjIyJiYiHhYWp6vzXREFXAAAAAAAAAAAAAAAAAAAAVUVL8/jqlx5jeHhkXZS3tY2NjY2MjImDiYeH
+        irz34EZEUQAAAAAAAAAAAAAAAABYR07797+nsF1keHh4ZGWZt7W1jY2NjIyJiYODh4eo9/FXRFcAAAAA
+        AAAAAAAAANdHS/v3u6m2wW5eeHh4eGRdlMG1tY2NjY2MiYmDg4OHu2aVUkFcAAAAAAAAAAAAAEdK8/i7
+        sba2vbpdeHh4eHhkXW7AtrW1jY2MjImJg4ODqGddnU9EAAAAAAAAAAAAUEfe+L+xtry8vexlZHh4eHh4
+        eF5wwbW1jY2NjYyJiYODtmVeXZpGRgAAAAAAAABWBwYXFRERERERERUCCg0jeHh4eHhduLe1oycPDg4O
+        Dg4OEQICAgwICVkAAAAAAAAZAAAAAAAAAAAAAAAAAAAADXh4eHhhasGjAwAAAAAAAAAAAAAAAAAAAEMA
+        AAAAANgZEhISEhISEhISEhISEgUACnV4eHh4XbqQAAQFEhISEhISEhISEhISBUPXAAAAAEvExMTExMTE
+        xMTExMTExMTCMHh4eGRfXbKxMcTExMTExMTExMTExMTExDRGAAAAAEjExMTExMTExMTExMTExMTExXhk
+        ZWWUsuqwxcTFxMTExMTExMTExMTExDpEAAAAq0jExMTExMTExMTExMTExMTFfGQfoeS+u7G7gcXExMTE
+        xMTExMTExMTExMhEWQAAUEj54p/FxMTExMTCMnR3d3l4dQsAAQAAAQGRvLGvnyZ2NsXExMTExMN8YpxO
+        RgAASEz+7b7FxMTExMQ4IWF4eGRkHAAEBAQEBAQQp7e9gl94JcLExMTExMN4ZHFXRAAASFv+7L7FxMTE
+        xMQ3Hl1dXV0fAS3ExMTExMQrKbbqXmR4JcLExMTExMN4ZF3XRAAASK786r7FxMTExMQ3bOPw8PQaK8TE
+        xMTExMTEFE3pXWR4JcTFxMTExMN4eF2tRADZSN746unFxMTExMQ31vj49T4UxMTExMTExMTEwhOSgl94
+        JcLExMTExMN4eF3SRNeuSN/46unFxMTExMTC7vj4mhPCxMTExMTExMTExDcWr2VfJcLExMTExMNfX13S
+        RlyuSN/495XFxMTExMTCleXuGDfExMTExMTExMTExMQzKrlqI8LExMTExMeWgnDdQlzZSN78k17ExMTE
+        xMU3Hm87M8TExMTExMrKxMTExMTEM1OyG8LExMTExMe2wfjeQtcASN7hXV3ExMTExMQ3IB0zxMTExMTE
+        yubjxsXExMTExC6OIzfExMTExMpqamveQgAASdldXV3ExMTExMQ3JSvExMTExMTG5ezq08bExMTExMQi
+        G8LExMTExDldX12tRAAASatlYXXExMTExMQ3K8TExMTExMXV7Orq6s/ExMTExMTCK8LExMTExDlkYWtY
+        RAAATFpvYXjExMTExMTExMTExMTExNHs7Orqwb/MxMTExMTEwsTExMTExMN4X5VPSgAAqlCPXXnFxMTE
+        xMTExMTExMTEe/L37OrqwcG8y8TExMTExMTExMTExMN4XaJKWAAAAEytXWTExMTExMTExMTExMQ2XWVy
+        6+rBwcG9ucfExMTExMTExMTExDlfaK1CAAAAAExUJCLFxMTExMTExMTExDl1ZGFds+rBwby8t6bCxcTE
+        xMTExMTExDkbPU9GAAAAAK04xMTExMTExMTExMTExXl4ZF2T7MHBvby3traPwsTExMTExMTExMTExD9Z
+        AAAAAADExMTExMTExMTExMTEdnh4X3LswcHBwby2trW1fcTExMTExMTExMTExDQAAAAAAADGxMTExMTE
+        xMTExMQlZF1dXenBwemTmcG3tbW1izHExMTExMTExMTExMwAAAAAAAAAPkB/L3p6ejLNgdBoXWVllOrB
+        6WhfXbC3t7W1jYZ9fYB9gICBzck7PAAAAAAAAAAAAElbcl54ZGbqweqZZmVdaerqlF54YWWUu7e1jIyM
+        iYmDibXq+kpHAAAAAAAAAAAAAKtJqm9deF1xuOxyXWFfXXHqaV94eGRfZYK5toyDiYOMter7T0dcAAAA
+        AAAAAAAAAABaTKtvXWRdXWqyXWRhZYLqgl14eHh4ZF9dpo2JjIy16vtVR1UAAAAAAAAAAAAAAAAAWkyq
+        cl1dXV3pal1dmb3Ba2F4eHh4eHhfcLWMjbf3+lBFUAAAAAAAAAAAAAAAAAAAAFpMW9T2aF3pcG24vbe5
+        XXh4eHh4eHhkZbS3wfjfS0dVAAAAAAAAAAAAAAAAAAAAAACqSUzZcl3o7cHBwcFuX3h4eHh4eHh4X4L4
+        +6pHR1sAAAAAAAAAAAAAAAAAAAAAAAAAAExMWtz9+PiYZWhdeHh4eHh4ZGFlZZXeS0dKAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAACsSUlMqvOTXV1dXV9dX2VdZnKdrVVLR1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAKpMSUxarZuboaCgoZubq1pMS0urAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtMSUlM
+        TExMTExJSEtYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADerKurrNkAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD///w///8AAP//gAH//wAA//wAAD//AAD/8AAAD/8AAP/gAAAH/wAA/4AAAAH/
+        AAD/AAAAAP8AAP4AAAAAfwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAPAADgAAAAAAcAAOAA
+        AAAABwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB
+        AACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABAACAAAAAAAEAAIAA
+        AAAAAQAAgAAAAAABAACAAAAAAAEAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAOAAAAAABwAA4AAAAAAH
+        AADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/g
+        AAAH/wAA//AAAA//AAD//AAAP/8AAP//gAH//wAA///4H///AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAoIBAAcCwkACRcGABIXBQAAExkAJBsJACQcEwAkIR0AAiYtABkv
+        LgAeMjYAXyIkABxJCwApYw0ANW0SABpPIQANTj4AIGQkACp9NABYRBcARUgxAGpGPwB6YiwAB05VAB9X
+        XgAee0cADWNZAANXawAAV3QALF52ABZmYAADYXgAHm97AAhxegAmbnEASU5FAHlFRQBWe18Af3RLAJws
+        LACfMzIAojUtAKc7LgCpPi8Aozk3AKxCLQCySS4ArEQzAKZBPgCqRDkAr0s7ALJMNAC6VzcAh0hIAINb
+        TgCnRkUAqUZDAKtJQwC4XUkAr1ZWALJbWQCUdE0AvWRNALdhVwC2Yl8AuGVeAKFwXACwdV8AhH9uALZk
+        YgC6amUAumxrAL9wZQC/f2MAtXdrAL5xawCyf2wAvXJwAMFpTADBbFUAw3NYAMBxZADGemQAxHpsAMl+
+        aADCenYAwXt5ADeGAAA3iQYAPIgFADSECAA7gw8AN4oMADuLCwA2jhIAPI4SADiTGAA4miYAKIY0AC+R
+        NQA2mDAANZY/ADabOAA5oC8AOqc+AEWMDABEjBMASIkWAEaRFQBUkxoAV44iAFiXIgBCjDYAYJAiAGad
+        KAB/misAZZ02AHGWOQB5pDUAJIRAADKFQQAql1UAMJ9RADqrRwAuoFkAMaRUACaWYABimkQAfpNAAHSd
+        QQB6mEcAZ4VqAIalNQD7uB4A3KUuAN+sOwDtriMA4KcqAOOqLADxsSEA/rskAP6+LADjqzEA7LQyAP/A
+        MwD/wToAiJlHAImWVwCZnFwApp9HALGQRwCrjF4ArZtWAIyvVQCKtFwAnLZUAKaiTwCmtEkAsrdKAKW3
+        VAC4u1IAs7xZALq6XACaj2EAt4diAJa2ZwCup2YAuK5jAKayYAC/tm4A3K1CAMi7RgDes1UA6rpMAOm9
+        WQDKgGgAy4d0AMOxYADlvGYAxsFZAP7EQgD/x0gA/chLAOzIVwD8ylcAycNhANzGaADJyHMA1sd1AO3A
+        YAD+zmIA/dFrAO3MegD2z3YA6NF4APzUeQACZ4cABXOJABZ2jQAAbpMABHCSAC1rhgA8eYUAPHeQADKB
+        igBSj4wARY2WAGWalQB3oJAAioiKAImpkwClsoQAtreDAMuOigDOkIQA0paFANSZhQDUnI4Ay5GSANKc
+        kwDIqY8A1qGRANmmlgDfsJkA2rymAMnPkQDlyoIA8c+CAOvSgwDz1IIA/taDAPXVigD+2owA69mWAPTX
+        kwD62pIA+dyZANvLpQDnwawA6MSpAOzJqwDk3KkA6siwAPLXtwD23bMA9t67AO/hpwD74qYA/eSsAP7m
+        sgD75roA/ei4AOHbxAD+68EA////AAAAAAAAAAAAAAAAAAAAV0hIVwAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAEwqKjpCTExBOSgoSAAAAAAAAAAAAAAAAAAAAAAAAEAyRN32+evk5Oj49d89KDwAAAAAAAAAAAAA
+        AAAAANwrTINgb7Krj4+Li4eIr+zwPSjbAAAAAAAAAAAAAABULN77XGZna6G1kpGRjo2Jiq7t2ihIAAAA
+        AAAAAAAAVDDv7LNyfHx8bru1kpKRjo6NjI/C4ThIAAAAAAAAANww7+ivuaJhfHxpbbS5kpKRjo2NhpCF
+        lDHbAAAAAAAALt/svr+/5mF8fHx8YaG5tZKRjo2NjXRdpCkAAAAAABYCCAcGBwYHAwMQfHx8bcCrFAYG
+        BgYGBAMDAjYAAAAABwUFBQUFBQUFBQFjfHxonxcBBQUFBQUFBQUFDAAAAFPIyMjIyMjIyMjIxXtpYmGf
+        p8XIyMjIyMjIyMgeRgAAL8jIyMjIyMjIyMjGe2yp48Oqx8jIyMjIyMjIyMopAAAv/dXJyMjIIWN9fnwN
+        AAEAAZe+vXF6IMjIyMl+gDgA2j/+5MnIyMgbYWFhDgkcHB0cCq26YXwcyMjIxnxtRtaxsPrkycjIyB/i
+        8u4LxcjIyMjFFaNiaSDIyMjJfGFLTlOx+eTJyMjIy/v1JCDIyMjIyMggJ3BlHMjIycZiYU1GU7H7m8jI
+        yMgjpkUdyMjIyMjIyMgcmXIcyMjJx6ycV0exsaZeycjIyBsPHMjIyMjT0cjIyMgZkxzIyMnHhZxXTN6w
+        XmHJyMjIHBjIyMjI0OzozsjIyMgRHMjIycZhbUTbAE9ufMjIyMjFycjIyM/r7ObBzcjIyMXFyMjJxnx1
+        MwAANYFnyMjIyMjIyMgipurpxMS7x8jIyMjIyMnGYpQsAABTPhLIyMjIyMjIyWRhcOnEwL+oyMjIyMjI
+        yckOQ0IAAADFyMjIyMnJych6fGG8xMS/ubmUyMjIyMjJyMgeAAAAAMnIyMjIycnIGmhhnMTkosK5t7Um
+        yMjIyMnJyMwAAAAAADeEeH951NVwXlrD53NhhcC3kpCdnZad1NIlAAAAAAAA2U92aGGg6HdhYYW9YXxi
+        bZ64kY2NjsDxNNcAAAAAAAAAsFF2YV1tnGFhnsNefHx8aG23jpHA8TNEAAAAAAAAAAAAsE+Vm168bp+/
+        n2J8fHx8Yp+57OA0UwAAAAAAAAAAAAAA2TWld/fpu7RufHx8fHxoc/VULtcAAAAAAAAAAAAAAAAAAE81
+        sfF1WV1iYmFhcJOYND8AAAAAAAAAAAAAAAAAAAAAAABTNU+lpZmYpaVPNVIAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAANmwUVGw2gAAAAAAAAAAAAAAAAD//D///8AD//8AAP/8AAA/+AAAH/AAAA/gAAAH4AAAB8AA
+        AAPAAAADgAAAAYAAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAGAAAABwAAAA8AA
+        AAPgAAAH4AAAB/AAAA/4AAAf/AAAP/8AAP//wAP///gf/ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA
+        AAAAAAAAAAEAAAABAAAAAAAABg8DAAQMDAAXCAYAGQkJAAkQBAAHFggAGxQEABASCAAaFQoAGxgUADs1
+        HgANNT0ACD07ABpNIAAiQCUAVEEWAHRpPAAARV0ACVJWABBeUgATZ08AD2BSABJhXwAaZF8AHnFdAB16
+        WwAicEwALmVdAC92WgAIVW0AF1poAANYcgAAXXoAD2liAAxqbAAHbXkAD3x8AHBMVgB3WlcAWVpgAKM9
+        PQCvSjwAsE08AI5OUgCZV1MAp0VFAKlIRwCsTksAs1hPALleSwCvVFMAr1ZWALJaVwCyW1kAs11ZALVf
+        XACYYV4AlWpbAJF7UAC9YEIAs3hPAK5mVQC3YFUAu2VTALBrVwC2YFgAtWBdALR1VQC6bGkAoHNkALxx
+        bwC+c3AAwGlKAMJuVADDcFcAwnBYAMZ6ZgDJfGQAyH9rADSGCAA5kRUAOZQaADWMJQAzjysAN5cnADqX
+        IAA4mSMANpgsADmfLgAxjD4ALpI7ADSaNgA3nj0AOaEyADegOAA5pTsAOqg/AECLCgBBhxAATpMWAEaX
+        HwBLlh4ATJUfAFSWHQBEmCIASpkiAFGbJABcmiMAZ54pAGWbNQBumD0AdZI5AHKRPQB4kT0AZqAsAH2k
+        LwBmoDUAKpFGAC+YRQAxmkEAOqtEADOjTgA5rEgAfotFAHiTRABshFsAU4t/AICpPAC8pz8A1a45AO+x
+        JADxsiIA/rshAPu6KAD+vigA/78tAOauMgDirDQA4a04APi+OAD+wDEA/sE1AP/COgD+wjwAjodCAI+I
+        RgCMhk8Ajo5MAJKATgCUjUsAjJNKAIyTUgCwgVUAgKNCAIGtTgCSrkQAmK9DAI+wVQCNsFgAoqZKALyn
+        QACrtkoAtbZCAKK2UgC3vFUAiYJsAJeZYACSnm4Ao6NnAKSzYgCnu2UAuLlkALy0aAC3t3oAtbl8ANWx
+        SADhsEQA5rZMAMqAagDKiXwAzIx+AMu3YADEvWgA1rxpALvAYADNwFAA18RZAP7FRADyx04A/slOAOLF
+        VADkx1kA78RbAPfKVwD/zFIA9MVbAM7FZQDXy3UA7sNgAOvDZADpx28A/s5jAPXPaAD6z20A8813APDK
+        eADyzn4A/tRyAPrUewAAY4MAD22FAAFtjwALe4UAA3KMAA10jQASdY4AAG6TAARwkwAMdJMALHmAACJ7
+        jAB9n4MAaJKQAJ6OhwCPrJcApLOMALm6gwCyu5MAiK67AMuQjgDRmoUA1JqJANafkQDYoI0A26aPANyp
+        jwDfrI0Aw7aJAN2rkADkuJQA5ryWAOO3nADlu58A6L6YAM7KhwDPxo0A7NOBAPLThAD91oEA89SIAPvZ
+        jgDsyqwA/uOhAP3kuAD///8AAAAAAAAAAAAAAEhDOEcAAAAAAAAAAAAAAAAAAAAAADFDte/w8O+1MC8A
+        AAAAAAAAAAAAAAA/QXFuuLGLiouyz/A4MwAAAAAAAAAAACvq9VNdZ7+PjoiIg4rN5ykAAAAAAAAAK/LP
+        yGV7YWzAvI+IiIWEx6cuAAAAAABA6s/Hypxhe3tpu7yPjYiFjWOTMwAAAAADCgkHCQgGDnthc8cQBwcH
+        BwEFBAAAACcSEhISEhISDXt7UrYMEhISEhISEiwAACjZ2dnZ2dnZ1Viat8nd2dnZ2dnZ2SYA6ef22dnZ
+        GXd6VAYCAgvBrFsj2dnZd5XmT/P42dnZG5ufD9LZ2SERnWEi2dnWYXxFTPz429nZ3/6mIdnZ2dkglFYi
+        2dnWXn04S/ye2dnZHage2dnb29nZH6AW2dnYuu41s6lQ2dnZFRPZ2dvk4tnZ2RwU2dnXZJhF6pFf2dnZ
+        IdnZ2eH7+d7Z2dkh2dnWXpXmAD1V2dnZ2dnZGqv70cx/2dnZ2dnWUj8AADoX2dnZ2dklYGf30MrH3NnZ
+        2dnZGC0AAOXZ2dnZ2SRfUcbRxcq+sNPZ2dnZ2QAAAABGfnZa46piaPmAVqLCj4Khoa3gOQAAAAAASXFX
+        baRSUbloYV5ro4iIw/QrAAAAAAAAAEmXdZxsostpe3t7ar3Q7ysAAAAAAAAAAABLma79pXRhe3thUq5N
+        MgAAAAAAAAAAAAAAADxOlnFvb3KSRDIAAAAAAAAAAAAAAAAAAAAA6E5LS03oAAAAAAAAAAAA/8P/AP4A
+        fwD4AB8A8AAPAOAABwDAAAMAwAADAIAAAQCAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABAIAA
+        AQCAAAMAwAADAOAABwDwAA8A+AAfAP4AfwD/gf8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA
+        AAAAAQAAAAEAAAAAAAAEFQ8ABRQQAA0WEAASFxAAERgVABEZGAAuHx4AAis4AAQsOABEIiQAH10nACFe
+        IQBsViIAHX1UACN5RQA8eE0AP31QAARdbwAEX3MAB1p0ABFdcAAZfWAANWxsACNldwB+e0AAp2pPAKx6
+        SwC4ZV4Au35dALVuZgC6amcAu29qAL1wbwC/dHAAvnV0AMh8ZgDIfmkAwHh0AD2VIgA4miUAP5okADSa
+        NgAykzkAOqAxADmjNABRlR0ARZkoAFqCOgBDnT0AYoA6AHSXOgBAoDIAS6EwAFShMABfpDIAWKA3AGKh
+        LwB2pDQAfqo+ACCHVgA4okEAOqlBADqsRgA6rUgAGoZrAECTTQBvgkwAdJZBAHeQZABgjnoAgYw/AIyq
+        MgCDrD4Akaw/ALurLgDTrjcA8rQmAP67IgD+vi0A/8E2APbAPgD/wjsAg45JAKePSgCKrkAAhalKAJ60
+        SwCerlQAobJDAKS0SQC5t0QArrZXALGRewCWtmEAqqxwALy9eADStEkA7r1OAOu+WgDrv14AyoFqAMqC
+        bgDKh3QAzIt0AMmHfADPjHgAz5V2ANeefwDcp3cA3qV5AO3FTwD2xUkA/spSAM/IcwDpymUA6ctoAPLH
+        aQDrxHEA7dJ7AP7TdAACb44AFWqKABtsigADcY4AAG6SAARukAAAb5QAAnGRAAxzkAARdpQAHnuSACN+
+        kwCGpYwAxYOEAMyMggDTloIA2qKCAMC1kQDNwoQA1MmSAOTHggDqw5UA9tuZAOLUogAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP///wAAAAAAAAAiHx8hAAAAAAAAAAAAABpTjWRkdm0cAAAAAAAAh2xYPTlwUE9NYmuG
+        AAAAAIl1cyw/N29ST05LGQAAAAcGBQUBC0BVDQQEAwIKAAB9fX19fUE3XEZ9fX19egBmkH19DyoMCAhU
+        VhZ9gDEiJY+Af4WKFH19FTMOfYAoHmZefX0RGH2Eg30XEX2BWiBqJ319FICCjIuBfRR9gC8mADB9gH+A
+        QnJ4X319fX0yAAB9fX9/PDZ3dHFFfX19ewAAAEMrYC46VzVbUUxhXQAAAACIRy47WUlAP0hxbmkAAAAA
+        AAAbjkooLDREJQAAAAAAAAAAAABqHR1nAAAAAAAA/D8AAPAPAADAAwAAwAMAAIABAACAAQAAAAAAAAAA
+        AAAAAAAAAAAAAIABAACAAQAAwAMAAMADAADwDwAA/D8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChMSsCoDErHKAwK0ifLytqny8rgZ4uK4yeLiuMnS0qgZ0t
+        KmqdLCpInCwqHJwrKgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiNCsIojMqT6EyKp+hMiveoDEq/aAxKv6gMCv/ny8q/p4v
+        Kv6eLiv/ni4q/p0tKv6dLCr/nCwp/ZwrKd6cKyqfmyopT5sqKggAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApDYrHaM2K42jNCvoozQr/qIzKv6hMiv/pjw1/rVf
+        Wf7Cenb/youG/s6Tjv7Nk47/yYqG/sB4dv6zW1n/ojc1/pwsKf6cKyr/nCsp/pwqKuibKimNmykpHQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKU4KxGlNyuQpDYr96Y7MP+wUkn/wHZv/9Sh
+        mv/t0cP//vHV///twv//6LD//eOk//3gnf/84Jz//eKh//7nrf//7L///vDS/+zQwf/OlJD/q0xK/5ws
+        Kv+cKir/myoq95sqKpCbKioRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApjkrUKY4K+WmOi7+slRK/sGM
+        fP6LoVz/TpMc/s3Ulv742pT/7sdu/uW6Wf7fsUz/2qtE/tioP/7Ypz7/2qk//t6uRf7ktk//7MJg/vbR
+        ef7+4pz//ezF/ubGuf+5aGf+nCwr/psqKv+aKSnlmikpUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKc6KwSnOiyRpjkr/aY5
+        LP+8amD+rLSD/kSNEP43iwv/NYkW/kJ8Dv6Znkv/2rBX/t6qOv7krDH/6a8v/uyxLv7tsSz/6q4p/uWq
+        J/7fpSb/2qIo/tqkLv7frD3/7L9X/vvXgf/+6rj+58i7/q9UU/+bKin+mikp/ZspKpGaKCkEAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqDwsEag7
+        LLmoOyz/qT4v/9ObkP/979T/mbhh/zWFD/81lT7/NZQ9/zWNKf82gAT/iqc5/+3Oaf//xUL//8E4///B
+        Nv//wDP//78w//+/Lf//vir//Lsn//KzJP/nqiL/3aMm/92nMv/rvFD/+9iD//3rxP/Nk4//nS8u/5sq
+        Kv+bKSq5mykqEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AACpPSwRqT0ryKg8K/6vSjv/5sS3/v/quf/21Ib+ra1f/jJ3Bv43n0L/OqpH/jqtSP45ozX/N4sJ/p6y
+        R/7/zl3//sRB/v7CPP7/wjn//sE2/v7AM/7/vy///r4s/v69KP7/vSX/+7ki/u6vIf/hpiX+4aw2/vLH
+        YP/+5aj+47+z/qU+Pv+bKyv+mykqyJsqKxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAKo+KwSqPiy8qT0r/rBOPv7v1sb//uWr/vDJc//itVb+175u/jmEAv46qT//Oq1I/jqt
+        SP47rkn/OZwp/kGKCP60u1b//tFm/v7GRv7/wz///sI8/v7BOP7/wTX//sAx/v6/Lf7/vin//r0l/v+8
+        Iv/8uSD+7a4g/uKpK//su07+/eOi/tbOtP+0YmH+nS4u/psqKrybKioEAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKs/LJarPyz/sU08/+/Xx//+46f/7cVu/+S2Vf/0wlT//tV4/26f
+        K/83jg//O61I/zuuSf87rkn/Oq1I/zmgMP84iAT/mLBG//zUcv//ylD//8VC///DPv//wjr//8E2///A
+        Mv//vy7//74p//+9Jf//vCH//7sf//e2H//mqyf/6cJr/0uOEf+HpFv/slxb/5wsLP+bKiqWAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq0ArVatAK/2tRDH/6Me5/v7mrv7ux3L/6Lta/vnI
+        Wv/+zFv+/tBm/t7Pev43hwL/OqtE/jqtSP47rkn/Oq1I/jqtSP46pTr/N4oI/mydKP7s0XP//spR/v7G
+        RP7/xED//sI7/v7BN/7/wDL//r8u/v++Kf/+vCX+/rsh/v+7Hf/8uR7+67tN/lWJGP83hgH+mqVt/qtN
+        TP+bKir9mysrVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACINCIVrEEs56xBLP/Xo5b//+u9//PO
+        fP/rvl///Mtf///OYf//zmP//9Bn//zbjv8+iQb/OqY6/zuuSf87rkn/O65J/zuuSf87rkn/OqpD/zeP
+        Ef9zoS3//tR0///IS///x0X//8RB///CPP//wTf//8Ay//+/Lf//vSj//7wk//+7IP//ux7/+8xW/0GB
+        CP82jR3/PYoI/6+be/+jPDz/mikp54YkJBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeJBiXNhUO/iUO
+        Cv41My//Ni8h/jIpFv40KhT/NiwV/jYsFf82LBb+Ni0Z/jMuH/4MHQD/DCML/hEyFf4gXyj/NqFD/jqt
+        SP47rkn/Oq1I/jqpQf43iQX/xcNl/v7OXv7+x0v/zJ84/mxTG/4/MA7/NikL/jYoCv82KAn+NigI/jYo
+        B/82KAb+NisS/g4dAf8LHwr+Cx0C/hkkEf8qFRT+PBAQ/ockJJcAAAAAAAAAAAAAAAAAAAAAAAAAAIEz
+        IyJBGRD5AAAA/gAAAP4AAAD/AAAA/gAAAP4AAAD/AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD/AAAA/gAA
+        AP4AAAD/ETMV/jinRv47rkn/Oq1I/jqtSP45miX/Ypoi/v3We/7JoEH/GBIH/gAAAP4AAAD/AAAA/gAA
+        AP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/pEnJ/mQKCgiAAAAAAAA
+        AAAAAAAAAAAAAKFDLpU/IRv/ABoi/gAeKP4AHij/AB4o/gAeKP4AHij/AB4o/gAeKP8AHij+AB4o/gAe
+        KP4AHij/AB0n/gAWHf4ABQb/CBkK/jejRP47rkn/Oq1I/jqtSP46qkH/N4cC/tXLcv6vjkL/BgUC/gAH
+        Cv4AGCD/AB0n/gAeKP8AHij+AB4o/gAeKP8AHij+AB4o/gAeKP8AHij+AB4o/gAeKP8AHSf+ABYd/owv
+        Mf+YLCyVAAAAAAAAAAAAAAAArEYuD69GLfAFa47/AG6T/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG6T/wBtkv8AZIT/F3JZ/zmrSf87rkn/OqxG/zmiNP84lBn/N4cC/77C
+        Zv/pw2P/MGFe/wBniv8AbpL/AG6T/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8AbpP/AG2S/z1WbP+bKyrwmysqEAAAAAAAAAAAsEYsXLBGLP4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBu
+        k/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/B3eJ/jepTf44mSL/N4kF/kWN
+        Df6Mrkn/vcNs/vvYhv7RvWz/DnSQ/gBuk/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBv
+        lP8AbpP+AG6T/gBvlP8AbpP+AG6T/j9gd/+cLCv+nCsqXAAAAAAAAAAAsEcsqrBHLP4Eb5L/AG+U/gBu
+        k/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBuk/4Ab5T/AG6T/gBvk/4Ec47/IZNp/jij
+        P/4yeQD/qLFp/t3HjP7kxH7/5MBv/ui/ZP7wyGb/c5l8/glykf4Ab5P/AG6T/gBvlP8AbpP+AG6T/gBv
+        lP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/kVsgv+hNjT+nCwqqgAAAACxSC0FsUgt6bFH
+        Lf/a0sn/vcSf/5+ug/8GcZL/AG+U/wBvlP8Ab5T/AG+U/wBvlP8HaYj/K3tT/yGGTP8nmGL/KZtf/y6g
+        WP82qU7/OKE2/xg/Bv8DBgD/CQgG/wkIBf8JCAT/CQgE/xMPCP+zkkn//c1i/+fDYP/Btmn/m7B8/yV+
+        OP8ijFj/Em5h/wBpi/8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wZ2i/8omF//Kogz/4KlZv+oRUL/nCwq6Zws
+        KgWxSC0osUgs/rlZQP7+9N///N2X/ubKfP4JcpH/AG6T/gBuk/4Ab5T/AG6T/gBvlP8JY33+Pn4f/jiX
+        H/46rUf/OqtD/jqnPv44mSX/JFkC/gIJBf4ADxP/AA8U/gAPFP4ADxT/AA8U/gAOE/4nIxT/27JW/v7N
+        Xf7/03H/h6o8/jiQE/86rUj+H24//gBlhv8AbpP+AG6T/gBvlP8AbpP+AG6T/gl5h/86rEn+OJsp/mOg
+        N/+2Y2D+nSwq/pwsKiiySS1Wskks/sd6Zv7+8ND/+9qP/ufLfP4JcpH/AG6T/gBuk/4Ab5T/AG6T/gBv
+        lP8DYHb+LHQM/jeJBv43iAP/N4cB/jaGAP47dg7/ChQJ/gBEWv4AbJD/AGyQ/gBskP4AbJD/AGyQ/gBr
+        jv4AOUz/UkQj/vLEXf721oH/QosI/jmjNf86rUj+H24//gBlhv8AbpP+AG6T/gBvlP8AbpP+AG6T/gl5
+        h/86rUn+OaM3/j6KCP/Fh4P+ni8s/p0tKlazSi15s0ot/9KUgv/+7MT//NmK/+jMff8JcpL/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8DYHb/V4s5/8DMjP/W16L/3dqo/+vatv9BPjb/ADdJ/wBskP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Aao3/Ay47/4hvN//u04D/OYcC/zqkOP86rUj/H24//wBlhv8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wl5iP86rUn/OqpD/zeGAf/Alof/oDEv/50tKnmzSi2Qs0os/tmkk/7+6r3//dmJ/ujM
+        fv4JcpL/AG6T/gBuk/4Ab5T/AG6T/gBvlP8IYnz+v7+f/v3kt/7+5Lb/+N+y/ndrVf4CKzn/AGqO/gBu
+        k/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5P/AGWH/g8qLv68n17/i6tA/jiQE/86rUj+H24//gBl
+        hv8AbpP+AG6T/gBvlP8AbpP+AG6T/gl5h/86rUn+Oq1H/jeIA/+6nYX+oDQx/p4tKpCzSy2cs0ss/t2t
+        nf7+6bn//dqL/ujRjv4JcpP/AG6T/gBuk/4Ab5T/AG6T/gBvlP8NZYD+y8Kk/v3mvP7947f/q5l7/gol
+        Lf4AZYf/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBggP4uOCz/wrZn/kOM
+        Cv84lRv+H208/gBlhv8AbpP+AG6T/gBvlP8AbpP+AG6T/ghzff83jA3+OJUd/jeHAv+4oYf+oTUx/p4u
+        K5u0TC2dtEst/92unf/+6rz/+uGh/4yvXP8EcI//AG+U/wBvlP8Ab5T/AG+U/wBvlP8NZYH/fZ9h/8TP
+        lP/Ww6T/IDAx/wBffv8AbpP/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8AVXH/Wlc5/9rHb/9ZlRr/HV4i/wBlhv8Ab5T/AG+U/wBvlP8Ab5T/AG+U/yB7if+4t0X/iak2/2uh
+        M//PrJ//oDMu/54uK520TC2StEwt/tqmlf787sv/ha1K/jKEDP4Cb43/AG6T/gBuk/4Ab5T/AG6T/gBv
+        lP8FYXn+LXUN/meaN/5HTkn/AFZz/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG+T/jiHk/4rgJL/AG6T/gBu
+        k/4Ab5T/AG6T/gBuk/4AbpP/A01k/pF8QP/CwV/+H1oa/gBlhv8AbpP+AG6T/gBvlP8AbpP+AG6T/ih9
+        h//3y1X++9Vy/v7ptv/UoJv+nzAr/p4vKpK1TS18tU0u/tiikv6pxoH/N4YA/jKEDP4Cb43/AG6T/gBu
+        k/4Ab5T/AG6T/gBvlP8DYHf+K3kY/iNLEP4CTGT/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5P/LIGU/trL
+        k/7Jw43/HHqS/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG2R/hJKVv+cmlD+KV8h/gBlhv8AbpP+AG6T/gBv
+        lP8AbpP+AG6T/id+jf9nmR/+Ypoh/luZI//Snpr+oDIs/p8vKn21TS1btk8w/9Scif84hgH/N4gE/zKF
+        D/8Cb47/AG+U/wBvlP8Ab5T/AG+U/wBvlP8DYnr/HWIz/wFDU/8AbpL/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8YeZT/xsSW//7akf/92Ir/r7aI/w50kv8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBrj/8LRz7/GE4c/wBl
+        hv8Ab5T/AG+U/wBvlP8Ab5T/AG+U/w10f/82hwT/OJAS/zmHA//JjYj/oTIs/6AwK1u1Ti4utk8v/s+J
+        dP48iQb/OZwp/jWjRv4CcJD/AG6T/gBuk/4Ab5T/AG6T/gBvlP8AXHn+AkFP/gBskP4Ab5T/AG6T/gBu
+        k/4Ab5T/AG6T/gtzk/6quJf//NqU/v3Zjv7+14f//NWA/o6nhP4EcJL/AG6T/gBuk/4Ab5T/AG6T/gBv
+        lP8AZ4r+AztD/gBlh/8AbpP+AG6T/gBvlP8AbpP+AG6T/ghzfv85ozf+OZ4s/lycLv+7bGf+oTIr/qAx
+        Ky62Ti4Itk8u7cNuU/5snDv/OJkj/jWoT/4CcJD/AG6T/gBuk/4Ab5T/AG6T/gBvlP8Aa4/+AGyQ/gBu
+        k/4Ab5T/AG6T/gBuk/4Ab5T/BXGU/oysmv772pb//dqQ/v3Yiv7+14T//dV9/vfQdv5rloH/AW6T/gBu
+        k/4Ab5T/AG6T/gBvlP8AbpP+AGqN/gBtkf8AbpP+AG6T/gBvlP8AbpP+AG6T/gl5h/86rUn+OJMX/oSp
+        W/+uTkf+oTIr7aEyKwgAAAAAtk8us71fQf+Wm1n/N4wM/zWoTv8CcJD/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8AbpL/LoNr/+3erP/94af//tuR//7Xhv/+1oD//tR5//7S
+        cv/vy23/R4aB/wBuk/8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wl5
+        h/86q0X/N4cD/6ugd/+nPjb/ojMrswAAAAAAAAAAtk8uZrhTM/7BkXD/OogE/jWfP/4CcJD/AG6T/gBu
+        k/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBuk/4Ab5T/AG6T/gBuk/4Qc2X/NYUK/j6JB/5zpDj/79yb/v3X
+        hf7+1Hv//dN1/v3Rbv7+z2f/3cBl/iZ3g/4AbpP/AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBv
+        lP8AbpP+AG6T/ghzff83jA7+S5IZ/sOEe/+jNi3+ojQrZgAAAAAAAAAAtlAvFrZQLvWtZE3/OFws/xNN
+        LP8AbY//AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wp1gP8znUD/OZwp/zmf
+        Lf83hgH/vMVz//7XhP/+03b//tJw//7Qav//zmP//81c/8KwXv8Pbof/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wZpgv8YSRr/UXBD/6tRSf+iNCv1ojUrFgAAAAAAAAAAAAAAAKtS
+        NKUaYXn/AGyQ/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBuk/4Ab5T/BG+H/i+e
+        Vf46rUn/Oqg//jeIBf6HrUf/99yW/v3UeP7+0nD//tBr/v7PZf7/zV7//stY/v7KUv6bm1r/BWyM/gBv
+        lP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AGqN/kxVY/+dOC+lAAAAAAAA
+        AAAAAAAAAAAAAGZcWTAAb5T/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBu
+        k/4Baof/J45R/jqsRv46rEX/N48R/n+oP/793ZT//dR5/v3UeP7+1n7//tR1/v7OYv7/zFn//spT/v7J
+        Tf76xUf/a4FZ/gFsj/8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/j1Z
+        bP1yR0owAAAAAAAAAAAAAAAAAAAAAAAAAAABbpLxAG6T/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wFskP8cbjj/OaM3/zeKCP83iAT/O4gE/+PUiv/+1Hf//tV6/+fUhv+KrEP/sLxe//7V
+        eP//y1X//8lO///ISf//xUP/77o9/z1rX/8AbZL/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG6T/yhgebUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3ZHMsdllO8GViYf5Wgn//GndJ/huD
+        YP4cimz/G4Nf/ip/WP95oI7+eZuA/pKlh/5Njxf/N4oI/keODv45hwL/kLBM/v3aiP7+0nD/6NSE/k6R
+        FP44kRT/OIcD/s/IbP7/0Gb//spS/v7GRP7/wz7//sI5/tqqNP9+j1f+eZFc/nmRWv95kFj+eZBZ/nmS
+        X/95mXP+eaae/mR6iP9dTFT+dEdJ8EhWZSkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApVM3abhT
+        MP7Hel//eZ1F/jeMC/46qkL/OaI0/keNDf/12Yz+/tN0/v7Xgf6zwGj/R40O/j2JBf43jg//VpQa/v3b
+        jv7/1n3/k7BJ/jiPEv46rUj/OJgh/kaNDP6cskj/4sxs/v7NWv7/xkT//sE2/v+/MP/+viv+/r0m/v+8
+        Iv/+vCH+/r4p/v/IRf/+3In+7tK//qtENv+mOSv+mT0zaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAt1EvArhRLq26VjT/x4Vp/2aZNP83jQ3/OqlA/zeOD/9pnSn/x8Zt//vckP9woC//N4gF/zme
+        LP84lRz/O4gD/2ecJ//83ZH/WJUb/ziUGv86rEb/Oq1I/zmfLf84kBP/Q4sJ/4+rPP/Vxl7//8tS//+/
+        Lf//vSf//7wj//+8I///vyv//8hG///agv/14Mj/slNF/6g7LP+nOiytpjksAgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAALhSLw+4US7Nu1k4/smLb/5omjb/N4wL/jmgMP83jQz+N4cC/mCZ
+        If68w2n/OIcD/jmiNP45mST/QosJ/oysQP7+2of/g6g6/jeHAv46qUH/Oq1I/jqtSP46rUj/OaI0/jiS
+        Fv45iAP/x79U/v/DOP/+vSX+/r0n/v/BMf/+y07+/tyJ/vbhyP+3XE7+qDwr/qg7LM2nOisPAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4UjAYuFEu1rtZN/7KhWv/eZ5G/jeG
+        AP87iAX+N4YA/j+KB/7o1IP/YJkh/jeNDf43iAT/srxZ/v7Sa/7+1Xb/X5gf/jmcKf47rkn/Oq1I/jqt
+        SP47rkn/Oq1I/jqtSP44mCH/eqIr/v/LT//+vy7+/sU8/v/QXv/+4pz+79TA/rVWRv+pPSv+qT0r1qg8
+        LBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuFIwGLhR
+        Ls66VjT/x3le/7qwhf/X4LX/UZMZ/zeGAP/j1IT/daMy/2mdJ//EwmH//NNv///LVf/XyWn/OIcC/zqp
+        Qf87rkn/O65J/zuuSf87rkn/O65J/zuuSf86pDb/OogE/8vEXf//z13//9h6///rvP/fsqP/r0k2/6s/
+        LP+qPizOqT0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAALhSLw+4US6tuFIv/rtZOf/NmoD+dJ9D/jqIBP7c15P//t6S/v7Zgf7+1nn/+dR2/v3V
+        dv5xnyr/OJQb/jqtSP47rkn/Oq1I/jqtSP47rkn/Oq1I/jqtSP46rUf/OJMY/n6pP//+6rn+89zG/sZ8
+        bP+sQSv+q0Ar/qs/LK2qPisPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4US4Ct1EubbdQLvO6WDf+xnRa/sujhv7149L//u3E/v7m
+        rP6guVz/RYwM/lGRFP43igj/OqpC/jqtSP47rkn/Oq1I/jqtSP46qkL/OaM1/jiZIv43jAv/P4oK/oqr
+        Xv/VnZD+sUo1/q1CLP+sQSzzrEArbatALAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALhRLyS4US6vt1Au/bhT
+        Mv+5VDP/y4Fp/+jFtv9/q1X/PIkG/zeGAP83iQX/N40O/ziPEf84jxH/N40N/zeKB/83hgH/QowO/26g
+        QP+ho2r/xpN8/71mUv+xSzT/rkMt/a1DLK+sQiwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAt1AuMbZPLau3Ty74tk8t/rlXOP7FcVf/0I96/rqWcP6zn3P/qKFs/qGhaP6hoWj/qKFt/rSf
+        dP6+l3b/zYp4/r9pU/63Vj7/sUox/rBFLfivRS2rrkUuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2Ty4dtk8ucrZPLr+2Ti70tlAw/rdTNP64VDb/uVc5/rlY
+        O/64Vzv/t1U5/rZRNf60TjP/skou/rFILfSxSC2/sEcucrBHLh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2Ty8Ntk8vO7VO
+        Lmi1TS6LtU0uobRMLay0TC2ss0stobNLLYuzSi1oskouO7FJLg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AD//8AAP/+
+        AAB//wAA//gAAB//AAD/4AAAB/8AAP/AAAAD/wAA/wAAAAD/AAD+AAAAAH8AAPwAAAAAPwAA+AAAAAAf
+        AAD4AAAAAB8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAACAAAAAAAEAAIAA
+        AAAAAQAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAEAAIAA
+        AAAAAQAAgAAAAAABAADAAAAAAAMAAMAAAAAAAwAA4AAAAAAHAADgAAAAAAcAAPAAAAAADwAA8AAAAAAP
+        AAD4AAAAAB8AAPwAAAAAPwAA/gAAAAB/AAD/AAAAAP8AAP+AAAAB/wAA/+AAAAf/AAD/+AAAH/8AAP/+
+        AAB//wAA///AA///AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChMisOoDErSqAwK36fLyugni8rsZ4u
+        KrGdLSqgnSwqfpwrKkqcKyoOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQ2KwGjNStLojQrsKIzK/mhMyv/rEpE/7hk
+        X/++cWz/vXBs/7ZiX/+pRkP/nSwq/5wrKvmbKiqwmyoqS5sqKgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClOCs3pTgsyqpEOf+wdV//yKmP//be
+        u//85Kz/9deR//HQg//xz4L/9NWN//vipv/23LX/2KaX/7NdWv+bKir/myoqypsqKjcAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnOiwCpzosgKY5LPy/c2n/ephH/zyO
+        E/9XjiL/w7Fg/9urQv/hqzT/5aww/+WsLf/iqSz/3KUu/9+sO//rv1r/+duT/+jEqf+yWlj/myoq/Jsp
+        KoCbKSoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqTwsB6g8LK2pPi//1qGR//rn
+        u/87gw//NZY//zeZOP9EjBP/ubtQ///FQ///wTj//8A0//+/L//+viv/+Lgm/+2uI//gpyr/6rpM//re
+        mv/Smo7/nC0t/5spKq2bKSoHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKo+LAKqPiyvrEQ0/+fB
+        rP/42JH/5bxm/2CQIv86qkT/O65J/zqrQ/9Qkxb/3cdg///HSP//wz3//8E4///AMv//vy3//70n//67
+        Iv/xsSH/5Kww//bPdv/avKb/p0ZF/5sqKq+bKSoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq0AshKxC
+        L//nwq3/9tWL/+i7Wf/6yVv/tbxY/ziXH/87rkn/O65J/zqnPf9FkhX/xMBZ///LVf//xEH//8I7///A
+        NP//vy7//70n//+8If/7uB7/6rEw/4ShN/+Fl1L/pT8//5sqKoQAAAAAAAAAAAAAAAAAAAAAAAAAAJs7
+        JzqsQSz82qeV//nbmP/twGD//cxf///OYf/41n//O5AT/zuuSf87rkn/O65J/zqrRP84khb/uLxV///K
+        UP//xUP//8I8///ANP//vy3//70m//+7IP/+vij/f5or/zeJDf+aj2H/nzIy/JEnJzsAAAAAAAAAAAAA
+        AACDMyEBRxsSzhoKB/8kIR3/IhwQ/yMcDf8kHQ7/JB0P/yIfE/8IFAH/Ch8N/xpPIf84pkX/O65J/zqs
+        Rf9Kkxf/99Ft/96vQv9YRBf/KB4J/yQbB/8kGwX/JBoF/yQbBf8SFwX/BxQF/w4WB/8eDAz/ax0dzpAn
+        JwEAAAAAAAAAAJ9CLVAqGRb/ABQa/wAUGv8AFBr/ABQa/wAUGv8AFBr/ABQa/wAUGv8AEBX/AAMD/yp9
+        NP87rkn/O65J/zmbKP+tuVP/emIs/wADBP8AERf/ABQa/wAUGv8AFBr/ABQa/wAUGv8AFBr/ABQa/wAS
+        Gf9fIiT/mCsrUAAAAAAAAAAArkYuugJtkf8AbpP/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBu
+        k/8BZYH/MJ9S/zqoP/85myf/PY8S/6i4Vv+up2b/AWWG/wBuk/8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG6T/ylfev+bKyq6AAAAALBHLROwRy37Am+T/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+T/wd2iv8wn1D/SIkW/6ayYP/lyoL/7shx/7+2bv8Udo//AG+T/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5P/LWuG/54wL/ucKyoTsUgtU7JJLv/h28T/vbyG/wVwkv8Ab5T/AG+U/wBv
+        lP8eb3v/KIY0/y6gWf8xpFT/OKVA/xxJC/8DBAH/BgUD/wYFA/8KCAT/sZBH//PJX//RwXP/Qow2/yiS
+        VP8DYXj/AG+U/wBvlP8Ab5T/BHSN/y6dUv9imkT/pkE+/5wsKlOySS2HvmVN//7rwf/tz3//BnGS/wBv
+        lP8Ab5T/AG+U/w5iWP83jAz/OJMZ/zeQEv8vZgv/AiYt/wBSbf8AU27/AFNu/wBRbP8ZLy7/3rNV/8nD
+        Yf84lh7/N6NF/wRdbv8Ab5T/AG+U/wBvlP8GdYz/OqxJ/0GRGP+2ZGH/nSwqh7NKLanJfmj//uay/+/P
+        fv8GcZL/AG+U/wBvlP8Ab5T/FmZg/8nPkf/k3Kn/28ul/x4yNv8AZon/AG+U/wBvlP8Ab5T/AG+U/wBj
+        hP9FSDH/urpc/ziXH/83o0X/BF1u/wBvlP8Ab5T/AG+U/wZ1jP86rUn/OJIW/7V3a/+dLSqqs0stu86L
+        dv/+5az/79KH/wZxk/8Ab5T/AG+U/wBvlP88eYX//eW6//fesv9JTkX/AGCA/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBZd/9/dEv/Xpkh/zaYMP8EXW7/AG+U/wBvlP8Ab5T/BnOH/ziZJP83jxH/sn9s/54u
+        K7u0TC28z4x3//3ouP+Mr1X/Am+Q/wBvlP8Ab5T/AG+U/yZucf+TtWL/hH9u/wBWcv8AbpP/AG+U/wBv
+        lP8CcJP/AW+T/wBvlP8Ab5T/AG+U/wdSaf+tm1b/XJEf/wRba/8Ab5T/AG+U/wBvlP8Xd4z/yLtG/6C4
+        Vv/Bgnr/ni8rvLRNLavNhnD/nb1v/zSECP8Bb4//AG+U/wBvlP8Ab5T/DWRb/zVtEv8IUGf/AG6T/wBv
+        lP8Ab5T/AW+U/4mpk/93oJD/AG+T/wBvlP8Ab5T/AG6T/x9XXv+MmkL/BFlo/wBvlP8Ab5T/AG+U/xp5
+        jv+NqDL/mrZU/8J6dv+fLyustU0uisqAaf83iQb/NI0X/wFvkP8Ab5T/AG+U/wBvlP8JXmP/B05V/wBu
+        k/8Ab5T/AG+U/wBvk/9lmpX/+tmS//fViP9Sj4z/AG+U/wBvlP8Ab5T/AG2R/w1OPv8DWGr/AG+U/wBv
+        lP8Ab5T/B3KF/ziTGf8+jA3/umpl/6AxK4q2Ti5YwWhN/1GTIf83qUv/AXCR/wBvlP8Ab5T/AG+U/wBi
+        g/8AbZH/AG+U/wBvlP8AbpP/RY2W//TXlv/+2Y3//taD/+3Nev8ygYr/AG6T/wBvlP8Ab5T/AGuO/wBk
+        hf8Ab5T/AG+U/wBvlP8GdIr/OqpD/2OcNv+rSUL/oTIrWLZPLhi6Vzj9fpNA/zaeOP8BcJH/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/whxev+Ssmb/69mW//7Yif/+1X3//tJz/9rBbf8WdYz/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wZ0if84mib/i5VV/6Q5Mf2hMysYAAAAALZQL8GUdE3/IGQk/wBu
+        kf8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8EcYv/L5E1/ziWHv9Xlh7//tuP//7Tdv/+0Wz//s5i/7iu
+        Y/8Hbo7/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/BG2H/yRgD/+hcFz/ozUrwQAAAAAAAAAAn1M6Wwto
+        hv8AbpP/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AW2O/ymXW/86rEb/PpEU/8bHdP/+1Xz//tFv//7P
+        Zf//zFz//spS/4uWXv8AbZH/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG6T/y9dc/+YOTJbAAAAAAAA
+        AABGYmsDAG6T+QBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBukv8ee0f/OZsn/ziQE/+etlX//tV6//TV
+        gf+yvFv/9NFz///LVP//yEv/+8NC/1Z7X/8AbpP/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/H2N/3WZL
+        UgMAAAAAAAAAAAAAAABYXmBMg1tO/meFav8khED/JpZg/zKFQf+lsof/sLOB/1eWIP9Ciwr/PYkG/+fS
+        gP/+1n3/Zp0o/ziWHv+Cpzb//dJt///ITP//wjz/7rc0/6ifSf+mn0j/pp9G/6aiT/+msoL/ioiK/3lF
+        Rf5gTlZKAAAAAAAAAAAAAAAAAAAAAAAAAAC3US+UwmtN/3CVOP85nCj/OJQb/6i4Vf/114T/daM0/zqT
+        GP84kBP/fqY3/9vNd/83jxH/Oq1H/zmbJ/9DkBL/pbNE/+zIV///wTP//70n//+8I///vy3//9Fj/+zJ
+        q/+rQjP/pjoslAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALhRLge4Ui+6wnFS/3OXO/84lBr/N4kG/0mO
+        D/+gtVH/OJYe/zqQE/+jtEz/6NF4/zmLCv86rEX/O65J/zqsRv85nSv/TJIV//rIS///vSf//8I2///U
+        bv/syqv/r0s7/6g8LLqnOiwHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALhRLgu4Ui+7wWpM/5mc
+        XP+KtFz/PIgE/8zJcv9Ukxf/qrZN///PYP+xuE7/OZwo/zuuSf87rkn/O65J/zuuSf84mCL/s7dG///M
+        VP//35P/37CZ/65GNP+qPiy7qTwsCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALhR
+        Lge4US6UuVUz/rqLZf90nUH/7+Gn///cjP/dy23/ycJa/1GUGP86q0T/O65J/zuuSf87rkn/Oq1H/zmg
+        L/9fmib/8te3/8Z6aP+sQSz+q0AslKo+LAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAC3US5KuFEv271dPv/OiHD/6siw/2ifN/83hgD/N48Q/ziZI/84mSP/OJYe/ziQ
+        E/9Ulyb/hZhM/7OGY/+zTjj/rUMs26xBLEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3UC4Et08uXrZPLsi4UjL+wmtQ/7+BYf+0iWH/q41e/6yM
+        Xv+0iGL/v39j/71kTf+0Tzb+sEYtyK9FLV6uQy0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZPLh62Ty5gtU4uk7VN
+        LrW0TC3GtEstxrNKLbWySi2TsUktYLFILR4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP/gB///AAD//gAAf/gAAB/wAAAP4AAAB+AAAAfAAAADgAAAAYAAAAGAAAABAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAABgAAAAcAAAAPgAAAH4AAAB/AA
+        AA/4AAAf/gAAf/8AAP//4Af/KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHKyMCoTIqO6AxK36fMCusny8rwp4uKsKdLSqsnCwpfpwr
+        KjuFJCQCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkzEmBKQ2
+        K2mnPjTctmBY/syMfv/dq5D/5LiV/+S4lP7cqY//yol8/qxOS/+cKyrcmyopaY4mJgQAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClOSslpjkrzLBrV/5ykT3+ZZs1/ta8af7hsET+4q04/uKs
+        NP7hrTj+5rZM/vHOff7mvJb+s11Z/psqKcyaKSklAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKk8
+        LDqqPy/t2KGM/s7Kh/81jCX/N549/kyVH//ixVT//8I7//7BNf7/vy7/+7oo/u+xJP/mrjL/8813/tOa
+        hv+dLy/tmykqOgAAAAAAAAAAAAAAAAAAAAAAAAAAqj8rJ6xCMO7jt5z/8Mp4/uvDZP9Glx//Oq1I/jqp
+        Qf9anCX/5MdZ//7FQ/7/wjn//sAx/v++Kf/+uyL/8bIi/u7DYP+XmWD/oTg47psqKicAAAAAAAAAAAAA
+        AACGMyIFrEErztumj/7zzn/+98dd/v7OY/6Ur0T+OqtE/jqtSP46q0X+RZgh/tfEWf7+xkX+/sI8/v7A
+        Mv7+vin+/rsg/vi+OP5BhxD+jIZP/p0vL86LJSUFAAAAAAAAAABjJhltFwgG/hsYFP8ZFAr/GxYK/hsW
+        C/8QEgj/BxUI/hpNIP86rEj/OqxH/2agLP7xw1n/VEEW/h0WBv8bFAT/GxQD/hsVBv8GDwP/CRAE/hkJ
+        Cf+NJiZsAAAAAJQ8JwNlRUHhAEVc/gBGXv8ARl7/AEZe/gBGXv8ARl7/AERa/gg9O/85qkj/OqpD/ziT
+        F/7Lt2D/DTU9/gBEW/8ARl7/AEZe/gBGXv8ARl7/AEZe/gBEWv9/NzzhkCcnBLBHLEFZWmD+AG+T/gBu
+        k/4AbpP+AG6T/gBuk/4AbpP+AG6T/gt7hf42mCz+gKNC/sS9aP7px2/+InuM/gBvk/4AbpP+AG6T/gBu
+        k/4AbpP+AG6T/gBuk/5wTFb+nCsqQbFILYXQmoX/z8aN/gRwk/8Ab5T/AG6T/h5xXf8vmEX/M6NO/jOP
+        K/8HFwj/BAwN/wQMDP47NR7/78Rd/ri5ZP8ukjv/DGps/gBvlP8Ab5T/A3OO/jGaQf+Re1D/nCwqhbJJ
+        LbPlu5//8tOE/gRwk/8Ab5T/AG6T/iJwTP+BrU7/jbBY/iJAJf8AY4P/AG2S/wBtkv4AX3//dGk8/piv
+        Q/86qD//D2li/gBvlP8Ab5T/BHSN/jqqQ/9+i0X/ni4ss7NLLcrsyar/89SI/gRwk/8Ab5T/AG6T/miS
+        kP/95Lj/iYJs/gBaeP8Ab5T/AG+U/wBuk/4Ab5T/A1hy/o6OTP87lyD/D2li/gBvlP8Ab5T/BHKL/jmf
+        Lv94k0T/nzEuyrRMLcvsy67+j7BV/gFvkf4AbpP+AG6T/i92Wv6Snm7+CFVt/gBuk/4AbpP+DnWT/gpz
+        k/4AbpP+AG6T/hdaaP6ipkr+D2BS/gBuk/4AbpP+EnWO/s3AUP7Dton+nzAsy7VNLrWjo2f/NIYI/gFv
+        kP8Ab5T/AG6T/hNnT/8JUlb/AG6T/gBvlP8GcZT/sruT/6SzjP4DcJP/AG6T/gBuk/8uZV3/EF5S/gBv
+        lP8Ab5T/DXSN/k6TFv+Mk1L/oDErtbZOLoiOh0L+N6A4/gFvkv4AbpP+AG6T/gBdev4AbpP+AG6T/gFv
+        lP6PrJf+/dmP/v3Wgv59n4P+AG6T/gBuk/4AbZH+AF56/gBuk/4AbpP+BHKL/jmgMf6SgE7+oTIriLZP
+        LkazeE//N5cn/gFvkv8Ab5T/AG6T/gBvlP8Ab5T/AG6T/h16W/+nu2X/+tmO//3Uev76z23/U4t//gBu
+        k/8Ab5T/AG6T/gBvlP8Ab5T/BHKL/jyUHP+uZlX/oTMrRqRJKwWKWkrmEmFf/gBukv8Ab5T/AG6T/gBv
+        lP8Ab5T/D3x8/jikPP9Llh7/7NOB//7ScP7+z2T/78RZ/ix5gP8Ab5T/AG6T/gBvlP8Ab5T/AW2P/hpk
+        X/+ORUHmnTIqBQAAAAAhaICIAG6T/gBuk/4AbpP+AG6T/gBuk/4HbXn+NJo2/jmTGP7Xy3X++NR8/s7F
+        Zf7+zmL+/slO/tWxSP4PbYX+AG6T/gBuk/4AbpP+AG6T/gBuk/5HVmZ4AAAAAAAAAAA4YnALjlhG1WyE
+        W/8qkUb/MYw+/rm6g/+ks2L/QIsK/laWHv/+14H/gKk8/zmXIP6stkr/98pX/v/DPP/Vrjn/vKdA/ryn
+        P/+8tGj/no6H/oRCP9VPU2AKAAAAAAAAAAAAAAAAuFEuL71hQfJ0kzn/OJkj/meeKf+itlL/OJQa/juQ
+        E/+7wGD/UpYc/zqsRv45ojT/UZsk/rW2Qv//vyz//r4o/v/MUv/ovpj/q0Ey8qc6LC8AAAAAAAAAAAAA
+        AAAAAAAAAAAAALhRL0G+YUHyjJNK/magNf6QrkT+Xpki/qq2S/71z2j+Q5kj/jqtSP46rUj+Oq1I/kqZ
+        Iv7yx07+/tZ0/t+sjf6tRDLyqTwrQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4US4vuFMx17CB
+        Vf+1uXz//uOh/re8Vf99pC//OqY7/zqtSP46rUf/OqY6/jqWHf+3t3r/xnll/qxBLNerPywvAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsk4sCbdQLne3UTDoyXth/pSNS/93kTr/bpg9/26Y
+        Pf54kT3/j4hG/rR1Vf+zTzjorkMtd6pBKwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAACtSysHtk8uTLZPL4+2UTK8t1I00rZRM9K0TTG8skkuj7BHLUyqRCsHAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AfwD4AB8A8AAPAOAABwDAAAMAgAABAIAAAQAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABAIAAAQDAAAMA4AAHAPAADwD4AB8A/gB/ACgA
+        AAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcSUeE58y
+        Km2jNzGxrU1I06xLSNOgMjCxmiopbm8eHhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApDgrbaJi
+        RfGDjkn/5MeC/+u/Xv/rvlr/68Rx/9ynd/+0XVXxmikpbQAAAAAAAAAAAAAAAAAAAAAAAAAAqj8umNee
+        f/+erlT/OKJB/2KhL//2xUn//8E2//29LP/ytCb/7r1O/8+Vdv+eMDGYAAAAAAAAAAAAAAAApT4qb9qi
+        gv/yx2n/6cpl/zqgMf86rEb/X6Qy/+3FT///wjv//78u//67Iv+7qy7/fntA/5krK28AAAAAbSsdFCMU
+        EvIRGRj/ERgU/xEZFv8EFQ//H10n/zqtSP+KrkD/bFYi/xMXEP8SFxD/DRYQ/wUUEP86FxnydCAgFK1F
+        LHIBbpP/AG+U/wBvlP8Ab5T/AG6T/xqGa/9YoDf/rrZX/2COev8AbpP/AG+U/wBvlP8Ab5T/FWqK/5ws
+        K3K1UDW24tSi/wJvk/8Ab5T/I3lF/zSaNv8hXiH/Ais4/wQsOP+nj0r/halK/xl9YP8Ab5T/AnKQ/0Od
+        Pf+lPz22v2dO2Pbbmf8DcJP/AG+U/4aljP/AtZH/B1p0/wBvlP8Ab5T/EV1w/3SXOv8dfVT/AG+U/wNx
+        jv84miX/qFRL2MFrUNmWtmH/AW+R/wBvlP8/fVD/I2V3/wBuk/8jfpP/HnuS/wBvlP81bGz/PHhN/wBv
+        lP8Mc5D/pLRJ/7BWUdm9YUS4PZUi/wBvkv8Ab5T/BF9z/wBuk/8RdpT/1MmS/83ChP8Mc5H/AG6T/wRd
+        b/8Ab5T/A3GO/0WZKP+pRT+4tlEwdVqCOv8Ab5L/AG+U/wBvlP8Bb5H/QJNN/8/Ic//+03T/qqxw/wFu
+        kv8Ab5T/AG+U/wJvjv9igDr/ojUsdWhCNRcDbZD9AG+U/wBvlP8AbpP/IIdW/1ShMP/t0nv/6cto//7K
+        U/93kGT/AG6T/wBvlP8Ab5T/E2eG9nQyLhcAAAAAj1dEd2+CTP8ykzn/vL14/1KWHf92pDT/nrRL/0uh
+        MP+5t0T/9sA+/9OuN//StEn/sZF7/4dCPXcAAAAAAAAAAGYtGQG6WTiggYw//1GVHf9+qj7/obJD/4Os
+        Pv86rUj/OqlB/4yqMv//y1H/3qV5/6pAL6BnJBsBAAAAAAAAAAAAAAAAaC4aAbhSL3epdkX26sOV/5Gs
+        P/8/miT/OaM0/0CgMv90lkH/xnhh9qxALHdpJhsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkT8kGLdQ
+        L3m7YkO8smxG3rFrRt64XUO8sUkveZA4JRgAAAAAAAAAAAAAAAAAAAAA8A8AAOAHAADAAwAAgAEAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA8A8AAA==
+</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,158 @@
+namespace Maestro.AddIn.Rest.UI
+{
+    partial class RestExplorer
+    {
+        /// <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 Component 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(RestExplorer));
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnConnect = new System.Windows.Forms.ToolStripButton();
+            this.btnRefresh = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+            this.btnNew = new System.Windows.Forms.ToolStripButton();
+            this.btnAddFile = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.btnEdit = new System.Windows.Forms.ToolStripButton();
+            this.btnDelete = new System.Windows.Forms.ToolStripButton();
+            this.trvRestExplorer = new System.Windows.Forms.TreeView();
+            this.imgIcons = new System.Windows.Forms.ImageList(this.components);
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnConnect,
+            this.btnRefresh,
+            this.toolStripSeparator2,
+            this.btnNew,
+            this.btnAddFile,
+            this.toolStripSeparator1,
+            this.btnEdit,
+            this.btnDelete});
+            resources.ApplyResources(this.toolStrip1, "toolStrip1");
+            this.toolStrip1.Name = "toolStrip1";
+            // 
+            // btnConnect
+            // 
+            this.btnConnect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnConnect, "btnConnect");
+            this.btnConnect.Name = "btnConnect";
+            this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
+            // 
+            // btnRefresh
+            // 
+            this.btnRefresh.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnRefresh, "btnRefresh");
+            this.btnRefresh.Name = "btnRefresh";
+            this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);
+            // 
+            // toolStripSeparator2
+            // 
+            this.toolStripSeparator2.Name = "toolStripSeparator2";
+            resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
+            // 
+            // btnNew
+            // 
+            this.btnNew.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnNew, "btnNew");
+            this.btnNew.Name = "btnNew";
+            this.btnNew.Click += new System.EventHandler(this.btnNew_Click);
+            // 
+            // btnAddFile
+            // 
+            this.btnAddFile.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnAddFile, "btnAddFile");
+            this.btnAddFile.Name = "btnAddFile";
+            this.btnAddFile.Click += new System.EventHandler(this.btnAddFile_Click);
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
+            // 
+            // btnEdit
+            // 
+            this.btnEdit.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnEdit, "btnEdit");
+            this.btnEdit.Name = "btnEdit";
+            this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click);
+            // 
+            // btnDelete
+            // 
+            this.btnDelete.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnDelete, "btnDelete");
+            this.btnDelete.Name = "btnDelete";
+            this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
+            // 
+            // trvRestExplorer
+            // 
+            resources.ApplyResources(this.trvRestExplorer, "trvRestExplorer");
+            this.trvRestExplorer.ImageList = this.imgIcons;
+            this.trvRestExplorer.Name = "trvRestExplorer";
+            this.trvRestExplorer.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.trvRestExplorer_AfterExpand);
+            this.trvRestExplorer.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.trvRestExplorer_AfterSelect);
+            // 
+            // imgIcons
+            // 
+            this.imgIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgIcons.ImageStream")));
+            this.imgIcons.TransparentColor = System.Drawing.Color.Transparent;
+            this.imgIcons.Images.SetKeyName(0, "folder-horizontal.png");
+            this.imgIcons.Images.SetKeyName(1, "document-share.png");
+            this.imgIcons.Images.SetKeyName(2, "document-sub.png");
+            this.imgIcons.Images.SetKeyName(3, "server.png");
+            // 
+            // RestExplorer
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.trvRestExplorer);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "RestExplorer";
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.TreeView trvRestExplorer;
+        private System.Windows.Forms.ToolStripButton btnNew;
+        private System.Windows.Forms.ToolStripButton btnEdit;
+        private System.Windows.Forms.ToolStripButton btnAddFile;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripButton btnDelete;
+        private System.Windows.Forms.ImageList imgIcons;
+        private System.Windows.Forms.ToolStripButton btnConnect;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+        private System.Windows.Forms.ToolStripButton btnRefresh;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,241 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Maestro.Shared.UI;
+using RestSharp;
+using Maestro.AddIn.Rest.Model;
+using OSGeo.MapGuide.MaestroAPI;
+using Maestro.Base.Services;
+
+namespace Maestro.AddIn.Rest.UI
+{
+    internal partial class RestExplorer : SingletonViewContent
+    {
+        private IServerConnection _conn;
+        private RestClient _client;
+
+        public RestExplorer()
+        {
+            InitializeComponent();
+            this.Title = this.Description = Maestro.AddIn.Rest.Strings.RestExplorer;
+        }
+
+        public override ViewRegion DefaultRegion
+        {
+            get
+            {
+                return ViewRegion.Right;
+            }
+        }
+
+        public override bool AllowUserClose
+        {
+            get
+            {
+                return false;
+            }
+        }
+
+        private bool IsConnected
+        {
+            get { return _client != null; }
+        }
+
+        private void btnConnect_Click(object sender, EventArgs e)
+        {
+            var diag = new RestLoginDialog();
+            if (diag.ShowDialog() == DialogResult.OK)
+            {
+                _client = diag.GetClient();
+                DoRefresh();
+            }
+        }
+
+        private void DoRefresh()
+        {
+            _client.ExecuteGetRequestAsync<DataConfigurationResponse>("data/configs.json", (resp, ex) =>
+            {
+                this.UIThreadInvoke(() =>
+                {
+                    if (ex != null)
+                    {
+                        ErrorDialog.Show(ex);
+                        return;
+                    }
+                    var connMgr = ServiceRegistry.GetService<ServerConnectionManager>();
+                    foreach (var name in connMgr.GetConnectionNames())
+                    {
+                        var conn = connMgr.GetConnection(name);
+                        var param = conn.CloneParameters;
+                        if (resp.DataConfigurationList.MapAgentUrl.IndexOf(param["Url"] ?? Guid.NewGuid().ToString()) >= 0)
+                        {
+                            _conn = conn;
+                            break;
+                        }
+                    }
+
+                    if (_conn == null)
+                    {
+                        //Ask if the user wants to add this connection to the Site Explorer
+                    }
+
+                    PopulateTree(resp);
+                    btnRefresh.Enabled = true;
+                    btnNew.Enabled = true;
+                });
+            });
+        }
+
+        const int IDX_FOLDER = 0;
+        const int IDX_CONFIG = 1;
+        const int IDX_FILE = 2;
+        const int IDX_SERVER = 3;
+
+        private void PopulateTree(DataConfigurationResponse resp)
+        {
+            var list = resp.DataConfigurationList;
+            try
+            {
+                trvRestExplorer.BeginUpdate();
+                trvRestExplorer.Nodes.Clear();
+                var root = trvRestExplorer.Nodes.Add(list.RootUri);
+                root.ImageIndex = root.SelectedImageIndex = IDX_SERVER;
+                foreach (var conf in list.Configuration)
+                {
+                    string name = conf.ConfigUriPart;
+                    if (name.EndsWith("/config"))
+                        name = name.Substring(0, name.Length - "/config".Length);
+                    var node = root.Nodes.Add(name);
+                    node.Tag = conf;
+                    node.ImageIndex = node.SelectedImageIndex = IDX_CONFIG;
+                    node.Nodes.Add("dummy"); //HACK: To show the "+" beside the node
+                }
+                root.Expand();
+            }
+            finally
+            {
+                trvRestExplorer.EndUpdate();
+            }
+        }
+
+        private void trvRestExplorer_AfterSelect(object sender, TreeViewEventArgs e)
+        {
+            var conf = e.Node.Tag as DataConfiguration;
+            btnDelete.Enabled = btnEdit.Enabled = false;
+            if (conf != null)
+                btnDelete.Enabled = btnEdit.Enabled = btnAddFile.Enabled = true;
+        }
+
+        private void LoadConfig(string json, string uriPart, bool isNew)
+        {
+            new RestConfigurationEditor(_conn, _client, json, uriPart, isNew).ShowDialog();
+        }
+
+        private void trvRestExplorer_AfterExpand(object sender, TreeViewEventArgs e)
+        {
+            var conf = e.Node.Tag as DataConfiguration;
+            if (conf != null && e.Node.Nodes[0].Text == "dummy")
+            {
+                e.Node.Nodes.Clear();
+                var req = new RestRequest(conf.ConfigUriPart.Replace("/config", "/files.json"));
+                _client.ExecuteAsync<DataFileListResponse>(req, (resp) =>
+                {
+                    var list = resp.Data.DataConfigurationFileList;
+                    this.UIThreadInvoke(() =>
+                    {
+                        foreach (var file in list.File)
+                        {
+                            var n = e.Node.Nodes.Add(file);
+                            n.ImageIndex = n.SelectedImageIndex = IDX_FILE;
+                        }
+                    });
+                });
+            }
+        }
+
+        private void btnEdit_Click(object sender, EventArgs e)
+        {
+            var conf = trvRestExplorer.SelectedNode.Tag as DataConfiguration;
+            if (conf != null)
+            {
+                var req = new RestRequest(conf.ConfigUriPart);
+                _client.ExecuteAsync(req, (resp) =>
+                {
+                    var json = resp.Content;
+                    this.UIThreadInvoke(() =>
+                    {
+                        LoadConfig(json, conf.ConfigUriPart, false);
+                    });
+                });
+            }
+        }
+
+        private void btnDelete_Click(object sender, EventArgs e)
+        {
+            var conf = trvRestExplorer.SelectedNode.Tag as DataConfiguration;
+            if (conf != null)
+            {
+                if (MessageBox.Show(Maestro.AddIn.Rest.Strings.PromptDeleteConfiguration, Maestro.AddIn.Rest.Strings.DeleteConfiguration, MessageBoxButtons.YesNo) == DialogResult.Yes)
+                {
+                    var req = new RestRequest(conf.ConfigUriPart, Method.POST);
+                    req.AddHeader("X-HTTP-METHOD-OVERRIDE", "DELETE");
+                    _client.ExecuteAsync(req, (resp) =>
+                    {
+                        if (resp.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            this.UIThreadInvoke(() =>
+                            {
+                                MessageBox.Show(Maestro.AddIn.Rest.Strings.ConfigurationDeleted);
+                                this.DoRefresh();
+                            });
+                        }
+                        else
+                            MessageBox.Show(resp.Content);
+                    });
+                }
+            }
+        }
+
+        private void btnAddFile_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void btnNew_Click(object sender, EventArgs e)
+        {
+            LoadConfig("{}", "", true);
+        }
+
+        private void btnRefresh_Click(object sender, EventArgs e)
+        {
+            this.DoRefresh();
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestExplorer.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,469 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="btnConnect.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIZSURBVDhPjc/fa1JhGAfwN40gdD9cBpbHiCXo9AxnDNZh
+        k3SC80emphKIqfhjISkRJiNwBEEX0rqIohgsgq676k/YXaAyqMbYoFgwdlF4FcQG29P3VRubRfMLH845
+        7/s+z3se1mvy+fxIpVK5V61WDZ2l3uP3+82JRGJufX2TkslkubN8bNxQFwQh63A45uv1NbJYLI8lSRLb
+        2//PbWiUSiXiz+XlFdLpdC+MRuNlvnncOKMajeZTsVikXC5HhUKBN1lRKBRFvtnLOPNOp7OZyWQoEolQ
+        PB6ndDrNm3zUarWzvYzzLhgM/goEAoTbyOfzkdfrJZfLxZt87h7nX/kQCoX2PB4P4TYymUQShAtkMIyQ
+        2TzKm6xhnLvto3/HDxv81yVpEkUi6fWmA6JoRUMLb7LROt2V6/AllUrR1JSdrFaJxsauHBgfnyT1g0vE
+        nqh2WLn/fbvkaDZ58fS0i2y2GTSZIafzGtnt7v2Jiau7w8P6n/LqmZ1ss0zsrbrWqTmSZ7AVi6XJ7Y5S
+        OHyL/+oWrLLsqR9sYWCbvRxYjX6fJfZaVWtZGlrkhTwxoGg0youasRgO4QlhYOz5YM2xfYO68XW+fbiY
+        ewW7cBPaedq3yBaUNU78ZqM/76115HDxHVDDEAxCP/SBAk6zh8rG+a9mYo+UdXzL4ASwOeDF98EMRtDD
+        RRDgHJwFFQvK37CcrMFC8iV8n2SMyX4DHirmsEIqF9MAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="btnConnect.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnConnect.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="btnConnect.Text" xml:space="preserve">
+    <value>Connect</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="btnRefresh.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnRefresh.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKUSURBVDhPrVJrSJNRGD4WalrgyglqolEZZT9WKuRdUdCo
+        FkVWYtY0BXFbhAk2xB+1EiwsXGYXNPG6DXVbho28TSOLgkMDMSX6yPJzOMlLy9ZMXG9711c2i371wMP3
+        nOfy4xw+8t8RU/shMLFuSppUN6VMuGemSNToYcbV/o7Ymglhcv2kMb/bwsqHFqyVzDdQOHjJofN7LCxm
+        2OHqroiqfi9MrTcNKRg7lBkXQU6/uhC9qrd2SG0wDWGXm/3A7qrRwNhqxnhtdBFKn8zD2a4524EGlom8
+        /poiUaNXOjgPijdLEHeLMeKGmxMiKB+WZrSa2OK+GSi4b7YJrgzTXVeHM7mYoEZP3GG2yQyzIOqYZHHD
+        xYSEXaAqqd5sFWtNkHDjFRMmf/lr/BPoJVaNMBKdCc71T1txw0WEhJY8pdLOSchRvwPUnP0HMMtrG4fi
+        gRnXXnCh4fEpDWs5qhyzoOZsJ4IKe+8GF/ZmoQ4pMtATreMg6ZoC1M4CIkCir0itZYxpzeMjOy8O9viL
+        9fu4CDPqpFh/U1D2nNmvYiFdNWb1L3i4fAXfXJ1wm/yFck+zqTO6fuwBP1dbzs/WhGPGz9PRk4aPgN+9
+        HdMQozZDeAVlN+Rqlx/RR6Tjrc9pl21vm6sMVc9VhjVNKDae75f5iFoj1mWpaFznJ0jr/gxb1bOAmpej
+        6fc9rXT9Kz0zWzZ7Z7eJ/DTWM8hAjVUSorMleR9vpIJHC8Bv/wLxfQuAZ69jjZe52QrElwR4ZjQme8gG
+        D3rdZtPXaBcT3Q/X0sgBO4T2LDmZ/MwO6LkfqnE+7O9Y6+Am4u0TQYKiE8iOIymrt6QkucUUKVcJ79CV
+        dIsqanL0Q5xLDh4O8hwMcBDv9y9ix48QwvsOWgZuf9T4HhoAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="btnRefresh.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnRefresh.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="btnRefresh.Text" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>6, 25</value>
+  </data>
+  <data name="btnNew.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnNew.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFVSURBVDhPtY67L8NRGIaPSzpI0R+tVNuEFBGqiaYTdYlL
+        xK3ULUFE1CYmdpvF0MUgOlhI3WMh5roHR8Igqc3IX/H6vpMTQ7VNfoMneZI373fe5Ij/49ARF8cOqeRs
+        mgO7jH6vYuFrBZx1a4KEXU5/LoHlrFsT7Bpy7GMRkVQUnHVrgh1DDrzNov91Bpx1m4W4LS626VGaPc+T
+        6HocR6ab2vyyZZPh93n0yinwqPtpQg1br4fQcjWIjvtRtN+NoO02jNDNsMq80Wtis1TyVzsfIkoe8LDx
+        PITqo4DSnWiCa88HT8IP70kQvNFrIlYcFzGrTNdz5ofr1IdMN7XJyYZVOi8bUHFRD866NcG6VdqTdShP
+        1oKzbk2wViTLXmpgSC8469YEyxZppLxgOes2J4Wkm2wmg6Ivb1/M5UslZ+6ECJBVpIX8Qz5ZQjpJVxYr
+        SRtZQBJC/ADGtKxvV2OcbwAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="btnNew.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnNew.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="btnNew.Text" xml:space="preserve">
+    <value>New Configuration</value>
+  </data>
+  <data name="btnAddFile.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnAddFile.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIGSURBVDhPfZHfS1NhGMffG6WooHYhFXQRpGy4i+7d3rO6
+        6Soko/8gKmsgZZlocxcSFORNXbjCFMoKssAsldYoEqOoo6mJlpvIhmub+3WcZ7op8e08461DnHa+8Nx9
+        Px/e93nYn3BP4LizI3DWbCTvu0OibozU4W9cVLYwm9jAdCyPyWUVcmQNcjhXmidjIVCHX/NXC+TfSB6/
+        ey65gQ9LWbwPphGYW8HIVBwvJ35iSI7i3sgMousA9RzeNzUC06OZm+ZTBXwMZ/8rud4/9ndczf0PBaaH
+        e15fmk8X8CmilJXQS+g71BWYHt4+2vI9U8Dn5VVTSUmgdQWmh7cPt/3IFPElmjOV0GKpKzA9vO2VdyFb
+        xEQsZyqh61BXYHp464vOBaWIyfiaqYROTF2B6ZFaB28ElU1MrahlJfVv3agdPQpL97GvAtMjXX3eFVzd
+        xHRSLSuxDrpwOnMFFb01cYHpcbYM3A5pgplU3iBp8F+A9ZkE6wDHqeQZVPiqE+z+Hpn1WO4KXNvB5afd
+        odwWvqXzBontsRNHYg2GYXd2ywJnzHXx0YNFTTCbWTdITg6dh63PAVtvHewRJypvHkyxWztl1rWr9ILt
+        2lRJTT3DYfUXSEIvoe/QTmixdB06sd1Xh/1Ltdjm3acQI1hm0cZ++ERzH2/0jZvNXrcjsePcAbWyvmqc
+        GMaY5Tfuoj+zr538AAAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="btnAddFile.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnAddFile.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="btnAddFile.Text" xml:space="preserve">
+    <value>Add Files to Configuration</value>
+  </data>
+  <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>6, 25</value>
+  </data>
+  <data name="btnEdit.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnEdit.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHASURBVDhPYyAVPGRg0H7AyDj3EgODPVSIeBAUFCS/R1R0
+        7v+Ojv9HGRl3bmJgcIZKEQYhISEqAQEBmd++ffv/IyPj/6eYmP8rGBg2QqXxg82zGRymNIssBmk+c+bM
+        /7t37/5vZmXdOo+BwQiqBDcAaV49lXH7/3cd/3evMgZrFhcXbzZkY9OEKsENkDX/ed38/97ZsP89lRwb
+        uLi49KFKcANkzT+e1/1/cD7q/5rJTAfWz2AmHHDImr88rvj/+FLs/yU9TIdWTGJ2gSrBDZA1v79X+P/J
+        5YT/s1uZDi/qYHaFKsENkDW/vpUJ1jyphuno9EYSNT+7mgzUHP+/s5jx+IRKBsKaF9cwqC/vZVwG0vzo
+        Yuz/hxei/9dnM55oK2BwgyrBDVbVM7BNL2TI+fjkwPszu13+3z8X8b8yifFUbQaDO1QJftCfzWC5e3HS
+        gU/PDv2/cW7B1/xwxsNlCURqBoGqWMZWkObFE0MvJvswzrLXZwgACosCsTAQCwIxPxDzAjEXEHMAMRsQ
+        swAxMxAzAjHD/2QvxlnWegzJfJwMpkC+LhBrAbEaECsCsSwQSwKxCBALADE3EIMMYmVgYGACAJ+b08TC
+        IH0dAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="btnEdit.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnEdit.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="btnEdit.Text" xml:space="preserve">
+    <value>Edit this item</value>
+  </data>
+  <data name="btnDelete.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVDhPzZJNSJNxHMe/ztgzNnpqtsctTeqm4sFMBK/z
+        spDwJt4KNJIcemnpTSEycsVguOlBTS3zpUO+MCwivXhSBiPfTnqIMQKJLnrJt8fvf/tRjGQduvSBD//f
+        //f2sD/D/8MMcHsKiCungX5JZzEJVLCvm869Ax5IOsNrDh4HAuae33+6WlOTUncppXkD9E1ZrYkJYOkt
+        UG8CeVLKMMaNIxxSw3vNzWayoeFw1jC2h4DqaV0fXS4r230FxIaB6zLyJwNsjgJBnvE1r/dHwuc7+VBa
+        mvxUWZmMAPPUI625eclFIS6JVVXtL5SXHw7abJtS+ju9gEHnJoqKvsU8np8hTVsfcbm+Bi2WdWnJTTcQ
+        HjeM1HJJyUlQ0zZ5b6HvI3b7Ds9FaTufANAaZWPc7TbHdT3VBTyWkgrCz/Pzt9jzTFLZtPF1O/i7vxjG
+        0YrDccA49hBwSjlNO/CEfqReSf3mPt9u1G5P7RYUmJ0WywaHq6WUBf89T2lfD3BBUhnuqa87naezVut3
+        xi8kfS6sP/IBt+Sa5tpN4G4TlzQCn91AHXM3aCG9RC/Sy9SgxcVAbQVwh/EvdOqiV0U1qAYc1EY1OdVd
+        9aq3uUL/FeAMspd+/GJVT0sAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="btnDelete.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnDelete.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="btnDelete.Text" xml:space="preserve">
+    <value>Delete this item</value>
+  </data>
+  <data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>281, 25</value>
+  </data>
+  <data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="toolStrip1.Text" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name=">>toolStrip1.Name" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name=">>toolStrip1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>toolStrip1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>toolStrip1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="trvRestExplorer.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="trvRestExplorer.ImageIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <metadata name="imgIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>122, 17</value>
+  </metadata>
+  <data name="imgIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAK
+        CwAAAk1TRnQBSQFMAgEBBAEAAVABAAFQAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8AFQAF9AHz
+        AfABHANuARwB8gT/AfQBvAoHAbwB9AH/AQAO/wEAEP8CEQHvAQcB8AEcAXMBdAOaAnQBmQHzAQAC/wEH
+        Cv8BBwL/AQAB/wG8CuwBvAH/AQABmQ50AZkCZgHyAQcBcwF0AXkCdAJLAXQBmQJ0ARsCAAG8Af8B9wbt
+        AfcB/wG8BAAB9AH3COwB9wH0AgABdA6aAXQBZgEVAfEBkgGaBHQCmgFLAXQCmgGZAgABvAH/AfcG/wH3
+        Af8BvAUAAfcGbQFVAW0B9wMAAZkBmgx6AZoBmQESAWYB8wH3BZoBmQF0AZkBBwF0AZMBGgIAAbwB/wH3
+        A/8D9AH3Af8BvAUAAewIEgHsAwABmQ6aAZkBrgHqAf8B7wSaAXQBmQHzAf8B9AH/AbwDAAG8Af8B7wL/
+        AvQB8wH0Ae8B/wG8BQAKBwMAAZkOmgGZAuoC8QN0AZkB9AL/AvQB/wG8AwABvAH/Ae8B/wL0AvMB9AHv
+        Af8BvAUAAQcBvAUHAfABvAEHAwABmQ6aAZkEAAG8Bf8D9AH/AbwDAAG8Af8B7wH/AfQC8wHxAfQB7wH0
+        AbwFAAK8BQcBkgK8AwABmQ6aAZkEAAG8BP8E9AH/AbwDAAHwAf8BBwH/AvME9wH0AfAFAAG8CPABvAMA
+        AZkOmgGZBAABvAP/BvQBvAMAAfAB/wEHAfQB8wHxAe8B/wEHAfAB9AHwBQABvAHvBgcB7wG8AwABGgGg
+        BpoHoAEaBAAB8AL/BfQB8wH0AfADAAHwAf8BvAH/AvQBBwG8AfAB8QH0AfAFAAHwAfEGvAHxAfADAAEa
+        AaAFmgGgAZkGeQEaBAAB8AH/BfQB8wHxAfQB8AMAAfAB/wW8AfAC8QH0AfAFAAHwAfIG8QHyAfADAAEa
+        BqACmgagARoEAAHwAf8E9AHzA/cBvAMAAfAB/wP0AvMB8QP3AbwFAAHwCAcB8AMAARsHGgL/AfQB8wLa
+        ARoBGwQAAfAB/wP0AfMB8QHvAf8B8AH0AwAB8AH/AvQC8wLxAe8B/wHwAfQFAAHwAfIG8QHyAfAKAAH0
+        BhoB9AUAAfAD/wP0AQcB8AH0BAAB8QL/BfQBBwHxAfQGAAHwAfMG8gHzAfAXAAHzB/IB9AUAAfMI8gH0
+        BwAB8gjxAfIDAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/gQAC/wQAAYABAQMA
+        AQECAAGAAQEEAAHAAQMBwAEDBAABwAEDAeABBwQAAcABAwHgAQcDAAEBAcABAwHgAQcDAAEBAcABAwHg
+        AQcCAAHwAQEBwAEDAeABBwIAAfABAQHAAQMB4AEHAgAB8AEBAcABAwHgAQcCAAHwAQEBwAEDAeABBwIA
+        AfABAQHAAQMB4AEHAgAB8AEBAcABAwHgAQcCAAHwAQEBwAEDAeABBwH+AQEB8AEDAcABBwHgAQcC/wHw
+        AQcBwAEPAeABBws=
+</value>
+  </data>
+  <data name="trvRestExplorer.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 25</value>
+  </data>
+  <data name="trvRestExplorer.SelectedImageIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="trvRestExplorer.Size" type="System.Drawing.Size, System.Drawing">
+    <value>281, 466</value>
+  </data>
+  <data name="trvRestExplorer.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name=">>trvRestExplorer.Name" xml:space="preserve">
+    <value>trvRestExplorer</value>
+  </data>
+  <data name=">>trvRestExplorer.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>trvRestExplorer.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>trvRestExplorer.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>281, 491</value>
+  </data>
+  <data name=">>btnConnect.Name" xml:space="preserve">
+    <value>btnConnect</value>
+  </data>
+  <data name=">>btnConnect.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>btnRefresh.Name" xml:space="preserve">
+    <value>btnRefresh</value>
+  </data>
+  <data name=">>btnRefresh.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>toolStripSeparator2.Name" xml:space="preserve">
+    <value>toolStripSeparator2</value>
+  </data>
+  <data name=">>toolStripSeparator2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>btnNew.Name" xml:space="preserve">
+    <value>btnNew</value>
+  </data>
+  <data name=">>btnNew.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>btnAddFile.Name" xml:space="preserve">
+    <value>btnAddFile</value>
+  </data>
+  <data name=">>btnAddFile.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>toolStripSeparator1.Name" xml:space="preserve">
+    <value>toolStripSeparator1</value>
+  </data>
+  <data name=">>toolStripSeparator1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>btnEdit.Name" xml:space="preserve">
+    <value>btnEdit</value>
+  </data>
+  <data name=">>btnEdit.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>btnDelete.Name" xml:space="preserve">
+    <value>btnDelete</value>
+  </data>
+  <data name=">>btnDelete.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>imgIcons.Name" xml:space="preserve">
+    <value>imgIcons</value>
+  </data>
+  <data name=">>imgIcons.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>$this.Name" xml:space="preserve">
+    <value>RestExplorer</value>
+  </data>
+  <data name=">>$this.Type" xml:space="preserve">
+    <value>Maestro.Shared.UI.SingletonViewContent, Maestro.Shared.UI, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.Designer.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,119 @@
+namespace Maestro.AddIn.Rest.UI
+{
+    partial class RestLoginDialog
+    {
+        /// <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()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RestLoginDialog));
+            this.label1 = new System.Windows.Forms.Label();
+            this.txtUrl = new System.Windows.Forms.TextBox();
+            this.txtUsername = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.txtPassword = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.btnLogin = new System.Windows.Forms.Button();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // txtUrl
+            // 
+            resources.ApplyResources(this.txtUrl, "txtUrl");
+            this.txtUrl.Name = "txtUrl";
+            // 
+            // txtUsername
+            // 
+            resources.ApplyResources(this.txtUsername, "txtUsername");
+            this.txtUsername.Name = "txtUsername";
+            // 
+            // label2
+            // 
+            resources.ApplyResources(this.label2, "label2");
+            this.label2.Name = "label2";
+            // 
+            // txtPassword
+            // 
+            resources.ApplyResources(this.txtPassword, "txtPassword");
+            this.txtPassword.Name = "txtPassword";
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // btnLogin
+            // 
+            resources.ApplyResources(this.btnLogin, "btnLogin");
+            this.btnLogin.Name = "btnLogin";
+            this.btnLogin.UseVisualStyleBackColor = true;
+            this.btnLogin.Click += new System.EventHandler(this.btnLogin_Click);
+            // 
+            // btnCancel
+            // 
+            resources.ApplyResources(this.btnCancel, "btnCancel");
+            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+            // 
+            // RestLoginDialog
+            // 
+            this.AcceptButton = this.btnLogin;
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.btnCancel;
+            this.ControlBox = false;
+            this.Controls.Add(this.btnCancel);
+            this.Controls.Add(this.btnLogin);
+            this.Controls.Add(this.txtPassword);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.txtUsername);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.txtUrl);
+            this.Controls.Add(this.label1);
+            this.Name = "RestLoginDialog";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox txtUrl;
+        private System.Windows.Forms.TextBox txtUsername;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox txtPassword;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Button btnLogin;
+        private System.Windows.Forms.Button btnCancel;
+    }
+}
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,67 @@
+#region Disclaimer / License
+
+// Copyright (C) 2015, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#endregion Disclaimer / License
+using Maestro.AddIn.Rest.Model;
+using RestSharp;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Maestro.AddIn.Rest.UI
+{
+    public partial class RestLoginDialog : Form
+    {
+        public RestLoginDialog()
+        {
+            InitializeComponent();
+        }
+
+        private RestClient _client;
+
+        public RestClient GetClient()
+        {
+            return _client;
+        }
+
+        private void btnCancel_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+        }
+
+        private void btnLogin_Click(object sender, EventArgs e)
+        {
+            _client = new RestClient(txtUrl.Text);
+            _client.Authenticator = new HttpBasicAuthenticator(txtUsername.Text, txtPassword.Text);
+
+            //To test the credentials, create a session
+            var req = new RestRequest("session", Method.POST);
+            var session = _client.Execute<PrimitiveValueResponse>(req);
+
+            this.DialogResult = System.Windows.Forms.DialogResult.OK;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/UI/RestLoginDialog.resx	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,363 @@
+<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>13, 13</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>98, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>mapguide-rest URL</value>
+  </data>
+  <data name=">>label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name=">>label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>label1.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="txtUrl.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 29</value>
+  </data>
+  <data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
+    <value>361, 20</value>
+  </data>
+  <data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="txtUrl.Text" xml:space="preserve">
+    <value>http://localhost/mapguide/rest/v1</value>
+  </data>
+  <data name=">>txtUrl.Name" xml:space="preserve">
+    <value>txtUrl</value>
+  </data>
+  <data name=">>txtUrl.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtUrl.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>txtUrl.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="txtUsername.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtUsername.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 74</value>
+  </data>
+  <data name="txtUsername.Size" type="System.Drawing.Size, System.Drawing">
+    <value>361, 20</value>
+  </data>
+  <data name="txtUsername.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name=">>txtUsername.Name" xml:space="preserve">
+    <value>txtUsername</value>
+  </data>
+  <data name=">>txtUsername.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtUsername.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>txtUsername.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>13, 58</value>
+  </data>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>55, 13</value>
+  </data>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="label2.Text" xml:space="preserve">
+    <value>Username</value>
+  </data>
+  <data name=">>label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name=">>label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label2.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>label2.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="txtPassword.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtPassword.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 116</value>
+  </data>
+  <data name="txtPassword.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
+    <value>*</value>
+  </data>
+  <data name="txtPassword.Size" type="System.Drawing.Size, System.Drawing">
+    <value>361, 20</value>
+  </data>
+  <data name="txtPassword.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name=">>txtPassword.Name" xml:space="preserve">
+    <value>txtPassword</value>
+  </data>
+  <data name=">>txtPassword.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtPassword.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>txtPassword.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>13, 100</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>53, 13</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Password</value>
+  </data>
+  <data name=">>label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name=">>label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label3.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>label3.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="btnLogin.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Bottom, Right</value>
+  </data>
+  <data name="btnLogin.Location" type="System.Drawing.Point, System.Drawing">
+    <value>221, 153</value>
+  </data>
+  <data name="btnLogin.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="btnLogin.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="btnLogin.Text" xml:space="preserve">
+    <value>Login</value>
+  </data>
+  <data name=">>btnLogin.Name" xml:space="preserve">
+    <value>btnLogin</value>
+  </data>
+  <data name=">>btnLogin.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>btnLogin.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>btnLogin.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Bottom, Right</value>
+  </data>
+  <data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>302, 154</value>
+  </data>
+  <data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="btnCancel.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name=">>btnCancel.Name" xml:space="preserve">
+    <value>btnCancel</value>
+  </data>
+  <data name=">>btnCancel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>btnCancel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>btnCancel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>399, 189</value>
+  </data>
+  <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
+    <value>CenterParent</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>Login</value>
+  </data>
+  <data name=">>$this.Name" xml:space="preserve">
+    <value>RestLoginDialog</value>
+  </data>
+  <data name=">>$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.Rest/packages.config
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Rest/packages.config	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Rest/packages.config	2015-03-04 13:59:24 UTC (rev 8556)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net451" />
+  <package id="RestSharp" version="105.0.1" targetFramework="net451" />
+</packages>
\ No newline at end of file

Modified: trunk/Tools/Maestro/Maestro.Editors/Common/ExpressionEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/ExpressionEditor.cs	2015-03-02 12:19:20 UTC (rev 8555)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/ExpressionEditor.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -35,6 +35,8 @@
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.MaestroAPI.Services;
 
 namespace Maestro.Editors.Common
 {
@@ -44,6 +46,7 @@
     public partial class ExpressionEditor : Form, IExpressionEditor, ITextInserter, IExpressionErrorSource
     {
         private ClassDefinition _cls;
+        private IFeatureService _featSvc;
         private IEditorService _edSvc;
         private string m_featureSource = null;
         private IFdoProviderCapabilities _caps;
@@ -84,6 +87,17 @@
 
         private ExpressionEditorMode _mode;
 
+        public void Initialize(IServerConnection conn, ClassDefinition cls, string featureSourceId, ExpressionEditorMode mode)
+        {
+            IFeatureSource fs = (IFeatureSource)conn.ResourceService.GetResource(featureSourceId);
+            IFdoProviderCapabilities caps = conn.FeatureService.GetProviderCapabilities(fs.Provider);
+
+            //This is normally set by the Editor Service, but we don't have that so do it here
+            _featSvc = conn.FeatureService;
+
+            this.Initialize(null, caps, cls, featureSourceId, mode, false);
+        }
+
         /// <summary>
         /// Initializes the dialog.
         /// </summary>
@@ -100,6 +114,15 @@
                 _mode = mode;
                 _cls = cls;
                 _edSvc = edSvc;
+                if (_edSvc != null)
+                {
+                    _featSvc = _edSvc.CurrentConnection.FeatureService;
+                    insertThemeExpressionToolStripMenuItem.Enabled = true;
+                }
+                else
+                {
+                    insertThemeExpressionToolStripMenuItem.Enabled = false;
+                }
                 m_featureSource = featureSourceId;
                 _caps = caps;
 
@@ -331,7 +354,7 @@
                 ColumnValue.Tag = null;
                 try
                 {
-                    using (var rdr = _edSvc.CurrentConnection.FeatureService.AggregateQueryFeatureSource(m_featureSource, _cls.QualifiedName, filter, new System.Collections.Specialized.NameValueCollection() {
+                    using (var rdr = _featSvc.AggregateQueryFeatureSource(m_featureSource, _cls.QualifiedName, filter, new System.Collections.Specialized.NameValueCollection() {
                             { "UNIQ_VALS", expr } //NOXLATE
                         }))
                     {
@@ -376,7 +399,7 @@
                         try
                         {
                             retry = false;
-                            using (var rd = _edSvc.CurrentConnection.FeatureService.QueryFeatureSource(m_featureSource, _cls.QualifiedName, filter, new string[] { ColumnName.Text }))
+                            using (var rd = _featSvc.QueryFeatureSource(m_featureSource, _cls.QualifiedName, filter, new string[] { ColumnName.Text }))
                             {
                                 while (rd.ReadNext())
                                 {

Modified: trunk/Tools/Maestro/Maestro.Editors/Common/IExpressionEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/IExpressionEditor.cs	2015-03-02 12:19:20 UTC (rev 8555)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/IExpressionEditor.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -44,7 +44,7 @@
     /// <summary>
     /// The expression editor interface
     /// </summary>
-    internal interface IExpressionEditor
+    public interface IExpressionEditor
     {
         /// <summary>
         /// Initializes the expression editor
@@ -67,6 +67,8 @@
         /// </summary>
         /// <returns></returns>
         System.Windows.Forms.DialogResult ShowDialog();
+
+        void Initialize(IServerConnection conn, ClassDefinition classDefinition, string featureSourceId, ExpressionEditorMode mode);
     }
 
     /// <summary>
@@ -82,7 +84,7 @@
         void InsertText(string text);
     }
 
-    internal static class FdoExpressionEditorFactory
+    public static class FdoExpressionEditorFactory
     {
         public static IExpressionEditor Create()
         {

Modified: trunk/Tools/Maestro/Maestro.Editors/Common/MonoCompatibleExpressionEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/MonoCompatibleExpressionEditor.cs	2015-03-02 12:19:20 UTC (rev 8555)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/MonoCompatibleExpressionEditor.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -34,6 +34,8 @@
 using System.ComponentModel;
 using System.Drawing;
 using System.Windows.Forms;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.MaestroAPI.Services;
 
 namespace Maestro.Editors.Common
 {
@@ -82,6 +84,7 @@
     {
         private ClassDefinition _cls;
 
+        private IFeatureService _featSvc;
         private IEditorService _edSvc;
         private string m_featureSource = null;
 
@@ -107,6 +110,17 @@
         private IFdoProviderCapabilities _caps;
         private ExpressionEditorMode _mode;
 
+        public void Initialize(IServerConnection conn, ClassDefinition cls, string featureSourceId, ExpressionEditorMode mode)
+        {
+            IFeatureSource fs = (IFeatureSource)conn.ResourceService.GetResource(featureSourceId);
+            IFdoProviderCapabilities caps = conn.FeatureService.GetProviderCapabilities(fs.Provider);
+
+            //This is normally set by the Editor Service, but we don't have that so do it here
+            _featSvc = conn.FeatureService;
+
+            this.Initialize(null, caps, cls, featureSourceId, mode, false);
+        }
+
         /// <summary>
         /// Initializes the dialog.
         /// </summary>
@@ -124,6 +138,15 @@
                 _mode = mode;
                 _cls = cls;
                 _edSvc = edSvc;
+                if (_edSvc != null)
+                {
+                    _featSvc = _edSvc.CurrentConnection.FeatureService;
+                    insertThemeExpressionToolStripMenuItem.Enabled = true;
+                }
+                else
+                {
+                    insertThemeExpressionToolStripMenuItem.Enabled = false;
+                }
                 m_featureSource = featureSourceId;
 
                 insertThemeExpressionToolStripMenuItem.Enabled = attachStylizationFunctions;
@@ -835,7 +858,7 @@
                 ColumnValue.Tag = null;
                 try
                 {
-                    using (var rdr = _edSvc.CurrentConnection.FeatureService.AggregateQueryFeatureSource(m_featureSource, _cls.QualifiedName, filter, new System.Collections.Specialized.NameValueCollection() {
+                    using (var rdr = _featSvc.AggregateQueryFeatureSource(m_featureSource, _cls.QualifiedName, filter, new System.Collections.Specialized.NameValueCollection() {
                             { "UNIQ_VALS", expr }
                         }))
                     {
@@ -886,7 +909,7 @@
                         try
                         {
                             retry = false;
-                            using (var rd = _edSvc.CurrentConnection.FeatureService.QueryFeatureSource(m_featureSource, _cls.QualifiedName, filter, new string[] { ColumnName.Text }))
+                            using (var rd = _featSvc.QueryFeatureSource(m_featureSource, _cls.QualifiedName, filter, new string[] { ColumnName.Text }))
                             {
                                 while (rd.ReadNext())
                                 {

Modified: trunk/Tools/Maestro/Maestro.Shared.UI/WorkbenchBase.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Shared.UI/WorkbenchBase.cs	2015-03-02 12:19:20 UTC (rev 8555)
+++ trunk/Tools/Maestro/Maestro.Shared.UI/WorkbenchBase.cs	2015-03-04 13:59:24 UTC (rev 8556)
@@ -71,7 +71,7 @@
             contentPanel.Dock = DockStyle.Fill;
             contentPanel.DockLeftPortion = 250;
             contentPanel.DockBottomPortion = 150;
-            contentPanel.DockRightPortion = 200;
+            contentPanel.DockRightPortion = 250;
 
             menu = _workbenchInitializer.GetMainMenu(this);
 



More information about the mapguide-commits mailing list