[java-sp-server] branch main updated: Revamp SP prototype work as an IdP plugin.

Scott Cantor cantor.2 at osu.edu
Wed Mar 6 21:27:32 UTC 2024


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch main
in repository java-sp-server.

View the commit online:
http://git.shibboleth.net/view/?p=java-sp-server.git;a=commit;h=f91733cc030e971a3a277271653178e3ac7cb47d

The following commit(s) were added to refs/heads/main by this push:
     new f91733c  Revamp SP prototype work as an IdP plugin.
f91733c is described below

commit f91733cc030e971a3a277271653178e3ac7cb47d
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Mar 6 16:27:29 2024 -0500

    Revamp SP prototype work as an IdP plugin.
---
 pom.xml                                            | 278 +++-----------
 sp-conf-impl/pom.xml                               |  81 ++--
 .../net/shibboleth/idp/plugin/sp/ServerModule.java |  38 ++
 .../net/shibboleth/idp/plugin/sp/ServerPlugin.java |  49 +++
 .../java/net/shibboleth/idp/plugin/sp/Version.java |  46 +++
 .../net/shibboleth/idp/plugin/sp/package-info.java |  18 +
 .../META-INF/net.shibboleth.idp/postconfig.xml     | 115 ++++++
 .../services/net.shibboleth.idp.module.IdPModule   |   1 +
 .../services/net.shibboleth.idp.plugin.IdPPlugin   |   1 +
 .../{ => idp/plugin}/sp/conf/endpoints-system.xml  |  10 +-
 .../plugin}/sp/conf/relying-party-system.xml       |   5 +-
 .../net/shibboleth/idp/plugin/sp/module.properties |  20 +
 .../idp/plugin/sp/module}/conf/applications.xml    |   0
 .../idp/plugin/sp/module}/conf/credentials.xml     |   0
 .../idp/plugin/sp/module/conf/sp.properties        |  31 ++
 .../net/shibboleth/idp/plugin/sp/plugin.properties |   8 +
 .../shibboleth/sp/conf/attribute-filter-system.xml |  18 -
 .../sp/conf/attribute-registry-system.xml          |  45 ---
 .../sp/conf/attribute-resolver-system.xml          |  18 -
 .../net/shibboleth/sp/conf/conditions.xml          |  39 --
 .../resources/net/shibboleth/sp/conf/functions.xml |  47 ---
 .../net/shibboleth/sp/conf/global-system.xml       | 138 -------
 .../net/shibboleth/sp/conf/http-client.xml         |  60 ---
 .../net/shibboleth/sp/conf/integration.xml         |  88 -----
 .../sp/conf/metadata-providers-system.xml          |  56 ---
 .../net/shibboleth/sp/conf/primitives.xml          |  70 ----
 .../resources/net/shibboleth/sp/conf/sealer.xml    |  32 --
 .../net/shibboleth/sp/conf/security-system.xml     | 102 -----
 .../net/shibboleth/sp/conf/services-system.xml     | 165 --------
 .../net/shibboleth/sp/remoting/impl/echo.msg       |   2 +-
 .../sp/remoting/impl/test.application.msg          |   2 +-
 .../shibboleth/sp/remoting/impl/test.simple.msg    |   2 +-
 sp-conf/.gitignore                                 |   2 -
 sp-conf/pom.xml                                    |  46 ---
 sp-conf/src/main/resources/conf/global.xml         |  37 --
 sp-conf/src/main/resources/conf/logback.xml        | 132 -------
 .../src/main/resources/conf/services.properties    |  54 ---
 sp-conf/src/main/resources/conf/services.xml       |  34 --
 sp-conf/src/main/resources/conf/sp.properties      |  53 ---
 sp-dist/pom.xml                                    | 111 ++++++
 sp-dist/src/main/assembly/assembly.xml             |  43 +++
 sp-dist/src/main/enforcer/shibbolethKeys.gpg       | Bin 0 -> 55669 bytes
 sp-dist/src/main/resources/bootstrap/keys.txt      | 427 +++++++++++++++++++++
 sp-saml-api/pom.xml                                |  21 +-
 sp-saml-impl/pom.xml                               |  20 +-
 sp-server-api/pom.xml                              |  14 +-
 sp-server-impl/pom.xml                             |  39 +-
 .../net/shibboleth/sp/impl/BasicApplication.java   |   2 +-
 .../src/main/java/net/shibboleth/sp/impl/Main.java |  65 ----
 .../net/shibboleth/sp/impl/OpenSAMLConfigBean.java | 148 -------
 .../sp/remoting/impl/ErrorTransformer.java         |   2 +-
 .../sp/remoting/impl/RequestProcessor.java         |   4 +-
 .../PropertiesApplicationContextInitializer.java   |  91 -----
 sp-session-api/pom.xml                             |  19 +-
 sp-session-impl/pom.xml                            |  18 +-
 sp-testing/pom.xml                                 |   9 +-
 56 files changed, 1070 insertions(+), 1906 deletions(-)

diff --git a/pom.xml b/pom.xml
index 87c5b56..a0e6c9c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,6 +27,8 @@
         <shib-attribute.version>5.1.0-SNAPSHOT</shib-attribute.version>
         <shib-profile.groupId>net.shibboleth</shib-profile.groupId>
         <shib-profile.version>5.1.0-SNAPSHOT</shib-profile.version>
+        <idp.groupId>net.shibboleth.idp</idp.groupId>
+        <idp.version>5.1.0-SNAPSHOT</idp.version>
         <spring-int.version>6.0.1</spring-int.version>
         <checkstyle.configLocation>${project.basedir}/resources/checkstyle/checkstyle.xml</checkstyle.configLocation>
     </properties>
@@ -35,26 +37,8 @@
         Processing service/engine/hub for the Shibboleth Service Provider.
     </description>
     
-    <repositories>
-        <repository>
-            <id>shib-release</id>
-            <url>https://build.shibboleth.net/nexus/content/groups/public</url>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-        <repository>
-            <id>shib-snapshot</id>
-            <url>https://build.shibboleth.net/nexus/content/repositories/snapshots</url>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-        </repository>
-    </repositories>
-    
     <modules>
         <module>sp-bom</module>
-        <module>sp-conf</module>
         <module>sp-conf-impl</module>
         <module>sp-saml-api</module>
         <module>sp-saml-impl</module>
@@ -63,6 +47,7 @@
         <module>sp-session-api</module>
         <module>sp-session-impl</module>
         <module>sp-testing</module>
+        <module>sp-dist</module>
     </modules>
     
     <dependencies>
@@ -70,7 +55,20 @@
         <dependency>
             <groupId>${slf4j.groupId}</groupId>
             <artifactId>slf4j-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>net.shibboleth</groupId>
+            <artifactId>shib-support</artifactId>
+            <scope>provided</scope>
         </dependency>
+        
         <dependency>
             <groupId>org.testng</groupId>
             <artifactId>testng</artifactId>
@@ -84,225 +82,51 @@
     </dependencies>
     <dependencyManagement>
         <dependencies>
-            <!-- Compile Dependencies -->
+            <!-- Import Dependencies: Shib-Shared -->
             <dependency>
