diff --git a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF index 184c8a440..c65cbf161 100644 --- a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF @@ -8,20 +8,20 @@ Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Import-Package: javax.servlet;version="[2.5.0,3.2.0)", javax.servlet.http;version="[2.5.0,3.2.0)", - org.eclipse.jetty.continuation;version="[7.6.0,8.0.0)", - org.eclipse.jetty.http;version="[7.6.0,8.0.0)", - org.eclipse.jetty.io;version="[7.6.0,8.0.0)", - org.eclipse.jetty.security;version="[7.6.0,8.0.0)", - org.eclipse.jetty.security.authentication;version="[7.6.0,8.0.0)", - org.eclipse.jetty.server;version="[7.6.0,8.0.0)", - org.eclipse.jetty.server.handler;version="[7.6.0,8.0.0)", - org.eclipse.jetty.server.nio;version="[7.6.0,8.0.0)", - org.eclipse.jetty.servlet;version="[7.6.0,8.0.0)", - org.eclipse.jetty.util;version="[7.6.0,8.0.0)", - org.eclipse.jetty.util.component;version="[7.6.0,8.0.0)", - org.eclipse.jetty.util.log;version="[7.6.0,8.0.0)", - org.eclipse.jetty.util.security;version="[7.6.0,8.0.0)", - org.eclipse.jetty.util.thread;version="[7.6.0,8.0.0)", + org.eclipse.jetty.continuation;version="[9.0.0,10.0.0)", + org.eclipse.jetty.http;version="[9.0.0,10.0.0)", + org.eclipse.jetty.io;version="[9.0.0,10.0.0)", + org.eclipse.jetty.security;version="[9.0.0,10.0.0)", + org.eclipse.jetty.security.authentication;version="[9.0.0,10.0.0)", + org.eclipse.jetty.server;version="[9.0.0,10.0.0)", + org.eclipse.jetty.server.handler;version="[9.0.0,10.0.0)", + org.eclipse.jetty.server.nio;version="[9.0.0,10.0.0)", + org.eclipse.jetty.servlet;version="[9.0.0,10.0.0)", + org.eclipse.jetty.util;version="[9.0.0,10.0.0)", + org.eclipse.jetty.util.component;version="[9.0.0,10.0.0)", + org.eclipse.jetty.util.log;version="[9.0.0,10.0.0)", + org.eclipse.jetty.util.security;version="[9.0.0,10.0.0)", + org.eclipse.jetty.util.thread;version="[9.0.0,10.0.0)", org.eclipse.jgit.errors;version="[4.0.0,4.1.0)", org.eclipse.jgit.http.server;version="[4.0.0,4.1.0)", org.eclipse.jgit.http.server.glue;version="[4.0.0,4.1.0)", diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/AsIsServiceTest.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/AsIsServiceTest.java index a86ae0930..c6b8f092b 100644 --- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/AsIsServiceTest.java +++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/AsIsServiceTest.java @@ -133,7 +133,7 @@ public class AsIsServiceTest extends LocalDiskRepositoryTestCase { private final String host; R(final String user, final String host) { - super(new Request() /* can't pass null, sigh */); + super(new Request(null, null) /* can't pass null, sigh */); this.user = user; this.host = host; } diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DefaultReceivePackFactoryTest.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DefaultReceivePackFactoryTest.java index 04f7c52f9..772865df7 100644 --- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DefaultReceivePackFactoryTest.java +++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DefaultReceivePackFactoryTest.java @@ -204,7 +204,7 @@ public class DefaultReceivePackFactoryTest extends LocalDiskRepositoryTestCase { private final String host; R(final String user, final String host) { - super(new Request() /* can't pass null, sigh */); + super(new Request(null, null) /* can't pass null, sigh */); this.user = user; this.host = host; } diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DefaultUploadPackFactoryTest.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DefaultUploadPackFactoryTest.java index bc1370367..c9d43cdaf 100644 --- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DefaultUploadPackFactoryTest.java +++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DefaultUploadPackFactoryTest.java @@ -160,7 +160,7 @@ public class DefaultUploadPackFactoryTest extends LocalDiskRepositoryTestCase { private final String host; R(final String user, final String host) { - super(new Request() /* can't pass null, sigh */); + super(new Request(null, null) /* can't pass null, sigh */); this.user = user; this.host = host; } diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DumbClientSmartServerTest.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DumbClientSmartServerTest.java index 7b4270f1b..e385b9538 100644 --- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DumbClientSmartServerTest.java +++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DumbClientSmartServerTest.java @@ -199,7 +199,8 @@ public class DumbClientSmartServerTest extends HttpTestCase { .startsWith("JGit/")); assertEquals("*/*", info.getRequestHeader(HDR_ACCEPT)); assertEquals(200, info.getStatus()); - assertEquals("text/plain;charset=UTF-8", info + assertEquals("text/plain; charset=UTF-8", + info .getResponseHeader(HDR_CONTENT_TYPE)); AccessEvent head = requests.get(1); @@ -268,7 +269,8 @@ public class DumbClientSmartServerTest extends HttpTestCase { assertEquals("GET", req.get(0).getMethod()); assertEquals(0, req.get(0).getParameters().size()); assertEquals(200, req.get(0).getStatus()); - assertEquals("text/plain;charset=UTF-8", req.get(0).getResponseHeader( + assertEquals("text/plain; charset=UTF-8", + req.get(0).getResponseHeader( HDR_CONTENT_TYPE)); } diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java index 4e75a5632..1b6c552ce 100644 --- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java +++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java @@ -59,9 +59,11 @@ import java.net.URISyntaxException; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.EnumSet; import java.util.List; import java.util.Map; +import javax.servlet.DispatcherType; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -72,7 +74,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.FilterMapping; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jgit.errors.RemoteRepositoryException; @@ -185,7 +186,8 @@ public class SmartClientSmartServerTest extends HttpTestCase { public void destroy() { // } - }), "/" + srcName + "/git-upload-pack", FilterMapping.DEFAULT); + }), "/" + srcName + "/git-upload-pack", + EnumSet.of(DispatcherType.REQUEST)); broken.addServlet(new ServletHolder(gs), "/*"); server.setUp(); @@ -480,7 +482,7 @@ public class SmartClientSmartServerTest extends HttpTestCase { } catch (TransportException err) { String exp = brokenURI + ": expected" + " Content-Type application/x-git-upload-pack-result;" - + " received Content-Type text/plain;charset=UTF-8"; + + " received Content-Type text/plain; charset=UTF-8"; assertEquals(exp, err.getMessage()); } } finally { @@ -504,8 +506,8 @@ public class SmartClientSmartServerTest extends HttpTestCase { assertEquals(join(brokenURI, "git-upload-pack"), service.getPath()); assertEquals(0, service.getParameters().size()); assertEquals(200, service.getStatus()); - assertEquals("text/plain;charset=UTF-8", service - .getResponseHeader(HDR_CONTENT_TYPE)); + assertEquals("text/plain; charset=UTF-8", + service.getResponseHeader(HDR_CONTENT_TYPE)); } @Test diff --git a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF index 4e421ebcd..6ebb18aa7 100644 --- a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF @@ -10,16 +10,16 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Import-Package: javax.servlet;version="[2.5.0,3.2.0)", javax.servlet.http;version="[2.5.0,3.2.0)", org.apache.commons.logging;version="[1.1.1,2.0.0)", - org.eclipse.jetty.http;version="[7.6.0,8.0.0)", - org.eclipse.jetty.security;version="[7.6.0,8.0.0)", - org.eclipse.jetty.security.authentication;version="[7.6.0,8.0.0)", - org.eclipse.jetty.server;version="[7.6.0,8.0.0)", - org.eclipse.jetty.server.handler;version="[7.6.0,8.0.0)", - org.eclipse.jetty.server.nio;version="[7.6.0,8.0.0)", - org.eclipse.jetty.servlet;version="[7.6.0,8.0.0)", - org.eclipse.jetty.util.component;version="[7.6.0,8.0.0)", - org.eclipse.jetty.util.log;version="[7.6.0,8.0.0)", - org.eclipse.jetty.util.security;version="[7.6.0,8.0.0)", + org.eclipse.jetty.http;version="[9.0.0,10.0.0)", + org.eclipse.jetty.security;version="[9.0.0,10.0.0)", + org.eclipse.jetty.security.authentication;version="[9.0.0,10.0.0)", + org.eclipse.jetty.server;version="[9.0.0,10.0.0)", + org.eclipse.jetty.server.handler;version="[9.0.0,10.0.0)", + org.eclipse.jetty.server.nio;version="[9.0.0,10.0.0)", + org.eclipse.jetty.servlet;version="[9.0.0,10.0.0)", + org.eclipse.jetty.util.component;version="[9.0.0,10.0.0)", + org.eclipse.jetty.util.log;version="[9.0.0,10.0.0)", + org.eclipse.jetty.util.security;version="[9.0.0,10.0.0)", org.eclipse.jgit.errors;version="[4.0.0,4.1.0)", org.eclipse.jgit.http.server;version="[4.0.0,4.1.0)", org.eclipse.jgit.internal.storage.file;version="[4.0.0,4.1.0)", diff --git a/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServer.java b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServer.java index 6b0e0603e..ce04bdf2c 100644 --- a/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServer.java +++ b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServer.java @@ -60,10 +60,12 @@ import org.eclipse.jetty.security.ConstraintSecurityHandler; import org.eclipse.jetty.security.MappedLoginService; import org.eclipse.jetty.security.authentication.BasicAuthenticator; import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.UserIdentity; import org.eclipse.jetty.server.handler.ContextHandlerCollection; -import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.util.security.Constraint; import org.eclipse.jetty.util.security.Password; @@ -95,14 +97,22 @@ public class AppServer { private final Server server; - private final Connector connector; + private final ServerConnector connector; private final ContextHandlerCollection contexts; private final TestRequestLog log; public AppServer() { - connector = new SelectChannelConnector(); + server = new Server(); + + HttpConfiguration http_config = new HttpConfiguration(); + http_config.setSecureScheme("https"); + http_config.setSecurePort(8443); + http_config.setOutputBufferSize(32768); + + connector = new ServerConnector(server, + new HttpConnectionFactory(http_config)); connector.setPort(0); try { final InetAddress me = InetAddress.getByName("localhost"); @@ -116,7 +126,6 @@ public class AppServer { log = new TestRequestLog(); log.setHandler(contexts); - server = new Server(); server.setConnectors(new Connector[] { connector }); server.setHandler(log); } @@ -173,7 +182,6 @@ public class AppServer { cm.setPathSpec("/*"); ConstraintSecurityHandler sec = new ConstraintSecurityHandler(); - sec.setStrict(false); sec.setRealmName(realm); sec.setAuthenticator(authType); sec.setLoginService(users); @@ -232,7 +240,7 @@ public class AppServer { /** @return the local port number the server is listening on. */ public int getPort() { assertAlreadySetUp(); - return ((SelectChannelConnector) connector).getLocalPort(); + return connector.getLocalPort(); } /** @return all requests since the server was started. */ diff --git a/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/RecordingLogger.java b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/RecordingLogger.java index 0accfc8b6..7600843d2 100644 --- a/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/RecordingLogger.java +++ b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/RecordingLogger.java @@ -187,4 +187,9 @@ public class RecordingLogger implements Logger { public void ignore(Throwable arg0) { // Ignore (not relevant to test failures) } + + @Override + public void debug(String msg, long value) { + // Ignore (not relevant to test failures) + } } diff --git a/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/TestRequestLog.java b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/TestRequestLog.java index f71bc9350..14ea03a92 100644 --- a/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/TestRequestLog.java +++ b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/TestRequestLog.java @@ -48,11 +48,11 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.Semaphore; +import javax.servlet.DispatcherType; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.eclipse.jetty.server.DispatcherType; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Response; import org.eclipse.jetty.server.handler.HandlerWrapper; diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.3.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.3.target index 525e56981..b82b50cc5 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.3.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.3.target @@ -1,26 +1,26 @@ - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.3.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.3.tpd index 1d16481cd..f038aa0d4 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.3.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.3.tpd @@ -1,6 +1,6 @@ target "jgit-4.3" with source configurePhase -include "projects/jetty-7.6.14.tpd" +include "projects/jetty-9.2.10.tpd" include "orbit/R20150124073747-Luna-SR2.tpd" location "http://download.eclipse.org/releases/kepler/" { diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.4.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.4.target index 083ece881..f012800ac 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.4.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.4.target @@ -1,26 +1,26 @@ - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.4.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.4.tpd index afbe9c9f7..0760bcdff 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.4.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.4.tpd @@ -1,6 +1,6 @@ target "jgit-4.4" with source configurePhase -include "projects/jetty-7.6.14.tpd" +include "projects/jetty-9.2.10.tpd" include "orbit/R20150124073747-Luna-SR2.tpd" location "http://download.eclipse.org/releases/luna/" { diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.5.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.5.target index 42adbb3d9..475fa04cd 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.5.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.5.target @@ -1,26 +1,26 @@ - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.5.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.5.tpd index 33b088a68..71c963479 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.5.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.5.tpd @@ -1,6 +1,6 @@ target "jgit-4.5" with source configurePhase -include "projects/jetty-7.6.14.tpd" +include "projects/jetty-9.2.10.tpd" include "orbit/S20150202203538-Mars-M5.tpd" location "http://download.eclipse.org/releases/mars/" { diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-7.6.14.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-7.6.14.tpd deleted file mode 100644 index 2e338d637..000000000 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-7.6.14.tpd +++ /dev/null @@ -1,20 +0,0 @@ -target "jetty-7.6.14" with source configurePhase - -location jetty-7.6.14 "http://download.eclipse.org/jetty/updates/jetty-bundles-7.x/7.6.14.v20131031/" { - org.eclipse.jetty.client [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.client.source [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.continuation [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.continuation.source [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.http [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.http.source [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.io [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.io.source [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.security [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.security.source [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.server [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.server.source [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.servlet [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.servlet.source [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.util [7.6.14.v20131031,7.6.14.v20131031] - org.eclipse.jetty.util.source [7.6.14.v20131031,7.6.14.v20131031] -} diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-9.2.10.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-9.2.10.tpd new file mode 100644 index 000000000..5a7ee2e2f --- /dev/null +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-9.2.10.tpd @@ -0,0 +1,20 @@ +target "jetty-9.2.10" with source configurePhase + +location jetty-9.2.10 "http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.2.10.v20150310/" { + org.eclipse.jetty.client [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.client.source [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.continuation [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.continuation.source [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.http [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.http.source [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.io [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.io.source [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.security [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.security.source [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.server [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.server.source [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.servlet [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.servlet.source [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.util [9.2.10.v20150310,9.2.10.v20150310] + org.eclipse.jetty.util.source [9.2.10.v20150310,9.2.10.v20150310] +} diff --git a/pom.xml b/pom.xml index 1e00f2457..f02fa296a 100644 --- a/pom.xml +++ b/pom.xml @@ -185,7 +185,7 @@ 1.6 4.3.1 2.5 - 7.6.14.v20131031 + 9.2.10.v20150310 2.6.1 4.1.3 1.7.2