-                <groupId>${shib-profile.groupId}</groupId>
-                <artifactId>shib-profile-api</artifactId>
-                <version>${shib-profile.version}</version>
+                <groupId>${shib-shared.groupId}</groupId>
+                <artifactId>shib-shared-bom</artifactId>
+                <version>${shib-shared.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
             </dependency>
+            <!-- OpenSAML BOM for importing opensaml dependencies -->
             <dependency>
-                <groupId>${shib-profile.groupId}</groupId>
-                <artifactId>shib-profile-impl</artifactId>
-                <version>${shib-profile.version}</version>
+                <groupId>${opensaml.groupId}</groupId>
+                <artifactId>opensaml-bom</artifactId>
+                <version>${opensaml.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
             </dependency>
+            <!-- Import Dependencies: Shib-Metadata/Attribute/Profile -->
             <dependency>
                 <groupId>${shib-profile.groupId}</groupId>
-                <artifactId>shib-saml-profile-api</artifactId>
+                <artifactId>shib-profile-bom</artifactId>
                 <version>${shib-profile.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-attribute-api</artifactId>
-                <version>${shib-attribute.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-attribute-impl</artifactId>
-                <version>${shib-attribute.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-saml-attribute-api</artifactId>
-                <version>${shib-attribute.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-saml-attribute-impl</artifactId>
-                <version>${shib-attribute.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-attribute-filter-api</artifactId>
-                <version>${shib-attribute.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-attribute-filter-impl</artifactId>
-                <version>${shib-attribute.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-attribute-filter-spring</artifactId>
-                <version>${shib-attribute.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-attribute-resolver-api</artifactId>
-                <version>${shib-attribute.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-attribute-resolver-impl</artifactId>
-                <version>${shib-attribute.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
             </dependency>
             <dependency>
                 <groupId>${shib-attribute.groupId}</groupId>
-                <artifactId>shib-attribute-resolver-spring</artifactId>
+                <artifactId>shib-attribute-bom</artifactId>
                 <version>${shib-attribute.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>${shib-metadata.groupId}</groupId>
-                <artifactId>shib-metadata-api</artifactId>
-                <version>${shib-metadata.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-metadata.groupId}</groupId>
-                <artifactId>shib-metadata-impl</artifactId>
-                <version>${shib-metadata.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
             </dependency>
             <dependency>
                 <groupId>${shib-metadata.groupId}</groupId>
-                <artifactId>shib-metadata-spring</artifactId>
+                <artifactId>shib-metadata-bom</artifactId>
                 <version>${shib-metadata.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
             </dependency>
-
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-core-api</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-core-impl</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-messaging-api</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-messaging-impl</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-profile-api</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-profile-impl</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-saml-api</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-saml-impl</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-security-api</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-security-impl</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-soap-api</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-soap-impl</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-spring</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-storage-api</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-storage-impl</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-xmlsec-api</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-xmlsec-impl</artifactId>
-                <version>${opensaml.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-cli</artifactId>
-                <version>${shib-shared.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-networking</artifactId>
-                <version>${shib-shared.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-networking-spring</artifactId>
-                <version>${shib-shared.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-security</artifactId>
-                <version>${shib-shared.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-security-spring</artifactId>
-                <version>${shib-shared.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-service</artifactId>
-                <version>${shib-shared.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-spring</artifactId>
-                <version>${shib-shared.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-support</artifactId>
-                <version>${shib-shared.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-velocity</artifactId>
-                <version>${shib-shared.version}</version>
-            </dependency>
+            <!-- Shibboleth IdP BOM for importing IdP dependencies -->
             <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-velocity-spring</artifactId>
-                <version>${shib-shared.version}</version>
+                <groupId>${idp.groupId}</groupId>
+                <artifactId>idp-bom</artifactId>
+                <version>${idp.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
             </dependency>
 
             <dependency>
@@ -312,20 +136,6 @@
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
-
-            <!-- Test Dependencies -->
-            <dependency>
-                <groupId>${shib-shared.groupId}</groupId>
-                <artifactId>shib-testing</artifactId>
-                <version>${shib-shared.version}</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>${opensaml.groupId}</groupId>
-                <artifactId>opensaml-testing</artifactId>
-                <version>${opensaml.version}</version>
-                <scope>test</scope>
-            </dependency>
         </dependencies>
     </dependencyManagement>
 
diff --git a/sp-conf-impl/pom.xml b/sp-conf-impl/pom.xml
index 56f8a4a..3af13c4 100644
--- a/sp-conf-impl/pom.xml
+++ b/sp-conf-impl/pom.xml
@@ -20,14 +20,6 @@
     </properties>
         
     <dependencies>
-        <!-- Runtime Dependencies -->
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>sp-conf</artifactId>
-            <version>${project.version}</version>
-            <scope>runtime</scope>
-        </dependency>
-        <!-- Supports Eclipse class lookup from within Spring files. -->
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>sp-server-impl</artifactId>
@@ -42,88 +34,95 @@
         </dependency>
 
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-admin-impl</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- Supports Eclipse class lookup from within Spring files. -->
+        <dependency>
+            <groupId>${shib-profile.groupId}</groupId>
             <artifactId>shib-profile-api</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-profile.groupId}</groupId>
             <artifactId>shib-profile-impl</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-profile.groupId}</groupId>
             <artifactId>shib-saml-profile-api</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-attribute-impl</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-saml-attribute-impl</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-attribute-filter-spring</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-attribute-resolver-spring</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-core-api</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-core-impl</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-saml-api</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-saml-impl</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-storage-impl</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-shared.groupId}</groupId>
             <artifactId>shib-networking-spring</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-shared.groupId}</groupId>
             <artifactId>shib-spring</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-shared.groupId}</groupId>
             <artifactId>shib-velocity-spring</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
     
         <dependency>
@@ -135,12 +134,12 @@
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-core</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
-            <scope>runtime</scope>
+            <scope>provided</scope>
         </dependency>
     
         <!-- Test Dependencies -->
diff --git a/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/ServerModule.java b/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/ServerModule.java
new file mode 100644
index 0000000..673943b
--- /dev/null
+++ b/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/ServerModule.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.idp.plugin.sp;
+
+import java.io.IOException;
+
+import net.shibboleth.idp.module.IdPModule;
+import net.shibboleth.idp.module.impl.PluginIdPModule;
+import net.shibboleth.profile.module.ModuleException;
+
+/**
+ * {@link IdPModule} implementation.
+ */
+public final class ServerModule extends PluginIdPModule {
+
+    /**
+     * Constructor.
+     *  
+     * @throws ModuleException on error
+     * @throws IOException on error
+     */
+    public ServerModule() throws IOException, ModuleException {
+        super(Version.getVersion(), ServerModule.class);
+    }
+
+}
\ No newline at end of file
diff --git a/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/ServerPlugin.java b/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/ServerPlugin.java
new file mode 100644
index 0000000..c7651fc
--- /dev/null
+++ b/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/ServerPlugin.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.idp.plugin.sp;
+
+import java.io.IOException;
+
+import net.shibboleth.idp.module.IdPModule;
+import net.shibboleth.idp.plugin.impl.FirstPartyIdPPlugin;
+import net.shibboleth.profile.module.ModuleException;
+import net.shibboleth.profile.plugin.PluginException;
+import net.shibboleth.shared.collection.CollectionSupport;
+
+/**
+ * Details about the SP server plugin.
+ */
+public class ServerPlugin extends FirstPartyIdPPlugin {
+    
+    /**
+     * Constructor.
+     * 
+     * @throws IOException if the properties fail to load
+     * @throws PluginException if other errors occur
+     */
+    public ServerPlugin() throws IOException, PluginException {
+        super(ServerPlugin.class);
+        try {
+            final IdPModule module = new ServerModule();
+            setEnableOnInstall(CollectionSupport.singleton(module));
+            setDisableOnRemoval(CollectionSupport.singleton(module));
+        } catch (final IOException e) {
+            throw e;
+        } catch (final ModuleException e) {
+            throw new PluginException(e);
+        }
+    }
+    
+}
\ No newline at end of file
diff --git a/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/Version.java b/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/Version.java
new file mode 100644
index 0000000..a042ecf
--- /dev/null
+++ b/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/Version.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.idp.plugin.sp;
+
+import javax.annotation.Nullable;
+
+/** Class for getting and printing the version of the plugin. */
+public final class Version {
+
+    /** Plugin version. */
+    @Nullable private static final String VERSION = Version.class.getPackage().getImplementationVersion();
+
+    /** Constructor. */
+    private Version() {
+    }
+
+    /**
+     * Main entry point to program.
+     * 
+     * @param args command line arguments
+     */
+    public static void main(final String[] args) {
+        System.out.println(VERSION);
+    }
+
+    /**
+     * Get the version of the IdP.
+     * 
+     * @return version of the IdP
+     */
+    @Nullable public static String getVersion() {
+        return VERSION;
+    }
+}
\ No newline at end of file
diff --git a/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/package-info.java b/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/package-info.java
new file mode 100644
index 0000000..5119786
--- /dev/null
+++ b/sp-conf-impl/src/main/java/net/shibboleth/idp/plugin/sp/package-info.java
@@ -0,0 +1,18 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Module/plugin implementations for SP.
+ */
+package net.shibboleth.idp.plugin.sp;
\ No newline at end of file
diff --git a/sp-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml b/sp-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
new file mode 100644
index 0000000..c7fce6d
--- /dev/null
+++ b/sp-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:context="http://www.springframework.org/schema/context"
+    xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p"
+    xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:int="http://www.springframework.org/schema/integration"
+    xmlns:int-ip="http://www.springframework.org/schema/integration/ip"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
+                           http://www.springframework.org/schema/integration https://www.springframework.org/schema/integration/spring-integration.xsd
+                           http://www.springframework.org/schema/integration/ip https://www.springframework.org/schema/integration/ip/spring-integration-ip.xsd"
+
+    default-init-method="initialize" default-destroy-method="destroy">
+    
+    <!-- Spring Integration machinery. -->
+
+    <!-- Bean name must be set to this. -->
+    <bean id="integrationConversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
+        <property name="converters">
+            <set>
+                <bean class="net.shibboleth.sp.spring.impl.ByteArrayToDDFConverter" />
+                <bean class="net.shibboleth.sp.spring.impl.DDFToByteArrayConverter" />
+            </set>
+        </property>
+    </bean>
+
+    <bean id="ByteArrayLengthHeaderSerializer"
+        class="org.springframework.integration.ip.tcp.serializer.ByteArrayLengthHeaderSerializer" />
+
+    <bean id="ByteArrayCrLfSerializer"
+        class="org.springframework.integration.ip.tcp.serializer.ByteArrayCrLfSerializer" />
+
+    <!--
+    This worked fuctionally but didn't manage to allow blocked message exceptions to be raised against
+    the error channel.
+    
+    <bean id="shibboleth.TCPInterceptorFactory"
+            class="org.springframework.integration.ip.tcp.connection.TcpConnectionInterceptorFactoryChain">
+        <property name="interceptors">
+            <array>
+                <bean class="net.shibboleth.sp.remoting.tcp.impl.TCPConnectionInterceptorFactory">
+                    <constructor-arg>
+                        <bean parent="shibboleth.CommaDelimStringArray"
+                            c:_0="#{'%{sp.service.allowedRanges:127.0.0.1/32,::0/128}'.trim()}" />
+                    </constructor-arg>
+                </bean>
+            </array>
+        </property>
+    </bean>
+    
+    interceptor-factory-chain="shibboleth.TCPInterceptorFactory"
+    -->
+    
+    <int-ip:tcp-connection-factory id="shibboleth.IntegrationConnectionFactory"
+        type="server"
+        lookup-host="false"
+        local-address="%{sp.service.address:127.0.0.1}"
+        port="%{sp.service.port:1600}"
+        serializer="#{%{sp.service.prefixLength:false} ? 'ByteArrayLengthHeaderSerializer' : 'ByteArrayCrLfSerializer'}"
+        deserializer="#{%{sp.service.prefixLength:false} ? 'ByteArrayLengthHeaderSerializer' : 'ByteArrayCrLfSerializer'}" />
+
+    <int-ip:tcp-inbound-gateway id="shibboleth.IntegrationGateway"
+        connection-factory="shibboleth.IntegrationConnectionFactory"
+        request-channel="shibboleth.InputServerChannel"
+        reply-channel="shibboleth.OutputServerChannel"
+        error-channel="shibboleth.ErrorChannel" />
+                                      
+    <int:transformer id="shibboleth.ErrorHandler"
+            input-channel="shibboleth.ErrorChannel">
+        <bean class="%{sp.service.integration.errorTransformerClass:net.shibboleth.sp.remoting.impl.ErrorTransformer}" />
+    </int:transformer>
+                     
+    <int:channel id="shibboleth.InputServerChannel" datatype="net.shibboleth.sp.ddf.DDF" />
+    
+    <int:channel id="shibboleth.OutputServerChannel" datatype="byte[]" />
+
+    <int:service-activator id="shibboleth.ServiceActivator"
+        input-channel="shibboleth.InputServerChannel"
+        output-channel="shibboleth.OutputServerChannel"
+        ref="shibboleth.RequestProcessor"
+        method="execute" />
+
+    <bean id="shibboleth.RequestProcessor" class="net.shibboleth.sp.remoting.impl.RequestProcessor"
+        p:endpointManager-ref="shibboleth.ServiceProvider"
+        p:allowedRanges="#{'%{sp.service.allowedRanges:127.0.0.1/32,::0/128}'.trim()}" />
+
+    <!-- Services -->
+
+    <!-- The SP "guts", the remoted endpoints. -->
+
+    <bean id="shibboleth.ServiceProvider" parent="shibboleth.ReloadableService" 
+        c:claz="net.shibboleth.sp.remoting.EndpointManager"
+        p:serviceConfigurations-ref="ExtendedServiceProviderResources"
+        p:failFast="%{idp.service.sp.failFast:%{idp.service.failFast:false}}"
+        p:reloadCheckDelay="%{idp.service.sp.checkInterval:PT0S}" />
+
+    <util:list id="shibboleth.DefaultServiceProviderResources">
+        <value>conditional:%{idp.home}/conf/sp/applications.xml</value>
+        <value>conditional:%{idp.home}/conf/sp/credentials.xml</value>
+    </util:list>
+            
+    <!-- Auto-append system config files to resource set. -->
+    <bean id ="ExtendedServiceProviderResources" class="net.shibboleth.shared.spring.factory.CombiningListFactoryBean"
+            p:firstList="#{getObject('%{idp.service.sp.resources:shibboleth.ServiceProviderResources}'.trim()) ?:
+                getObject('shibboleth.DefaultServiceProviderResources')}">
+        <property name="secondList">
+            <util:list >
+                <value>classpath:/net/shibboleth/idp/plugin/sp/conf/endpoints-system.xml</value>
+                <value>classpath:/net/shibboleth/idp/plugin/sp/conf/relying-party-system.xml</value>
+            </util:list>
+        </property>
+    </bean>
+
+</beans>
\ No newline at end of file
diff --git a/sp-conf-impl/src/main/resources/META-INF/services/net.shibboleth.idp.module.IdPModule b/sp-conf-impl/src/main/resources/META-INF/services/net.shibboleth.idp.module.IdPModule
new file mode 100644
index 0000000..f443c18
--- /dev/null
+++ b/sp-conf-impl/src/main/resources/META-INF/services/net.shibboleth.idp.module.IdPModule
@@ -0,0 +1 @@
+net.shibboleth.idp.plugin.sp.ServerModule
diff --git a/sp-conf-impl/src/main/resources/META-INF/services/net.shibboleth.idp.plugin.IdPPlugin b/sp-conf-impl/src/main/resources/META-INF/services/net.shibboleth.idp.plugin.IdPPlugin
new file mode 100644
index 0000000..f42e206
--- /dev/null
+++ b/sp-conf-impl/src/main/resources/META-INF/services/net.shibboleth.idp.plugin.IdPPlugin
@@ -0,0 +1 @@
+net.shibboleth.idp.plugin.sp.ServerPlugin
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/endpoints-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/conf/endpoints-system.xml
similarity index 87%
rename from sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/endpoints-system.xml
rename to sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/conf/endpoints-system.xml
index 8800f99..93c74ee 100644
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/endpoints-system.xml
+++ b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/conf/endpoints-system.xml
@@ -16,9 +16,9 @@
     <context:annotation-config />
 
     <!-- ServiceableComponent exposed to the root context. -->
-    <bean class="net.shibboleth.sp.remoting.impl.ReloadingEndpointManager"
-        c:_0-ref="shibboleth.EndpointManager"
-        p:id="shibboleth.ReloadingEndpointManager" />
+<!--     <bean class="net.shibboleth.sp.remoting.impl.ReloadingEndpointManager" -->
+<!--         c:_0-ref="shibboleth.EndpointManager" -->
+<!--         p:id="shibboleth.ReloadingEndpointManager" /> -->
 
     <!-- This bean auto-wires the remoting endpoints into a map exposed by the surrounding service. -->
     <bean id="shibboleth.EndpointManager" class="net.shibboleth.sp.remoting.impl.BasicEndpointManager" />
@@ -40,9 +40,7 @@
         p:attributeResolver-ref="shibboleth.AttributeResolverService"
         p:attributeFilter-ref="shibboleth.AttributeFilterService" />
 
-    <import resource="${sp.home}/conf/applications.xml" />
-
     <!-- Wildcard import hook for plugins. -->
-    <import resource="classpath*:/META-INF/net/shibboleth/sp/service/provider/postconfig.xml" />
+    <import resource="classpath*:/META-INF/net/shibboleth/idp/service/sp/postconfig.xml" />
 
 </beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/relying-party-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/conf/relying-party-system.xml
similarity index 99%
rename from sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/relying-party-system.xml
rename to sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/conf/relying-party-system.xml
index 40d04f3..31862ce 100644
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/relying-party-system.xml
+++ b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/conf/relying-party-system.xml
@@ -17,13 +17,14 @@
     <!-- This is one of the few properties we rely on that has no default. -->
     <bean id="entityID" class="java.lang.String" c:_0="%{sp.entityID}" />
 
-    <!-- Pulls together the various components that feed the resolver. -->
+    <!-- Pulls together the various components that feed the resolver.
     <bean class="net.shibboleth.profile.relyingparty.impl.DefaultRelyingPartyConfigurationResolver"
         p:unverifiedConfiguration-ref="shibboleth.UnverifiedRelyingParty"
         p:defaultConfiguration-ref="shibboleth.DefaultRelyingParty"
         p:relyingPartyConfigurations-ref="shibboleth.RelyingPartyOverrides"
         p:defaultSecurityConfiguration-ref="%{sp.security.config:shibboleth.DefaultSecurityConfiguration}" />
-
+    -->
+    
     <!--
     Auto-wiring exposers for credentials to get them loaded into the bean above.
     The qualifiers control which auto-wiring point is used.
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module.properties b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module.properties
new file mode 100644
index 0000000..d0b5001
--- /dev/null
+++ b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module.properties
@@ -0,0 +1,20 @@
+# Properties defining this module.
+
+# Class to Module ID mappings
+net.shibboleth.idp.plugin.sp.ServerModule = idp.sp.Server
+
+# Module Owner
+idp.sp.Server.plugin = net.shibboleth.idp.plugin.sp.server
+
+idp.sp.Server.name = SP Server Hub
+idp.sp.Server.desc = Shared hub for SP agent processing.
+idp.sp.Server.url = /SP
+
+idp.sp.Server.1.src = /net/shibboleth/idp/plugin/sp/module/conf/applications.xml
+idp.sp.Server.1.dest = conf/sp/applicatons.xml
+
+idp.sp.Server.2.src = /net/shibboleth/idp/plugin/sp/module/conf/credentials.xml
+idp.sp.Server.2.dest = conf/sp/credentials.xml
+
+idp.sp.Server.3.src = /net/shibboleth/idp/plugin/sp/module/conf/sp.properties
+idp.sp.Server.3.dest = conf/sp/sp.properties
diff --git a/sp-conf/src/main/resources/conf/applications.xml b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module/conf/applications.xml
similarity index 100%
rename from sp-conf/src/main/resources/conf/applications.xml
rename to sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module/conf/applications.xml
diff --git a/sp-conf/src/main/resources/conf/credentials.xml b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module/conf/credentials.xml
similarity index 100%
rename from sp-conf/src/main/resources/conf/credentials.xml
rename to sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module/conf/credentials.xml
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module/conf/sp.properties b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module/conf/sp.properties
new file mode 100644
index 0000000..0d79feb
--- /dev/null
+++ b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/module/conf/sp.properties
@@ -0,0 +1,31 @@
+# Networking settings for socket listener.
+#sp.service.address = 127.0.0.1
+#sp.service.port = 1600
+#sp.service.allowedRanges = 127.0.0.1/32, ::1/128
+# Set to true for better performance.
+#sp.service.prefixLength = false
+
+# Controls configuration of new "SP" service.
+#idp.service.sp.resources = shibboleth.ServiceProviderResources
+#idp.service.sp.failFast = false
+idp.service.sp.checkInterval = PT5M
+
+# Set the (defaylt) entityID of the SP
+sp.entityID = https://sp.example.org
+
+# General SP cookie properties (maxAge only applies to persistent cookies)
+#sp.cookie.secure = true
+#sp.cookie.httpOnly = true
+#sp.cookie.domain =
+#sp.cookie.path =
+#sp.cookie.maxAge = 31536000
+
+# Settings for SP public/private signing and encryption key(s)
+# During decryption key rollover, point the ".2" properties at a second
+# keypair, uncomment in credentials.xml, then publish it in your metadata.
+sp.signing.key = %{idp.home}/credentials/sp-signing.key
+sp.signing.cert = %{idp.home}/credentials/sp-signing.crt
+sp.encryption.key = %{idp.home}/credentials/sp-encryption.key
+sp.encryption.cert = %{idp.home}/credentials/sp-encryption.crt
+#sp.encryption.key.2 = %{idp.home}/credentials/sp-encryption-old.key
+#sp.encryption.cert.2 = %{idp.home}/credentials/sp-encryption-old.crt
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/plugin.properties b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/plugin.properties
new file mode 100644
index 0000000..38d35d6
--- /dev/null
+++ b/sp-conf-impl/src/main/resources/net/shibboleth/idp/plugin/sp/plugin.properties
@@ -0,0 +1,8 @@
+# Properties defining this plugin
+
+plugin.id = net.shibboleth.idp.plugin.sp.server
+# Only used when package manifest is not available
+plugin.version = 1.0.0
+
+# No prereqs
+#plugin.modules.required =
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/attribute-filter-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/attribute-filter-system.xml
deleted file mode 100644
index d517632..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/attribute-filter-system.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!-- Wildcard import hook for plugins. -->
-    <import resource="classpath*:/META-INF/net/shibboleth/sp/service/attribute/filter/postconfig.xml" />
-    
-</beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/attribute-registry-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/attribute-registry-system.xml
deleted file mode 100644
index 29ff401..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/attribute-registry-system.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <bean id="SAML2StringTranscoder"
-        class="net.shibboleth.idp.saml.attribute.transcoding.impl.SAML2StringAttributeTranscoder" />
-    <bean id="SAML2ScopedStringTranscoder"
-        class="net.shibboleth.idp.saml.attribute.transcoding.impl.SAML2ScopedStringAttributeTranscoder" />
-    <bean id="SAML2ByteTranscoder"
-        class="net.shibboleth.idp.saml.attribute.transcoding.impl.SAML2ByteAttributeTranscoder" />
-    <bean id="SAML2XMLObjectTranscoder"
-        class="net.shibboleth.idp.saml.attribute.transcoding.impl.SAML2XMLObjectAttributeTranscoder" />
-    <bean id="SAML2DateTimeTranscoder"
-        class="net.shibboleth.idp.saml.attribute.transcoding.impl.SAML2DateTimeAttributeTranscoder" />
-    
-    <bean id="shibboleth.TranscodingRule"
-        class="net.shibboleth.idp.attribute.transcoding.TranscodingRule" abstract="true" />
-        
-    <bean id="shibboleth.TranscodingRuleLoader"
-        class="net.shibboleth.idp.attribute.transcoding.impl.TranscodingRuleLoader" abstract="true" />
-
-    <bean id="shibboleth.TranscodingProperties" lazy-init="true"
-            class="org.springframework.beans.factory.config.PropertiesFactoryBean">
-        <property name="properties">
-            <props>
-                <prop key="saml1.encodeType">%{sp.service.attribute.registry.encodeType:false}</prop>
-                <prop key="saml2.encodeType">%{sp.service.attribute.registry.encodeType:false}</prop>
-            </props>
-        </property>
-    </bean>
-    
-    <!-- Wildcard import hook for plugins. -->
-    <import resource="classpath*:/META-INF/net/shibboleth/sp/service/attribute/registry/postconfig.xml" />
-    
-</beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/attribute-resolver-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/attribute-resolver-system.xml
deleted file mode 100644
index 113bd23..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/attribute-resolver-system.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!-- Wildcard import hook for plugins. -->
-    <import resource="classpath*:/META-INF/net/shibboleth/sp/service/attribute/resolver/postconfig.xml" />
-    
-</beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/conditions.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/conditions.xml
deleted file mode 100644
index e5fcc9a..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/conditions.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <bean id="shibboleth.Conditions.FALSE"
-        class="com.google.common.base.Predicates" factory-method="alwaysFalse" />
-    <bean id="shibboleth.Conditions.TRUE"
-        class="com.google.common.base.Predicates" factory-method="alwaysTrue" />
-    
-    <bean id="shibboleth.Conditions.AND"
-        class="net.shibboleth.shared.logic.PredicateSupport" factory-method="and" abstract="true" />
-    <bean id="shibboleth.Conditions.NOT"
-        class="net.shibboleth.shared.logic.PredicateSupport" factory-method="not" abstract="true" />
-    <bean id="shibboleth.Conditions.OR"
-        class="net.shibboleth.shared.logic.PredicateSupport" factory-method="or" abstract="true" />
-
-    <bean id="shibboleth.BiConditions.AND"
-        class="net.shibboleth.shared.logic.BiPredicateSupport" factory-method="and" abstract="true" />
-    <bean id="shibboleth.BiConditions.NOT"
-        class="net.shibboleth.shared.logic.BiPredicateSupport" factory-method="not" abstract="true" />
-    <bean id="shibboleth.BiConditions.OR"
-        class="net.shibboleth.shared.logic.BiPredicateSupport" factory-method="or" abstract="true" />
-
-    <bean id="shibboleth.BiConditions.Scripted"
-        class="net.shibboleth.shared.logic.ScriptedBiPredicate" abstract="true" />
-    <bean id="shibboleth.BiConditions.Expression"
-        class="net.shibboleth.shared.spring.expression.SpringExpressionBiPredicate" abstract="true" />
-    
-</beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/functions.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/functions.xml
deleted file mode 100644
index 2283cff..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/functions.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <bean id="shibboleth.Functions.Constant"
-        class="net.shibboleth.shared.logic.FunctionSupport" factory-method="constant" abstract="true" />
-    <bean id="shibboleth.Functions.Compose"
-        class="net.shibboleth.shared.logic.FunctionSupport" factory-method="compose" abstract="true" />
-
-    <bean id="shibboleth.Functions.PredicateDriven"
-        class="net.shibboleth.shared.logic.PredicateDrivenFunction" abstract="true" />
-
-    <bean id="shibboleth.Functions.Scripted"
-        class="net.shibboleth.shared.logic.ScriptedFunction" abstract="true" />
-    <bean id="shibboleth.Functions.Expression"
-        class="net.shibboleth.shared.spring.expression.SpringExpressionFunction" abstract="true" />
-
-    <bean id="shibboleth.BiFunctions.Constant"
-        class="net.shibboleth.shared.logic.BiFunctionSupport" factory-method="constant" abstract="true" />
-    <bean id="shibboleth.BiFunctions.Compose"
-        class="net.shibboleth.shared.logic.BiFunctionSupport" factory-method="compose" abstract="true" />
-
-    <bean id="shibboleth.BiFunctions.Scripted"
-        class="net.shibboleth.shared.logic.ScriptedBiFunction" abstract="true" />
-    <bean id="shibboleth.BiFunctions.Expression"
-        class="net.shibboleth.shared.spring.expression.SpringExpressionBiFunction" abstract="true" />
-
-    <bean id="shibboleth.Consumers.Scripted"
-        class="net.shibboleth.shared.logic.ScriptedConsumer" abstract="true" />
-    <bean id="shibboleth.Consumers.Expression"
-        class="net.shibboleth.shared.spring.expression.SpringExpressionConsumer" abstract="true" />
-    <bean id="shibboleth.BiConsumers.Scripted"
-        class="net.shibboleth.shared.logic.ScriptedBiConsumer" abstract="true" />
-    <bean id="shibboleth.BiConsumers.Expression"
-        class="net.shibboleth.shared.spring.expression.SpringExpressionBiConsumer" abstract="true" />
-        
-</beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/global-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/global-system.xml
deleted file mode 100644
index 3810a1c..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/global-system.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!-- Needed to allow for auto-wiring of componnents. -->
-    <context:annotation-config />
-
-    <!-- This bean MUST be called "conversionService" to work properly. -->
-    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
-        <property name="converters">
-            <set>
-                <bean class="net.shibboleth.shared.spring.config.StringToIPRangeConverter" />
-                <bean class="net.shibboleth.shared.spring.config.BooleanToPredicateConverter" />
-                <bean class="net.shibboleth.shared.spring.config.StringBooleanToPredicateConverter" />
-                <bean class="net.shibboleth.shared.spring.config.StringToResourceConverter" />
-                <bean class="net.shibboleth.shared.spring.config.StringToDurationConverter" />
-                <bean class="net.shibboleth.shared.spring.config.StringToPeriodConverter" />
-            </set>
-        </property>
-    </bean>
-
-    <!-- This BeanPostProcessor auto-sets identifiable beans with the bean name (if not already set). -->
-    <bean id="shibboleth.IdentifiableBeanPostProcessor"
-        class="net.shibboleth.shared.spring.config.IdentifiableBeanPostProcessor" />
-
-    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer"
-        class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
-        p:placeholderPrefix="%{" p:placeholderSuffix="}" />
-
-    <import resource="%{sp.home}/conf/global.xml" />
-
-    <import resource="primitives.xml" />
-    <import resource="conditions.xml" />
-    <import resource="functions.xml" />
-    <import resource="http-client.xml" />
-    <import resource="sealer.xml" />
-    <import resource="integration.xml" />
-    <import resource="security-system.xml" />
-    <import resource="services-system.xml" />
-
-    <bean id="systemPrereqs" class="org.springframework.beans.factory.config.MethodInvokingBean"
-            p:targetObject-ref="systemProperties" p:targetMethod="putAll">
-        <property name="arguments">
-            <props>
-                <prop key="org.apache.xml.security.ignoreLineBreaks">%{sp.apache.xml.security.ignoreLineBreaks:true}</prop>
-            </props>
-        </property>
-    </bean>
-
-    <bean id="shibboleth.OpenSAMLConfig" class="net.shibboleth.sp.impl.OpenSAMLConfigBean"
-        depends-on="systemPrereqs,shibboleth.LoggingService"
-        p:parserPool-ref="shibboleth.ParserPool" />
-        <!-- p:metricRegistry-ref="shibboleth.metrics.MetricRegistry" /> -->
-
-    <util:map id="shibboleth.DefaultVelocityEngineProperties">
-        <entry key="parser.space_gobbling" value="%{sp.velocity.space.gobbling:bc}" />
-        <entry key="resource.loaders" value="file, classpath, string" />
-        <entry key="resource.loader.classpath.class" value="org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader" />
-        <entry key="resource.loader.string.class" value="org.apache.velocity.runtime.resource.loader.StringResourceLoader" />
-        <entry key="resource.loader.file.class" value="org.apache.velocity.runtime.resource.loader.FileResourceLoader" />
-        <entry key="resource.loader.file.path" value="#{'%{sp.views:%{sp.home}/views}'.trim()}" />
-        <entry key="resource.loader.file.cache" value="false" />
-        <entry key="runtime.strict_mode.enable" value="%{sp.velocity.runtime.strictmode:false}" />
-    </util:map>
-
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.shared.spring.velocity.VelocityEngineFactoryBean"
-        depends-on="shibboleth.LoggingService"
-        p:velocityPropertiesMap="#{getObject('shibboleth.VelocityEngineProperties') ?: getObject('shibboleth.DefaultVelocityEngineProperties')}" />
-
-    <alias name="%{sp.xml.parserPool:shibboleth.DefaultParserPool}" alias="shibboleth.ParserPool"/>
-
-    <bean id="shibboleth.DefaultParserPool" class="net.shibboleth.shared.xml.impl.BasicParserPool"
-            depends-on="shibboleth.LoggingService" lazy-init="true"
-            p:maxPoolSize="100"
-            p:coalescing="true"
-            p:ignoreComments="true"
-            p:ignoreElementContentWhitespace="true"
-            p:namespaceAware="true"
-            p:securityManagerAttributeName="http://apache.org/xml/properties/security-manager">
-        <property name="builderFeatures">
-            <map>
-                <entry key="http://apache.org/xml/features/disallow-doctype-decl">
-                    <util:constant static-field="java.lang.Boolean.TRUE" />
-                </entry>
-                <entry key="http://apache.org/xml/features/validation/schema/normalized-value">
-                    <util:constant static-field="java.lang.Boolean.FALSE" />
-                </entry>
-                <entry key="http://javax.xml.XMLConstants/feature/secure-processing">
-                    <util:constant static-field="java.lang.Boolean.TRUE" />
-                </entry>
-            </map>
-        </property>
-    </bean>
-
-    <!--  Bean used by the SchemaValidation metadata filter and anything else doing basic schema validation. -->
-    <bean id="shibboleth.SchemaBuilder" lazy-init="true"
-        class="org.opensaml.saml.common.xml.SAMLSchemaBuilder" c:ver="SAML_11" c:strict="%{sp.schemaValidation.strict:false}">
-        <property name="schemaBuilder">
-            <bean class="net.shibboleth.shared.xml.SchemaBuilder"
-                    p:schemaResources="#{getObject('shibboleth.ExtensionSchemas') ?: getObject('shibboleth.DefaultExtensionSchemas')}">
-                <property name="resourceResolver">
-                    <bean class="net.shibboleth.shared.xml.ClasspathResolver" />
-                </property>
-            </bean>
-        </property>
-    </bean>
-
-    <util:list id="shibboleth.DefaultExtensionSchemas">
-        <value>#{'classpath:' + T(org.opensaml.saml.common.xml.SAMLConstants).XMLSIG_SCHEMA_LOCATION }</value>
-    </util:list>
-
-    <bean id="shibboleth.BuilderFactory" factory-method="getBuilderFactory" class="org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport" depends-on="shibboleth.OpenSAMLConfig" />
-    <bean id="shibboleth.MarshallerFactory" factory-method="getMarshallerFactory" class="org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport" depends-on="shibboleth.OpenSAMLConfig" />
-    <bean id="shibboleth.UnmarshallerFactory" factory-method="getUnmarshallerFactory" class="org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport" depends-on="shibboleth.OpenSAMLConfig" />
-
-    <bean id="shibboleth.StorageService" lazy-init="true"
-        class="%{sp.storage.StorageService:org.opensaml.storage.impl.MemoryStorageService}"
-        p:cleanupInterval="%{sp.storage.cleanupInterval:PT10M}" />
-
-    <bean id="shibboleth.ReplayCache" class="org.opensaml.storage.impl.StorageServiceReplayCache"
-        p:storage-ref="#{'%{sp.replayCache.StorageService:shibboleth.StorageService}'.trim()}"
-        p:strict="%{sp.replayCache.strict:true}" />
-
-    <bean id="shibboleth.SAMLArtifactMap" depends-on="shibboleth.StorageService"
-        class="org.opensaml.saml.common.binding.artifact.impl.StorageServiceSAMLArtifactMap"
-        p:storageService-ref="#{'%{sp.artifact.StorageService:shibboleth.StorageService}'.trim()}" />
-
- </beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/http-client.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/http-client.xml
deleted file mode 100644
index 971227b..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/http-client.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer"
-        class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
-        p:placeholderPrefix="%{" p:placeholderSuffix="}" />
-
-    <!-- These are parent beans for custom HTTP clients and resources. -->
-    <bean id="shibboleth.HttpClientFactory" abstract="true"
-        class="net.shibboleth.shared.spring.httpclient.factory.HttpClientFactoryBean" />
-    <bean id="shibboleth.FileCachingHttpClientFactory" abstract="true"
-        class="net.shibboleth.shared.spring.httpclient.factory.FileCachingHttpClientFactoryBean" />
-    <bean id="shibboleth.MemoryCachingHttpClientFactory" abstract="true"
-        class="net.shibboleth.shared.spring.httpclient.factory.InMemoryCachingHttpClientFactoryBean" />
-        
-<!--     <bean id="shibboleth.HTTPResource" abstract="true" -->
-<!--         class="net.shibboleth.idp.profile.spring.resource.impl.HTTPResourceFactoryBean" /> -->
-
-    <!-- Socket Factory implementations -->
-
-    <bean id="shibboleth.SecurityEnhancedTLSSocketFactory" name="shibboleth.TrustEngineTLSSocketFactory" 
-        lazy-init="true"
-        class="org.opensaml.security.httpclient.impl.SecurityEnhancedHttpClientSupport"
-        factory-method="buildTLSSocketFactory" />
-    
-    <bean id="shibboleth.SecurityEnhancedTLSSocketFactoryWithClientTLS"
-        lazy-init="true"
-        class="org.opensaml.security.httpclient.impl.SecurityEnhancedHttpClientSupport"
-        factory-method="buildTLSSocketFactoryWithClientTLS" />
-    
-    <bean id="shibboleth.SecurityEnhancedTLSSocketFactoryWithClientTLSOnly"
-        lazy-init="true"
-        class="org.opensaml.security.httpclient.impl.SecurityEnhancedHttpClientSupport"
-        factory-method="buildTLSSocketFactoryWithClientTLSOnly" />
-
-    <!--
-    This is a default client for embedded system use but should NOT be used by deployers OR
-    within the SP within any reloadable service child contexts.
-    -->
-    <bean id="shibboleth.InternalHttpClient" parent="shibboleth.HttpClientFactory" lazy-init="true"
-        p:tLSSocketFactory="#{ %{sp.httpclient.useTrustEngineTLSSocketFactory:false} or %{sp.httpclient.useSecurityEnhancedTLSSocketFactory:false} ? @'shibboleth.SecurityEnhancedTLSSocketFactory' : null }"
-        p:connectionDisregardTLSCertificate="%{sp.httpclient.connectionDisregardTLSCertificate:false}"
-        p:connectionTimeout="%{sp.httpclient.connectionTimeout:PT1M}"
-        p:connectionRequestTimeout="%{sp.httpclient.connectionRequestTimeout:PT1M}"
-        p:socketTimeout="%{sp.httpclient.socketTimeout:PT1M}" 
-        p:maxConnectionsTotal="%{sp.httpclient.maxConnectionsTotal:100}"
-        p:maxConnectionsPerRoute="%{sp.httpclient.maxConnectionsPerRoute:100}" />
-
-</beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/integration.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/integration.xml
deleted file mode 100644
index 326e433..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/integration.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-	   xmlns:int="http://www.springframework.org/schema/integration"
-	   xmlns:int-ip="http://www.springframework.org/schema/integration/ip"
-	   xmlns:context="http://www.springframework.org/schema/context"
-	   xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
-                    		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
-                    		http://www.springframework.org/schema/integration https://www.springframework.org/schema/integration/spring-integration.xsd
-                    		http://www.springframework.org/schema/integration/ip https://www.springframework.org/schema/integration/ip/spring-integration-ip.xsd"
-                            
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!-- Bean name must be set to this. -->
-    <bean id="integrationConversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
-        <property name="converters">
-            <set>
-                <bean class="net.shibboleth.sp.spring.impl.ByteArrayToDDFConverter" />
-                <bean class="net.shibboleth.sp.spring.impl.DDFToByteArrayConverter" />
-            </set>
-        </property>
-    </bean>
-
-    <bean id="ByteArrayLengthHeaderSerializer"
-        class="org.springframework.integration.ip.tcp.serializer.ByteArrayLengthHeaderSerializer" />
-
-    <bean id="ByteArrayCrLfSerializer"
-        class="org.springframework.integration.ip.tcp.serializer.ByteArrayCrLfSerializer" />
-
-    <!--
-    This worked fuctionally but didn't manage to allow blocked message exceptions to be raised against
-    the error channel.
-    
-    <bean id="shibboleth.TCPInterceptorFactory"
-            class="org.springframework.integration.ip.tcp.connection.TcpConnectionInterceptorFactoryChain">
-        <property name="interceptors">
-            <array>
-                <bean class="net.shibboleth.sp.remoting.tcp.impl.TCPConnectionInterceptorFactory">
-                    <constructor-arg>
-                        <bean parent="shibboleth.CommaDelimStringArray"
-                            c:_0="#{'%{sp.service.allowedRanges:127.0.0.1/32,::0/128}'.trim()}" />
-                    </constructor-arg>
-                </bean>
-            </array>
-        </property>
-    </bean>
-    
-    interceptor-factory-chain="shibboleth.TCPInterceptorFactory"
-    -->
-    
-	<int-ip:tcp-connection-factory id="shibboleth.IntegrationConnectionFactory"
-        type="server"
-        lookup-host="false"
-        local-address="%{sp.service.address:127.0.0.1}"
-        port="%{sp.service.port:1600}"
-        serializer="#{%{sp.service.prefixLength:false} ? 'ByteArrayLengthHeaderSerializer' : 'ByteArrayCrLfSerializer'}"
-        deserializer="#{%{sp.service.prefixLength:false} ? 'ByteArrayLengthHeaderSerializer' : 'ByteArrayCrLfSerializer'}" />
-
-	<int-ip:tcp-inbound-gateway id="shibboleth.IntegrationGateway"
-        connection-factory="shibboleth.IntegrationConnectionFactory"
-		request-channel="shibboleth.InputServerChannel"
-        reply-channel="shibboleth.OutputServerChannel"
-		error-channel="shibboleth.ErrorChannel" />
-                                      
-	<int:transformer id="shibboleth.ErrorHandler"
-            input-channel="shibboleth.ErrorChannel">
-        <bean class="%{sp.service.integration.errorTransformerClass:net.shibboleth.sp.remoting.impl.ErrorTransformer}" />
-    </int:transformer>
-                     
-	<int:channel id="shibboleth.InputServerChannel" datatype="net.shibboleth.sp.ddf.DDF" />
-    
-	<int:channel id="shibboleth.OutputServerChannel" datatype="byte[]" />
-
-	<int:service-activator id="shibboleth.ServiceActivator"
-        input-channel="shibboleth.InputServerChannel"
-        output-channel="shibboleth.OutputServerChannel"
-		ref="shibboleth.RequestProcessor"
-		method="execute" />
-
-	<bean id="shibboleth.RequestProcessor" class="net.shibboleth.sp.remoting.impl.RequestProcessor"
-        depends-on="shibboleth.LoggingService"
-        p:endpointManager-ref="shibboleth.ServiceProvider"
-        p:allowedRanges="#{'%{sp.service.allowedRanges:127.0.0.1/32,::0/128}'.trim()}" />
-    
-</beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/metadata-providers-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/metadata-providers-system.xml
deleted file mode 100644
index d5dbe6b..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/metadata-providers-system.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <context:annotation-config />
-
-    <!-- BeanPostProcessors that auto-install MetadataFilters for internal use. -->
-    
-    <bean class="net.shibboleth.spring.metadata.ByReferenceFilterBeanPostProcessor"
-        p:enabled="%{idp.service.metadata.enableByReferenceFilters:true}" />
-    
-    <bean class="net.shibboleth.spring.metadata.NodeProcessingAttachingBeanPostProcessor"
-        p:nodeProcessors="#{getObject('shibboleth.MetadataNodeProcessors')}" />
-
-    <!-- Default NodeProcessors to auto-wire. -->
-    <bean class="org.opensaml.saml.metadata.resolver.filter.impl.EntitiesDescriptorNameProcessor" />
-    <bean class="net.shibboleth.idp.saml.security.impl.KeyAuthorityNodeProcessor" />
-    <bean class="net.shibboleth.idp.saml.metadata.impl.ScopesNodeProcessor" />
-    <bean class="net.shibboleth.idp.saml.metadata.impl.UIInfoNodeProcessor" />
-    <bean class="net.shibboleth.idp.saml.attribute.impl.AttributeMappingNodeProcessor"
-        c:_0-ref="shibboleth.AttributeRegistryService" />
-    
-    <!-- Signature Validation Criteria  -->
-    
-    <bean id="shibboleth.MetadataSignatureValidationStaticCriteria" 
-            class="net.shibboleth.spring.metadata.filter.SignatureValidationCriteriaSetFactoryBean" 
-            p:includeOpenSAMLGlobalConfig="true"
-            p:otherCriteria="#{getObject('shibboleth.MetadataSignatureValidationOtherCriteria')}"
-            p:signatureValidationParametersResolver="#{getObject('shibboleth.MetadataSignatureValidationParametersResolver')}">
-        <property name="signatureValidationConfigurations">
-            <list>
-                <bean parent="shibboleth.BasicSignatureValidationConfiguration" 
-                    p:includedAlgorithms="#{getObject('shibboleth.IncludedSignatureAlgorithms')}"
-                    p:excludedAlgorithms="#{getObject('shibboleth.ExcludedSignatureAlgorithms')}" />
-            </list>
-        </property>
-    </bean>
-    
-    <!-- Metadata Query Protocol (MDQ) artifact support. -->
-    <bean id="shibboleth.Metadata.MDQ.URLBuilder.SAMLArtifact" lazy-init="true"
-        class="org.opensaml.saml.metadata.resolver.impl.SAMLArtifactURLBuilder" />
-    
-    <!-- Wildcard import hook for plugins. -->
-    <import resource="classpath*:/META-INF/net/shibboleth/sp/service/saml/metadata/postconfig.xml" />
-    
-</beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/primitives.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/primitives.xml
deleted file mode 100644
index 9212040..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/primitives.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!-- Low-level helpers. -->
-
-    <bean id="shibboleth.Pair" class="net.shibboleth.shared.collection.Pair" abstract="true" />
-    
-    <bean id="shibboleth.CommaDelimStringArray"
-        class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToStringArray" abstract="true" />
-            
-    <!-- Parent bean for indirecting a lookup into a managed/reloadable bean. -->
-    
-    <bean id="shibboleth.ManagedBean" abstract="true"
-        class="net.shibboleth.ext.spring.factory.ProxiedFactoryBean"
-        c:service-ref="shibboleth.ManagedBeanService" />
-
-    <!-- List combiner factory bean. -->
-
-    <bean id="shibboleth.ListCombiner" abstract="true"
-        class="net.shibboleth.shared.spring.factory.CombiningListFactoryBean" />
-
-    <!-- Resource beans. -->    
-
-    <bean id="shibboleth.ConditionalReesource" abstract="true"
-        class="net.shibboleth.shared.spring.resource.ConditionalResource" />
-
-    <bean id="shibboleth.RunnableFileSystemResource" abstract="true"
-        class="net.shibboleth.shared.spring.resource.RunnableFileSystemResource" />
-
-    <!-- TrustEngine helpers. -->
-        
-    <bean id="shibboleth.StaticExplicitTrustEngine" abstract="true"
-        class="org.opensaml.spring.trust.StaticExplicitKeyFactoryBean" />
-    
-    <bean id="shibboleth.StaticPKIXTrustEngine" abstract="true"
-        class="org.opensaml.spring.trust.StaticPKIXFactoryBean" />
-        
-    <bean id="shibboleth.X509TrustManager" abstract="true"
-        class="org.opensaml.security.trust.impl.TrustEngineX509TrustManager" />
-
-    <!-- Beans for user-visible metadata configuration usage. -->
-
-    <!-- Secondary indexing support -->
-    <bean id="shibboleth.Metadata.Index.SAMLArtifact" lazy-init="true"
-        class="org.opensaml.saml.metadata.resolver.index.impl.SAMLArtifactMetadataIndex" />
-
-    <!-- Note: By default this indexes all endpoints under all roles.
-         To index more selectively by role and endpoint name/type, use the predicate below. -->
-    <bean id="shibboleth.Metadata.Index.Endpoint" lazy-init="true"
-        class="org.opensaml.saml.metadata.resolver.index.impl.EndpointMetadataIndex" />
-
-    <!-- By default this predicate selects no endpoints to index.
-         So this would typically be used only as a parent bean, with an added ctor param.
-         This would be a Map<QName, Set<QName>> (RoleDescriptor element/type -> Endpoint(s) element/type),
-         either as a single ctor param or as a named ctor param c:indexableTypes. -->
-    <bean id="shibboleth.Metadata.Index.Endpoint.Predicate.ByRoleAndEndpoint" lazy-init="true"
-        class="org.opensaml.saml.metadata.resolver.index.impl.EndpointMetadataIndex.DefaultEndpointSelectionPredicate" />
-
-</beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/sealer.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/sealer.xml
deleted file mode 100644
index 1ce64e2..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/sealer.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!-- Isolated for potential reusability. -->
-
-    <bean id="shibboleth.DataSealerKeyStrategy" lazy-init="true"
-            class="net.shibboleth.shared.security.impl.BasicKeystoreKeyStrategy"
-        p:keystoreType="%{sp.sealer.storeType:JCEKS}"
-        p:keystoreResource="%{sp.sealer.storeResource:}"
-        p:keyVersionResource="%{sp.sealer.versionResource:}"
-        p:keyAlias="%{sp.sealer.aliasBase:secret}"
-        p:keystorePassword="%{sp.sealer.storePassword:}"
-        p:keyPassword="%{sp.sealer.keyPassword:}"
-        p:updateInterval="%{sp.sealer.updateInterval:PT15M}" />
-
-    <bean id="shibboleth.DataSealer" lazy-init="true"
-        class="net.shibboleth.shared.security.DataSealer"
-        p:keyStrategy-ref="#{ '%{sp.sealer.keyStrategy:shibboleth.DataSealerKeyStrategy}'.trim() }"
-        p:lockedAtStartup="#{!environment.containsProperty('sp.sealer.keyStrategy') and (!environment.containsProperty('sp.sealer.storePassword') or !environment.containsProperty('sp.sealer.keyPassword')) }" />
-
- </beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/security-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/security-system.xml
deleted file mode 100644
index 31c147f..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/security-system.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <bean id="shibboleth.DefaultIdentifierGenerationStrategy"
-            class="net.shibboleth.shared.security.IdentifierGenerationStrategy" factory-method="getInstance">
-        <constructor-arg>
-            <util:constant
-                static-field="net.shibboleth.shared.security.IdentifierGenerationStrategy.ProviderType.SECURE" />
-        </constructor-arg>
-    </bean>
-
-    <!-- Principally used in relying-party.xml to define new security configurations. -->
-
-    <bean id="shibboleth.BasicSignatureValidationConfiguration" abstract="true"
-        class="org.opensaml.xmlsec.impl.BasicSignatureValidationConfiguration"
-        p:includedAlgorithms="#{getObject('shibboleth.IncludedSignatureAlgorithms')}"
-        p:excludedAlgorithms="#{getObject('shibboleth.ExcludedSignatureAlgorithms')}" />
-    
-    <bean id="shibboleth.BasicClientTLSValidationConfiguration" abstract="true"
-        class="org.opensaml.security.x509.tls.impl.BasicClientTLSValidationConfiguration" />
-    
-    <bean id="shibboleth.BasicHttpClientSecurityConfiguration" abstract="true"
-        class="org.opensaml.security.httpclient.impl.BasicHttpClientSecurityConfiguration" />
-    
-    <bean id="shibboleth.BasicSignatureSigningConfiguration" abstract="true"
-        class="org.opensaml.xmlsec.impl.BasicSignatureSigningConfiguration"
-        p:includedAlgorithms="#{getObject('shibboleth.IncludedSignatureAlgorithms')}"
-        p:excludedAlgorithms="#{getObject('shibboleth.ExcludedSignatureAlgorithms')}" />
-    
-    <bean id="shibboleth.BasicEncryptionConfiguration" abstract="true"
-        class="org.opensaml.xmlsec.impl.BasicEncryptionConfiguration"
-        p:includedAlgorithms="#{getObject('shibboleth.IncludedSignatureAlgorithms')}"
-        p:excludedAlgorithms="#{getObject('shibboleth.ExcludedSignatureAlgorithms')}" />
-
-    <bean id="shibboleth.BasicDecryptionConfiguration" abstract="true"
-        class="org.opensaml.xmlsec.impl.BasicDecryptionConfiguration"
-        p:includedAlgorithms="#{getObject('shibboleth.IncludedSignatureAlgorithms')}"
-        p:excludedAlgorithms="#{getObject('shibboleth.ExcludedSignatureAlgorithms')}" />
-
-    <!-- Lookup functions to locate security configurations on profile beans. -->
-    <!--
-    <bean id="shibboleth.SignatureValidationConfigurationLookup" lazy-init="true"
-        class="net.shibboleth.idp.profile.config.navigate.SignatureValidationConfigurationLookupFunction"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
-    <bean id="shibboleth.SignatureSigningConfigurationLookup" lazy-init="true"
-        class="net.shibboleth.idp.profile.config.navigate.SignatureSigningConfigurationLookupFunction"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
-    <bean id="shibboleth.DecryptionConfigurationLookup" lazy-init="true"
-        class="net.shibboleth.idp.profile.config.navigate.DecryptionConfigurationLookupFunction"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
-    <bean id="shibboleth.EncryptionConfigurationLookup" lazy-init="true"
-        class="net.shibboleth.idp.profile.config.navigate.EncryptionConfigurationLookupFunction"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
-    <bean id="shibboleth.ClientTLSValidationConfigurationLookup" lazy-init="true"
-        class="net.shibboleth.idp.profile.config.navigate.ClientTLSValidationConfigurationLookupFunction"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
-     -->
-
-    <!-- Beans that implement the mashing of security configurations into final parameter sets. -->
-    
-    <bean id="shibboleth.SignatureValidationParametersResolver"
-        class="org.opensaml.xmlsec.impl.BasicSignatureValidationParametersResolver" />
-    <bean id="shibboleth.SignatureSigningParametersResolver"
-        class="org.opensaml.saml.security.impl.SAMLMetadataSignatureSigningParametersResolver" />
-    <bean id="shibboleth.DecryptionParametersResolver"
-        class="org.opensaml.xmlsec.impl.BasicDecryptionParametersResolver" />
-    <bean id="shibboleth.EncryptionParametersResolver"
-        class="org.opensaml.saml.security.impl.SAMLMetadataEncryptionParametersResolver"
-        c:resolver-ref="shibboleth.MetadataCredentialResolver"
-        p:defaultKeyAgreementUseKeyWrap="%{idp.encryption.keyagreement.metadata.defaultUseKeyWrap:Default}" />
-    <bean id="shibboleth.ClientTLSValidationParametersResolver"
-        class="org.opensaml.security.x509.tls.impl.BasicClientTLSValidationParametersResolver" />
-    <bean id="shibboleth.HttpClientSecurityParametersResolver"
-        class="org.opensaml.security.httpclient.impl.BasicHttpClientSecurityParametersResolver" />
-
-    <!--
-    The beans below are primarily used by trust engines in relying-party-system.xml, but also in the
-    resolver for encryption parameters above.
-    -->
-
-    <bean id="shibboleth.MetadataCredentialResolver"
-        class="org.opensaml.saml.security.impl.MetadataCredentialResolver"
-         p:roleDescriptorResolver-ref="shibboleth.RoleDescriptorResolver"
-         p:keyInfoCredentialResolver-ref="shibboleth.KeyInfoCredentialResolver">
-    </bean>
-
-    <bean id="shibboleth.KeyInfoCredentialResolver"
-        class="org.opensaml.xmlsec.config.impl.DefaultSecurityConfigurationBootstrap"
-        factory-method="buildBasicInlineKeyInfoCredentialResolver" />
-
- </beans>
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/services-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/services-system.xml
deleted file mode 100644
index ed08100..0000000
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/services-system.xml
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <import resource="${sp.home}/conf/services.xml" />
-
-    <!-- Parent beans for defining services. -->
-    
-    <bean id="shibboleth.ReloadableService" abstract="true"
-        class="net.shibboleth.shared.spring.service.ReloadableSpringService" 
-        p:failFast="%{sp.service.failFast:false}"
-        p:reloadCheckDelay="PT0S"
-        p:beanPostProcessors-ref="shibboleth.IdentifiableBeanPostProcessor"
-        p:beanFactoryPostProcessors-ref="shibboleth.PropertySourcesPlaceholderConfigurer" />
-
-    <!--
-    These are beans that define reloadable services. The actual Spring resources that configure the
-    services are generally defined in the services.xml file edited by deployers.
-    -->
-    
-    <bean id="shibboleth.LoggingService"
-        class="%{sp.service.logging.class:net.shibboleth.shared.service.impl.LogbackLoggingService}"
-        p:loggingConfiguration="%{sp.service.logging.resource:%{sp.home}/conf/logback.xml}"
-        p:fallbackConfiguration="classpath:/logback.xml"
-        p:reloadCheckDelay="%{sp.service.logging.checkInterval:PT0S}"
-        p:failFast="%{sp.service.logging.failFast:%{sp.service.failFast:true}}" />
-
-    <!-- The SP "guts", the remoted endpoints. -->
-
-    <bean id="shibboleth.ServiceProvider" parent="shibboleth.ReloadableService" 
-        c:claz="net.shibboleth.sp.remoting.EndpointManager"
-        p:serviceConfigurations-ref="ExtendedServiceProviderResources"
-        p:failFast="%{sp.service.provider.failFast:%{sp.service.failFast:false}}"
-        p:reloadCheckDelay="%{sp.service.provider.checkInterval:PT0S}" />
-            
-    <!-- Auto-append system config files to resource set. -->
-    <bean id ="ExtendedServiceProviderResources" class="net.shibboleth.shared.spring.factory.CombiningListFactoryBean"
-          p:firstList="#{getObject('%{sp.service.provider.resources:shibboleth.ServiceProviderResources}'.trim())}" >
-        <property name="secondList">
-            <util:list >
-                <value>classpath:/net/shibboleth/sp/conf/endpoints-system.xml</value>
-                <value>classpath:/net/shibboleth/sp/conf/relying-party-system.xml</value>
-            </util:list>
-        </property>
-    </bean>
-
-    <!-- Attribute Filter Service -->
-
-    <bean id="shibboleth.AttributeFilterService" parent="shibboleth.ReloadableService"
-            depends-on="shibboleth.LoggingService"
-            p:serviceConfigurations-ref="ExtendedAttributeFilterResources"
-            p:failFast="%{sp.service.attribute.filter.failFast:%{sp.service.failFast:false}}"
-            p:reloadCheckDelay="%{sp.service.attribute.filter.checkInterval:PT0S}">
-        <constructor-arg name="claz" value="net.shibboleth.idp.attribute.filter.AttributeFilter" />
-        <constructor-arg name="strategy">
-            <bean class="net.shibboleth.idp.attribute.filter.spring.impl.AttributeFilterServiceStrategy"
-                id="ShibbolethAttributeFilter"/>
-        </constructor-arg>
-    </bean>
-    <!-- Auto-append system config file to resource set. -->
-    <bean id ="ExtendedAttributeFilterResources" parent="shibboleth.ListCombiner"
-          p:firstList="#{getObject('%{sp.service.attribute.filter.resources:shibboleth.AttributeFilterResources}'.trim())}" >
-        <property name="secondList">
-            <util:list >
-                <value>classpath:/net/shibboleth/sp/conf/attribute-filter-system.xml</value>
-            </util:list>
-        </property>
-    </bean>
-
-    <!-- Attribute Resolver Service -->
-
-    <bean id="shibboleth.AttributeResolverService" parent="shibboleth.ReloadableService" 
-            depends-on="shibboleth.VelocityEngine"
-            p:serviceConfigurations-ref="ExtendedAttributeResolverResources"
-            p:failFast="%{sp.service.attribute.resolver.failFast:%{sp.service.failFast:false}}"
-            p:reloadCheckDelay="%{sp.service.attribute.resolver.checkInterval:PT0S}">
-        <constructor-arg name="claz" value="net.shibboleth.idp.attribute.resolver.AttributeResolver" />
-        <constructor-arg name="strategy">
-            <bean class="net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverServiceStrategy"
-                p:stripNulls="%{sp.service.attribute.resolver.stripNulls:false}"
-                id="ShibbolethAttributeResolver"/>
-        </constructor-arg>
-    </bean>
-    <!-- Auto-append system config file to resource set. -->
-    <bean id ="ExtendedAttributeResolverResources" parent="shibboleth.ListCombiner"
-          p:firstList="#{getObject('%{sp.service.attribute.resolver.resources:shibboleth.AttributeResolverResources}'.trim())}" >
-        <property name="secondList">
-            <util:list >
-                <value>classpath:/net/shibboleth/sp/conf/attribute-resolver-system.xml</value>
-            </util:list>
-        </property>
-    </bean>
-
-    <!-- Attribute Registry Service -->
-
-    <bean id="shibboleth.AttributeRegistryService" parent="shibboleth.ReloadableService"
-            depends-on="shibboleth.OpenSAMLConfig"
-            p:serviceConfigurations-ref="ExtendedAttributeRegistryResources"
-            p:failFast="%{sp.service.attribute.registry.failFast:%{sp.service.failFast:false}}"
-            p:reloadCheckDelay="%{sp.service.attribute.registry.checkInterval:PT0S}">
-        <constructor-arg name="claz" value="net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry" />
-        <constructor-arg name="strategy">
-            <bean class="net.shibboleth.idp.attribute.transcoding.impl.AttributeRegistryServiceStrategy">
-                <!--
-                <property name="extendedConditionFactory">
-                    <bean class="net.shibboleth.idp.relyingparty.impl.RelyingPartiesActivationConditionFactory" />
-                </property>
-                -->
-            </bean>
-        </constructor-arg>
-    </bean>
-    <!-- Auto-append system config file to resource set. -->
-    <bean id ="ExtendedAttributeRegistryResources" parent="shibboleth.ListCombiner"
-          p:firstList="#{getObject('%{sp.service.attribute.registry.resources:shibboleth.AttributeRegistryResources}'.trim()) ?:
-                getObject('shibboleth.DefaultAttributeRegistryResources')}" >
-        <property name="secondList">
-            <util:list >
-                <value>classpath:/net/shibboleth/sp/conf/attribute-registry-system.xml</value>
-            </util:list>
-        </property>
-    </bean>
-    
-    <!-- Metadata Resolver Service -->
-
-    <bean id="shibboleth.MetadataResolverService" parent="shibboleth.ReloadableService"
-            depends-on="shibboleth.AttributeRegistryService" 
-            p:serviceConfigurations-ref="ExtendedMetadataResolverResources"
-            p:failFast="%{sp.service.metadata.failFast:%{sp.service.failFast:false}}"
-            p:reloadCheckDelay="%{sp.service.metadata.checkInterval:PT0S}">
-        <constructor-arg name="claz" value="org.opensaml.saml.metadata.resolver.MetadataResolver" />
-        <constructor-arg name="strategy">
-            <bean class="net.shibboleth.idp.saml.metadata.impl.MetadataResolverServiceStrategy" />
-        </constructor-arg>
-    </bean>
-    <!-- Auto-append system config file to resource set. -->
-    <bean id ="ExtendedMetadataResolverResources" parent="shibboleth.ListCombiner"
-          p:firstList-ref="#{'%{sp.service.metadata.resources:shibboleth.MetadataResolverResources}'.trim()}" >
-        <property name="secondList">
-            <util:list >
-                <value>classpath:/net/shibboleth/sp/conf/metadata-providers-system.xml</value>
-            </util:list>
-        </property>
-    </bean>
-
-    <bean id="shibboleth.MetadataResolver"
-        class="net.shibboleth.idp.saml.metadata.impl.ReloadableMetadataResolver"
-        c:resolverService-ref="shibboleth.MetadataResolverService" />
-        
-    <bean id="shibboleth.RoleDescriptorResolver"
-        class="org.opensaml.saml.metadata.resolver.impl.PredicateRoleDescriptorResolver"
-        c:mdResolver-ref="shibboleth.MetadataResolver" />
-
-    <import resource="conditional:%{sp.home}/conf/services.xml" />
-
-</beans>
diff --git a/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/echo.msg b/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/echo.msg
index 698334b..a313309 100644
--- a/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/echo.msg
+++ b/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/echo.msg
@@ -1,2 +1,2 @@
 net.shibboleth.sp.Echo 1 abc123
-
+
diff --git a/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/test.application.msg b/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/test.application.msg
index 9e0eb7b..278c231 100644
--- a/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/test.application.msg
+++ b/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/test.application.msg
@@ -1,3 +1,3 @@
 sp.example.org-default 4 1
 op 1 foo
-
+
diff --git a/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/test.simple.msg b/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/test.simple.msg
index 09dbf54..ed1d605 100644
--- a/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/test.simple.msg
+++ b/sp-conf-impl/src/test/resources/net/shibboleth/sp/remoting/impl/test.simple.msg
@@ -1,2 +1,2 @@
 foobar 1 abc123
-
+
diff --git a/sp-conf/.gitignore b/sp-conf/.gitignore
deleted file mode 100644
index 1df25bf..0000000
--- a/sp-conf/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/test-output
-/target
diff --git a/sp-conf/pom.xml b/sp-conf/pom.xml
deleted file mode 100644
index 539e14b..0000000
--- a/sp-conf/pom.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- See LICENSE.txt file in the root directory of this repository for the copyright/license information. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>net.shibboleth.sp</groupId>
-        <artifactId>sp-server-parent</artifactId>
-        <version>0.0.1-SNAPSHOT</version>
-    </parent>
-    
-    <artifactId>sp-conf</artifactId>
-    <description>SP processing hub/service public configuration.</description>
-    <name>Shibboleth SP :: Processing Hub :: Public Configuration</name>
-    <packaging>jar</packaging>
-    
-    <properties>
-        <checkstyle.configLocation>${project.basedir}/../resources/checkstyle/checkstyle.xml</checkstyle.configLocation>
-        <automatic.module.name>net.shibboleth.sp.conf</automatic.module.name>
-    </properties>
-        
-    <dependencies>
-        <!-- Runtime Dependencies -->
-        <!-- Support for logback evaluator filter. -->
-        <dependency>
-            <groupId>org.codehaus.janino</groupId>
-            <artifactId>janino</artifactId>
-            <scope>runtime</scope>
-        </dependency>
-        <!-- Supports Eclipse class lookup from within Spring files. -->
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>sp-server-impl</artifactId>
-            <version>${project.version}</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>net.shibboleth</groupId>
-            <artifactId>shib-spring</artifactId>
-            <scope>runtime</scope>
-        </dependency>
-    
-        <!-- Test Dependencies -->
-    </dependencies>
-
-</project>
diff --git a/sp-conf/src/main/resources/conf/global.xml b/sp-conf/src/main/resources/conf/global.xml
deleted file mode 100644
index 7df03aa..0000000
--- a/sp-conf/src/main/resources/conf/global.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!-- Use this file to define any custom beans needed globally. -->
-
-    <!--
-    Algorithm include/exclude sets that override or merge with library defaults. Normally you can leave these
-    empty or commented and use the system defaults, but you can override those defaults using these beans.
-    Each <value> element is an algorithm URI; you can also use <util:constant> elements in place of literal values.
-    -->
-    
-    <!--
-    <util:set id="shibboleth.IncludedSignatureAlgorithms">
-    </util:set>
-
-    <util:set id="shibboleth.ExcludedSignatureAlgorithms">
-    </util:set>
-
-    <util:set id="shibboleth.IncludedEncryptionAlgorithms">
-    </util:set>
-
-    <util:set id="shibboleth.ExcludedEncryptionAlgorithms">
-    </util:set>
-    -->
-
-</beans>
diff --git a/sp-conf/src/main/resources/conf/logback.xml b/sp-conf/src/main/resources/conf/logback.xml
deleted file mode 100644
index 279e0fa..0000000
--- a/sp-conf/src/main/resources/conf/logback.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-
-    <!--
-    Variables for simplifying logging configuration.
-    http://logback.qos.ch/manual/configuration.html#variableSubstitution
-    -->
-
-    <!--
-    If you want to use custom properties in this config file,
-    we load the main property file for you.
-    -->
-    <variable file="${sp.home}/conf/sp.properties" />
-
-    <!-- Location and retention. -->
-    
-    <variable name="sp.logfiles" value="${sp.logfiles:-${sp.home}/logs}" />
-    <variable name="sp.loghistory" value="${sp.loghistory:-180}" />
-    
-    <!-- Much higher performance if you operate on DEBUG. -->
-    <!-- <variable name="sp.process.appender" value="ASYNC_PROCESS" /> -->
-    
-    <!-- Logging level shortcuts. -->
-    <variable name="sp.loglevel.sp" value="${sp.loglevel.sp:-INFO}" />
-    <variable name="sp.loglevel.ldap" value="${sp.loglevel.ldap:-WARN}" />
-    <variable name="sp.loglevel.messages" value="${sp.loglevel.messages:-INFO}" />
-    <variable name="sp.loglevel.encryption" value="${sp.loglevel.encryption:-INFO}" />
-    <variable name="sp.loglevel.opensaml" value="${sp.loglevel.opensaml:-INFO}" />
-    <variable name="sp.loglevel.props" value="${sp.loglevel.props:-INFO}" />
-    <variable name="sp.loglevel.httpclient" value="${sp.loglevel.httpclient:-INFO}" />
-    
-    <!-- Don't turn these up unless you want a *lot* of noise. -->
-    <variable name="sp.loglevel.spring" value="${sp.loglevel.spring:-ERROR}" />
-    <variable name="sp.loglevel.container" value="${sp.loglevel.container:-ERROR}" />
-    <variable name="sp.loglevel.xmlsec" value="${sp.loglevel.xmlsec:-INFO}" />
-
-    <!-- =========================================================== -->
-    <!-- ============== Logging Categories and Levels ============== -->
-    <!-- =========================================================== -->
-
-    <!-- Logs SP, but not OpenSAML, messages -->
-    <logger name="net.shibboleth.sp" level="${sp.loglevel.sp}"/>
-
-    <!-- Logs OpenSAML, but not IdP, messages -->
-    <logger name="org.opensaml.saml" level="${sp.loglevel.opensaml}"/>
-    
-    <!-- Logs LDAP related messages -->
-    <logger name="org.ldaptive" level="${sp.loglevel.ldap}"/>
-
-    <!-- Logs embedded HTTP client messages -->
-    <logger name="org.apache.http" level="${sp.loglevel.httpclient}"/>
-    
-    <!-- Logs inbound and outbound protocols messages at DEBUG level -->
-    <logger name="PROTOCOL_MESSAGE" level="${sp.loglevel.messages}" />
-
-    <!-- Logs unencrypted SAML at DEBUG level -->
-    <logger name="org.opensaml.saml.saml2.encryption.Encrypter" level="${sp.loglevel.encryption}" />
-    <logger name="org.opensaml.saml.saml2.encryption.Decrypter" level="${sp.loglevel.encryption}" />
-
-    <!-- Especially chatty. -->
-    <logger name="org.apache.xml.security" level="${sp.loglevel.xmlsec}" />
-    <logger name="org.springframework" level="${sp.loglevel.spring}" />
-
-
-    <!-- =========================================================== -->
-    <!-- ============== Low Level Details or Changes =============== -->
-    <!-- =========================================================== -->
-    
-    <!-- Process log. -->
-    <appender name="SP_PROCESS" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <File>${sp.logfiles}/sp.process.log</File>
-        
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${sp.logfiles}/sp.process-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
-            <maxHistory>${sp.loghistory}</maxHistory>
-        </rollingPolicy>
-
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <charset>UTF-8</charset>
-            <Pattern>%date{ISO8601} - %level [%logger:%line] - %msg%n%ex{short}</Pattern>
-        </encoder>
-    </appender>
-
-    <appender name="ASYNC_PROCESS" class="ch.qos.logback.classic.AsyncAppender">
-        <appender-ref ref="SP_PROCESS" />
-        <discardingThreshold>0</discardingThreshold>
-    </appender>
-
-    <appender name="SP_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- Suppress anything below WARN. -->
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>WARN</level>
-        </filter>
-        
-        <File>${sp.logfiles}/sp.warn.log</File>
-        
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${sp.logfiles}/sp.warn-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
-            <maxHistory>${sp.loghistory}</maxHistory>
-        </rollingPolicy>
-        
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <charset>UTF-8</charset>
-            <Pattern>%date{ISO8601} - %mdc{sp.remote_addr} - %level [%logger:%line] - %msg%n%ex{full}</Pattern>
-        </encoder>
-    </appender>
-    
-    <!-- Audit log. -->
-    <appender name="SP_AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <File>${sp.logfiles}/sp.audit.log</File>
-
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${sp.logfiles}/sp.audit-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
-            <maxHistory>${sp.loghistory}</maxHistory>
-        </rollingPolicy>
-
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <charset>UTF-8</charset>
-            <Pattern>%msg%n</Pattern>
-        </encoder>
-    </appender>
-    
-    <logger name="Shibboleth-Audit" level="ALL">
-        <appender-ref ref="${sp.audit.appender:-SP_AUDIT}"/>
-    </logger>
-    
-    <root level="${sp.loglevel.root:-INFO}">
-        <appender-ref ref="${sp.process.appender:-SP_PROCESS}"/>
-        <appender-ref ref="${sp.warn.appender:-SP_WARN}" />
-    </root>
-
-</configuration>
diff --git a/sp-conf/src/main/resources/conf/services.properties b/sp-conf/src/main/resources/conf/services.properties
deleted file mode 100644
index bce22cd..0000000
--- a/sp-conf/src/main/resources/conf/services.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Configure the resources to load for various services,
-# and the settings for failure handling and auto-reload.
-
-# failFast=true prevents sp startup if a configuration is bad
-# checkInterval = PT0S means never reload (this is the default)
-
-# Global default for fail-fast behavior of most subsystems
-# with individual override possible below.
-#sp.service.failFast = false
-
-#sp.service.logging.resource = %{sp.home}/conf/logback.xml
-#sp.service.logging.failFast = true
-sp.service.logging.checkInterval = PT5M
-
-#sp.service.provider.resources = shibboleth.ServiceProviderResources
-#sp.service.provider.failFast = true
-sp.service.provider.checkInterval = PT5M
-
-#sp.service.assertingparty.resources = shibboleth.AssertingPartyResolverResources
-#sp.service.assertingparty.failFast = false
-sp.service.assertingparty.checkInterval = PT15M
-
-#sp.service.metadata.resources = shibboleth.MetadataResolverResources
-#sp.service.metadata.failFast = false
-#sp.service.metadata.checkInterval = PT0S
-# Set to false if not using ByReference MetadataFilters for a small perf gain
-#sp.service.metadata.enableByReferenceFilters = true
-
-#sp.service.attribute.registry.resources = shibboleth.AttributeRegistryResources
-#sp.service.attribute.registry.failFast = false
-sp.service.attribute.registry.checkInterval = PT15M
-
-#sp.service.attribute.resolver.resources = shibboleth.AttributeResolverResources
-#sp.service.attribute.resolver.failFast = false
-sp.service.attribute.resolver.checkInterval = PT15M
-#sp.service.attribute.resolver.maskFailures = true
-#sp.service.attribute.resolver.stripNulls = false
-
-#sp.service.attribute.filter.resources = shibboleth.AttributeFilterResources
-# NOTE: Failing the filter fast leaves no filters enabled.
-#sp.service.attribute.filter.failFast = false
-sp.service.attribute.filter.checkInterval = PT15M
-#sp.service.attribute.filter.maskFailures = true
-
-
-# These settings impact the behavior of the internal HTTP Client used by default
-# with some internal components, but notably *not* for metadata acquisition.
-#sp.httpclient.useSecurityEnhancedTLSSocketFactory = false
-#sp.httpclient.connectionDisregardTLSCertificate = false
-#sp.httpclient.connectionRequestTimeout = PT1M
-#sp.httpclient.connectionTimeout = PT1M
-#sp.httpclient.socketTimeout = PT1M
-#sp.httpclient.maxConnectionsTotal = 100
-#sp.httpclient.maxConnectionsPerRoute = 100
diff --git a/sp-conf/src/main/resources/conf/services.xml b/sp-conf/src/main/resources/conf/services.xml
deleted file mode 100644
index 2fd1360..0000000
--- a/sp-conf/src/main/resources/conf/services.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<beans xmlns="http://www.springframework.org/schema/beans"
-    xmlns:context="http://www.springframework.org/schema/context"
-    xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p"
-    xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-    default-init-method="initialize"
-    default-destroy-method="destroy">
-                               
-    <!-- By default we look at resources whose names are derived from %{sp.home}. -->
-
-    <util:list id="shibboleth.AssertingPartyResolverResources">
-        <value>%{sp.home}/conf/asserting-party.xml</value>
-    </util:list>
-
-    <util:list id="shibboleth.MetadataResolverResources">
-        <value>%{sp.home}/conf/metadata-providers.xml</value>
-    </util:list>
-
-    <util:list id ="shibboleth.AttributeResolverResources">
-        <value>%{sp.home}/conf/attribute-resolver.xml</value>
-    </util:list>
-
-    <util:list id ="shibboleth.AttributeRegistryResources">
-        <value>%{sp.home}/conf/attribute-registry.xml</value>
-    </util:list>
-
-    <util:list id ="shibboleth.AttributeFilterResources">
-        <value>%{sp.home}/conf/attribute-filter.xml</value>
-    </util:list>
-
-</beans>
diff --git a/sp-conf/src/main/resources/conf/sp.properties b/sp-conf/src/main/resources/conf/sp.properties
deleted file mode 100644
index e891307..0000000
--- a/sp-conf/src/main/resources/conf/sp.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# Auto-load all files matching conf/**/*.properties
-# Disable if you want to manually maintain a list of sources.
-sp.searchForProperties = true
-
-# Load any "outside-tree" property sources from a comma-delimited list
-sp.additionalProperties = /credentials/secrets.properties
-
-# Networking settings for service.
-#sp.service.address = 127.0.0.1
-#sp.service.port = 1600
-#sp.service.allowedRanges = 127.0.0.1/32, ::1/128
-# Set to true for better performance.
-#sp.service.prefixLength = false
-
-# In most cases (and unless noted in the surrounding comments) the
-# commented settings in the distributed files document default behavior.
-# Uncomment them and change the value to change functionality.
-#
-# Uncommented properties are either required or ship non-defaulted.
-
-# Set the entityID of the SP
-sp.entityID = https://sp.example.org
-
-# General cookie properties (maxAge only applies to persistent cookies)
-#sp.cookie.secure = true
-#sp.cookie.httpOnly = true
-#sp.cookie.domain =
-#sp.cookie.path =
-#sp.cookie.maxAge = 31536000
-
-# Set the location of Velocity view templates
-#sp.views = %{idp.home}/views
-
-# Do we fail on velocity "syntax errors"
-#sp.velocity.runtime.strictmode=true
-
-# Settings for internal AES encryption key
-#sp.sealer.keyStrategy = shibboleth.DataSealerKeyStrategy
-#sp.sealer.storeType = JCEKS
-#sp.sealer.updateInterval = PT15M
-#sp.sealer.aliasBase = secret
-sp.sealer.storeResource = %{sp.home}/credentials/sealer.jks
-sp.sealer.versionResource = %{sp.home}/credentials/sealer.kver
-
-# Settings for public/private signing and encryption key(s)
-# During decryption key rollover, point the ".2" properties at a second
-# keypair, uncomment in credentials.xml, then publish it in your metadata.
-sp.signing.key = %{idp.home}/credentials/sp-signing.key
-sp.signing.cert = %{idp.home}/credentials/sp-signing.crt
-sp.encryption.key = %{idp.home}/credentials/sp-encryption.key
-sp.encryption.cert = %{idp.home}/credentials/sp-encryption.crt
-#sp.encryption.key.2 = %{idp.home}/credentials/sp-encryption-old.key
-#sp.encryption.cert.2 = %{idp.home}/credentials/sp-encryption-old.crt
diff --git a/sp-dist/pom.xml b/sp-dist/pom.xml
new file mode 100644
index 0000000..7bbe154
--- /dev/null
+++ b/sp-dist/pom.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>net.shibboleth.sp</groupId>
+        <artifactId>sp-server-parent</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+
+    <name>Shibboleth IdP :: Plugins :: SP Server Distribution</name>
+    <description>SP Server plugin packaging.</description>
+    <artifactId>sp-dist</artifactId>
+    <packaging>pom</packaging>
+
+    <properties>
+        <dist.finalName>shibboleth-idp-plugin-sp-server-${project.version}</dist.finalName>
+        <dist.assemblyDirectory>${project.build.directory}/${dist.finalName}</dist.assemblyDirectory>
+        <checkstyle.configLocation>${project.basedir}/../resources/checkstyle/checkstyle.xml</checkstyle.configLocation>
+    </properties>
+
+    <build>
+        <plugins>
+            <!-- Copy src/main/resources to assembly directory. -->
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <includeEmptyDirs>true</includeEmptyDirs>
+                            <outputDirectory>${dist.assemblyDirectory}</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${basedir}/src/main/resources</directory>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- Assemble -->
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <descriptors>
+                        <descriptor>src/main/assembly/assembly.xml</descriptor>
+                    </descriptors>
+                    <finalName>${dist.finalName}</finalName>
+                    <overrideUid>1000</overrideUid>
+                    <overrideGid>1000</overrideGid>
+                    <tarLongFileMode>gnu</tarLongFileMode>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <dependencies>
+                    <dependency>
+                        <groupId>net.shibboleth.maven.enforcer.rules</groupId>
+                        <artifactId>maven-dist-enforcer</artifactId>
+                        <version>${maven-dist-enforcer.version}</version>
+                    </dependency>
+                </dependencies>
+                <executions>
+                    <execution>
+                        <id>totp-enforce</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                        <configuration>
+                            <rules>
+                                <jarEnforcer implementation="net.shibboleth.mvn.enforcer.impl.JarEnforcer">
+                                    <dataGroupId>net.shibboleth.maven.enforcer.rules</dataGroupId>
+                                    <dataArtifactId>maven-dist-enforcer-data</dataArtifactId>
+                                    <dataVersion>${maven-dist-enforcer-data.version}</dataVersion>
+                                    <dataKeyRing>${basedir}/src/main/enforcer/shibbolethKeys.gpg</dataKeyRing>
+                                    <parentPomDir>${basedir}/..</parentPomDir>
+                                    <tgzFiles>${project.build.directory}/${dist.finalName}.tar.gz</tgzFiles>
+                                    <checkSignatures>true</checkSignatures>
+                                    <checkDependencies>true</checkDependencies>
+                                    <listJarSources>false</listJarSources>
+                                    <checkM2>false</checkM2>
+                                </jarEnforcer>
+                            </rules>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+
+    </build>
+
+</project>
diff --git a/sp-dist/src/main/assembly/assembly.xml b/sp-dist/src/main/assembly/assembly.xml
new file mode 100644
index 0000000..e99ada9
--- /dev/null
+++ b/sp-dist/src/main/assembly/assembly.xml
@@ -0,0 +1,43 @@
+<assembly>
+    <id>assembly-targz</id>
+    <formats>
+        <format>tar.gz</format>
+    </formats>
+    <fileSets>
+        <fileSet>
+            <directory>../sp-server-impl/target</directory>
+            <outputDirectory>webapp/WEB-INF/lib</outputDirectory>
+            <includes>
+                <include>sp-server-impl-*.jar</include>
+            </includes>
+            <excludes>
+                <exclude>*test*.jar</exclude>
+                <exclude>*javadoc.jar</exclude>
+                <exclude>*sources.jar</exclude>
+            </excludes>
+        </fileSet>
+        <fileSet>
+            <directory>../sp-server-impl/target/dependency</directory>
+            <outputDirectory>webapp/WEB-INF/lib</outputDirectory>
+            <includes>
+                <include>*.jar</include>
+            </includes>
+            <excludes>
+                <exclude>*test*.jar</exclude>
+                <exclude>*javadoc.jar</exclude>
+                <exclude>*sources.jar</exclude>
+            </excludes>
+        </fileSet>
+        <fileSet>
+            <directory>../sp-conf-impl/target/classes/net/shibboleth/idp/plugin/sp</directory>
+            <outputDirectory>bootstrap</outputDirectory>
+            <includes>
+                <include>plugin.properties</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <directory>${dist.assemblyDirectory}</directory>
+            <outputDirectory></outputDirectory>
+        </fileSet>
+    </fileSets>
+</assembly>
diff --git a/sp-dist/src/main/enforcer/shibbolethKeys.gpg b/sp-dist/src/main/enforcer/shibbolethKeys.gpg
new file mode 100644
index 0000000..6d8fc48
Binary files /dev/null and b/sp-dist/src/main/enforcer/shibbolethKeys.gpg differ
diff --git a/sp-dist/src/main/resources/bootstrap/keys.txt b/sp-dist/src/main/resources/bootstrap/keys.txt
new file mode 100644
index 0000000..a723b19
--- /dev/null
+++ b/sp-dist/src/main/resources/bootstrap/keys.txt
@@ -0,0 +1,427 @@
+pub   4096R/02277962 2011-09-22
+uid                  Scott Cantor <cantor.2 at osu.edu>
+sig 3        02277962 2011-09-22  Scott Cantor <cantor.2 at osu.edu>
+sig 3        30A2362E 2011-09-23  Brian Swaney <swaney.29 at osu.edu>
+sig          47905D15 2011-09-26  Scott Cantor (Internet2) <cantor.2 at osu.edu>
+sig          EA2882BB 2011-09-28  Ian A. Young <ian at iay.org.uk>
+sig          A9D7AF55 2011-09-24  Michael Craft <mcraft at peak15.org>
+sig          D7079C77 2011-09-28  Ian A. Young <ian at iay.org.uk>
+sig          D2B37353 2011-10-11  Chad La Joie <lajoie at itumi.biz>
+sub   4096R/5B94AC0C 2011-09-22
+sig          02277962 2011-09-22  Scott Cantor <cantor.2 at osu.edu>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.11 (Darwin)
+
+mQINBE56gwwBEADI6Y7tBIdYr8t0zfHU2hRbD7GfuanIkn4Fhf/CZ7ICN+SfA/XP
+JAx3HDRkM/nc65U2mKG7vG3zlNOcKgeFoCwqhlLc4sSGP6DDoPYKtZOLEHwA/sIy
+Lldw3re5KbCFIElnbBW/0av15IGHXgyylmG24jhlY/ufjLd53Qm4agxv51kdYdgH
+cI0djzLqvMWTabWhw8QtmitPZSKdqOwTqkIt6bYAdOvc9r5bvAzemw6IO01L9aX7
+/yFIVJAYySL/UpbEtLcl3B/qXUXwhiq2bAUtvdmV+35FSMrAgfD25bYv+dVoJdtX
+Gb4tQcPteSRDIQYswT+bilEtGOOu9vqLvko3hSHOK2Yqc8SufDakrOlCWO1R00Sw
+QHGSkPKgA5O3RpOz3qbuPN6sDt/7FgqyzB6VqF9445bTqWDfIihXEAFr97gf28Xg
+ngAn2Tp8ZZ6zTzYWv3/GGvCedCcrHrIG/nKf0Z0/1q9Uf8P7crv2udGuZjs3bMtY
+RQNKzki/wKRuGnZ7HjgOEDIe8E+QMs+568i5vYqdaNrmCxUodRFjwkZ/0aRuHzxo
+JNQaB/r2Ckj5X/yEX6f45D0hiwBmIFz2+VUnis7RAPelcUl1X/kT4p/3gvKSsFE0
+Ti7JWCY9e+ntnzcsb4ywisFen9tQQPP4G++qnhGyApz323LfDVPJkFWWJwARAQAB
+tB9TY290dCBDYW50b3IgPGNhbnRvci4yQG9zdS5lZHU+iQI3BBMBCgAhBQJOeoMM
+AhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEDeLhFQCJ3li6fwP/10LcYMk
+QhXODeO2+QkPTxM1VMxTBJCjM3ZX5ZpCCCUolJuhHlqNljpJUx6q2VP7UvNx1T1z
+eWlCrScHUZnxaS6Bh0WTz/SeNdMj1PDWLZeGn+EokRTNSRzHU2XJgdnURCNb8pWe
+rSuE8BuoMOXIRP+qj/fxKvNmo5q4zJ7y5P5qpQSUXxbdTuXi3gLuiWWfDJyFGs5o
+4mNIDAu0rVYkid4OovHMO/5tWahkv7tXDuKvLjHBii9n7sKlpmyJxMkxi+j8Jcba
+qHKu8nQNzEQh2GTQqI+SI/s13dvna8DhnfTKN/CqSgLVeWnN4Pi/uKX4vod1w6KC
+Xg8OvzlSGij//lIHrni2ZMvZrfbDwacIr9vzJK7pfCVQhKJQAEoZ6vJwF5OHPrlz
+xR3rseI/1AMrv6wSmoA3G5fUh/CEICe90Mpz3pjyQ7xoLil879tMWGGTIBExb3wJ
+XI/hcLLA9dBDvnDl6RL/B5yArNiT/hLhofW8Su0N5jdYXkgM1MA5q7vju+Bt/yfP
+SDEHBaAp2XCHXXOyUpXV8s8wvu2JXJPaJ3akYY47eBQnkG7gt5SQud1Bl4RFnBZx
+3QiEOwQlYhrODSVsRYIu1bsJ/8HT9foxP3CrxqrrhQySyc5TqIj3VmQfeaPYjxPL
+6eX5ldS3VxWCP4DJh3IchYsd9mRAu+QfmgnmiQIcBBMBAgAGBQJOe++jAAoJEPpB
+tfcwojYumlUQAIDiXg0ErWbfzOIlnQgGVYEqBeLi/QsrSO/VauytDMtaKOgdJosy
+33DNteMPICW6DGr7wZ89evduZXlnKjox4mLJsvNAJfNuw+Gk3eJPu1ECdTkRftB5
+/f3ShYcH0ZJOvaMTzLDd2bHdQYW4/gQuYcjLFi9ZJ1KMZM9E5U41Gu5Hr/JUKvPL
+/nVU9ji/Dn0i/4nFuNjmITTRM21pc1wfYz0rvGfCuNIAYThxWIelXXaCpF0P3hfw
+X/EoLE8P6QkJoAgoPa58Zx1qdptTqUz5TKuxw2+eleMNQUd2V0TbjnJ90GBubxEt
+bMkkrP0RPP+ti2j4DoU1k9Ghxtp5K/QDUnq/kySao1UhI5HHILOeG77fSzYqfDYy
+fTaq4z8LFp3Gus3/dlYZxq3b1Hcobs4X2oQxX7k0nzgwc2qZR0JhKN0quHhUZly8
+D/4qvEN2Uqa6TkuPlC1vdAC/SqXpxQQQn56S6fNCZbxQfPhc7Anmvc4jXC4Z09KE
+roi0uWzZbcfG7e8NEVba2tuPn8YefrtokJGqQu3FGmA3ij1g+8LyR2PxY7+IzDXT
+Ds5+msQDxLUKOc7CRnBDoyqv4llmT8woUcB7LAiIsTWLVU96Xazijs1dpoW2GgVH
+fdEhbcswYVSzJ+rIv+1EbMMbd+yjlU7L/h+Ia6UnxitZb0qNca51AhvciEYEEBEK
+AAYFAk6ApGIACgkQpXtW80eQXRUgxwCePIV9LehYh+Jio8mtQ74I/NWvfDQAoLmX
+TfmKAganE+r/FcCcwykzj70ViEYEEBECAAYFAk6DTO8ACgkQ70D8KeoogrukNwCd
+GX5zZOsC44CjV2AopI8KoMFJto4AoMH+qA35GIBUkEt8IoRVFs1rp3TGiQEcBBAB
+AgAGBQJOfS4aAAoJEH8LUwap169VyrAH/1lrWiCJarm8eFLNlajcDt5TR5ZpanZV
+UbuzAp9Jk8XtBkCMssnuzcqqSbGmq3P6CuaSTx0BybBOhRgC+UCb/DCS0TGomJYU
+TcG7e7MyJZC4ocarORGURABk1UK/fkgEBn+9o2jdDlf7bm7JHlZJ8huLjiAq5fap
+zp5WhTUAcreHjYieTS5umt01yxFatxhqiTbNXzs1c7Hc19rW4cTLREm6YQUNwTIx
+qJ2hHyDfU13ephowv1DpoAwLXdHAsNy/C8RKRlr0Qc4snihVkGevLNWatYK4HP6M
+0tEvGX9CpnTXpOsLZkfp96RMtE2TEvMEEA0HVoZPE7/kCyYR5DForeqJAhwEEAEC
+AAYFAk6DkGAACgkQmoBOl9cHnHeZQw//QoUi0oP1lp7MjbFKGovCiCQU1qE0YEDH
+pkkDxwj/yoGK3ylOGd32regz3TuoV4AP7ZF7eZvrIXsVB5p2b8FL4IkBJi9/cXUJ
+dZ+cy/0Cd7vivd48nEBTNZvHNkyKyjFW8/FcE2IyylJIb9acV2WnZgGqfOMp8k/l
+KczfzNaaV3FFVY15Q1Q7heSUiAof85/dxAOoW0i1j7dmRNEKRHIme0v71Qv+J714
+c95ujg1d83rIa5uVfD/EeBbJn9WvRWO7OPYylhuyJHurtvQ2CJL9/RUL3mIsaNxT
+HweXfKuLsyYoIkQL7HpDIGDpZ5jPMrvSSeP/8wgY/NUNrXhYsVK00Djd+vV925xD
+rdA46pNEF4FwlL4WFHZgGurPxGYJ4MXleWsQ21t70GvTJIt1FrF55aYuHJcf5x+8
+VinG2tu1pCJg5b94OJ9km1BY/xjgnNwxafqplsBVfMjLN9NM0j2wKq/glztBgIra
+KqZocQi5omrmhiJp1qrdOdWFhRtIY2kCyoX48137FbshAw/O9ETF6p5EuKEHd+Tj
+stThW6oIIcbSV6PKAi9n0cL5URL9JKO1+q6QsT4YssuixaB0bfuF9BuYdvy2xoyF
+eKD4uN+qScqM2/N5Aoechj9aIfhqyhX4Ex8WpKdzEzV84pfGvvWk8kEZQESHr2hZ
+RqykkdLpqmqJAhwEEAECAAYFAk6UUdsACgkQoLPLCdKzc1MFWw/+Ln0WSpZa6HHr
+7v+zBIjT8gWKNcTh4QY11wSmamZmFJ6FpnKfJsQBnSw5h6yhZ4uL+pr/XhznDZJY
+yhdR3novamyrBfVJHkpQjcxC80aECdsIz+3p1vNEKBFnADez90gUcFRNVxd8waOZ
+sDf0VwRsu8cv+umMt+/LrpwsJz8mWmzU1qzITiAMN0IXdnzAqA7fOrFZvcfAn0My
+SPGDyThUsG0rl2DJH8f1WvbDuQPSw2l+/Wm2nxwB4sCQYhnrvFu1cCWIeWnK/5U1
+EG1FvB5XKOSCs90Y3fLe6nwlqXAC0dqTj2CWoove5RKJ67U/R8foi/YJmvTzdQ/N
+Lcu2zGGLTnTLJLnR/Fw9BQShItFYk/N5c5dls90/9iDXSbLhy4SzKPkdsKxPTOIy
+7Kej+KkSdzVaYw5DXtwl8FUIEOkPhI7Vxm+eNTL2WNeONqRzxO3OnkwyIMOT+y6R
+9CXIpv4l0HaT1mqXSwdc8Z7ZgkcmMg2IXdCjb1jQ0bK/jwBNlyvNig/Hxdq95vHl
+C5uG7hgPLX9rKrkOStqJC5WU9TSyF5oE4Ug4EgY8v4hVM/eQJrWHctnqk+aEYFwL
+CQyjApfpzuf9bCEQNbER2lwpz3M0JIl4SonYlTrkaZE4cd5jMWISFdsGAhv6RKaH
+gh5LlDIgQ0kaRg2sbnEECUfa/N8SuSS5Ag0ETnqDDAEQALc2/PpXjPRCzIk4MG+B
+BisGO8DbepljnK5b8KfppxjeFTyWtH7Q5/5Bcj8bRZIOKFZR5Zj1BpOUbpEa5fSt
+6sxzLlmvjaoYzOvRcPYWZbwnC9G6qqvwigdBsiV/259lf1kYALlUAC/D+HwEP7fE
+n/NJU00ONCJhOhf/5+dgBbCtEufoBu9YggDWOg7jM+BlD28E1dRSmammFXYs+BK8
+Xf6mrqzw3IHGqrYkkJzn+qq2CF/y2asEK6RJq7o/JecT9TfHky7cdIlv5gdAF2Mh
+9nl5rXJR02B476D4GWo0jtqG5y3Q54Kiecx2V5Al+ESxYAqv9wODb8SzrVQ2MoiA
+9x3ENeu2g26YzB3rZXlClzFiAOP+qPlmbPW4W4H+sQ2u90KroPET+FV+xQaxHtrN
+MXHPXdeWGwPKxq6uI7xgd4VBMP7Sv97lbn7fpkax6jRRIyrOPTCk3PL7uAssUDdt
+TunX66f/ODA/d1Y0FJGFKy9s8WyXAb0EwOUrhNJqgUf3vCB/FAWJrjOJ1nVLhzU7
+MCqs0bAKnT32dWzZ36PXpqTRRJdpntiF4TYIgaW6RhBVmNNmxF3bQiHf4aTDYRN8
+uqcScE7cao9SsPrt9qnC9JbMM+bQhdAq1uYWvVA8zucR95GNffzV1J29lhTalYst
+NisKWxxuY0HENtOgJsKPxbp9ABEBAAGJAh8EGAEKAAkFAk56gwwCGwwACgkQN4uE
+VAIneWI8hA//b89SV9KuExBVcc4JWvAW4VcJWl6DpmyXDscPJ3tqjtzWfnnJ6Fkt
+HQ0XtQCS3GgIAtocKQ6Wdzq+WwqUElAZcHQP68TjCaJuximDvaBqeeFfnIzZcyaW
+9dXCrmM4+h3ZlRim86OuRvLWFCtHw07I1llODIexwM7WR/VJodHvddNw35Bn9rkv
+HgPFlXNrAcArZXyU4pciey8VTvr36HW/USkz8dDxm0ATWxWsZiuuEs+MY1VE2Yh5
+/Y99va0w7+8s0Lgojvglksu04u/PW0XFID1r9m24OFJUz5+NDiHwFG/7NT9/Sd5S
+A4OBrLWXAYxjU2uaOubRd5tPrNpg2wwE6Bqs6r9HxxOogw73LbnRWaFG4Cf+Q0qr
+AOV3uVQkUb8Ed0vbeziUuHkHcQ2FsYDxoaKLzXcz3j023SH5FgcPlsKJI9K7AFCn
+8e412bY2F3xujSXRB6hkC2Hltt5DJsSHaGNY41jhCcHQ9KvKezNmrpvTXI59bFv0
+VDzy7vlN67Y3On4X+FVqb6ejVae2vP+nIEk2S+Hmr2CDrlwwmuOCrJxoVqTwTiTX
+mVrwpIBjQlG8wK563t4g053+oidWjK106DfN/CFdrL4n5ALxJzJIWH41IAyBTjDq
+7Hy4UVCwEes88l4iYs50+q45cZYsbCms8svXSwt6pcAuKQiKaJdECm0=
+=ShRP
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub   rsa4096 2021-02-25 [SC]
+      B5B5DD332142AD657E8D87AC7D27E610B8A3DC52
+uid           [ultimate] Philip David Smart <philip.smart at jisc.ac.uk>
+sig 3        7D27E610B8A3DC52 2021-02-25  Philip David Smart <philip.smart at jisc.ac.uk>
+sig 3        B77C52EEC21771DD 2021-02-25  philsmart (gpg key) <philip.smart at jisc.ac.uk>
+sig 2        9A804E97D7079C77 2021-03-04  Ian A. Young <ian at iay.org.uk>
+uid           [ultimate] [jpeg image of size 9378]
+sig 3        7D27E610B8A3DC52 2021-02-25  Philip David Smart <philip.smart at jisc.ac.uk>
+sig 3        B77C52EEC21771DD 2021-02-25  philsmart (gpg key) <philip.smart at jisc.ac.uk>
+sig 2        9A804E97D7079C77 2021-03-04  Ian A. Young <ian at iay.org.uk>
+sub   rsa4096 2021-02-25 [E]
+sig          7D27E610B8A3DC52 2021-02-25  Philip David Smart <philip.smart at jisc.ac.uk>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBGA3eNkBEADXiVQf1XEUSM9gB+eMAPj4zdjtd2tflJTNI5Q6sEB2ly2rbOyg
+Yo49DF6wytQSRABAJvRY36hHkK77mbRN5Usf8Rq09aGUEv0nvKO+JVT/P4w3tFva
+MmKWiYX775/yDE7B1vu4eb1RQCjrXaye91EpHES74VR8Kb0TVeNEQXGR5/h77Gcg
+obRog+CqxT9L33Fcs4d2C+8BLo4dOaAr29rmEGWRE576NM6wGvtzHdazipM9LvtS
+POGRid4HLYuWvW5WCyAfGbkOq8xreYBtB9gGSZ8iarmcYmN50/gz3Ux3sJA/xy7Y
+vMAYWtA8Rp5hFb39uoaEwHWz8IlnAbA11OfrEkt65dMJwQAX4w89aag/LqI2lrgG
+VEoDWCvkKOlsbJalZr/SgG+m1k/4gqfYYkM09PI7IRn0Cb8uLDdXpeBZd2SJXi9E
+gdDxsrKoi0IMUYQNv8stNa/5lTK7LJkqovpdL+1aHCYRex53Ln+y8RycNbxSGl5O
+CKtFGb9ydfMnbOVX4BJ1x83OOktIkbLpVeZIsaTmUEDQ9itWmXqQ/QoIgBVFRqh8
+bhaCs7y9UPF+WtnpRY7jm3/cSL6oUXax2tT5VoU3LLxTQf90ZdWrAyWEF8auBZAP
+FRXAD2HkS4rIWCuKi/GSH0v6ILu9KREFfViy9fZXFpvwvbz199CPlCkgLQARAQAB
+tCxQaGlsaXAgRGF2aWQgU21hcnQgPHBoaWxpcC5zbWFydEBqaXNjLmFjLnVrPokC
+TQQTAQgAOBYhBLW13TMhQq1lfo2HrH0n5hC4o9xSBQJgN3jZAhsDBQsJCAcCBhUK
+CQgLAgQWAgMBAh4BAheAAAoJEH0n5hC4o9xSz4EP9Arv6WSxxkBEVzGj2XRbXAOP
+U0G5KFJ1sviO9ZGotBnivHH4HWcusDqoyDvjwIYp9jycgtwGw4TuF917QPTfFwhb
+TYma22+wSZ6Sn+OcZr+dSjLg5Ki+6I2BZaS+m2MYcPehCl1ILbtcs83p7AZf2JU1
+IgejhJMsMg93G88ZkSOO0tOAuvBbrO+f/de5AtSIk9ense1OUz9dbjI7JK6idB0a
+1yoo5FjOuyRw11qEa7nP787jcdnh6gkcfRGK9CcYOWXXcfQSRYFx0Wz6qi76bonk
+fYioCGv7LOPvsRnrjyWnM0tukS2RrDSbOfEby6ma4ZsPAhxtOrwWYOYfmjpspNbh
+yPHL/qw0Bb+t+X+mBayRO3MJ1R4l5lU3cjXF/oSCxinkL4TfX5bJ+SuPmPb6cOO4
+eHBHCwTad0jy9CEQAFIwtQP1+5QpcAUQPEhHlztPPHe5hP3X8M0x0ILTEDrh29E0
+C0CP0aG9xTONBK1JnmWT7NSXDzk+BLokdbDbZs909+fJddlzPq72u0ubRUOgKNki
+eo5Vbg5aOsaCkC0QJOzabO7xbnlOlXlg8XkGnfO8mIZ6Q0M5oEyGSpBakYi0rfQo
+zjzKwflCvRTKEl8spTkPH45Dm7LZ+o5xWSN4P2NVTh46unfCyKxuSi1Prl2tQ6OG
++ke+A9zfGa0iHsXtT8aJAjMEEwEIAB0WIQSHQCCMDpP+yA7r+RO3fFLuwhdx3QUC
+YDeIGgAKCRC3fFLuwhdx3Q0JEACRK35MbZe3mD7uKWb8pXwTxHfngDDA4TgpVLXA
+Oqvmh+ISYN1RVJUdAdws/PsTS9NgWCD3YbN57G0jtCT3Q0kCAtvXNPLPgmKxk0au
+Y2K1xaJs9iDjXysbWLIOgKdw2hs8FrD2YvYCQfm/jTQeG4TEqVJTvxcyLKVGBwud
+Hg6coVsqz0iazwXiPBE1mLlxXi9mk2wv5a3SySPYbGGF37cXEvX1ZRYG721bSaXW
+EUlZDzd2s2iv0FyM7aXjGeI77x7Ri9vG+KcCFdfoBrYjo5tQ0nm/0mWQr+uakDKr
+T4JUmFnzDCzIZcMqeSRcGRgJ8aCN55TctKcjWUMwXSI4PIUu9XjeHgTmIZVFZzSo
+OZGSxiPUuZ8HSjwb1g5RtOejLX0Sd5FCuzDUtNQmS1BIe3ZpW0D3iWtVGr6FWETc
++Ks2Dwa8T2ZbaOFfsJauqm8l1zJYcV8d45V1ASLnyqaMJdYlctlu+6rwgCgIx9LV
+pKhnvVWEdxEVmyt5UMSZwXfNF3LXW6PFrE9GSSUWcpGwF/X3XuGLpNc8a/lF6RHA
+pbRuy5RN1v10feOqfpd8sFbvxQLuN3Xfo+HFjtjqF74BxASJm+2UePPeanIifRvQ
+Hd8NCGycYaNkdlkBQH3BLaTAD6pf25Hd2Iah3iRvY4gCPE0MoUhUERgXlfwd1L0H
+LpLd+YkCMwQSAQgAHRYhBF5tbq4Ww9p1RQshnJqATpfXB5x3BQJgQPZxAAoJEJqA
+TpfXB5x3JzoP+wQO4IfR4x1Fpd4i7P1YEHp1FWX9CiVkgt8KkND2QFv9jSA1VAIn
+zE0AJps33X3vtz4An0+oWEi1zVNSsg/ShhWVcEUsRuojFZmPjzFuDBzBVBRmqqw9
+p3xGFAcFlhtpIhU4xbRgw9mImNKBX5dzJxKzP+tQcAhY36LwI+aYOfMIWnBSWvpV
+se1+vgCLmVnVB3HtzByppRK1g3nxESXtJblgbW2KvP4wvp8FGLcGdIqS5y1AXTfD
+biaZcB+cHUDQMkICrHdiCtJBN5Ds1Rer7fF2GG89zPNyxi9ODVTOed/v3kf6Fd02
+Tz8N4FLvfvzB1CvoxHXOs2vWwx4CXd5KRcqlN0bXSbuNj6iN6mwyq6rFGJiB0i8G
+9ngK1JNjcyAzTrZofPvOXKFFsiJ7WpKaRI1VnjY97X6lxMfrOMeAiO3/dGpavsHs
+mSM1YVySu6T/GqzgKvzq8hH9NRTba2MBFcEeF9nFaa9v87AhY+HpYQkj4nM2Ie2X
+4IByGVHXR0tm7YXaxbgGnANjipmIKxQjf/81UHZgKO0hLYLt51CmiqYBe1RRcnb1
+oh3REIuOPZKW5HBoVkrgBQBODW7zh5brYMf+f+fiu79xvJ/kTBn3IzhZ4Ay9m4jC
+WVefvpLdE/SLz1YjchS8SWJBCxo/vMzg5NyFq4gBg5GqNKQMBMqAumUq0f8AACS4
+/wAAJLMBEAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpGSUYAAQEAAEgASAAA/+EH5kV4
+aWYAAE1NACoAAAAIAAwBDwACAAAABgAAAJ4BEAACAAAACQAAAKQBEgADAAAAAQAB
+AAABGgAFAAAAAQAAAK4BGwAFAAAAAQAAALYBKAADAAAAAQACAAABMQACAAAABQAA
+AL4BMgACAAAAFAAAAMQBQgAEAAAAAQAAAgABQwAEAAAAAQAAAgCHaQAEAAAAAQAA
+ANiIJQAEAAAAAQAABuQAAAAAQXBwbGUAaVBob25lIDcAAAAAAEgAAAABAAAASAAA
+AAExMS40AAAyMDE4OjA3OjE2IDEwOjA3OjM4AAAfgpoABQAAAAEAAAJSgp0ABQAA
+AAEAAAJaiCIAAwAAAAEAAgAAiCcAAwAAAAEAMgAAkAAABwAAAAQwMjIxkAMAAgAA
+ABQAAAJikAQAAgAAABQAAAJ2kQEABwAAAAQBAgMAkgEACgAAAAEAAAKKkgIABQAA
+AAEAAAKSkgMACgAAAAEAAAKakgQACgAAAAEAAAKikgcAAwAAAAEABQAAkgkAAwAA
+AAEAEAAAkgoABQAAAAEAAAKqkhQAAwAAAAQAAAKyknwABwAAA+IAAAK6kpEAAgAA
+AAQ3MTAAkpIAAgAAAAQ3MTAAoAAABwAAAAQwMTAwoAIABAAAAAEAAACWoAMABAAA
+AAEAAADqohcAAwAAAAEAAgAAowEABwAAAAEBAAAApAIAAwAAAAEAAAAApAMAAwAA
+AAEAAAAApAUAAwAAAAEAHAAApAYAAwAAAAEAAAAApDIABQAAAAQAAAacpDMAAgAA
+AAYAAAa8pDQAAgAAACIAAAbCAAAAAAAAAAEAAAARAAAACQAAAAUyMDE4OjA3OjE2
+IDEwOjA3OjM4ADIwMTg6MDc6MTYgMTA6MDc6MzgAAAAKdAAAApMAAAhvAAAE+QAA
+KOIAAA/BAAAAAAAAAAEAAAGPAAAAZAXXBg4DvwPBQXBwbGUgaU9TAAABTU0AEwAB
+AAkAAAABAAAACQACAAcAAAIuAAAA+AADAAcAAABoAAADJgAEAAkAAAABAAAAAQAF
+AAkAAAABAAAA6AAGAAkAAAABAAAA8QAHAAkAAAABAAAAAQAIAAoAAAADAAADjgAM
+AAoAAAACAAADpgANAAkAAAABAAAAKAAOAAkAAAABAAAABAAPAAkAAAABAAAAAgAQ
+AAkAAAABAAAAAQARAAIAAAAlAAADtgAUAAkAAAABAAAABQAXAAkAAAABAAAAAAAZ
+AAkAAAABAAAAAAAaAAIAAAAGAAAD3AAfAAkAAAABAAAAAAAAAABicGxpc3QwME8R
+AgBHAkwCUQJVAlICSwJDAjsCLAIaAnMBzgCQAIgAiAB/AEsCUgJWAlYCTgJGAj4C
+MQIgAsoBjwB/AHkAgACBAIAATgJXAloCVgJOAkQCOAIlAg8CMwFwAHcAjACKAJYA
+jwBMAlYCVwJQAkYCOgIrAhIC4wGiAGUAkgCJAI4AjQCSAEoCUgJQAkcCOgIqAhYC
+9AFqAXgAdACRAIUAhQCMAIsASQJKAvYB+gC8AOIAjgGJAbEAcQBrAIMAeQB6AH4A
+gQBFAoEBTQDQALEA4QDiAL0ArgCZAIkAYwBoAHkAdQBuAEECBAF5ABgBtADHANUA
+uQCkAN0AyQCQAIMAfABqAGUAOwL2AHIAIgEEAb0ArACYAIYAuwDQAK8AXgBmAG8A
+eAAxAgkBUADvAIsAqwC/AJ0AbQB5AF8AZABvAHwAdAB1ACYC5gG3AHUAdgCuANwA
+DAHGAGIAYQBqAHEAdwBvAHAAHQIaAv8BtAGjAZ0BhwF4ATEBcwBtAHYAdQB0AGsA
+ZwAYAhkCDQL5AegB2gHFAagBcgGtAF8AdgBzAHIAagBoABUCGQIUAgkC/AHoAc0B
+sAGPARYBZgBmAHkAagBzAGYAEwITAg8CBAL4AeUBygGzAZsBfgHNAGEAcgBpAGsA
+YQAQAg0CCQL/AfQB4gHJAbMBoAGMAXwBUwEDAeAAcAByAAAIAAAAAAAAAgEAAAAA
+AAAAAQAAAAAAAAAAAAAAAAAAAgxicGxpc3QwMNQBAgMEBQYHCFVmbGFnc1V2YWx1
+ZVl0aW1lc2NhbGVVZXBvY2gQARMAAAU6zneKsRI7msoAEAAIERcdJy0vOD0AAAAA
+AAABAQAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAP///xsEAChy8//+2DAAAShH///v9
+AArWDwAAADsAAAEAAAAAZQAAAQA0MkRDQUE3RC0wMTU0LTRBNTktQjY2NS03QTZB
+QjZBRkM4OEQAAHE4MjVzAAA/1d8AD/+1AD/V3wAP/7UAAAAJAAAABQAAAAkAAAAF
+QXBwbGUAaVBob25lIDcgYmFjayBjYW1lcmEgMy45OW1tIGYvMS44AAANAAEAAgAA
+AAJOAAAAAAIABQAAAAMAAAeGAAMAAgAAAAJXAAAAAAQABQAAAAMAAAeeAAUAAQAA
+AAEAAAAAAAYABQAAAAEAAAe2AAwAAgAAAAJLAAAAAA0ABQAAAAEAAAe+ABAAAgAA
+AAJUAAAAABEABQAAAAEAAAfGABcAAgAAAAJUAAAAABgABQAAAAEAAAfOAB8ABQAA
+AAEAAAfWAAAAAAAAADMAAAABAAAAIAAAAAEAAA5QAAAAZAAAAAMAAAABAAAACwAA
+AAEAABWDAAAAZAAAWb0AAADZAAAArQAABJ4AAN2FAAABWAAA3YUAAAFYAAAACAAA
+AAH/4Q1XaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVn
+aW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBt
+ZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2
+LjAuMCI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5
+OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFi
+b3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIg
+eG1sbnM6bXdnLXJzPSJodHRwOi8vd3d3Lm1ldGFkYXRhd29ya2luZ2dyb3VwLmNv
+bS9zY2hlbWFzL3JlZ2lvbnMvIiB4bWxuczpzdEFyZWE9Imh0dHA6Ly9ucy5hZG9i
+ZS5jb20veG1wL3NUeXBlL0FyZWEjIiB4bWxuczphcHBsZS1maT0iaHR0cDovL25z
+LmFwcGxlLmNvbS9mYWNlaW5mby8xLjAvIiB4bWxuczpzdERpbT0iaHR0cDovL25z
+LmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL0RpbWVuc2lvbnMjIiB4bWxuczpwaG90
+b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpD
+cmVhdGVEYXRlPSIyMDE4LTA3LTE2VDEwOjA3OjM4LjcxMCIgeG1wOkNyZWF0b3JU
+b29sPSIxMS40IiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNy0xNlQxMDowNzozOCIg
+cGhvdG9zaG9wOkRhdGVDcmVhdGVkPSIyMDE4LTA3LTE2VDEwOjA3OjM4LjcxMCI+
+IDxtd2ctcnM6UmVnaW9ucyByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+IDxtd2ct
+cnM6UmVnaW9uTGlzdD4gPHJkZjpTZXE+IDxyZGY6bGk+IDxyZGY6RGVzY3JpcHRp
+b24gbXdnLXJzOlR5cGU9IkZhY2UiPiA8bXdnLXJzOkFyZWEgc3RBcmVhOnk9IjAu
+NTEyOTk5OTk5OTk5OTk5OSIgc3RBcmVhOnc9IjAuMjM3OTk5OTk5OTk5OTk5OTki
+IHN0QXJlYTp4PSIwLjM3MSIgc3RBcmVhOmg9IjAuMzE3OTk5OTk5OTk5OTk5OTUi
+IHN0QXJlYTp1bml0PSJub3JtYWxpemVkIi8+IDxtd2ctcnM6RXh0ZW5zaW9ucyBh
+cHBsZS1maTpBbmdsZUluZm9ZYXc9IjAiIGFwcGxlLWZpOkFuZ2xlSW5mb1JvbGw9
+IjI3MCIgYXBwbGUtZmk6Q29uZmlkZW5jZUxldmVsPSIxMDAwIiBhcHBsZS1maTpU
+aW1lc3RhbXA9IjEzNzk5OTkyMTQ1MCIgYXBwbGUtZmk6RmFjZUlEPSI5Ii8+IDwv
+cmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpsaT4gPC9yZGY6U2VxPiA8L213Zy1yczpS
+ZWdpb25MaXN0PiA8bXdnLXJzOkFwcGxpZWRUb0RpbWVuc2lvbnMgc3REaW06aD0i
+MzAyNCIgc3REaW06dz0iNDAzMiIgc3REaW06dW5pdD0icGl4ZWwiLz4gPC9td2ct
+cnM6UmVnaW9ucz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94Onht
+cG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0
+IGVuZD0idyI/PgD/7QB4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAD8cAVoAAxsl
+RxwCAAACAAIcAj8ABjEwMDczOBwCPgAIMjAxODA3MTYcAjcACDIwMTgwNzE2HAI8
+AAYxMDA3MzgAOEJJTQQlAAAAAAAQOGix0QQ3mMOAExf+M5Hq4v/iAkBJQ0NfUFJP
+RklMRQABAQAAAjBBREJFAhAAAG1udHJSR0IgWFlaIAfQAAgACwATADMAO2Fjc3BB
+UFBMAAAAAG5vbmUAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtQURCRQAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmNwcnQA
+AAD8AAAAMmRlc2MAAAEwAAAAa3d0cHQAAAGcAAAAFGJrcHQAAAGwAAAAFHJUUkMA
+AAHEAAAADmdUUkMAAAHUAAAADmJUUkMAAAHkAAAADnJYWVoAAAH0AAAAFGdYWVoA
+AAIIAAAAFGJYWVoAAAIcAAAAFHRleHQAAAAAQ29weXJpZ2h0IDIwMDAgQWRvYmUg
+U3lzdGVtcyBJbmNvcnBvcmF0ZWQAAABkZXNjAAAAAAAAABFBZG9iZSBSR0IgKDE5
+OTgpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EA
+AQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAY3VydgAAAAAAAAABAjMAAGN1cnYA
+AAAAAAAAAQIzAABjdXJ2AAAAAAAAAAECMwAAWFlaIAAAAAAAAJwYAABPpQAABPxY
+WVogAAAAAAAANI0AAKAsAAAPlVhZWiAAAAAAAAAmMQAAEC8AAL6c/8AAEQgA6gCW
+AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQ
+AAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHw
+JDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp
+anN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TF
+xsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEB
+AQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUh
+MQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4
+OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWW
+l5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp
+6vLz9PX29/j5+v/bAEMAGBgYGBgYKRgYKTopKSk6Tjo6OjpOY05OTk5OY3djY2Nj
+Y2N3d3d3d3d3d4+Pj4+Pj6enp6enu7u7u7u7u7u7u//bAEMBHR8fMCwwUiwsUsSF
+bYXExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
+xMTExP/dAAQACv/aAAwDAQACEQMRAD8A6KiiisiwpaSkJ4oAZK2xd3uB+fFP3CqL
+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
+=TFGe
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/sp-saml-api/pom.xml b/sp-saml-api/pom.xml
index 9a6f82b..ba37ade 100644
--- a/sp-saml-api/pom.xml
+++ b/sp-saml-api/pom.xml
@@ -28,30 +28,23 @@
             <scope>compile</scope>
         </dependency>
 
+        <!-- Provided dependencies -->
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-profile.groupId}</groupId>
             <artifactId>shib-saml-profile-api</artifactId>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-attribute-api</artifactId>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-metadata.groupId}</groupId>
             <artifactId>shib-metadata-api</artifactId>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>net.shibboleth</groupId>
-            <artifactId>shib-support</artifactId>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
         
-        <!-- Provided dependencies -->
-        
         <!-- Test Dependencies -->
     </dependencies>
 
diff --git a/sp-saml-impl/pom.xml b/sp-saml-impl/pom.xml
index a0db411..57978d9 100644
--- a/sp-saml-impl/pom.xml
+++ b/sp-saml-impl/pom.xml
@@ -27,30 +27,28 @@
             <version>${project.version}</version>
         </dependency>
 
+        <!-- Provided dependencies -->
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-profile.groupId}</groupId>
             <artifactId>shib-profile-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-profile.groupId}</groupId>
             <artifactId>shib-saml-profile-api</artifactId>
+            <scope>provided</scope>
         </dependency>
 
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-attribute-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-metadata.groupId}</groupId>
             <artifactId>shib-metadata-api</artifactId>
+            <scope>provided</scope>
         </dependency>
-
-        <dependency>
-            <groupId>net.shibboleth</groupId>
-            <artifactId>shib-support</artifactId>
-        </dependency>
-        
-        <!-- Provided dependencies -->
         
         <!-- Test Dependencies -->
     </dependencies>
diff --git a/sp-server-api/pom.xml b/sp-server-api/pom.xml
index 61356e8..4031fb0 100644
--- a/sp-server-api/pom.xml
+++ b/sp-server-api/pom.xml
@@ -21,43 +21,47 @@
         
     <dependencies>
         <!-- Compile dependencies -->
+
+        <!-- Provided dependencies -->
         <dependency>
             <groupId>net.shibboleth</groupId>
             <artifactId>shib-profile-api</artifactId>
+            <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>net.shibboleth</groupId>
             <artifactId>shib-attribute-resolver-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>net.shibboleth</groupId>
             <artifactId>shib-attribute-filter-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>net.shibboleth</groupId>
             <artifactId>shib-metadata-api</artifactId>
+            <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>net.shibboleth</groupId>
             <artifactId>shib-service</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>net.shibboleth</groupId>
-            <artifactId>shib-support</artifactId>
+            <scope>provided</scope>
         </dependency>
         
         <dependency>
             <groupId>${spring.groupId}</groupId>
             <artifactId>spring-beans</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>${spring.groupId}</groupId>
             <artifactId>spring-context</artifactId>
+            <scope>provided</scope>
         </dependency>
 
-        <!-- Provided dependencies -->
         <dependency>
             <groupId>${slf4j.groupId}</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
diff --git a/sp-server-impl/pom.xml b/sp-server-impl/pom.xml
index b969b3f..b537277 100644
--- a/sp-server-impl/pom.xml
+++ b/sp-server-impl/pom.xml
@@ -29,47 +29,60 @@
         </dependency>
 
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>org.springframework.integration</groupId>
+            <artifactId>spring-integration-ip</artifactId>
+        </dependency>
+    
+        <!-- Provided dependencies -->
+        <dependency>
+            <groupId>${shib-profile.groupId}</groupId>
+            <artifactId>shib-profile-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-attribute-resolver-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-attribute-filter-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-metadata.groupId}</groupId>
             <artifactId>shib-metadata-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-core-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-xmlsec-api</artifactId>
+            <scope>provided</scope>
         </dependency>
 
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-shared.groupId}</groupId>
             <artifactId>shib-service</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-shared.groupId}</groupId>
             <artifactId>shib-spring</artifactId>
+            <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>io.dropwizard.metrics</groupId>
             <artifactId>metrics-core</artifactId>
+            <scope>provided</scope>
         </dependency>
 
-        <dependency>
-            <groupId>org.springframework.integration</groupId>
-            <artifactId>spring-integration-ip</artifactId>
-        </dependency>
-    
-        <!-- Provided dependencies -->
         <dependency>
             <groupId>${slf4j.groupId}</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/BasicApplication.java b/sp-server-impl/src/main/java/net/shibboleth/sp/impl/BasicApplication.java
index f9652c9..29364df 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/BasicApplication.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/impl/BasicApplication.java
@@ -201,7 +201,7 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
         
         final String component = input.getmember(COMPONENT).string();
         if (component == null || component.isEmpty()) {
-            log.warn("{}: Received message without component address", getId(), COMPONENT);
+            log.warn("{}: Received message without component address", getId());
             throw new RemoteProcessingException("No component identified in message");
         }
         
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/Main.java b/sp-server-impl/src/main/java/net/shibboleth/sp/impl/Main.java
deleted file mode 100644
index 3b58b69..0000000
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/Main.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *  https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.sp.impl;
-
-import org.springframework.context.support.GenericApplicationContext;
-
-import net.shibboleth.shared.collection.CollectionSupport;
-import net.shibboleth.shared.spring.util.ApplicationContextBuilder;
-import net.shibboleth.sp.spring.impl.PropertiesApplicationContextInitializer;
-
-/**
- * Main entry point to SP service.
- */
-public final class Main {
-
-    /**
-     * Load the root Spring context.
-     *
-     * @param args - command line arguments
-     */
-    public static void main(final String... args) {
-
-        try (
-            final GenericApplicationContext context =
-                    new ApplicationContextBuilder()
-                        .setName("Shibboleth Service Provider Service Context")
-                        .setContextInitializer(new PropertiesApplicationContextInitializer())
-                        .setUnresolvedServiceConfigurations(
-                                CollectionSupport.listOf(
-                                    "classpath*:/META-INF/net/shibboleth/sp/preconfig.xml",
-                                    "classpath:/net/shibboleth/sp/conf/global-system.xml",
-                                    "classpath*:/META-INF/net/shibboleth/sp/postconfig.xml")
-                                )
-                        .installShutdownHook(true)
-                        .build()) {
- 
-            System.out.println("ApplicationContext started, waiting until termination signal...");
-            while (!Thread.interrupted()) {
-                // Loop until interrupted
-                try {
-                    Thread.sleep(2000);
-                }  catch(final InterruptedException e) {
-                    Thread.currentThread().interrupt();
-                }
-            }
-        } catch (final Exception e) {
-            e.printStackTrace(System.err);
-        }
-        
-        System.out.println("Exiting...");
-    }
-
-}
\ No newline at end of file
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/OpenSAMLConfigBean.java b/sp-server-impl/src/main/java/net/shibboleth/sp/impl/OpenSAMLConfigBean.java
deleted file mode 100644
index 97c0ce2..0000000
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/OpenSAMLConfigBean.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.sp.impl;
-
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import org.opensaml.core.config.ConfigurationService;
-import org.opensaml.core.config.InitializationException;
-import org.opensaml.core.config.InitializationService;
-import org.opensaml.core.xml.config.XMLObjectProviderRegistry;
-import org.opensaml.xmlsec.config.DecryptionParserPool;
-
-import org.slf4j.Logger;
-
-import com.codahale.metrics.MetricRegistry;
-
-import net.shibboleth.shared.component.AbstractInitializableComponent;
-import net.shibboleth.shared.component.ComponentInitializationException;
-import net.shibboleth.shared.primitive.LoggerFactory;
-import net.shibboleth.shared.xml.ParserPool;
-
-
-/**
- * A simple bean that may be used with Spring to initialize the OpenSAML library
- * with injected instances of some critical objects.
- */
-public class OpenSAMLConfigBean extends AbstractInitializableComponent {
-
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(OpenSAMLConfigBean.class);
-    
-    /** Optional {@link ParserPool} to configure. */
-    @Nullable private ParserPool parserPool;
-    
-    /** Optional decryption {@link ParserPool} to configure. */
-    @Nullable private ParserPool decryptionParserPool;
-    
-    /** Optional {@link MetricRegistry} to configure. */
-    @Nullable private MetricRegistry metricRegistry;
-    
-    /**
-     * Get the global {@link ParserPool} to configure.
-     * 
-     * @return the parser pool
-     */
-    @Nullable public ParserPool getParserPool() {
-        return parserPool;
-    }
-
-    /**
-     * Set the global {@link ParserPool} to configure.
-     * 
-     * @param newParserPool the parser pool to set
-     */
-    public void setParserPool(@Nullable final ParserPool newParserPool) {
-        checkSetterPreconditions();
-        parserPool = newParserPool;
-    }
-    
-    /**
-     * Get the global decryption {@link ParserPool} to configure.
-     * 
-     * @return the decryption parser pool
-     */
-    @Nullable public ParserPool getDecryptionParserPool() {
-        return decryptionParserPool;
-    }
-
-    /**
-     * Set the global decryption {@link ParserPool} to configure.
-     * 
-     * @param newParserPool the decryption parser pool to set
-     */
-    public void setDecryptionParserPool(@Nullable final ParserPool newParserPool) {
-        checkSetterPreconditions();
-        decryptionParserPool = newParserPool;
-    }
-    
-    /**
-     * Get the global {@link MetricRegistry} to configure.
-     * 
-     * @return the metric registry to use
-     * 
-     * @since 3.3.0
-     */
-    @Nullable public MetricRegistry getMetricRegistry() {
-        return metricRegistry;
-    }
-    
-    /**
-     * Set the global {@link MetricRegistry} to configure.
-     * 
-     * @param registry the metric registry to use
-     * 
-     * @since 3.3.0
-     */
-    public void setMetricRegistry(@Nullable final MetricRegistry registry) {
-        metricRegistry = registry;
-    }
-    
-    /** {@inheritDoc} */
-    protected void doInitialize() throws ComponentInitializationException {
-
-        // Initialize OpenSAML.
-        try {
-            InitializationService.initialize();
-        } catch (final InitializationException e) {
-            throw new ComponentInitializationException("Exception initializing OpenSAML", e);
-        }
-        
-        XMLObjectProviderRegistry registry = null;
-        synchronized(ConfigurationService.class) {
-            if (metricRegistry != null) {
-                ConfigurationService.register(MetricRegistry.class, metricRegistry);
-            }
-            
-            registry = ConfigurationService.get(XMLObjectProviderRegistry.class);
-            if (registry == null) {
-                log.debug("XMLObjectProviderRegistry did not exist in ConfigurationService, will be created");
-                registry = new XMLObjectProviderRegistry();
-                ConfigurationService.register(XMLObjectProviderRegistry.class, registry);
-            }
-        }
-        
-        if (parserPool != null) {
-            registry.setParserPool(parserPool);
-        }
-        
-        if (decryptionParserPool != null) {
-            ConfigurationService.register(DecryptionParserPool.class, new DecryptionParserPool(decryptionParserPool));
-        }
-    }
-    
-}
\ No newline at end of file
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/ErrorTransformer.java b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/ErrorTransformer.java
index 607c35a..7df9272 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/ErrorTransformer.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/ErrorTransformer.java
@@ -33,7 +33,7 @@ public class ErrorTransformer extends AbstractPayloadTransformer<Throwable,byte[
     protected byte[] transformPayload(Throwable payload) {
         final DDF err = new DDF("exception").structure();
         
-        Throwable cause = payload.getCause();
+        Throwable cause = payload.getCause() != null ? payload.getCause() : payload;
         
         // If this is our wrapper type, just skip down a layer.
         if (cause instanceof RemoteProcessingException && cause.getCause() != null) {
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/RequestProcessor.java b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/RequestProcessor.java
index f628cd9..ebebc0d 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/RequestProcessor.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/RequestProcessor.java
@@ -130,9 +130,7 @@ public class RequestProcessor extends AbstractIdentifiableInitializableComponent
             throw new RemoteProcessingException("Save my walrus! ip_address header was not a String?");
         }
         
-	    Constraint.isNotNull(message.getPayload(), "Input object cannot be null");
-	    
-	    final DDF input = message.getPayload();
+	    final DDF input = Constraint.isNotNull(message.getPayload(), "Input object cannot be null");
 	    
 	    log.trace("Input message: {}", input.toString());
 	    
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/spring/impl/PropertiesApplicationContextInitializer.java b/sp-server-impl/src/main/java/net/shibboleth/sp/spring/impl/PropertiesApplicationContextInitializer.java
deleted file mode 100644
index 07b4ef6..0000000
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/spring/impl/PropertiesApplicationContextInitializer.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *  https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.sp.spring.impl;
-
-import javax.annotation.Nonnull;
-
-import org.springframework.context.ConfigurableApplicationContext;
-
-import net.shibboleth.shared.annotation.constraint.NotEmpty;
-import net.shibboleth.shared.spring.context.AbstractPropertiesApplicationContextInitializer;
-
-/**
- * Specialization of context initializer for SP use.
- */
-public class PropertiesApplicationContextInitializer extends AbstractPropertiesApplicationContextInitializer {
-
-    /** Home property. */
-    @Nonnull @NotEmpty public static final String SP_HOME_PROPERTY = "sp.home";
-
-    /** Property that points to more property sources. */
-    @Nonnull @NotEmpty public static final String SP_ADDITIONAL_PROPERTY = "sp.additionalProperties";
-
-    /** Property that controls auto-search for property sources. */
-    @Nonnull @NotEmpty public static final String SP_AUTOSEARCH_PROPERTY = "sp.searchForProperties";
-
-    /** Target resource to be searched for. */
-    @Nonnull public static final String SP_PROPERTIES = "/conf/sp.properties";
-
-    /** Well known search location. */
-    @Nonnull public static final String SEARCH_LOCATION = "/opt/shibboleth-sp";
-
-    /** Property controlling whether to fail fast. */
-    @Nonnull public static final String FAILFAST_PROPERTY = "sp.initializer.failFast";
-    
-    /** {@inheritDoc} */
-    @Override
-    @Nonnull @NotEmpty protected String getHomePropertyName() {
-        return SP_HOME_PROPERTY;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    @Nonnull @NotEmpty protected String getSearchTarget() {
-        return SP_PROPERTIES;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    @Nonnull @NotEmpty protected String getSearchLocation() {
-        return SEARCH_LOCATION;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    @Nonnull @NotEmpty protected String getFailFastPropertyName() {
-        return FAILFAST_PROPERTY;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    @Nonnull @NotEmpty protected String getAdditionalPropertiesPropertyName() {
-        return SP_ADDITIONAL_PROPERTY;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    @Nonnull @NotEmpty protected String getAutoSearchPropertyName() {
-        return SP_AUTOSEARCH_PROPERTY;
-    }
-
-    /** {@inheritDoc} */
-    public void initialize(@Nonnull final ConfigurableApplicationContext applicationContext) {
-        applicationContext.getEnvironment().setPlaceholderPrefix("%{");
-        applicationContext.getEnvironment().setPlaceholderSuffix("}");
-        
-        super.initialize(applicationContext);
-    }
-    
-}
\ No newline at end of file
diff --git a/sp-session-api/pom.xml b/sp-session-api/pom.xml
index eed83a5..deca6d7 100644
--- a/sp-session-api/pom.xml
+++ b/sp-session-api/pom.xml
@@ -28,25 +28,18 @@
             <scope>compile</scope>
         </dependency>
 
+        <!-- Provided dependencies -->
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-attribute-api</artifactId>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-metadata.groupId}</groupId>
             <artifactId>shib-metadata-api</artifactId>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>net.shibboleth</groupId>
-            <artifactId>shib-support</artifactId>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
-        
-        <!-- Provided dependencies -->
-        
+                
         <!-- Test Dependencies -->
     </dependencies>
 
diff --git a/sp-session-impl/pom.xml b/sp-session-impl/pom.xml
index 65b7e54..29b369a 100644
--- a/sp-session-impl/pom.xml
+++ b/sp-session-impl/pom.xml
@@ -21,24 +21,18 @@
         
     <dependencies>
         <!-- Compile dependencies -->
+        
+        <!-- Provided dependencies -->
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-attribute.groupId}</groupId>
             <artifactId>shib-attribute-api</artifactId>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth</groupId>
+            <groupId>${shib-metadata.groupId}</groupId>
             <artifactId>shib-metadata-api</artifactId>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
-
-        <dependency>
-            <groupId>net.shibboleth</groupId>
-            <artifactId>shib-support</artifactId>
-            <scope>compile</scope>
-        </dependency>
-        
-        <!-- Provided dependencies -->
         
         <!-- Test Dependencies -->
     </dependencies>
diff --git a/sp-testing/pom.xml b/sp-testing/pom.xml
index 64a57b1..5564d97 100644
--- a/sp-testing/pom.xml
+++ b/sp-testing/pom.xml
@@ -28,22 +28,17 @@
         </dependency>
 
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-security-api</artifactId>
         </dependency>
 
         <!-- Normally test scope. -->
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-testing</artifactId>
             <scope>compile</scope>
         </dependency>
 
-        <dependency>
-            <groupId>net.shibboleth</groupId>
-            <artifactId>shib-support</artifactId>
-        </dependency>
-
         <!-- Normally test scope. -->
         <dependency>
             <groupId>net.shibboleth</groupId>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list