changeset 14962:ee7240043bee

Merge
author amurillo
date Tue, 05 Jul 2016 13:50:37 -0700
parents f20151bd15a9 89ce99c3bc23
children dd7575ec407c
files src/java.base/share/classes/java/lang/invoke/MethodHandles.java test/ProblemList.txt test/sun/security/tools/keytool/printssl.sh
diffstat 121 files changed, 9337 insertions(+), 12579 deletions(-) [+]
line wrap: on
line diff
--- a/src/java.base/share/classes/java/lang/invoke/BoundMethodHandle.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/BoundMethodHandle.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,17 +26,16 @@
 package java.lang.invoke;
 
 import jdk.internal.loader.BootLoader;
-import jdk.internal.vm.annotation.Stable;
 import jdk.internal.org.objectweb.asm.ClassWriter;
 import jdk.internal.org.objectweb.asm.FieldVisitor;
 import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.vm.annotation.Stable;
 import sun.invoke.util.ValueConversions;
 import sun.invoke.util.Wrapper;
 
 import java.lang.invoke.LambdaForm.NamedFunction;
 import java.lang.invoke.MethodHandles.Lookup;
 import java.lang.reflect.Field;
-import java.util.Arrays;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -168,12 +167,16 @@
     }
 
     @Override
-    final Object internalValues() {
-        Object[] boundValues = new Object[speciesData().fieldCount()];
-        for (int i = 0; i < boundValues.length; ++i) {
-            boundValues[i] = arg(i);
+    final String internalValues() {
+        int count = speciesData().fieldCount();
+        if (count == 1) {
+            return "[" + arg(0) + "]";
         }
-        return Arrays.asList(boundValues);
+        StringBuilder sb = new StringBuilder("[");
+        for (int i = 0; i < count; ++i) {
+            sb.append("\n  ").append(i).append(": ( ").append(arg(i)).append(" )");
+        }
+        return sb.append("\n]").toString();
     }
 
     /*non-public*/ final Object arg(int i) {
@@ -869,7 +872,7 @@
      */
     static final SpeciesData SPECIES_DATA = SpeciesData.EMPTY;
 
-    private static final SpeciesData[] SPECIES_DATA_CACHE = new SpeciesData[5];
+    private static final SpeciesData[] SPECIES_DATA_CACHE = new SpeciesData[6];
     private static SpeciesData checkCache(int size, String types) {
         int idx = size - 1;
         SpeciesData data = SPECIES_DATA_CACHE[idx];
@@ -877,9 +880,10 @@
         SPECIES_DATA_CACHE[idx] = data = getSpeciesData(types);
         return data;
     }
-    static SpeciesData speciesData_L()     { return checkCache(1, "L"); }
-    static SpeciesData speciesData_LL()    { return checkCache(2, "LL"); }
-    static SpeciesData speciesData_LLL()   { return checkCache(3, "LLL"); }
-    static SpeciesData speciesData_LLLL()  { return checkCache(4, "LLLL"); }
-    static SpeciesData speciesData_LLLLL() { return checkCache(5, "LLLLL"); }
+    static SpeciesData speciesData_L()      { return checkCache(1, "L"); }
+    static SpeciesData speciesData_LL()     { return checkCache(2, "LL"); }
+    static SpeciesData speciesData_LLL()    { return checkCache(3, "LLL"); }
+    static SpeciesData speciesData_LLLL()   { return checkCache(4, "LLLL"); }
+    static SpeciesData speciesData_LLLLL()  { return checkCache(5, "LLLLL"); }
+    static SpeciesData speciesData_LLLLLL() { return checkCache(6, "LLLLLL"); }
 }
--- a/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java	Tue Jul 05 13:50:37 2016 -0700
@@ -25,22 +25,30 @@
 
 package java.lang.invoke;
 
-import java.io.*;
-import java.util.*;
-import java.lang.reflect.Modifier;
-
-import jdk.internal.org.objectweb.asm.*;
-
-import static java.lang.invoke.LambdaForm.*;
-import static java.lang.invoke.LambdaForm.BasicType.*;
-import static java.lang.invoke.MethodHandleStatics.*;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.Label;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.org.objectweb.asm.Opcodes;
+import jdk.internal.org.objectweb.asm.Type;
 import sun.invoke.util.VerifyAccess;
 import sun.invoke.util.VerifyType;
 import sun.invoke.util.Wrapper;
 import sun.reflect.misc.ReflectUtil;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import static java.lang.invoke.LambdaForm.*;
+import static java.lang.invoke.LambdaForm.BasicType.*;
+import static java.lang.invoke.MethodHandleNatives.Constants.*;
+import static java.lang.invoke.MethodHandleStatics.*;
+
 /**
  * Code generation backend for LambdaForm.
  * <p>
@@ -75,8 +83,8 @@
     private final MethodType invokerType;
 
     /** Info about local variables in compiled lambda form */
-    private final int[]       localsMap;    // index
-    private final Class<?>[]  localClasses; // type
+    private int[]       localsMap;    // index
+    private Class<?>[]  localClasses; // type
 
     /** ASM bytecode generation. */
     private ClassWriter cw;
@@ -101,8 +109,7 @@
         this.lambdaForm = lambdaForm;
         this.invokerName = invokerName;
         this.invokerType = invokerType;
-        this.localsMap = new int[localsMapSize+1];
-        // last entry of localsMap is count of allocated local slots
+        this.localsMap = new int[localsMapSize+1]; // last entry of localsMap is count of allocated local slots
         this.localClasses = new Class<?>[localsMapSize+1];
     }
 
@@ -131,7 +138,6 @@
         }
     }
 
-
     /** instance counters for dumped classes */
     private static final HashMap<String,Integer> DUMP_CLASS_FILES_COUNTERS;
     /** debugging flag for saving generated class files */
@@ -177,7 +183,6 @@
                 }
             });
         }
-
     }
 
     private static String makeDumpableClassName(String className) {
@@ -280,14 +285,11 @@
 
     private static MemberName resolveInvokerMember(Class<?> invokerClass, String name, MethodType type) {
         MemberName member = new MemberName(invokerClass, name, type, REF_invokeStatic);
-        //System.out.println("resolveInvokerMember => "+member);
-        //for (Method m : invokerClass.getDeclaredMethods())  System.out.println("  "+m);
         try {
             member = MEMBERNAME_FACTORY.resolveOrFail(REF_invokeStatic, member, HOST_CLASS, ReflectiveOperationException.class);
         } catch (ReflectiveOperationException e) {
             throw newInternalError(e);
         }
-        //System.out.println("resolveInvokerMember => "+member);
         return member;
     }
 
@@ -541,11 +543,12 @@
         Name writeBack = null;  // local to write back result
         if (arg instanceof Name) {
             Name n = (Name) arg;
-            if (assertStaticType(cls, n))
-                return;  // this cast was already performed
             if (lambdaForm.useCount(n) > 1) {
                 // This guy gets used more than once.
                 writeBack = n;
+                if (assertStaticType(cls, n)) {
+                    return; // this cast was already performed
+                }
             }
         }
         if (isStaticallyNameable(cls)) {
@@ -679,19 +682,29 @@
             MethodHandleImpl.Intrinsic intr = name.function.intrinsicName();
             switch (intr) {
                 case SELECT_ALTERNATIVE:
-                    assert isSelectAlternative(i);
+                    assert lambdaForm.isSelectAlternative(i);
                     if (PROFILE_GWT) {
                         assert(name.arguments[0] instanceof Name &&
-                               nameRefersTo((Name)name.arguments[0], MethodHandleImpl.class, "profileBoolean"));
+                                ((Name)name.arguments[0]).refersTo(MethodHandleImpl.class, "profileBoolean"));
                         mv.visitAnnotation(INJECTEDPROFILE_SIG, true);
                     }
                     onStack = emitSelectAlternative(name, lambdaForm.names[i+1]);
                     i++;  // skip MH.invokeBasic of the selectAlternative result
                     continue;
                 case GUARD_WITH_CATCH:
-                    assert isGuardWithCatch(i);
+                    assert lambdaForm.isGuardWithCatch(i);
                     onStack = emitGuardWithCatch(i);
-                    i = i+2; // Jump to the end of GWC idiom
+                    i += 2; // jump to the end of GWC idiom
+                    continue;
+                case TRY_FINALLY:
+                    assert lambdaForm.isTryFinally(i);
+                    onStack = emitTryFinally(i);
+                    i += 2; // jump to the end of the TF idiom
+                    continue;
+                case LOOP:
+                    assert lambdaForm.isLoop(i);
+                    onStack = emitLoop(i);
+                    i += 2; // jump to the end of the LOOP idiom
                     continue;
                 case NEW_ARRAY:
                     Class<?> rtype = name.function.methodType().returnType();
@@ -763,7 +776,7 @@
      * Emit an invoke for the given name.
      */
     void emitInvoke(Name name) {
-        assert(!isLinkerMethodInvoke(name));  // should use the static path for these
+        assert(!name.isLinkerMethodInvoke());  // should use the static path for these
         if (true) {
             // push receiver
             MethodHandle target = name.function.resolvedHandle();
@@ -952,84 +965,6 @@
     }
 
     /**
-     * Check if MemberName is a call to a method named {@code name} in class {@code declaredClass}.
-     */
-    private boolean memberRefersTo(MemberName member, Class<?> declaringClass, String name) {
-        return member != null &&
-               member.getDeclaringClass() == declaringClass &&
-               member.getName().equals(name);
-    }
-    private boolean nameRefersTo(Name name, Class<?> declaringClass, String methodName) {
-        return name.function != null &&
-               memberRefersTo(name.function.member(), declaringClass, methodName);
-    }
-
-    /**
-     * Check if MemberName is a call to MethodHandle.invokeBasic.
-     */
-    private boolean isInvokeBasic(Name name) {
-        if (name.function == null)
-            return false;
-        if (name.arguments.length < 1)
-            return false;  // must have MH argument
-        MemberName member = name.function.member();
-        return memberRefersTo(member, MethodHandle.class, "invokeBasic") &&
-               !member.isPublic() && !member.isStatic();
-    }
-
-    /**
-     * Check if MemberName is a call to MethodHandle.linkToStatic, etc.
-     */
-    private boolean isLinkerMethodInvoke(Name name) {
-        if (name.function == null)
-            return false;
-        if (name.arguments.length < 1)
-            return false;  // must have MH argument
-        MemberName member = name.function.member();
-        return member != null &&
-               member.getDeclaringClass() == MethodHandle.class &&
-               !member.isPublic() && member.isStatic() &&
-               member.getName().startsWith("linkTo");
-    }
-
-    /**
-     * Check if i-th name is a call to MethodHandleImpl.selectAlternative.
-     */
-    private boolean isSelectAlternative(int pos) {
-        // selectAlternative idiom:
-        //   t_{n}:L=MethodHandleImpl.selectAlternative(...)
-        //   t_{n+1}:?=MethodHandle.invokeBasic(t_{n}, ...)
-        if (pos+1 >= lambdaForm.names.length)  return false;
-        Name name0 = lambdaForm.names[pos];
-        Name name1 = lambdaForm.names[pos+1];
-        return nameRefersTo(name0, MethodHandleImpl.class, "selectAlternative") &&
-               isInvokeBasic(name1) &&
-               name1.lastUseIndex(name0) == 0 &&        // t_{n+1}:?=MethodHandle.invokeBasic(t_{n}, ...)
-               lambdaForm.lastUseIndex(name0) == pos+1; // t_{n} is local: used only in t_{n+1}
-    }
-
-    /**
-     * Check if i-th name is a start of GuardWithCatch idiom.
-     */
-    private boolean isGuardWithCatch(int pos) {
-        // GuardWithCatch idiom:
-        //   t_{n}:L=MethodHandle.invokeBasic(...)
-        //   t_{n+1}:L=MethodHandleImpl.guardWithCatch(*, *, *, t_{n});
-        //   t_{n+2}:?=MethodHandle.invokeBasic(t_{n+1})
-        if (pos+2 >= lambdaForm.names.length)  return false;
-        Name name0 = lambdaForm.names[pos];
-        Name name1 = lambdaForm.names[pos+1];
-        Name name2 = lambdaForm.names[pos+2];
-        return nameRefersTo(name1, MethodHandleImpl.class, "guardWithCatch") &&
-               isInvokeBasic(name0) &&
-               isInvokeBasic(name2) &&
-               name1.lastUseIndex(name0) == 3 &&          // t_{n+1}:L=MethodHandleImpl.guardWithCatch(*, *, *, t_{n});
-               lambdaForm.lastUseIndex(name0) == pos+1 && // t_{n} is local: used only in t_{n+1}
-               name2.lastUseIndex(name1) == 1 &&          // t_{n+2}:?=MethodHandle.invokeBasic(t_{n+1})
-               lambdaForm.lastUseIndex(name1) == pos+2;   // t_{n+1} is local: used only in t_{n+2}
-    }
-
-    /**
      * Emit bytecode for the selectAlternative idiom.
      *
      * The pattern looks like (Cf. MethodHandleImpl.makeGuardWithTest):
@@ -1155,6 +1090,329 @@
         return result;
     }
 
+    /**
+     * Emit bytecode for the tryFinally idiom.
+     * <p>
+     * The pattern looks like (Cf. MethodHandleImpl.makeTryFinally):
+     * <blockquote><pre>{@code
+     * // a0: BMH
+     * // a1: target, a2: cleanup
+     * // a3: box, a4: unbox
+     * // a5 (and following): arguments
+     * tryFinally=Lambda(a0:L,a1:L,a2:L,a3:L,a4:L,a5:L)=>{
+     *   t6:L=MethodHandle.invokeBasic(a3:L,a5:L);         // box the arguments into an Object[]
+     *   t7:L=MethodHandleImpl.tryFinally(a1:L,a2:L,t6:L); // call the tryFinally executor
+     *   t8:L=MethodHandle.invokeBasic(a4:L,t7:L);t8:L}    // unbox the result; return the result
+     * }</pre></blockquote>
+     * <p>
+     * It is compiled into bytecode equivalent to the following code:
+     * <blockquote><pre>{@code
+     * Throwable t;
+     * Object r;
+     * try {
+     *     r = a1.invokeBasic(a5);
+     * } catch (Throwable thrown) {
+     *     t = thrown;
+     *     throw t;
+     * } finally {
+     *     r = a2.invokeBasic(t, r, a5);
+     * }
+     * return r;
+     * }</pre></blockquote>
+     * <p>
+     * Specifically, the bytecode will have the following form (the stack effects are given for the beginnings of
+     * blocks, and for the situations after executing the given instruction - the code will have a slightly different
+     * shape if the return type is {@code void}):
+     * <blockquote><pre>{@code
+     * TRY:                 (--)
+     *                      load target                             (-- target)
+     *                      load args                               (-- args... target)
+     *                      INVOKEVIRTUAL MethodHandle.invokeBasic  (depends)
+     * FINALLY_NORMAL:      (-- r)
+     *                      load cleanup                            (-- cleanup r)
+     *                      SWAP                                    (-- r cleanup)
+     *                      ACONST_NULL                             (-- t r cleanup)
+     *                      SWAP                                    (-- r t cleanup)
+     *                      load args                               (-- args... r t cleanup)
+     *                      INVOKEVIRTUAL MethodHandle.invokeBasic  (-- r)
+     *                      GOTO DONE
+     * CATCH:               (-- t)
+     *                      DUP                                     (-- t t)
+     * FINALLY_EXCEPTIONAL: (-- t t)
+     *                      load cleanup                            (-- cleanup t t)
+     *                      SWAP                                    (-- t cleanup t)
+     *                      load default for r                      (-- r t cleanup t)
+     *                      load args                               (-- args... r t cleanup t)
+     *                      INVOKEVIRTUAL MethodHandle.invokeBasic  (-- r t)
+     *                      POP                                     (-- t)
+     *                      ATHROW
+     * DONE:                (-- r)
+     * }</pre></blockquote>
+     */
+    private Name emitTryFinally(int pos) {
+        Name args    = lambdaForm.names[pos];
+        Name invoker = lambdaForm.names[pos+1];
+        Name result  = lambdaForm.names[pos+2];
+
+        Label lFrom = new Label();
+        Label lTo = new Label();
+        Label lCatch = new Label();
+        Label lDone = new Label();
+
+        Class<?> returnType = result.function.resolvedHandle().type().returnType();
+        boolean isNonVoid = returnType != void.class;
+        MethodType type = args.function.resolvedHandle().type()
+                .dropParameterTypes(0,1)
+                .changeReturnType(returnType);
+        MethodType cleanupType = type.insertParameterTypes(0, Throwable.class);
+        if (isNonVoid) {
+            cleanupType = cleanupType.insertParameterTypes(1, returnType);
+        }
+        String cleanupDesc = cleanupType.basicType().toMethodDescriptorString();
+
+        // exception handler table
+        mv.visitTryCatchBlock(lFrom, lTo, lCatch, "java/lang/Throwable");
+
+        // TRY:
+        mv.visitLabel(lFrom);
+        emitPushArgument(invoker, 0); // load target
+        emitPushArguments(args, 1); // load args (skip 0: method handle)
+        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", type.basicType().toMethodDescriptorString(), false);
+        mv.visitLabel(lTo);
+
+        // FINALLY_NORMAL:
+        emitPushArgument(invoker, 1); // load cleanup
+        if (isNonVoid) {
+            mv.visitInsn(Opcodes.SWAP);
+        }
+        mv.visitInsn(Opcodes.ACONST_NULL);
+        if (isNonVoid) {
+            mv.visitInsn(Opcodes.SWAP);
+        }
+        emitPushArguments(args, 1); // load args (skip 0: method handle)
+        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", cleanupDesc, false);
+        mv.visitJumpInsn(Opcodes.GOTO, lDone);
+
+        // CATCH:
+        mv.visitLabel(lCatch);
+        mv.visitInsn(Opcodes.DUP);
+
+        // FINALLY_EXCEPTIONAL:
+        emitPushArgument(invoker, 1); // load cleanup
+        mv.visitInsn(Opcodes.SWAP);
+        if (isNonVoid) {
+            emitZero(BasicType.basicType(returnType)); // load default for result
+        }
+        emitPushArguments(args, 1); // load args (skip 0: method handle)
+        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", cleanupDesc, false);
+        if (isNonVoid) {
+            mv.visitInsn(Opcodes.POP);
+        }
+        mv.visitInsn(Opcodes.ATHROW);
+
+        // DONE:
+        mv.visitLabel(lDone);
+
+        return result;
+    }
+
+    /**
+     * Emit bytecode for the loop idiom.
+     * <p>
+     * The pattern looks like (Cf. MethodHandleImpl.loop):
+     * <blockquote><pre>{@code
+     * // a0: BMH
+     * // a1: inits, a2: steps, a3: preds, a4: finis
+     * // a5: box, a6: unbox
+     * // a7 (and following): arguments
+     * loop=Lambda(a0:L,a1:L,a2:L,a3:L,a4:L,a5:L,a6:L,a7:L)=>{
+     *   t8:L=MethodHandle.invokeBasic(a5:L,a7:L);                  // box the arguments into an Object[]
+     *   t9:L=MethodHandleImpl.loop(bt:L,a1:L,a2:L,a3:L,a4:L,t8:L); // call the loop executor (with supplied types in bt)
+     *   t10:L=MethodHandle.invokeBasic(a6:L,t9:L);t10:L}           // unbox the result; return the result
+     * }</pre></blockquote>
+     * <p>
+     * It is compiled into bytecode equivalent to the code seen in {@link MethodHandleImpl#loop(BasicType[],
+     * MethodHandle[], MethodHandle[], MethodHandle[], MethodHandle[], Object...)}, with the difference that no arrays
+     * will be used for local state storage. Instead, the local state will be mapped to actual stack slots.
+     * <p>
+     * Bytecode generation applies an unrolling scheme to enable better bytecode generation regarding local state type
+     * handling. The generated bytecode will have the following form ({@code void} types are ignored for convenience).
+     * Assume there are {@code C} clauses in the loop.
+     * <blockquote><pre>{@code
+     * INIT: (INIT_SEQ for clause 1)
+     *       ...
+     *       (INIT_SEQ for clause C)
+     * LOOP: (LOOP_SEQ for clause 1)
+     *       ...
+     *       (LOOP_SEQ for clause C)
+     *       GOTO LOOP
+     * DONE: ...
+     * }</pre></blockquote>
+     * <p>
+     * The {@code INIT_SEQ_x} sequence for clause {@code x} (with {@code x} ranging from {@code 0} to {@code C-1}) has
+     * the following shape. Assume slot {@code vx} is used to hold the state for clause {@code x}.
+     * <blockquote><pre>{@code
+     * INIT_SEQ_x:  ALOAD inits
+     *              CHECKCAST MethodHandle[]
+     *              ICONST x
+     *              AALOAD      // load the init handle for clause x
+     *              load args
+     *              INVOKEVIRTUAL MethodHandle.invokeBasic
+     *              store vx
+     * }</pre></blockquote>
+     * <p>
+     * The {@code LOOP_SEQ_x} sequence for clause {@code x} (with {@code x} ranging from {@code 0} to {@code C-1}) has
+     * the following shape. Again, assume slot {@code vx} is used to hold the state for clause {@code x}.
+     * <blockquote><pre>{@code
+     * LOOP_SEQ_x:  ALOAD steps
+     *              CHECKCAST MethodHandle[]
+     *              ICONST x
+     *              AALOAD              // load the step handle for clause x
+     *              load locals
+     *              load args
+     *              INVOKEVIRTUAL MethodHandle.invokeBasic
+     *              store vx
+     *              ALOAD preds
+     *              CHECKCAST MethodHandle[]
+     *              ICONST x
+     *              AALOAD              // load the pred handle for clause x
+     *              load locals
+     *              load args
+     *              INVOKEVIRTUAL MethodHandle.invokeBasic
+     *              IFNE LOOP_SEQ_x+1   // predicate returned false -> jump to next clause
+     *              ALOAD finis
+     *              CHECKCAST MethodHandle[]
+     *              ICONST x
+     *              AALOAD              // load the fini handle for clause x
+     *              load locals
+     *              load args
+     *              INVOKEVIRTUAL MethodHandle.invokeBasic
+     *              GOTO DONE           // jump beyond end of clauses to return from loop
+     * }</pre></blockquote>
+     */
+    private Name emitLoop(int pos) {
+        Name args    = lambdaForm.names[pos];
+        Name invoker = lambdaForm.names[pos+1];
+        Name result  = lambdaForm.names[pos+2];
+
+        // extract clause and loop-local state types
+        // find the type info in the loop invocation
+        BasicType[] loopClauseTypes = (BasicType[]) invoker.arguments[0];
+        Class<?>[] loopLocalStateTypes = Stream.of(loopClauseTypes).
+                filter(bt -> bt != BasicType.V_TYPE).map(BasicType::basicTypeClass).toArray(Class<?>[]::new);
+
+        final int firstLoopStateIndex = extendLocalsMap(loopLocalStateTypes);
+
+        Class<?> returnType = result.function.resolvedHandle().type().returnType();
+        MethodType loopType = args.function.resolvedHandle().type()
+                .dropParameterTypes(0,1)
+                .changeReturnType(returnType);
+        MethodType loopHandleType = loopType.insertParameterTypes(0, loopLocalStateTypes);
+        MethodType predType = loopHandleType.changeReturnType(boolean.class);
+        MethodType finiType = loopHandleType;
+
+        final int nClauses = loopClauseTypes.length;
+
+        // indices to invoker arguments to load method handle arrays
+        final int inits = 1;
+        final int steps = 2;
+        final int preds = 3;
+        final int finis = 4;
+
+        Label lLoop = new Label();
+        Label lDone = new Label();
+        Label lNext;
+
+        // INIT:
+        for (int c = 0, state = 0; c < nClauses; ++c) {
+            MethodType cInitType = loopType.changeReturnType(loopClauseTypes[c].basicTypeClass());
+            emitLoopHandleInvoke(invoker, inits, c, args, false, cInitType, loopLocalStateTypes, firstLoopStateIndex);
+            if (cInitType.returnType() != void.class) {
+                emitStoreInsn(BasicType.basicType(cInitType.returnType()), firstLoopStateIndex + state);
+                ++state;
+            }
+        }
+
+        // LOOP:
+        mv.visitLabel(lLoop);
+
+        for (int c = 0, state = 0; c < nClauses; ++c) {
+            lNext = new Label();
+
+            MethodType stepType = loopHandleType.changeReturnType(loopClauseTypes[c].basicTypeClass());
+            boolean isVoid = stepType.returnType() == void.class;
+
+            // invoke loop step
+            emitLoopHandleInvoke(invoker, steps, c, args, true, stepType, loopLocalStateTypes, firstLoopStateIndex);
+            if (!isVoid) {
+                emitStoreInsn(BasicType.basicType(stepType.returnType()), firstLoopStateIndex + state);
+                ++state;
+            }
+
+            // invoke loop predicate
+            emitLoopHandleInvoke(invoker, preds, c, args, true, predType, loopLocalStateTypes, firstLoopStateIndex);
+            mv.visitJumpInsn(Opcodes.IFNE, lNext);
+
+            // invoke fini
+            emitLoopHandleInvoke(invoker, finis, c, args, true, finiType, loopLocalStateTypes, firstLoopStateIndex);
+            mv.visitJumpInsn(Opcodes.GOTO, lDone);
+
+            // this is the beginning of the next loop clause
+            mv.visitLabel(lNext);
+        }
+
+        mv.visitJumpInsn(Opcodes.GOTO, lLoop);
+
+        // DONE:
+        mv.visitLabel(lDone);
+
+        return result;
+    }
+
+    private int extendLocalsMap(Class<?>[] types) {
+        int firstSlot = localsMap.length - 1;
+        localsMap = Arrays.copyOf(localsMap, localsMap.length + types.length);
+        localClasses = Arrays.copyOf(localClasses, localClasses.length + types.length);
+        System.arraycopy(types, 0, localClasses, firstSlot, types.length);
+        int index = localsMap[firstSlot - 1] + 1;
+        int lastSlots = 0;
+        for (int i = 0; i < types.length; ++i) {
+            localsMap[firstSlot + i] = index;
+            lastSlots = BasicType.basicType(localClasses[firstSlot + i]).basicTypeSlots();
+            index += lastSlots;
+        }
+        localsMap[localsMap.length - 1] = index - lastSlots;
+        return firstSlot;
+    }
+
+    private void emitLoopHandleInvoke(Name holder, int handles, int clause, Name args, boolean pushLocalState,
+                                      MethodType type, Class<?>[] loopLocalStateTypes, int firstLoopStateSlot) {
+        // load handle for clause
+        emitPushArgument(holder, handles);
+        emitIconstInsn(clause);
+        mv.visitInsn(Opcodes.AALOAD);
+        // load loop state (preceding the other arguments)
+        if (pushLocalState) {
+            for (int s = 0; s < loopLocalStateTypes.length; ++s) {
+                emitLoadInsn(BasicType.basicType(loopLocalStateTypes[s]), firstLoopStateSlot + s);
+            }
+        }
+        // load loop args (skip 0: method handle)
+        emitPushArguments(args, 1);
+        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", type.toMethodDescriptorString(), false);
+    }
+
+    private void emitZero(BasicType type) {
+        switch (type) {
+            case I_TYPE: mv.visitInsn(Opcodes.ICONST_0); break;
+            case J_TYPE: mv.visitInsn(Opcodes.LCONST_0); break;
+            case F_TYPE: mv.visitInsn(Opcodes.FCONST_0); break;
+            case D_TYPE: mv.visitInsn(Opcodes.DCONST_0); break;
+            case L_TYPE: mv.visitInsn(Opcodes.ACONST_NULL); break;
+            default: throw new InternalError("unknown type: " + type);
+        }
+    }
+
     private void emitPushArguments(Name args) {
         emitPushArguments(args, 0);
     }
--- a/src/java.base/share/classes/java/lang/invoke/LambdaForm.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/LambdaForm.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,11 +33,9 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
-import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.List;
 
 import static java.lang.invoke.LambdaForm.BasicType.*;
 import static java.lang.invoke.MethodHandleNatives.Constants.REF_invokeStatic;
@@ -210,6 +208,29 @@
             }
             return btypes;
         }
+        static String basicTypeDesc(BasicType[] types) {
+            if (types == null) {
+                return null;
+            }
+            if (types.length == 0) {
+                return "";
+            }
+            StringBuilder sb = new StringBuilder();
+            for (BasicType bt : types) {
+                sb.append(bt.basicTypeChar());
+            }
+            return sb.toString();
+        }
+        static int[] basicTypeOrds(BasicType[] types) {
+            if (types == null) {
+                return null;
+            }
+            int[] a = new int[types.length];
+            for(int i = 0; i < types.length; ++i) {
+                a[i] = types[i].ordinal();
+            }
+            return a;
+        }
 
         static char basicTypeChar(Class<?> type) {
             return basicType(type).btChar;
@@ -565,6 +586,69 @@
         return MethodType.methodType(rtype, ptypes);
     }
 
+    /**
+     * Check if i-th name is a call to MethodHandleImpl.selectAlternative.
+     */
+    boolean isSelectAlternative(int pos) {
+        // selectAlternative idiom:
+        //   t_{n}:L=MethodHandleImpl.selectAlternative(...)
+        //   t_{n+1}:?=MethodHandle.invokeBasic(t_{n}, ...)
+        if (pos+1 >= names.length)  return false;
+        Name name0 = names[pos];
+        Name name1 = names[pos+1];
+        return name0.refersTo(MethodHandleImpl.class, "selectAlternative") &&
+                name1.isInvokeBasic() &&
+                name1.lastUseIndex(name0) == 0 && // t_{n+1}:?=MethodHandle.invokeBasic(t_{n}, ...)
+                lastUseIndex(name0) == pos+1;     // t_{n} is local: used only in t_{n+1}
+    }
+
+    private boolean isMatchingIdiom(int pos, String idiomName, int nArgs) {
+        if (pos+2 >= names.length)  return false;
+        Name name0 = names[pos];
+        Name name1 = names[pos+1];
+        Name name2 = names[pos+2];
+        return name1.refersTo(MethodHandleImpl.class, idiomName) &&
+                name0.isInvokeBasic() &&
+                name2.isInvokeBasic() &&
+                name1.lastUseIndex(name0) == nArgs && // t_{n+1}:L=MethodHandleImpl.<invoker>(<args>, t_{n});
+                lastUseIndex(name0) == pos+1 &&       // t_{n} is local: used only in t_{n+1}
+                name2.lastUseIndex(name1) == 1 &&     // t_{n+2}:?=MethodHandle.invokeBasic(*, t_{n+1})
+                lastUseIndex(name1) == pos+2;         // t_{n+1} is local: used only in t_{n+2}
+    }
+
+    /**
+     * Check if i-th name is a start of GuardWithCatch idiom.
+     */
+    boolean isGuardWithCatch(int pos) {
+        // GuardWithCatch idiom:
+        //   t_{n}:L=MethodHandle.invokeBasic(...)
+        //   t_{n+1}:L=MethodHandleImpl.guardWithCatch(*, *, *, t_{n});
+        //   t_{n+2}:?=MethodHandle.invokeBasic(*, t_{n+1})
+        return isMatchingIdiom(pos, "guardWithCatch", 3);
+    }
+
+    /**
+     * Check if i-th name is a start of the tryFinally idiom.
+     */
+    boolean isTryFinally(int pos) {
+        // tryFinally idiom:
+        //   t_{n}:L=MethodHandle.invokeBasic(...)
+        //   t_{n+1}:L=MethodHandleImpl.tryFinally(*, *, t_{n})
+        //   t_{n+2}:?=MethodHandle.invokeBasic(*, t_{n+1})
+        return isMatchingIdiom(pos, "tryFinally", 2);
+    }
+
+    /**
+     * Check if i-th name is a start of the loop idiom.
+     */
+    boolean isLoop(int pos) {
+        // loop idiom:
+        //   t_{n}:L=MethodHandle.invokeBasic(...)
+        //   t_{n+1}:L=MethodHandleImpl.loop(types, *, *, *, *, t_{n})
+        //   t_{n+2}:?=MethodHandle.invokeBasic(*, t_{n+1})
+        return isMatchingIdiom(pos, "loop", 5);
+    }
+
     /*
      * Code generation issues:
      *
@@ -1421,6 +1505,39 @@
             return !isParam() && arguments.length == 0 && function.isConstantZero();
         }
 
+        boolean refersTo(Class<?> declaringClass, String methodName) {
+            return function != null &&
+                    function.member() != null && function.member().refersTo(declaringClass, methodName);
+        }
+
+        /**
+         * Check if MemberName is a call to MethodHandle.invokeBasic.
+         */
+        boolean isInvokeBasic() {
+            if (function == null)
+                return false;
+            if (arguments.length < 1)
+                return false;  // must have MH argument
+            MemberName member = function.member();
+            return member != null && member.refersTo(MethodHandle.class, "invokeBasic") &&
+                    !member.isPublic() && !member.isStatic();
+        }
+
+        /**
+         * Check if MemberName is a call to MethodHandle.linkToStatic, etc.
+         */
+        boolean isLinkerMethodInvoke() {
+            if (function == null)
+                return false;
+            if (arguments.length < 1)
+                return false;  // must have MH argument
+            MemberName member = function.member();
+            return member != null &&
+                    member.getDeclaringClass() == MethodHandle.class &&
+                    !member.isPublic() && member.isStatic() &&
+                    member.getName().startsWith("linkTo");
+        }
+
         public String toString() {
             return (isParam()?"a":"t")+(index >= 0 ? index : System.identityHashCode(this))+":"+typeChar();
         }
--- a/src/java.base/share/classes/java/lang/invoke/LambdaFormBuffer.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/LambdaFormBuffer.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -249,7 +249,7 @@
         assert(inTrans());
     }
 
-    private void changeName(int i, Name name) {
+    void changeName(int i, Name name) {
         assert(inTrans());
         assert(i < length);
         Name oldName = names[i];
--- a/src/java.base/share/classes/java/lang/invoke/LambdaFormEditor.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/LambdaFormEditor.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,15 +25,17 @@
 
 package java.lang.invoke;
 
+import sun.invoke.util.Wrapper;
+
 import java.lang.ref.SoftReference;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.concurrent.ConcurrentHashMap;
+
 import static java.lang.invoke.LambdaForm.*;
 import static java.lang.invoke.LambdaForm.BasicType.*;
 import static java.lang.invoke.MethodHandleImpl.Intrinsic;
-import java.util.Collections;
-import java.util.concurrent.ConcurrentHashMap;
-
-import sun.invoke.util.Wrapper;
+import static java.lang.invoke.MethodHandleImpl.NF_loop;
 
 /** Transforms on LFs.
  *  A lambda-form editor can derive new LFs from its base LF.
@@ -73,7 +75,8 @@
             FILTER_ARG, FILTER_RETURN, FILTER_RETURN_TO_ZERO,
             COLLECT_ARGS, COLLECT_ARGS_TO_VOID, COLLECT_ARGS_TO_ARRAY,
             FOLD_ARGS, FOLD_ARGS_TO_VOID,
-            PERMUTE_ARGS
+            PERMUTE_ARGS,
+            LOCAL_TYPES
             //maybe add more for guard with test, catch exception, pointwise type conversions
         }
 
@@ -847,6 +850,32 @@
         return putInCache(key, form);
     }
 
+    LambdaForm noteLoopLocalTypesForm(int pos, BasicType[] localTypes) {
+        assert(lambdaForm.isLoop(pos));
+        int[] desc = BasicType.basicTypeOrds(localTypes);
+        desc = Arrays.copyOf(desc, desc.length + 1);
+        desc[desc.length - 1] = pos;
+        Transform key = Transform.of(Transform.Kind.LOCAL_TYPES, desc);
+        LambdaForm form = getInCache(key);
+        if (form != null) {
+            return form;
+        }
+
+        // replace the null entry in the MHImpl.loop invocation with localTypes
+        Name invokeLoop = lambdaForm.names[pos + 1];
+        assert(invokeLoop.function == NF_loop);
+        Object[] args = Arrays.copyOf(invokeLoop.arguments, invokeLoop.arguments.length);
+        assert(args[0] == null);
+        args[0] = localTypes;
+
+        LambdaFormBuffer buf = buffer();
+        buf.startEdit();
+        buf.changeName(pos + 1, new Name(NF_loop, args));
+        form = buf.endEdit();
+
+        return putInCache(key, form);
+    }
+
     static boolean permutedTypesMatch(int[] reorder, BasicType[] types, Name[] names, int skip) {
         for (int i = 0; i < reorder.length; i++) {
             assert (names[skip + i].isParam());
--- a/src/java.base/share/classes/java/lang/invoke/MemberName.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/MemberName.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
+import java.lang.reflect.Member;
 import java.lang.reflect.Method;
-import java.lang.reflect.Member;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Module;
 import java.util.ArrayList;
@@ -41,9 +41,11 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
+
 import static java.lang.invoke.MethodHandleNatives.Constants.*;
-import static java.lang.invoke.MethodHandleStatics.*;
-import java.util.Objects;
+import static java.lang.invoke.MethodHandleStatics.newIllegalArgumentException;
+import static java.lang.invoke.MethodHandleStatics.newInternalError;
 
 /**
  * A {@code MemberName} is a compact symbolic datum which fully characterizes
@@ -500,6 +502,13 @@
                                                lookupClass, mode);
     }
 
+    /**
+     * Check if MemberName is a call to a method named {@code name} in class {@code declaredClass}.
+     */
+    public boolean refersTo(Class<?> declc, String n) {
+        return clazz == declc && getName().equals(n);
+    }
+
     /** Initialize a query.   It is not resolved. */
     private void init(Class<?> defClass, String name, Object type, int flags) {
         // defining class is allowed to be null (for a naked name/type pair)
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java	Tue Jul 05 13:50:37 2016 -0700
@@ -25,6 +25,17 @@
 
 package java.lang.invoke;
 
+import jdk.internal.org.objectweb.asm.AnnotationVisitor;
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.reflect.CallerSensitive;
+import jdk.internal.reflect.Reflection;
+import jdk.internal.vm.annotation.Stable;
+import sun.invoke.empty.Empty;
+import sun.invoke.util.ValueConversions;
+import sun.invoke.util.VerifyType;
+import sun.invoke.util.Wrapper;
+
 import java.lang.reflect.Array;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
@@ -33,18 +44,8 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.function.Function;
-
-import jdk.internal.reflect.CallerSensitive;
-import jdk.internal.reflect.Reflection;
-import jdk.internal.vm.annotation.Stable;
-import sun.invoke.empty.Empty;
-import sun.invoke.util.ValueConversions;
-import sun.invoke.util.VerifyType;
-import sun.invoke.util.Wrapper;
-
-import jdk.internal.org.objectweb.asm.AnnotationVisitor;
-import jdk.internal.org.objectweb.asm.ClassWriter;
-import jdk.internal.org.objectweb.asm.MethodVisitor;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static java.lang.invoke.LambdaForm.*;
 import static java.lang.invoke.MethodHandleStatics.*;
@@ -1046,26 +1047,13 @@
         // Box arguments and wrap them into Object[]: ValueConversions.array().
         MethodType varargsType = type.changeReturnType(Object[].class);
         MethodHandle collectArgs = varargsArray(type.parameterCount()).asType(varargsType);
-        // Result unboxing: ValueConversions.unbox() OR ValueConversions.identity() OR ValueConversions.ignore().
-        MethodHandle unboxResult;
-        Class<?> rtype = type.returnType();
-        if (rtype.isPrimitive()) {
-            if (rtype == void.class) {
-                unboxResult = ValueConversions.ignore();
-            } else {
-                Wrapper w = Wrapper.forPrimitiveType(type.returnType());
-                unboxResult = ValueConversions.unboxExact(w);
-            }
-        } else {
-            unboxResult = MethodHandles.identity(Object.class);
-        }
+        MethodHandle unboxResult = unboxResultHandle(type.returnType());
 
         BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLLL();
         BoundMethodHandle mh;
         try {
-            mh = (BoundMethodHandle)
-                    data.constructor().invokeBasic(type, form, (Object) target, (Object) exType, (Object) catcher,
-                                                   (Object) collectArgs, (Object) unboxResult);
+            mh = (BoundMethodHandle) data.constructor().invokeBasic(type, form, (Object) target, (Object) exType,
+                    (Object) catcher, (Object) collectArgs, (Object) unboxResult);
         } catch (Throwable ex) {
             throw uncaughtException(ex);
         }
@@ -1085,16 +1073,18 @@
             return target.asFixedArity().invokeWithArguments(av);
         } catch (Throwable t) {
             if (!exType.isInstance(t)) throw t;
-            return catcher.asFixedArity().invokeWithArguments(prepend(t, av));
+            return catcher.asFixedArity().invokeWithArguments(prepend(av, t));
         }
     }
 
-    /** Prepend an element {@code elem} to an {@code array}. */
+    /** Prepend elements to an array. */
     @LambdaForm.Hidden
-    private static Object[] prepend(Object elem, Object[] array) {
-        Object[] newArray = new Object[array.length+1];
-        newArray[0] = elem;
-        System.arraycopy(array, 0, newArray, 1, array.length);
+    private static Object[] prepend(Object[] array, Object... elems) {
+        int nArray = array.length;
+        int nElems = elems.length;
+        Object[] newArray = new Object[nArray + nElems];
+        System.arraycopy(elems, 0, newArray, 0, nElems);
+        System.arraycopy(array, 0, newArray, nElems, nArray);
         return newArray;
     }
 
@@ -1352,6 +1342,8 @@
     enum Intrinsic {
         SELECT_ALTERNATIVE,
         GUARD_WITH_CATCH,
+        TRY_FINALLY,
+        LOOP,
         NEW_ARRAY,
         ARRAY_LOAD,
         ARRAY_STORE,
@@ -1363,7 +1355,7 @@
 
     /** Mark arbitrary method handle as intrinsic.
      * InvokerBytecodeGenerator uses this info to produce more efficient bytecode shape. */
-    private static final class IntrinsicMethodHandle extends DelegatingMethodHandle {
+    static final class IntrinsicMethodHandle extends DelegatingMethodHandle {
         private final MethodHandle target;
         private final Intrinsic intrinsicName;
 
@@ -1694,6 +1686,8 @@
         NF_checkSpreadArgument,
         NF_guardWithCatch,
         NF_throwException,
+        NF_tryFinally,
+        NF_loop,
         NF_profileBoolean;
 
     static {
@@ -1703,6 +1697,11 @@
             NF_guardWithCatch = new NamedFunction(MethodHandleImpl.class
                     .getDeclaredMethod("guardWithCatch", MethodHandle.class, Class.class,
                             MethodHandle.class, Object[].class));
+            NF_tryFinally = new NamedFunction(MethodHandleImpl.class
+                    .getDeclaredMethod("tryFinally", MethodHandle.class, MethodHandle.class, Object[].class));
+            NF_loop = new NamedFunction(MethodHandleImpl.class
+                    .getDeclaredMethod("loop", BasicType[].class, MethodHandle[].class, MethodHandle[].class,
+                            MethodHandle[].class, MethodHandle[].class, Object[].class));
             NF_throwException = new NamedFunction(MethodHandleImpl.class
                     .getDeclaredMethod("throwException", Throwable.class));
             NF_profileBoolean = new NamedFunction(MethodHandleImpl.class
@@ -1712,14 +1711,25 @@
         }
     }
 
+    /** Result unboxing: ValueConversions.unbox() OR ValueConversions.identity() OR ValueConversions.ignore(). */
+    private static MethodHandle unboxResultHandle(Class<?> returnType) {
+        if (returnType.isPrimitive()) {
+            if (returnType == void.class) {
+                return ValueConversions.ignore();
+            } else {
+                Wrapper w = Wrapper.forPrimitiveType(returnType);
+                return ValueConversions.unboxExact(w);
+            }
+        } else {
+            return MethodHandles.identity(Object.class);
+        }
+    }
+
     /**
-     * Assembles a loop method handle from the given handles and type information. This works by binding and configuring
-     * the {@linkplain #looper(MethodHandle[], MethodHandle[], MethodHandle[], MethodHandle[], int, int, Object[]) "most
-     * generic loop"}.
+     * Assembles a loop method handle from the given handles and type information.
      *
      * @param tloop the return type of the loop.
      * @param targs types of the arguments to be passed to the loop.
-     * @param tvars types of loop-local variables.
      * @param init sanitized array of initializers for loop-local variables.
      * @param step sanitited array of loop bodies.
      * @param pred sanitized array of predicates.
@@ -1727,64 +1737,144 @@
      *
      * @return a handle that, when invoked, will execute the loop.
      */
-    static MethodHandle makeLoop(Class<?> tloop, List<Class<?>> targs, List<Class<?>> tvars, List<MethodHandle> init,
-                                 List<MethodHandle> step, List<MethodHandle> pred, List<MethodHandle> fini) {
-        MethodHandle[] ainit = toArrayArgs(init);
-        MethodHandle[] astep = toArrayArgs(step);
-        MethodHandle[] apred = toArrayArgs(pred);
-        MethodHandle[] afini = toArrayArgs(fini);
+    static MethodHandle makeLoop(Class<?> tloop, List<Class<?>> targs, List<MethodHandle> init, List<MethodHandle> step,
+                                 List<MethodHandle> pred, List<MethodHandle> fini) {
+        MethodType type = MethodType.methodType(tloop, targs);
+        BasicType[] initClauseTypes =
+                init.stream().map(h -> h.type().returnType()).map(BasicType::basicType).toArray(BasicType[]::new);
+        LambdaForm form = makeLoopForm(type.basicType(), initClauseTypes);
 
-        MethodHandle l = getConstantHandle(MH_looper);
+        // Prepare auxiliary method handles used during LambdaForm interpretation.
+        // Box arguments and wrap them into Object[]: ValueConversions.array().
+        MethodType varargsType = type.changeReturnType(Object[].class);
+        MethodHandle collectArgs = varargsArray(type.parameterCount()).asType(varargsType);
+        MethodHandle unboxResult = unboxResultHandle(tloop);
 
-        // Bind the statically known arguments.
-        l = MethodHandles.insertArguments(l, 0, ainit, astep, apred, afini, tvars.size(), targs.size());
+        BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLLLL();
+        BoundMethodHandle mh;
+        try {
+            mh = (BoundMethodHandle) data.constructor().invokeBasic(type, form, (Object) toArray(init),
+                    (Object) toArray(step), (Object) toArray(pred), (Object) toArray(fini), (Object) collectArgs,
+                    (Object) unboxResult);
+        } catch (Throwable ex) {
+            throw uncaughtException(ex);
+        }
+        assert(mh.type() == type);
+        return mh;
+    }
 
-        // Turn the args array into an argument list.
-        l = l.asCollector(Object[].class, targs.size());
-
-        // Finally, make loop type.
-        MethodType loopType = MethodType.methodType(tloop, targs);
-        l = l.asType(loopType);
-
-        return l;
+    private static MethodHandle[] toArray(List<MethodHandle> l) {
+        return l.toArray(new MethodHandle[0]);
     }
 
     /**
-     * Converts all handles in the {@code hs} array to handles that accept an array of arguments.
-     *
-     * @param hs method handles to be converted.
-     *
-     * @return the {@code hs} array, with all method handles therein converted.
+     * Loops introduce some complexity as they can have additional local state. Hence, LambdaForms for loops are
+     * generated from a template. The LambdaForm template shape for the loop combinator is as follows (assuming one
+     * reference parameter passed in {@code a1}, and a reference return type, with the return value represented by
+     * {@code t12}):
+     * <blockquote><pre>{@code
+     *  loop=Lambda(a0:L,a1:L)=>{
+     *    t2:L=BoundMethodHandle$Species_L6.argL0(a0:L);             // array of init method handles
+     *    t3:L=BoundMethodHandle$Species_L6.argL1(a0:L);             // array of step method handles
+     *    t4:L=BoundMethodHandle$Species_L6.argL2(a0:L);             // array of pred method handles
+     *    t5:L=BoundMethodHandle$Species_L6.argL3(a0:L);             // array of fini method handles
+     *    t6:L=BoundMethodHandle$Species_L6.argL4(a0:L);             // helper handle to box the arguments into an Object[]
+     *    t7:L=BoundMethodHandle$Species_L6.argL5(a0:L);             // helper handle to unbox the result
+     *    t8:L=MethodHandle.invokeBasic(t6:L,a1:L);                  // box the arguments into an Object[]
+     *    t9:L=MethodHandleImpl.loop(null,t2:L,t3:L,t4:L,t5:L,t6:L); // call the loop executor
+     *    t10:L=MethodHandle.invokeBasic(t7:L,t9:L);t10:L}           // unbox the result; return the result
+     * }</pre></blockquote>
+     * <p>
+     * {@code argL0} through {@code argL3} are the arrays of init, step, pred, and fini method handles.
+     * {@code argL4} and {@code argL5} are auxiliary method handles: {@code argL2} boxes arguments and wraps them into
+     * {@code Object[]} ({@code ValueConversions.array()}), and {@code argL3} unboxes the result if necessary
+     * ({@code ValueConversions.unbox()}).
+     * <p>
+     * Having {@code t6} and {@code t7} passed in via a BMH and not hardcoded in the lambda form allows to share lambda
+     * forms among loop combinators with the same basic type.
+     * <p>
+     * The above template is instantiated by using the {@link LambdaFormEditor} to replace the {@code null} argument to
+     * the {@code loop} invocation with the {@code BasicType} array describing the loop clause types. This argument is
+     * ignored in the loop invoker, but will be extracted and used in {@linkplain InvokerBytecodeGenerator#emitLoop(int)
+     * bytecode generation}.
      */
-    static MethodHandle[] toArrayArgs(List<MethodHandle> hs) {
-        return hs.stream().map(h -> h.asSpreader(Object[].class, h.type().parameterCount())).toArray(MethodHandle[]::new);
+    private static LambdaForm makeLoopForm(MethodType basicType, BasicType[] localVarTypes) {
+        MethodType lambdaType = basicType.invokerType();
+
+        final int THIS_MH = 0;  // the BMH_LLLLLL
+        final int ARG_BASE = 1; // start of incoming arguments
+        final int ARG_LIMIT = ARG_BASE + basicType.parameterCount();
+
+        int nameCursor = ARG_LIMIT;
+        final int GET_INITS = nameCursor++;
+        final int GET_STEPS = nameCursor++;
+        final int GET_PREDS = nameCursor++;
+        final int GET_FINIS = nameCursor++;
+        final int GET_COLLECT_ARGS = nameCursor++;
+        final int GET_UNBOX_RESULT = nameCursor++;
+        final int BOXED_ARGS = nameCursor++;
+        final int LOOP = nameCursor++;
+        final int UNBOX_RESULT = nameCursor++;
+
+        LambdaForm lform = basicType.form().cachedLambdaForm(MethodTypeForm.LF_LOOP);
+        if (lform == null) {
+            Name[] names = arguments(nameCursor - ARG_LIMIT, lambdaType);
+
+            BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLLLL();
+            names[THIS_MH] = names[THIS_MH].withConstraint(data);
+            names[GET_INITS] = new Name(data.getterFunction(0), names[THIS_MH]);
+            names[GET_STEPS] = new Name(data.getterFunction(1), names[THIS_MH]);
+            names[GET_PREDS] = new Name(data.getterFunction(2), names[THIS_MH]);
+            names[GET_FINIS] = new Name(data.getterFunction(3), names[THIS_MH]);
+            names[GET_COLLECT_ARGS] = new Name(data.getterFunction(4), names[THIS_MH]);
+            names[GET_UNBOX_RESULT] = new Name(data.getterFunction(5), names[THIS_MH]);
+
+            // t_{i}:L=MethodHandle.invokeBasic(collectArgs:L,a1:L,...);
+            MethodType collectArgsType = basicType.changeReturnType(Object.class);
+            MethodHandle invokeBasic = MethodHandles.basicInvoker(collectArgsType);
+            Object[] args = new Object[invokeBasic.type().parameterCount()];
+            args[0] = names[GET_COLLECT_ARGS];
+            System.arraycopy(names, ARG_BASE, args, 1, ARG_LIMIT - ARG_BASE);
+            names[BOXED_ARGS] = new Name(makeIntrinsic(invokeBasic, Intrinsic.LOOP), args);
+
+            // t_{i+1}:L=MethodHandleImpl.loop(localTypes:L,inits:L,steps:L,preds:L,finis:L,t_{i}:L);
+            Object[] lArgs =
+                    new Object[]{null, // placeholder for BasicType[] localTypes - will be added by LambdaFormEditor
+                            names[GET_INITS], names[GET_STEPS], names[GET_PREDS], names[GET_FINIS], names[BOXED_ARGS]};
+            names[LOOP] = new Name(NF_loop, lArgs);
+
+            // t_{i+2}:I=MethodHandle.invokeBasic(unbox:L,t_{i+1}:L);
+            MethodHandle invokeBasicUnbox = MethodHandles.basicInvoker(MethodType.methodType(basicType.rtype(), Object.class));
+            Object[] unboxArgs = new Object[]{names[GET_UNBOX_RESULT], names[LOOP]};
+            names[UNBOX_RESULT] = new Name(invokeBasicUnbox, unboxArgs);
+
+            lform = basicType.form().setCachedLambdaForm(MethodTypeForm.LF_LOOP,
+                    new LambdaForm("loop", lambdaType.parameterCount(), names));
+        }
+
+        // BOXED_ARGS is the index into the names array where the loop idiom starts
+        return lform.editor().noteLoopLocalTypesForm(BOXED_ARGS, localVarTypes);
     }
 
+
     /**
-     * This method embodies the most generic loop for use by {@link MethodHandles#loop(MethodHandle[][])}. A handle on
-     * it will be transformed into a handle on a concrete loop instantiation by {@link #makeLoop}.
-     *
-     * @param init loop-local variable initializers.
-     * @param step bodies.
-     * @param pred predicates.
-     * @param fini finalizers.
-     * @param varSize number of loop-local variables.
-     * @param nArgs number of arguments passed to the loop.
-     * @param args arguments to the loop invocation.
-     *
-     * @return the result of executing the loop.
+     * Intrinsified during LambdaForm compilation
+     * (see {@link InvokerBytecodeGenerator#emitLoop(int)}).
      */
-    static Object looper(MethodHandle[] init, MethodHandle[] step, MethodHandle[] pred, MethodHandle[] fini,
-                         int varSize, int nArgs, Object[] args) throws Throwable {
+    @LambdaForm.Hidden
+    static Object loop(BasicType[] localTypes, MethodHandle[] init, MethodHandle[] step, MethodHandle[] pred,
+                       MethodHandle[] fini, Object... av) throws Throwable {
+        int varSize = (int) Stream.of(init).filter(h -> h.type().returnType() != void.class).count();
+        int nArgs = init[0].type().parameterCount();
         Object[] varsAndArgs = new Object[varSize + nArgs];
         for (int i = 0, v = 0; i < init.length; ++i) {
             if (init[i].type().returnType() == void.class) {
-                init[i].invoke(args);
+                init[i].asFixedArity().invokeWithArguments(av);
             } else {
-                varsAndArgs[v++] = init[i].invoke(args);
+                varsAndArgs[v++] = init[i].asFixedArity().invokeWithArguments(av);
             }
         }
-        System.arraycopy(args, 0, varsAndArgs, varSize, nArgs);
+        System.arraycopy(av, 0, varsAndArgs, varSize, nArgs);
         final int nSteps = step.length;
         for (; ; ) {
             for (int i = 0, v = 0; i < nSteps; ++i) {
@@ -1792,12 +1882,12 @@
                 MethodHandle s = step[i];
                 MethodHandle f = fini[i];
                 if (s.type().returnType() == void.class) {
-                    s.invoke(varsAndArgs);
+                    s.asFixedArity().invokeWithArguments(varsAndArgs);
                 } else {
-                    varsAndArgs[v++] = s.invoke(varsAndArgs);
+                    varsAndArgs[v++] = s.asFixedArity().invokeWithArguments(varsAndArgs);
                 }
-                if (!(boolean) p.invoke(varsAndArgs)) {
-                    return f.invoke(varsAndArgs);
+                if (!(boolean) p.asFixedArity().invokeWithArguments(varsAndArgs)) {
+                    return f.asFixedArity().invokeWithArguments(varsAndArgs);
                 }
             }
         }
@@ -1879,77 +1969,127 @@
      *
      * @param target the target to execute in a {@code try-finally} block.
      * @param cleanup the cleanup to execute in the {@code finally} block.
-     * @param type the result type of the entire construct.
+     * @param rtype the result type of the entire construct.
      * @param argTypes the types of the arguments.
      *
      * @return a handle on the constructed {@code try-finally} block.
      */
-    static MethodHandle makeTryFinally(MethodHandle target, MethodHandle cleanup, Class<?> type, List<Class<?>> argTypes) {
-        MethodHandle tf = getConstantHandle(type == void.class ? MH_tryFinallyVoidExec : MH_tryFinallyExec);
+    static MethodHandle makeTryFinally(MethodHandle target, MethodHandle cleanup, Class<?> rtype, List<Class<?>> argTypes) {
+        MethodType type = MethodType.methodType(rtype, argTypes);
+        LambdaForm form = makeTryFinallyForm(type.basicType());
 
-        // Bind the statically known arguments.
-        tf = MethodHandles.insertArguments(tf, 0, target, cleanup);
+        // Prepare auxiliary method handles used during LambdaForm interpretation.
+        // Box arguments and wrap them into Object[]: ValueConversions.array().
+        MethodType varargsType = type.changeReturnType(Object[].class);
+        MethodHandle collectArgs = varargsArray(type.parameterCount()).asType(varargsType);
+        MethodHandle unboxResult = unboxResultHandle(rtype);
 
-        // Turn the args array into an argument list.
-        tf = tf.asCollector(Object[].class, argTypes.size());
-
-        // Finally, make try-finally type.
-        MethodType tfType = MethodType.methodType(type, argTypes);
-        tf = tf.asType(tfType);
-
-        return tf;
+        BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLL();
+        BoundMethodHandle mh;
+        try {
+            mh = (BoundMethodHandle) data.constructor().invokeBasic(type, form, (Object) target, (Object) cleanup,
+                    (Object) collectArgs, (Object) unboxResult);
+        } catch (Throwable ex) {
+            throw uncaughtException(ex);
+        }
+        assert(mh.type() == type);
+        return mh;
     }
 
     /**
-     * A method that will be bound during construction of a {@code try-finally} handle with non-{@code void} return type
-     * by {@link MethodHandles#tryFinally(MethodHandle, MethodHandle)}.
-     *
-     * @param target the handle to wrap in a {@code try-finally} block. This will be bound.
-     * @param cleanup the handle to run in any case before returning. This will be bound.
-     * @param args the arguments to the call. These will remain as the argument list.
-     *
-     * @return whatever the execution of the {@code target} returned (it may have been modified by the execution of
-     *         {@code cleanup}).
-     * @throws Throwable in case anything is thrown by the execution of {@code target}, the {@link Throwable} will be
-     *         passed to the {@code cleanup} handle, which may decide to throw any exception it sees fit.
+     * The LambdaForm shape for the tryFinally combinator is as follows (assuming one reference parameter passed in
+     * {@code a1}, and a reference return type, with the return value represented by {@code t8}):
+     * <blockquote><pre>{@code
+     *  tryFinally=Lambda(a0:L,a1:L)=>{
+     *    t2:L=BoundMethodHandle$Species_LLLL.argL0(a0:L);  // target method handle
+     *    t3:L=BoundMethodHandle$Species_LLLL.argL1(a0:L);  // cleanup method handle
+     *    t4:L=BoundMethodHandle$Species_LLLL.argL2(a0:L);  // helper handle to box the arguments into an Object[]
+     *    t5:L=BoundMethodHandle$Species_LLLL.argL3(a0:L);  // helper handle to unbox the result
+     *    t6:L=MethodHandle.invokeBasic(t4:L,a1:L);         // box the arguments into an Object[]
+     *    t7:L=MethodHandleImpl.tryFinally(t2:L,t3:L,t6:L); // call the tryFinally executor
+     *    t8:L=MethodHandle.invokeBasic(t5:L,t7:L);t8:L}    // unbox the result; return the result
+     * }</pre></blockquote>
+     * <p>
+     * {@code argL0} and {@code argL1} are the target and cleanup method handles.
+     * {@code argL2} and {@code argL3} are auxiliary method handles: {@code argL2} boxes arguments and wraps them into
+     * {@code Object[]} ({@code ValueConversions.array()}), and {@code argL3} unboxes the result if necessary
+     * ({@code ValueConversions.unbox()}).
+     * <p>
+     * Having {@code t4} and {@code t5} passed in via a BMH and not hardcoded in the lambda form allows to share lambda
+     * forms among tryFinally combinators with the same basic type.
      */
-    static Object tryFinallyExecutor(MethodHandle target, MethodHandle cleanup, Object[] args) throws Throwable {
+    private static LambdaForm makeTryFinallyForm(MethodType basicType) {
+        MethodType lambdaType = basicType.invokerType();
+
+        LambdaForm lform = basicType.form().cachedLambdaForm(MethodTypeForm.LF_TF);
+        if (lform != null) {
+            return lform;
+        }
+        final int THIS_MH      = 0;  // the BMH_LLLL
+        final int ARG_BASE     = 1;  // start of incoming arguments
+        final int ARG_LIMIT    = ARG_BASE + basicType.parameterCount();
+
+        int nameCursor = ARG_LIMIT;
+        final int GET_TARGET       = nameCursor++;
+        final int GET_CLEANUP      = nameCursor++;
+        final int GET_COLLECT_ARGS = nameCursor++;
+        final int GET_UNBOX_RESULT = nameCursor++;
+        final int BOXED_ARGS       = nameCursor++;
+        final int TRY_FINALLY      = nameCursor++;
+        final int UNBOX_RESULT     = nameCursor++;
+
+        Name[] names = arguments(nameCursor - ARG_LIMIT, lambdaType);
+
+        BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLL();
+        names[THIS_MH]          = names[THIS_MH].withConstraint(data);
+        names[GET_TARGET]       = new Name(data.getterFunction(0), names[THIS_MH]);
+        names[GET_CLEANUP]      = new Name(data.getterFunction(1), names[THIS_MH]);
+        names[GET_COLLECT_ARGS] = new Name(data.getterFunction(2), names[THIS_MH]);
+        names[GET_UNBOX_RESULT] = new Name(data.getterFunction(3), names[THIS_MH]);
+
+        // t_{i}:L=MethodHandle.invokeBasic(collectArgs:L,a1:L,...);
+        MethodType collectArgsType = basicType.changeReturnType(Object.class);
+        MethodHandle invokeBasic = MethodHandles.basicInvoker(collectArgsType);
+        Object[] args = new Object[invokeBasic.type().parameterCount()];
+        args[0] = names[GET_COLLECT_ARGS];
+        System.arraycopy(names, ARG_BASE, args, 1, ARG_LIMIT-ARG_BASE);
+        names[BOXED_ARGS] = new Name(makeIntrinsic(invokeBasic, Intrinsic.TRY_FINALLY), args);
+
+        // t_{i+1}:L=MethodHandleImpl.tryFinally(target:L,exType:L,catcher:L,t_{i}:L);
+        Object[] tfArgs = new Object[] {names[GET_TARGET], names[GET_CLEANUP], names[BOXED_ARGS]};
+        names[TRY_FINALLY] = new Name(NF_tryFinally, tfArgs);
+
+        // t_{i+2}:I=MethodHandle.invokeBasic(unbox:L,t_{i+1}:L);
+        MethodHandle invokeBasicUnbox = MethodHandles.basicInvoker(MethodType.methodType(basicType.rtype(), Object.class));
+        Object[] unboxArgs  = new Object[] {names[GET_UNBOX_RESULT], names[TRY_FINALLY]};
+        names[UNBOX_RESULT] = new Name(invokeBasicUnbox, unboxArgs);
+
+        lform = new LambdaForm("tryFinally", lambdaType.parameterCount(), names);
+
+        return basicType.form().setCachedLambdaForm(MethodTypeForm.LF_TF, lform);
+    }
+
+    /**
+     * Intrinsified during LambdaForm compilation
+     * (see {@link InvokerBytecodeGenerator#emitTryFinally emitTryFinally}).
+     */
+    @LambdaForm.Hidden
+    static Object tryFinally(MethodHandle target, MethodHandle cleanup, Object... av) throws Throwable {
         Throwable t = null;
         Object r = null;
         try {
-            r = target.invoke(args);
+            // Use asFixedArity() to avoid unnecessary boxing of last argument for VarargsCollector case.
+            r = target.asFixedArity().invokeWithArguments(av);
         } catch (Throwable thrown) {
             t = thrown;
             throw t;
         } finally {
-            r = cleanup.invoke(t, r, args);
+            Object[] args = target.type().returnType() == void.class ? prepend(av, t) : prepend(av, t, r);
+            r = cleanup.asFixedArity().invokeWithArguments(args);
         }
         return r;
     }
 
-    /**
-     * A method that will be bound during construction of a {@code try-finally} handle with {@code void} return type by
-     * {@link MethodHandles#tryFinally(MethodHandle, MethodHandle)}.
-     *
-     * @param target the handle to wrap in a {@code try-finally} block. This will be bound.
-     * @param cleanup the handle to run in any case before returning. This will be bound.
-     * @param args the arguments to the call. These will remain as the argument list.
-     *
-     * @throws Throwable in case anything is thrown by the execution of {@code target}, the {@link Throwable} will be
-     *         passed to the {@code cleanup} handle, which may decide to throw any exception it sees fit.
-     */
-    static void tryFinallyVoidExecutor(MethodHandle target, MethodHandle cleanup, Object[] args) throws Throwable {
-        Throwable t = null;
-        try {
-            target.invoke(args);
-        } catch (Throwable thrown) {
-            t = thrown;
-            throw t;
-        } finally {
-            cleanup.invoke(t, args);
-        }
-    }
-
     // Indexes into constant method handles:
     static final int
             MH_cast                  =  0,
@@ -1958,17 +2098,14 @@
             MH_fillNewTypedArray     =  3,
             MH_fillNewArray          =  4,
             MH_arrayIdentity         =  5,
-            MH_looper                =  6,
-            MH_countedLoopPred       =  7,
-            MH_countedLoopStep       =  8,
-            MH_iteratePred           =  9,
-            MH_initIterator          = 10,
-            MH_iterateNext           = 11,
-            MH_tryFinallyExec        = 12,
-            MH_tryFinallyVoidExec    = 13,
-            MH_decrementCounter      = 14,
-            MH_Array_newInstance     = 15,
-            MH_LIMIT                 = 16;
+            MH_countedLoopPred       =  6,
+            MH_countedLoopStep       =  7,
+            MH_iteratePred           =  8,
+            MH_initIterator          =  9,
+            MH_iterateNext           = 10,
+            MH_decrementCounter      = 11,
+            MH_Array_newInstance     = 12,
+            MH_LIMIT                 = 13;
 
     static MethodHandle getConstantHandle(int idx) {
         MethodHandle handle = HANDLES[idx];
@@ -2013,10 +2150,6 @@
                     return makeIntrinsic(IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "selectAlternative",
                             MethodType.methodType(MethodHandle.class, boolean.class, MethodHandle.class, MethodHandle.class)),
                         Intrinsic.SELECT_ALTERNATIVE);
-                case MH_looper:
-                    return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "looper", MethodType.methodType(Object.class,
-                            MethodHandle[].class, MethodHandle[].class, MethodHandle[].class, MethodHandle[].class,
-                            int.class, int.class, Object[].class));
                 case MH_countedLoopPred:
                     return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "countedLoopPredicate",
                             MethodType.methodType(boolean.class, int.class, int.class));
@@ -2032,12 +2165,6 @@
                 case MH_iterateNext:
                     return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "iterateNext",
                             MethodType.methodType(Object.class, Iterator.class));
-                case MH_tryFinallyExec:
-                    return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "tryFinallyExecutor",
-                            MethodType.methodType(Object.class, MethodHandle.class, MethodHandle.class, Object[].class));
-                case MH_tryFinallyVoidExec:
-                    return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "tryFinallyVoidExecutor",
-                            MethodType.methodType(void.class, MethodHandle.class, MethodHandle.class, Object[].class));
                 case MH_decrementCounter:
                     return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "decrementCounter",
                             MethodType.methodType(int.class, int.class));
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	Tue Jul 05 13:50:37 2016 -0700
@@ -4307,7 +4307,7 @@
         assert Stream.of(fstep, fpred, ffini).flatMap(List::stream).map(MethodHandle::type).map(MethodType::parameterList).
                 allMatch(pl -> pl.equals(commonParameterSequence));
 
-        return MethodHandleImpl.makeLoop(loopReturnType, commonSuffix, commonPrefix, finit, fstep, fpred, ffini);
+        return MethodHandleImpl.makeLoop(loopReturnType, commonSuffix, finit, fstep, fpred, ffini);
     }
 
     private static List<MethodHandle> fillParameterTypes(List<MethodHandle> hs, final List<Class<?>> targetParams) {
@@ -4814,10 +4814,8 @@
         // The cleanup parameter list (minus the leading Throwable and result parameters) must be a sublist of the
         // target parameter list.
         cleanup = dropArgumentsToMatch(cleanup, (rtype == void.class ? 1 : 2), targetParamTypes, 0);
-        MethodHandle aTarget = target.asSpreader(Object[].class, target.type().parameterCount());
-        MethodHandle aCleanup = cleanup.asSpreader(Object[].class, targetParamTypes.size());
 
-        return MethodHandleImpl.makeTryFinally(aTarget, aCleanup, rtype, targetParamTypes);
+        return MethodHandleImpl.makeTryFinally(target, cleanup, rtype, targetParamTypes);
     }
 
     /**
--- a/src/java.base/share/classes/java/lang/invoke/MethodTypeForm.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/MethodTypeForm.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,8 +27,10 @@
 
 import jdk.internal.vm.annotation.Stable;
 import sun.invoke.util.Wrapper;
+
 import java.lang.ref.SoftReference;
-import static java.lang.invoke.MethodHandleStatics.*;
+
+import static java.lang.invoke.MethodHandleStatics.newIllegalArgumentException;
 
 /**
  * Shared information for a group of method types, which differ
@@ -81,7 +83,9 @@
             LF_MH_LINKER               = 15,  // linkToCallSite_MH
             LF_GWC                     = 16,  // guardWithCatch (catchException)
             LF_GWT                     = 17,  // guardWithTest
-            LF_LIMIT                   = 18;
+            LF_TF                      = 18,  // tryFinally
+            LF_LOOP                    = 19,  // loop
+            LF_LIMIT                   = 20;
 
     /** Return the type corresponding uniquely (1-1) to this MT-form.
      *  It might have any primitive returns or arguments, but will have no references except Object.
--- a/src/java.base/share/classes/java/security/Identity.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/security/Identity.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,11 +52,12 @@
  *
  * @author Benjamin Renaud
  * @deprecated This class is no longer used. Its functionality has been
- * replaced by {@code java.security.KeyStore}, the
- * {@code java.security.cert} package, and
- * {@code java.security.Principal}.
+ * replaced by {@link java.security.KeyStore}, the
+ * {@link java.security.cert} package, and
+ * {@link java.security.Principal}.
+ * This class is subject to removal in a future version of Java SE.
  */
-@Deprecated
+@Deprecated(since="1.2", forRemoval=true)
 public abstract class Identity implements Principal, Serializable {
 
     /** use serialVersionUID from JDK 1.1.x for interoperability */
--- a/src/java.base/share/classes/java/security/IdentityScope.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/security/IdentityScope.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -57,11 +57,15 @@
  * @author Benjamin Renaud
  *
  * @deprecated This class is no longer used. Its functionality has been
- * replaced by {@code java.security.KeyStore}, the
- * {@code java.security.cert} package, and
- * {@code java.security.Principal}.
+ * replaced by {@link java.security.KeyStore}, the
+ * {@link java.security.cert} package, and
+ * {@link java.security.Principal}.
+ * This class is subject to removal in a future version of Java SE.
+ *
+ * Note that the security property {@code policy.ignoreIdentityScope}
+ * is only applicable to these APIs and is also a candidate for removal.
  */
-@Deprecated
+@Deprecated(since="1.2", forRemoval=true)
 public abstract
 class IdentityScope extends Identity {
 
--- a/src/java.base/share/classes/java/security/Signer.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/security/Signer.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -40,11 +40,12 @@
  * @author Benjamin Renaud
  *
  * @deprecated This class is no longer used. Its functionality has been
- * replaced by {@code java.security.KeyStore}, the
- * {@code java.security.cert} package, and
- * {@code java.security.Principal}.
+ * replaced by {@link java.security.KeyStore}, the
+ * {@link java.security.cert} package, and
+ * {@link java.security.Principal}.
+ * This class is subject to removal in a future version of Java SE.
  */
-@Deprecated
+@Deprecated(since="1.2", forRemoval=true)
 public abstract class Signer extends Identity {
 
     private static final long serialVersionUID = -1763464102261361480L;
--- a/src/java.base/share/classes/java/time/Instant.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/java/time/Instant.java	Tue Jul 05 13:50:37 2016 -0700
@@ -561,7 +561,6 @@
                 case NANO_OF_SECOND: return nanos;
                 case MICRO_OF_SECOND: return nanos / 1000;
                 case MILLI_OF_SECOND: return nanos / 1000_000;
-                case INSTANT_SECONDS: INSTANT_SECONDS.checkValidIntValue(seconds);
             }
             throw new UnsupportedTemporalTypeException("Unsupported field: " + field);
         }
--- a/src/java.base/share/classes/sun/launcher/LauncherHelper.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/sun/launcher/LauncherHelper.java	Tue Jul 05 13:50:37 2016 -0700
@@ -584,15 +584,17 @@
         Class<?> mainClass = null;
         ClassLoader scl = ClassLoader.getSystemClassLoader();
         try {
-            mainClass = scl.loadClass(cn);
+            mainClass = Class.forName(cn, false, scl);
         } catch (NoClassDefFoundError | ClassNotFoundException cnfe) {
             if (System.getProperty("os.name", "").contains("OS X")
                     && Normalizer.isNormalized(cn, Normalizer.Form.NFD)) {
                 try {
-                    // On Mac OS X since all names with diacretic symbols are given as decomposed it
-                    // is possible that main class name comes incorrectly from the command line
-                    // and we have to re-compose it
-                    mainClass = scl.loadClass(Normalizer.normalize(cn, Normalizer.Form.NFC));
+                    // On Mac OS X since all names with diacretic symbols are
+                    // given as decomposed it is possible that main class name
+                    // comes incorrectly from the command line and we have
+                    // to re-compose it
+                    String ncn = Normalizer.normalize(cn, Normalizer.Form.NFC);
+                    mainClass = Class.forName(ncn, false, scl);
                 } catch (NoClassDefFoundError | ClassNotFoundException cnfe1) {
                     abort(cnfe, "java.launcher.cls.error1", cn);
                 }
--- a/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Tue Jul 05 13:50:37 2016 -0700
@@ -141,7 +141,7 @@
 The following options are Mac OS X specific:\n\
 \    -XstartOnFirstThread\n\
 \                      run the main() method on the first (AppKit) thread\n\
-\    -Xdock:name=<application name>"\n\
+\    -Xdock:name=<application name>\n\
 \                      override default application name displayed in dock\n\
 \    -Xdock:icon=<path to icon file>\n\
 \                      override default icon displayed in dock\n\n
--- a/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,7 +72,53 @@
 public class JavaTimeSupplementary extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
-        final String[] rocMonthNarrows = {
+        final String[] sharedQuarterNames = {
+            "Q1",
+            "Q2",
+            "Q3",
+            "Q4",
+        };
+
+        final String[] sharedQuarterNarrows = {
+            "1",
+            "2",
+            "3",
+            "4",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "GGGG y MMM d",
+            "G y-MM-dd",
+        };
+
+        final String[] sharedDayNames = {
+            "Sun",
+            "Mon",
+            "Tue",
+            "Wed",
+            "Thu",
+            "Fri",
+            "Sat",
+        };
+
+        final String[] sharedDayNarrows = {
+            "S",
+            "M",
+            "T",
+            "W",
+            "T",
+            "F",
+            "S",
+        };
+
+        final String[] sharedEras = {
+            "",
+            "AH",
+        };
+
+        final String[] sharedMonthNarrows = {
             "1",
             "2",
             "3",
@@ -87,31 +133,62 @@
             "12",
             "",
         };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "AM",
+            "PM",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "G y MMM d",
+            "GGGGG y-MM-dd",
+        };
+
+        final String[] sharedJavaTimeLongEras = {
+            "",
+            "Meiji",
+            "Taisho",
+            "Showa",
+            "Heisei",
+        };
+
+        final String[] sharedShortEras = {
+            "Before R.O.C.",
+            "R.O.C.",
+        };
+
+        final String[] sharedMonthNames = {
+            "Jan",
+            "Feb",
+            "Mar",
+            "Apr",
+            "May",
+            "Jun",
+            "Jul",
+            "Aug",
+            "Sep",
+            "Oct",
+            "Nov",
+            "Dec",
+            "",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterNames },
             { "QuarterNames",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterNames },
             { "QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNarrows },
             { "field.dayperiod",
                 "Dayperiod" },
             { "field.era",
@@ -133,52 +210,15 @@
             { "field.zone",
                 "Zone" },
             { "islamic.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "GGGG y MMM d",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "Sun",
-                    "Mon",
-                    "Tue",
-                    "Wed",
-                    "Thu",
-                    "Fri",
-                    "Sat",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNames",
-                new String[] {
-                    "Sun",
-                    "Mon",
-                    "Tue",
-                    "Wed",
-                    "Thu",
-                    "Fri",
-                    "Sat",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "S",
-                    "M",
-                    "T",
-                    "W",
-                    "T",
-                    "F",
-                    "S",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedEras },
             { "islamic.MonthAbbreviations",
                 new String[] {
                     "Muh.",
@@ -214,63 +254,23 @@
                 }
             },
             { "islamic.MonthNarrows",
-                rocMonthNarrows },
+                sharedMonthNarrows },
             { "islamic.QuarterNames",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNarrows },
             { "islamic.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "AM",
-                    "PM",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.long.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedEras },
             { "islamic.narrow.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedEras },
             { "islamic.short.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedEras },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "G y MMM d",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.buddhist.long.Eras",
                 new String[] {
                     "BC",
@@ -284,13 +284,7 @@
                 }
             },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "G y MMM d",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "G y MMMM d (EEEE)",
@@ -300,23 +294,9 @@
                 }
             },
             { "java.time.japanese.long.Eras",
-                new String[] {
-                    "",
-                    "Meiji",
-                    "Taisho",
-                    "Showa",
-                    "Heisei",
-                }
-            },
+                sharedJavaTimeLongEras },
             { "java.time.japanese.short.Eras",
-                new String[] {
-                    "",
-                    "Meiji",
-                    "Taisho",
-                    "Showa",
-                    "Heisei",
-                }
-            },
+                sharedJavaTimeLongEras },
             { "java.time.long.Eras",
                 new String[] {
                     "BCE",
@@ -324,13 +304,7 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "G y MMM d",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.short.Eras",
                 new String[] {
                     "BC",
@@ -338,137 +312,37 @@
                 }
             },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "AM",
-                    "PM",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "GGGG y MMM d",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayNames",
-                new String[] {
-                    "Sun",
-                    "Mon",
-                    "Tue",
-                    "Wed",
-                    "Thu",
-                    "Fri",
-                    "Sat",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "S",
-                    "M",
-                    "T",
-                    "W",
-                    "T",
-                    "F",
-                    "S",
-                }
-            },
+                sharedDayNarrows },
             { "roc.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "R.O.C.",
-                }
-            },
+                sharedShortEras },
             { "roc.MonthAbbreviations",
-                new String[] {
-                    "Jan",
-                    "Feb",
-                    "Mar",
-                    "Apr",
-                    "May",
-                    "Jun",
-                    "Jul",
-                    "Aug",
-                    "Sep",
-                    "Oct",
-                    "Nov",
-                    "Dec",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "roc.MonthNames",
-                new String[] {
-                    "Jan",
-                    "Feb",
-                    "Mar",
-                    "Apr",
-                    "May",
-                    "Jun",
-                    "Jul",
-                    "Aug",
-                    "Sep",
-                    "Oct",
-                    "Nov",
-                    "Dec",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "roc.MonthNarrows",
-                rocMonthNarrows },
+                sharedMonthNarrows },
             { "roc.QuarterNames",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterNames },
             { "roc.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNarrows },
             { "roc.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedTimePatterns },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "AM",
-                    "PM",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.long.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "R.O.C.",
-                }
-            },
+                sharedShortEras },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "AM",
-                    "PM",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.narrow.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "R.O.C.",
-                }
-            },
+                sharedShortEras },
             { "roc.short.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "R.O.C.",
-                }
-            },
+                sharedShortEras },
         };
     }
 }
--- a/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary_en.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary_en.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,15 +72,64 @@
 public class JavaTimeSupplementary_en extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterNames = {
+            "1st quarter",
+            "2nd quarter",
+            "3rd quarter",
+            "4th quarter",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE, MMMM d, y GGGG",
+            "MMMM d, y GGGG",
+            "MMM d, y GGGG",
+            "M/d/y G",
+        };
+
+        final String[] sharedDayNames = {
+            "Sunday",
+            "Monday",
+            "Tuesday",
+            "Wednesday",
+            "Thursday",
+            "Friday",
+            "Saturday",
+        };
+
+        final String[] sharedQuarterAbbreviations = {
+            "Q1",
+            "Q2",
+            "Q3",
+            "Q4",
+        };
+
+        final String[] sharedTimePatterns = {
+            "h:mm:ss a zzzz",
+            "h:mm:ss a z",
+            "h:mm:ss a",
+            "h:mm a",
+        };
+
+        final String[] sharedNarrowAmPmMarkers = {
+            "a",
+            "p",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, MMMM d, y G",
+            "MMMM d, y G",
+            "MMM d, y G",
+            "M/d/y GGGGG",
+        };
+
+        final String[] sharedEras = {
+            "Before R.O.C.",
+            "Minguo",
+        };
+
         return new Object[][] {
             { "QuarterNames",
-                new String[] {
-                    "1st quarter",
-                    "2nd quarter",
-                    "3rd quarter",
-                    "4th quarter",
-                }
-            },
+                sharedQuarterNames },
             { "calendarname.buddhist",
                 "Buddhist Calendar" },
             { "calendarname.gregorian",
@@ -124,62 +173,19 @@
                 }
             },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y GGGG",
-                    "MMMM d, y GGGG",
-                    "MMM d, y GGGG",
-                    "M/d/y G",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayNames",
-                new String[] {
-                    "Sunday",
-                    "Monday",
-                    "Tuesday",
-                    "Wednesday",
-                    "Thursday",
-                    "Friday",
-                    "Saturday",
-                }
-            },
+                sharedDayNames },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1st quarter",
-                    "2nd quarter",
-                    "3rd quarter",
-                    "4th quarter",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "a",
-                    "p",
-                }
-            },
+                sharedNarrowAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y G",
-                    "MMMM d, y G",
-                    "MMM d, y G",
-                    "M/d/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.buddhist.short.Eras",
                 new String[] {
                     "BC",
@@ -187,21 +193,9 @@
                 }
             },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y G",
-                    "MMMM d, y G",
-                    "MMM d, y G",
-                    "M/d/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y G",
-                    "MMMM d, y G",
-                    "MMM d, y G",
-                    "M/d/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.long.Eras",
                 new String[] {
                     "Before Christ",
@@ -209,21 +203,9 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y G",
-                    "MMMM d, y G",
-                    "MMM d, y G",
-                    "M/d/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y GGGG",
-                    "MMMM d, y GGGG",
-                    "MMM d, y GGGG",
-                    "M/d/y G",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayAbbreviations",
                 new String[] {
                     "Sun",
@@ -236,22 +218,9 @@
                 }
             },
             { "roc.DayNames",
-                new String[] {
-                    "Sunday",
-                    "Monday",
-                    "Tuesday",
-                    "Wednesday",
-                    "Thursday",
-                    "Friday",
-                    "Saturday",
-                }
-            },
+                sharedDayNames },
             { "roc.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
             { "roc.MonthNames",
                 new String[] {
                     "January",
@@ -287,53 +256,19 @@
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1st quarter",
-                    "2nd quarter",
-                    "3rd quarter",
-                    "4th quarter",
-                }
-            },
+                sharedQuarterNames },
             { "roc.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
             { "roc.long.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "a",
-                    "p",
-                }
-            },
+                sharedNarrowAmPmMarkers },
             { "roc.narrow.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
             { "roc.short.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
         };
     }
 }
--- a/src/java.base/share/classes/sun/util/resources/LocaleData.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/classes/sun/util/resources/LocaleData.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -228,6 +228,9 @@
 
     private static class LocaleDataStrategy implements Bundles.Strategy {
         private static final LocaleDataStrategy INSTANCE = new LocaleDataStrategy();
+        // TODO: avoid hard-coded Locales
+        private static Set<Locale> JAVA_BASE_LOCALES
+            = Set.of(Locale.ROOT, Locale.ENGLISH, Locale.US, new Locale("en", "US", "POSIX"));
 
         private LocaleDataStrategy() {
         }
@@ -275,11 +278,7 @@
         }
 
         boolean inJavaBaseModule(String baseName, Locale locale) {
-            // TODO: avoid hard-coded Locales
-            return locale.equals(Locale.ROOT) ||
-                (locale.getLanguage() == "en" &&
-                    (locale.getCountry().isEmpty() ||
-                     locale.getCountry() == "US"));
+            return JAVA_BASE_LOCALES.contains(locale);
         }
 
         @Override
@@ -313,6 +312,9 @@
     private static class SupplementaryStrategy extends LocaleDataStrategy {
         private static final SupplementaryStrategy INSTANCE
                 = new SupplementaryStrategy();
+        // TODO: avoid hard-coded Locales
+        private static Set<Locale> JAVA_BASE_LOCALES
+            = Set.of(Locale.ROOT, Locale.ENGLISH, Locale.US);
 
         private SupplementaryStrategy() {
         }
@@ -332,8 +334,7 @@
 
         @Override
         boolean inJavaBaseModule(String baseName, Locale locale) {
-            // TODO: avoid hard-coded Locales
-            return locale.equals(Locale.ROOT) || locale.getLanguage() == "en";
+            return JAVA_BASE_LOCALES.contains(locale);
         }
     }
 }
--- a/src/java.base/share/conf/security/java.security	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/conf/security/java.security	Tue Jul 05 13:50:37 2016 -0700
@@ -116,15 +116,7 @@
 # Example:
 #   jdk.security.provider.preferred=AES/GCM/NoPadding:SunJCE, \
 #         MessageDigest.SHA-256:SUN, Group.HmacSHA2:SunJCE
-#ifdef solaris-sparc
-jdk.security.provider.preferred=AES:SunJCE, SHA1:SUN, Group.SHA2:SUN, \
-      HmacSHA1:SunJCE, Group.HmacSHA2:SunJCE
-#endif
-#ifdef solaris-x86
-jdk.security.provider.preferred=AES:SunJCE, SHA1:SUN, Group.SHA2:SUN, \
-      HmacSHA1:SunJCE, Group.HmacSHA2:SunJCE, RSA:SunRsaSign, \
-      SHA1withRSA:SunRsaSign, Group.SHA2RSA:SunRsaSign
-#endif
+#jdk.security.provider.preferred=
 
 
 #
--- a/src/java.base/share/native/libjli/java.c	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/share/native/libjli/java.c	Tue Jul 05 13:50:37 2016 -0700
@@ -435,7 +435,8 @@
     ret = 1;
 
     /*
-     * Get the application's main class.
+     * Get the application's main class. It also checks if the main
+     * method exists.
      *
      * See bugid 5030265.  The Main-Class name has already been parsed
      * from the manifest, but not parsed properly for UTF-8 support.
@@ -467,6 +468,16 @@
      */
     appClass = GetApplicationClass(env);
     NULL_CHECK_RETURN_VALUE(appClass, -1);
+
+    /* Build platform specific argument array */
+    mainArgs = CreateApplicationArgs(env, argv, argc);
+    CHECK_EXCEPTION_NULL_LEAVE(mainArgs);
+
+    if (dryRun) {
+        ret = 0;
+        LEAVE();
+    }
+
     /*
      * PostJVMInit uses the class name as the application name for GUI purposes,
      * for example, on OSX this sets the application name in the menu bar for
@@ -476,6 +487,7 @@
      */
     PostJVMInit(env, appClass, vm);
     CHECK_EXCEPTION_LEAVE(1);
+
     /*
      * The LoadMainClass not only loads the main class, it will also ensure
      * that the main method's signature is correct, therefore further checking
@@ -486,22 +498,15 @@
                                        "([Ljava/lang/String;)V");
     CHECK_EXCEPTION_NULL_LEAVE(mainID);
 
-    /* Build platform specific argument array */
-    mainArgs = CreateApplicationArgs(env, argv, argc);
-    CHECK_EXCEPTION_NULL_LEAVE(mainArgs);
+    /* Invoke main method. */
+    (*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs);
 
-    if (dryRun) {
-        ret = 0;
-    } else {
-        /* Invoke main method. */
-        (*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs);
+    /*
+     * The launcher's exit code (in the absence of calls to
+     * System.exit) will be non-zero if main threw an exception.
+     */
+    ret = (*env)->ExceptionOccurred(env) == NULL ? 0 : 1;
 
-        /*
-         * The launcher's exit code (in the absence of calls to
-         * System.exit) will be non-zero if main threw an exception.
-         */
-        ret = (*env)->ExceptionOccurred(env) == NULL ? 0 : 1;
-    }
     LEAVE();
 }
 
--- a/src/java.base/windows/conf/tzmappings	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.base/windows/conf/tzmappings	Tue Jul 05 13:50:37 2016 -0700
@@ -164,39 +164,63 @@
 GMT Standard Time:88,89::GMT:
 Greenwich:88,89::GMT:
 Greenwich Standard Time:88,89::GMT:
-Argentina Standard Time:900,900::America/Buenos_Aires:
-Azerbaijan Standard Time:901,901:AZ:Asia/Baku:
-Bangladesh Standard Time:902,902::Asia/Dhaka:
-Central Brazilian Standard Time:903,903:BR:America/Cuiaba:
-Central Standard Time (Mexico):904,904::America/Mexico_City:
-Georgian Standard Time:905,905:GE:Asia/Tbilisi:
-Jordan Standard Time:906,906:JO:Asia/Amman:
-Kamchatka Standard Time:907,907:RU:Asia/Kamchatka:
-Mauritius Standard Time:908,908:MU:Indian/Mauritius:
-Middle East Standard Time:909,909:LB:Asia/Beirut:
-Montevideo Standard Time:910,910:UY:America/Montevideo:
-Morocco Standard Time:911,911:MA:Africa/Casablanca:
-Mountain Standard Time (Mexico):912,912:MX:America/Chihuahua:
-Namibia Standard Time:913,913:NA:Africa/Windhoek:
-Pacific Standard Time (Mexico):914,914:MX:America/Tijuana:
-Pakistan Standard Time:915,915::Asia/Karachi:
-Paraguay Standard Time:916,916:PY:America/Asuncion:
-Syria Standard Time:917,917:SY:Asia/Damascus:
-UTC:918,918::UTC:
-UTC+12:919,919::GMT+1200:
-UTC-02:920,920::GMT-0200:
-UTC-11:921,921::GMT-1100:
-Ulaanbaatar Standard Time:922,922::Asia/Ulaanbaatar:
-Venezuela Standard Time:923,923::America/Caracas:
-Magadan Standard Time:924,924::Asia/Magadan:
-Kaliningrad Standard Time:925,925:RU:Europe/Kaliningrad:
-Turkey Standard Time:926,926::Asia/Istanbul:
-Bahia Standard Time:927,927::America/Bahia:
-Libya Standard Time:928,928:LY:Africa/Tripoli:
-Belarus Standard Time:929,929:BY:Europe/Minsk:
-Line Islands Standard Time:930,930::Pacific/Kiritimati:
-Russia Time Zone 10:931,931::Asia/Srednekolymsk:
-Russia Time Zone 11:932,932::Asia/Anadyr:
-Russia Time Zone 3:933,933::Europe/Samara:
-Western Brazilian Standard Time:934,934:BR:America/Rio_Branco:
-Armenian Standard Time:935,935:AM:Asia/Yerevan:
+Aleutian Standard Time:900,900:US:America/Adak:
+Altai Standard Time:901,901::Asia/Barnaul:
+Argentina Standard Time:902,902::America/Buenos_Aires:
+Armenian Standard Time:903,903:AM:Asia/Yerevan:
+Astrakhan Standard Time:904,904::Europe/Astrakhan:
+Aus Central W. Standard Time:905,905::Australia/Eucla:
+Azerbaijan Standard Time:906,906:AZ:Asia/Baku:
+Bahia Standard Time:907,907::America/Bahia:
+Bangladesh Standard Time:908,908::Asia/Dhaka:
+Belarus Standard Time:909,909:BY:Europe/Minsk:
+Bougainville Standard Time:910,910::Pacific/Bougainville:
+Central Brazilian Standard Time:911,911:BR:America/Cuiaba:
+Central Standard Time (Mexico):912,912::America/Mexico_City:
+Chatham Islands Standard Time:913,913::Pacific/Chatham:
+Cuba Standard Time:914,914:CU:America/Havana:
+Easter Island Standard Time:915,915:CL:Pacific/Easter:
+Eastern Standard Time (Mexico):916,916::America/Cancun:
+Georgian Standard Time:917,917:GE:Asia/Tbilisi:
+Haiti Standard Time:918,918:HT:America/Port-au-Prince:
+Jordan Standard Time:919,919:JO:Asia/Amman:
+Kaliningrad Standard Time:920,920:RU:Europe/Kaliningrad:
+Kamchatka Standard Time:921,921:RU:Asia/Kamchatka:
+Libya Standard Time:922,922:LY:Africa/Tripoli:
+Line Islands Standard Time:923,923::Pacific/Kiritimati:
+Lord Howe Standard Time:924,924::Australia/Lord_Howe:
+Magadan Standard Time:925,925::Asia/Magadan:
+Marquesas Standard Time:926,926::Pacific/Marquesas:
+Mauritius Standard Time:927,927:MU:Indian/Mauritius:
+Middle East Standard Time:928,928:LB:Asia/Beirut:
+Montevideo Standard Time:929,929:UY:America/Montevideo:
+Morocco Standard Time:930,930:MA:Africa/Casablanca:
+Mountain Standard Time (Mexico):931,931:MX:America/Chihuahua:
+Namibia Standard Time:932,932:NA:Africa/Windhoek:
+Norfolk Standard Time:933,933::Pacific/Norfolk:
+North Korea Standard Time:934,934:KP:Asia/Pyongyang:
+Pacific Standard Time (Mexico):935,935:MX:America/Tijuana:
+Pakistan Standard Time:936,936::Asia/Karachi:
+Paraguay Standard Time:937,937:PY:America/Asuncion:
+Russia Time Zone 10:938,938::Asia/Srednekolymsk:
+Russia Time Zone 11:939,939::Asia/Anadyr:
+Russia Time Zone 3:940,940::Europe/Samara:
+Saint Pierre Standard Time:941,941:PM:America/Miquelon:
+Sakhalin Standard Time:942,942::Asia/Sakhalin:
+Syria Standard Time:943,943:SY:Asia/Damascus:
+Tocantins Standard Time:944,944::America/Araguaina:
+Tomsk Standard Time:945,945::Asia/Tomsk:
+Transbaikal Standard Time:946,946::Asia/Chita:
+Turkey Standard Time:947,947::Asia/Istanbul:
+Turks And Caicos Standard Time:948,948:TC:America/Grand_Turk:
+UTC+12:949,949::GMT+1200:
+UTC-02:950,950::GMT-0200:
+UTC-08:951,951::GMT-0800:
+UTC-09:952,952::GMT-0900:
+UTC-11:953,953::GMT-1100:
+UTC:954,954::UTC:
+Ulaanbaatar Standard Time:955,955::Asia/Ulaanbaatar:
+Venezuela Standard Time:956,956::America/Caracas:
+W. Mongolia Standard Time:957,957::Asia/Hovd:
+West Bank Standard Time:958,958::Asia/Gaza:
+Western Brazilian Standard Time:959,959:BR:America/Rio_Branco:
--- a/src/java.naming/share/classes/com/sun/jndi/ldap/pool/Pool.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/java.naming/share/classes/com/sun/jndi/ldap/pool/Pool.java	Tue Jul 05 13:50:37 2016 -0700
@@ -118,7 +118,11 @@
         PooledConnectionFactory factory) throws NamingException {
 
         d("get(): ", id);
-        d("size: ", map.size());
+        if (debug) {
+            synchronized (map) {
+                d("size: ", map.size());
+            }
+        }
 
         expungeStaleConnections();
 
@@ -141,10 +145,9 @@
                 // Keep the weak reference through the element of a linked list
                 weakRefs.add(weakRef);
             }
+            d("get(): size after: ", map.size());
         }
 
-        d("get(): size after: ", map.size());
-
         return conns.get(timeout, factory); // get one connection from list
     }
 
@@ -209,19 +212,24 @@
         out.println("maximum pool size: " + maxSize);
         out.println("preferred pool size: " + prefSize);
         out.println("initial pool size: " + initSize);
-        out.println("current pool size: " + map.size());
 
-        for (Map.Entry<Object, ConnectionsRef> entry : map.entrySet()) {
-            id = entry.getKey();
-            conns = entry.getValue().getConnections();
-            out.println("   " + id + ":" + conns.getStats());
+        synchronized (map) {
+            out.println("current pool size: " + map.size());
+
+            for (Map.Entry<Object, ConnectionsRef> entry : map.entrySet()) {
+                id = entry.getKey();
+                conns = entry.getValue().getConnections();
+                out.println("   " + id + ":" + conns.getStats());
+            }
         }
 
         out.println("====== Pool end =====================");
     }
 
     public String toString() {
-        return super.toString() + " " + map.toString();
+        synchronized (map) {
+            return super.toString() + " " + map.toString();
+        }
     }
 
     private void d(String msg, int i) {
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,35 +72,121 @@
 public class JavaTimeSupplementary_ar extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
-        final String[] javatimebuddhistlongEras = {
+        final String[] sharedQuarterNames = {
+            "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644",
+            "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a",
+            "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b",
+            "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639",
+        };
+
+        final String[] sharedQuarterNarrows = {
+            "\u0661",
+            "\u0662",
+            "\u0663",
+            "\u0664",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "\u0635",
+            "\u0645",
+        };
+
+        final String[] sharedDayNames = {
+            "\u0627\u0644\u0623\u062d\u062f",
+            "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+            "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+            "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+            "\u0627\u0644\u062e\u0645\u064a\u0633",
+            "\u0627\u0644\u062c\u0645\u0639\u0629",
+            "\u0627\u0644\u0633\u0628\u062a",
+        };
+
+        final String[] sharedDayNarrows = {
+            "\u062d",
+            "\u0646",
+            "\u062b",
+            "\u0631",
+            "\u062e",
+            "\u062c",
+            "\u0633",
+        };
+
+        final String[] sharedEras = {
+            "",
+            "\u0647\u0640",
+        };
+
+        final String[] sharedMonthNames = {
+            "\u0645\u062d\u0631\u0645",
+            "\u0635\u0641\u0631",
+            "\u0631\u0628\u064a\u0639 \u0627\u0644\u0623\u0648\u0644",
+            "\u0631\u0628\u064a\u0639 \u0627\u0644\u0622\u062e\u0631",
+            "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0623\u0648\u0644\u0649",
+            "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0622\u062e\u0631\u0629",
+            "\u0631\u062c\u0628",
+            "\u0634\u0639\u0628\u0627\u0646",
+            "\u0631\u0645\u0636\u0627\u0646",
+            "\u0634\u0648\u0627\u0644",
+            "\u0630\u0648 \u0627\u0644\u0642\u0639\u062f\u0629",
+            "\u0630\u0648 \u0627\u0644\u062d\u062c\u0629",
+            "",
+        };
+
+        final String[] sharedTimePatterns = {
+            "h:mm:ss a zzzz",
+            "h:mm:ss a z",
+            "h:mm:ss a",
+            "h:mm a",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE\u060c d MMMM\u060c y G",
+            "d MMMM\u060c y G",
+            "dd\u200f/MM\u200f/y G",
+            "d\u200f/M\u200f/y GGGGG",
+        };
+
+        final String[] sharedJavaTimeLongEras = {
             "BC",
             "\u0627\u0644\u062a\u0642\u0648\u064a\u0645 \u0627\u0644\u0628\u0648\u0630\u064a",
         };
+
+        final String[] sharedJavaTimeShortEras = {
+            "\u0645",
+            "\u0645\u064a\u062c\u064a",
+            "\u062a\u064a\u0634\u0648",
+            "\u0634\u0648\u0648\u0627",
+            "\u0647\u064a\u0633\u064a",
+        };
+
+        final String[] sharedShortEras = {
+            "Before R.O.C.",
+            "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a",
+        };
+
+        final String[] sharedMonthAbbreviations = {
+            "\u064a\u0646\u0627\u064a\u0631",
+            "\u0641\u0628\u0631\u0627\u064a\u0631",
+            "\u0645\u0627\u0631\u0633",
+            "\u0623\u0628\u0631\u064a\u0644",
+            "\u0645\u0627\u064a\u0648",
+            "\u064a\u0648\u0646\u064a\u0648",
+            "\u064a\u0648\u0644\u064a\u0648",
+            "\u0623\u063a\u0633\u0637\u0633",
+            "\u0633\u0628\u062a\u0645\u0628\u0631",
+            "\u0623\u0643\u062a\u0648\u0628\u0631",
+            "\u0646\u0648\u0641\u0645\u0628\u0631",
+            "\u062f\u064a\u0633\u0645\u0628\u0631",
+            "",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639",
-                }
-            },
+                sharedQuarterNames },
             { "QuarterNames",
-                new String[] {
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639",
-                }
-            },
+                sharedQuarterNames },
             { "QuarterNarrows",
-                new String[] {
-                    "\u0661",
-                    "\u0662",
-                    "\u0663",
-                    "\u0664",
-                }
-            },
+                sharedQuarterNarrows },
             { "calendarname.buddhist",
                 "\u0627\u0644\u062a\u0642\u0648\u064a\u0645 \u0627\u0644\u0628\u0648\u0630\u064a" },
             { "calendarname.gregorian",
@@ -138,11 +224,7 @@
             { "field.zone",
                 "\u0627\u0644\u062a\u0648\u0642\u064a\u062a" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "\u0635",
-                    "\u0645",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
                 new String[] {
                     "EEEE\u060c d MMMM\u060c y GGGG",
@@ -152,78 +234,17 @@
                 }
             },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "\u0627\u0644\u0623\u062d\u062f",
-                    "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
-                    "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
-                    "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
-                    "\u0627\u0644\u062e\u0645\u064a\u0633",
-                    "\u0627\u0644\u062c\u0645\u0639\u0629",
-                    "\u0627\u0644\u0633\u0628\u062a",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNames",
-                new String[] {
-                    "\u0627\u0644\u0623\u062d\u062f",
-                    "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
-                    "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
-                    "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
-                    "\u0627\u0644\u062e\u0645\u064a\u0633",
-                    "\u0627\u0644\u062c\u0645\u0639\u0629",
-                    "\u0627\u0644\u0633\u0628\u062a",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "\u062d",
-                    "\u0646",
-                    "\u062b",
-                    "\u0631",
-                    "\u062e",
-                    "\u062c",
-                    "\u0633",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.Eras",
-                new String[] {
-                    "",
-                    "\u0647\u0640",
-                }
-            },
+                sharedEras },
             { "islamic.MonthAbbreviations",
-                new String[] {
-                    "\u0645\u062d\u0631\u0645",
-                    "\u0635\u0641\u0631",
-                    "\u0631\u0628\u064a\u0639 \u0627\u0644\u0623\u0648\u0644",
-                    "\u0631\u0628\u064a\u0639 \u0627\u0644\u0622\u062e\u0631",
-                    "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0623\u0648\u0644\u0649",
-                    "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0622\u062e\u0631\u0629",
-                    "\u0631\u062c\u0628",
-                    "\u0634\u0639\u0628\u0627\u0646",
-                    "\u0631\u0645\u0636\u0627\u0646",
-                    "\u0634\u0648\u0627\u0644",
-                    "\u0630\u0648 \u0627\u0644\u0642\u0639\u062f\u0629",
-                    "\u0630\u0648 \u0627\u0644\u062d\u062c\u0629",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "islamic.MonthNames",
-                new String[] {
-                    "\u0645\u062d\u0631\u0645",
-                    "\u0635\u0641\u0631",
-                    "\u0631\u0628\u064a\u0639 \u0627\u0644\u0623\u0648\u0644",
-                    "\u0631\u0628\u064a\u0639 \u0627\u0644\u0622\u062e\u0631",
-                    "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0623\u0648\u0644\u0649",
-                    "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0622\u062e\u0631\u0629",
-                    "\u0631\u062c\u0628",
-                    "\u0634\u0639\u0628\u0627\u0646",
-                    "\u0631\u0645\u0636\u0627\u0646",
-                    "\u0634\u0648\u0627\u0644",
-                    "\u0630\u0648 \u0627\u0644\u0642\u0639\u062f\u0629",
-                    "\u0630\u0648 \u0627\u0644\u062d\u062c\u0629",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "islamic.MonthNarrows",
                 new String[] {
                     "\u0661",
@@ -242,79 +263,29 @@
                 }
             },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.QuarterNames",
-                new String[] {
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.QuarterNarrows",
-                new String[] {
-                    "\u0661",
-                    "\u0662",
-                    "\u0663",
-                    "\u0664",
-                }
-            },
+                sharedQuarterNarrows },
             { "islamic.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "\u0635",
-                    "\u0645",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.long.Eras",
-                new String[] {
-                    "",
-                    "\u0647\u0640",
-                }
-            },
+                sharedEras },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "\u0635",
-                    "\u0645",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.narrow.Eras",
-                new String[] {
-                    "",
-                    "\u0647\u0640",
-                }
-            },
+                sharedEras },
             { "islamic.short.Eras",
-                new String[] {
-                    "",
-                    "\u0647\u0640",
-                }
-            },
+                sharedEras },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE\u060c d MMMM\u060c y G",
-                    "d MMMM\u060c y G",
-                    "dd\u200f/MM\u200f/y G",
-                    "d\u200f/M\u200f/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.buddhist.long.Eras",
-                javatimebuddhistlongEras },
+                sharedJavaTimeLongEras },
             { "java.time.buddhist.short.Eras",
-                javatimebuddhistlongEras },
+                sharedJavaTimeLongEras },
             { "java.time.islamic.DatePatterns",
                 new String[] {
                     "EEEE\u060c d MMMM\u060c y G",
@@ -324,31 +295,11 @@
                 }
             },
             { "java.time.japanese.DatePatterns",
-                new String[] {
-                    "EEEE\u060c d MMMM\u060c y G",
-                    "d MMMM\u060c y G",
-                    "dd\u200f/MM\u200f/y G",
-                    "d\u200f/M\u200f/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.long.Eras",
-                new String[] {
-                    "\u0645",
-                    "\u0645\u064a\u062c\u064a",
-                    "\u062a\u064a\u0634\u0648",
-                    "\u0634\u0648\u0648\u0627",
-                    "\u0647\u064a\u0633\u064a",
-                }
-            },
+                sharedJavaTimeShortEras },
             { "java.time.japanese.short.Eras",
-                new String[] {
-                    "\u0645",
-                    "\u0645\u064a\u062c\u064a",
-                    "\u062a\u064a\u0634\u0648",
-                    "\u0634\u0648\u0648\u0627",
-                    "\u0647\u064a\u0633\u064a",
-                }
-            },
+                sharedJavaTimeShortEras },
             { "java.time.long.Eras",
                 new String[] {
                     "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
@@ -356,13 +307,7 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE\u060c d MMMM\u060c y G",
-                    "d MMMM\u060c y G",
-                    "dd\u200f/MM\u200f/y G",
-                    "d\u200f/M\u200f/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.short.Eras",
                 new String[] {
                     "\u0642.\u0645",
@@ -370,11 +315,7 @@
                 }
             },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "\u0635",
-                    "\u0645",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
                 new String[] {
                     "EEEE\u060c d MMMM\u060c y GGGG",
@@ -384,78 +325,17 @@
                 }
             },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "\u0627\u0644\u0623\u062d\u062f",
-                    "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
-                    "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
-                    "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
-                    "\u0627\u0644\u062e\u0645\u064a\u0633",
-                    "\u0627\u0644\u062c\u0645\u0639\u0629",
-                    "\u0627\u0644\u0633\u0628\u062a",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNames",
-                new String[] {
-                    "\u0627\u0644\u0623\u062d\u062f",
-                    "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
-                    "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
-                    "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
-                    "\u0627\u0644\u062e\u0645\u064a\u0633",
-                    "\u0627\u0644\u062c\u0645\u0639\u0629",
-                    "\u0627\u0644\u0633\u0628\u062a",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "\u062d",
-                    "\u0646",
-                    "\u062b",
-                    "\u0631",
-                    "\u062e",
-                    "\u062c",
-                    "\u0633",
-                }
-            },
+                sharedDayNarrows },
             { "roc.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a",
-                }
-            },
+                sharedShortEras },
             { "roc.MonthAbbreviations",
-                new String[] {
-                    "\u064a\u0646\u0627\u064a\u0631",
-                    "\u0641\u0628\u0631\u0627\u064a\u0631",
-                    "\u0645\u0627\u0631\u0633",
-                    "\u0623\u0628\u0631\u064a\u0644",
-                    "\u0645\u0627\u064a\u0648",
-                    "\u064a\u0648\u0646\u064a\u0648",
-                    "\u064a\u0648\u0644\u064a\u0648",
-                    "\u0623\u063a\u0633\u0637\u0633",
-                    "\u0633\u0628\u062a\u0645\u0628\u0631",
-                    "\u0623\u0643\u062a\u0648\u0628\u0631",
-                    "\u0646\u0648\u0641\u0645\u0628\u0631",
-                    "\u062f\u064a\u0633\u0645\u0628\u0631",
-                    "",
-                }
-            },
+                sharedMonthAbbreviations },
             { "roc.MonthNames",
-                new String[] {
-                    "\u064a\u0646\u0627\u064a\u0631",
-                    "\u0641\u0628\u0631\u0627\u064a\u0631",
-                    "\u0645\u0627\u0631\u0633",
-                    "\u0623\u0628\u0631\u064a\u0644",
-                    "\u0645\u0627\u064a\u0648",
-                    "\u064a\u0648\u0646\u064a\u0648",
-                    "\u064a\u0648\u0644\u064a\u0648",
-                    "\u0623\u063a\u0633\u0637\u0633",
-                    "\u0633\u0628\u062a\u0645\u0628\u0631",
-                    "\u0623\u0643\u062a\u0648\u0628\u0631",
-                    "\u0646\u0648\u0641\u0645\u0628\u0631",
-                    "\u062f\u064a\u0633\u0645\u0628\u0631",
-                    "",
-                }
-            },
+                sharedMonthAbbreviations },
             { "roc.MonthNarrows",
                 new String[] {
                     "\u064a",
@@ -474,67 +354,23 @@
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639",
-                }
-            },
+                sharedQuarterNames },
             { "roc.QuarterNames",
-                new String[] {
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b",
-                    "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639",
-                }
-            },
+                sharedQuarterNames },
             { "roc.QuarterNarrows",
-                new String[] {
-                    "\u0661",
-                    "\u0662",
-                    "\u0663",
-                    "\u0664",
-                }
-            },
+                sharedQuarterNarrows },
             { "roc.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "\u0635",
-                    "\u0645",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.long.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a",
-                }
-            },
+                sharedShortEras },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "\u0635",
-                    "\u0645",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.narrow.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a",
-                }
-            },
+                sharedShortEras },
             { "roc.short.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a",
-                }
-            },
+                sharedShortEras },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_JO.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_JO.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,41 +72,27 @@
 public class JavaTimeSupplementary_ar_JO extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedMonthNames = {
+            "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+            "\u0634\u0628\u0627\u0637",
+            "\u0622\u0630\u0627\u0631",
+            "\u0646\u064a\u0633\u0627\u0646",
+            "\u0623\u064a\u0627\u0631",
+            "\u062d\u0632\u064a\u0631\u0627\u0646",
+            "\u062a\u0645\u0648\u0632",
+            "\u0622\u0628",
+            "\u0623\u064a\u0644\u0648\u0644",
+            "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+            "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+            "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644",
+            "",
+        };
+
         return new Object[][] {
             { "roc.MonthAbbreviations",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0634\u0628\u0627\u0637",
-                    "\u0622\u0630\u0627\u0631",
-                    "\u0646\u064a\u0633\u0627\u0646",
-                    "\u0623\u064a\u0627\u0631",
-                    "\u062d\u0632\u064a\u0631\u0627\u0646",
-                    "\u062a\u0645\u0648\u0632",
-                    "\u0622\u0628",
-                    "\u0623\u064a\u0644\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "roc.MonthNames",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0634\u0628\u0627\u0637",
-                    "\u0622\u0630\u0627\u0631",
-                    "\u0646\u064a\u0633\u0627\u0646",
-                    "\u0623\u064a\u0627\u0631",
-                    "\u062d\u0632\u064a\u0631\u0627\u0646",
-                    "\u062a\u0645\u0648\u0632",
-                    "\u0622\u0628",
-                    "\u0623\u064a\u0644\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "roc.MonthNarrows",
                 new String[] {
                     "\u0643",
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_LB.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_LB.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,41 +72,27 @@
 public class JavaTimeSupplementary_ar_LB extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedMonthNames = {
+            "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+            "\u0634\u0628\u0627\u0637",
+            "\u0622\u0630\u0627\u0631",
+            "\u0646\u064a\u0633\u0627\u0646",
+            "\u0623\u064a\u0627\u0631",
+            "\u062d\u0632\u064a\u0631\u0627\u0646",
+            "\u062a\u0645\u0648\u0632",
+            "\u0622\u0628",
+            "\u0623\u064a\u0644\u0648\u0644",
+            "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+            "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+            "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644",
+            "",
+        };
+
         return new Object[][] {
             { "roc.MonthAbbreviations",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0634\u0628\u0627\u0637",
-                    "\u0622\u0630\u0627\u0631",
-                    "\u0646\u064a\u0633\u0627\u0646",
-                    "\u0623\u064a\u0627\u0631",
-                    "\u062d\u0632\u064a\u0631\u0627\u0646",
-                    "\u062a\u0645\u0648\u0632",
-                    "\u0622\u0628",
-                    "\u0623\u064a\u0644\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "roc.MonthNames",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0634\u0628\u0627\u0637",
-                    "\u0622\u0630\u0627\u0631",
-                    "\u0646\u064a\u0633\u0627\u0646",
-                    "\u0623\u064a\u0627\u0631",
-                    "\u062d\u0632\u064a\u0631\u0627\u0646",
-                    "\u062a\u0645\u0648\u0632",
-                    "\u0622\u0628",
-                    "\u0623\u064a\u0644\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "roc.MonthNarrows",
                 new String[] {
                     "\u0643",
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_SY.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_SY.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,41 +72,27 @@
 public class JavaTimeSupplementary_ar_SY extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedMonthNames = {
+            "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+            "\u0634\u0628\u0627\u0637",
+            "\u0622\u0630\u0627\u0631",
+            "\u0646\u064a\u0633\u0627\u0646",
+            "\u0623\u064a\u0627\u0631",
+            "\u062d\u0632\u064a\u0631\u0627\u0646",
+            "\u062a\u0645\u0648\u0632",
+            "\u0622\u0628",
+            "\u0623\u064a\u0644\u0648\u0644",
+            "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+            "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+            "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644",
+            "",
+        };
+
         return new Object[][] {
             { "roc.MonthAbbreviations",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0634\u0628\u0627\u0637",
-                    "\u0622\u0630\u0627\u0631",
-                    "\u0646\u064a\u0633\u0627\u0646",
-                    "\u0623\u064a\u0627\u0631",
-                    "\u062d\u0632\u064a\u0631\u0627\u0646",
-                    "\u062a\u0645\u0648\u0632",
-                    "\u0622\u0628",
-                    "\u0623\u064a\u0644\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "roc.MonthNames",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0634\u0628\u0627\u0637",
-                    "\u0622\u0630\u0627\u0631",
-                    "\u0646\u064a\u0633\u0627\u0646",
-                    "\u0623\u064a\u0627\u0631",
-                    "\u062d\u0632\u064a\u0631\u0627\u0646",
-                    "\u062a\u0645\u0648\u0632",
-                    "\u0622\u0628",
-                    "\u0623\u064a\u0644\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
-                    "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644",
-                    "",
-                }
-            },
+                sharedMonthNames },
             { "roc.MonthNarrows",
                 new String[] {
                     "\u0643",
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_be.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_be.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,23 +72,91 @@
 public class JavaTimeSupplementary_be extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterAbbreviations = {
+            "1-\u0448\u044b \u043a\u0432.",
+            "2-\u0433\u0456 \u043a\u0432.",
+            "3-\u0446\u0456 \u043a\u0432.",
+            "4-\u0442\u044b \u043a\u0432.",
+        };
+
+        final String[] sharedQuarterNames = {
+            "1-\u0448\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
+            "2-\u0433\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
+            "3-\u0446\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
+            "4-\u0442\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "\u0434\u0430 \u043f\u0430\u045e\u0434\u043d\u044f",
+            "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u045e\u0434\u043d\u044f",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE, d MMMM y GGGG",
+            "d MMMM y GGGG",
+            "d.M.y GGGG",
+            "d.M.y G",
+        };
+
+        final String[] sharedDayAbbreviations = {
+            "\u043d\u0434",
+            "\u043f\u043d",
+            "\u0430\u045e",
+            "\u0441\u0440",
+            "\u0447\u0446",
+            "\u043f\u0442",
+            "\u0441\u0431",
+        };
+
+        final String[] sharedDayNames = {
+            "\u043d\u044f\u0434\u0437\u0435\u043b\u044f",
+            "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a",
+            "\u0430\u045e\u0442\u043e\u0440\u0430\u043a",
+            "\u0441\u0435\u0440\u0430\u0434\u0430",
+            "\u0447\u0430\u0446\u0432\u0435\u0440",
+            "\u043f\u044f\u0442\u043d\u0456\u0446\u0430",
+            "\u0441\u0443\u0431\u043e\u0442\u0430",
+        };
+
+        final String[] sharedDayNarrows = {
+            "\u043d",
+            "\u043f",
+            "\u0430",
+            "\u0441",
+            "\u0447",
+            "\u043f",
+            "\u0441",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH.mm.ss zzzz",
+            "HH.mm.ss z",
+            "HH.mm.ss",
+            "HH.mm",
+        };
+
+        final String[] sharedAbbreviatedAmPmMarkers = {
+            "\u0440\u0430\u043d\u0456\u0446\u044b",
+            "\u0432\u0435\u0447\u0430\u0440\u0430",
+        };
+
+        final String[] sharedNarrowAmPmMarkers = {
+            "\u0440\u0430\u043d.",
+            "\u0432\u0435\u0447.",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, d MMMM y G",
+            "d MMMM y G",
+            "d.M.y G",
+            "d.M.y GGGGG",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "1-\u0448\u044b \u043a\u0432.",
-                    "2-\u0433\u0456 \u043a\u0432.",
-                    "3-\u0446\u0456 \u043a\u0432.",
-                    "4-\u0442\u044b \u043a\u0432.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "QuarterNames",
-                new String[] {
-                    "1-\u0448\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                    "2-\u0433\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                    "3-\u0446\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                    "4-\u0442\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                }
-            },
+                sharedQuarterNames },
             { "calendarname.buddhist",
                 "\u0431\u0443\u0434\u044b\u0439\u0441\u043a\u0456 \u043a\u0430\u043b\u044f\u043d\u0434\u0430\u0440" },
             { "calendarname.gregorian",
@@ -124,96 +192,25 @@
             { "field.zone",
                 "\u0447\u0430\u0441\u0430\u0432\u044b \u043f\u043e\u044f\u0441" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "\u0434\u0430 \u043f\u0430\u045e\u0434\u043d\u044f",
-                    "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u045e\u0434\u043d\u044f",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y GGGG",
-                    "d MMMM y GGGG",
-                    "d.M.y GGGG",
-                    "d.M.y G",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "\u043d\u0434",
-                    "\u043f\u043d",
-                    "\u0430\u045e",
-                    "\u0441\u0440",
-                    "\u0447\u0446",
-                    "\u043f\u0442",
-                    "\u0441\u0431",
-                }
-            },
+                sharedDayAbbreviations },
             { "islamic.DayNames",
-                new String[] {
-                    "\u043d\u044f\u0434\u0437\u0435\u043b\u044f",
-                    "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a",
-                    "\u0430\u045e\u0442\u043e\u0440\u0430\u043a",
-                    "\u0441\u0435\u0440\u0430\u0434\u0430",
-                    "\u0447\u0430\u0446\u0432\u0435\u0440",
-                    "\u043f\u044f\u0442\u043d\u0456\u0446\u0430",
-                    "\u0441\u0443\u0431\u043e\u0442\u0430",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "\u043d",
-                    "\u043f",
-                    "\u0430",
-                    "\u0441",
-                    "\u0447",
-                    "\u043f",
-                    "\u0441",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "1-\u0448\u044b \u043a\u0432.",
-                    "2-\u0433\u0456 \u043a\u0432.",
-                    "3-\u0446\u0456 \u043a\u0432.",
-                    "4-\u0442\u044b \u043a\u0432.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1-\u0448\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                    "2-\u0433\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                    "3-\u0446\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                    "4-\u0442\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                }
-            },
-            { "islamic.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.TimePatterns",
-                new String[] {
-                    "HH.mm.ss zzzz",
-                    "HH.mm.ss z",
-                    "HH.mm.ss",
-                    "HH.mm",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "\u0440\u0430\u043d\u0456\u0446\u044b",
-                    "\u0432\u0435\u0447\u0430\u0440\u0430",
-                }
-            },
+                sharedAbbreviatedAmPmMarkers },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "\u0440\u0430\u043d.",
-                    "\u0432\u0435\u0447.",
-                }
-            },
+                sharedNarrowAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
                 new String[] {
                     "EEEE, d MMMM y G",
@@ -223,21 +220,9 @@
                 }
             },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y G",
-                    "d MMMM y G",
-                    "d.M.y G",
-                    "d.M.y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y G",
-                    "d MMMM y G",
-                    "d.M.y G",
-                    "d.M.y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.long.Eras",
                 new String[] {
                     "\u0434\u0430 \u043d\u0430\u0448\u0430\u0439 \u044d\u0440\u044b",
@@ -245,13 +230,7 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y G",
-                    "d MMMM y G",
-                    "d.M.y G",
-                    "d.M.y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.short.Eras",
                 new String[] {
                     "\u0434\u0430 \u043d.\u0435.",
@@ -259,52 +238,15 @@
                 }
             },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "\u0434\u0430 \u043f\u0430\u045e\u0434\u043d\u044f",
-                    "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u045e\u0434\u043d\u044f",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y GGGG",
-                    "d MMMM y GGGG",
-                    "d.M.y GGGG",
-                    "d.M.y G",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "\u043d\u0434",
-                    "\u043f\u043d",
-                    "\u0430\u045e",
-                    "\u0441\u0440",
-                    "\u0447\u0446",
-                    "\u043f\u0442",
-                    "\u0441\u0431",
-                }
-            },
+                sharedDayAbbreviations },
             { "roc.DayNames",
-                new String[] {
-                    "\u043d\u044f\u0434\u0437\u0435\u043b\u044f",
-                    "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a",
-                    "\u0430\u045e\u0442\u043e\u0440\u0430\u043a",
-                    "\u0441\u0435\u0440\u0430\u0434\u0430",
-                    "\u0447\u0430\u0446\u0432\u0435\u0440",
-                    "\u043f\u044f\u0442\u043d\u0456\u0446\u0430",
-                    "\u0441\u0443\u0431\u043e\u0442\u0430",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "\u043d",
-                    "\u043f",
-                    "\u0430",
-                    "\u0441",
-                    "\u0447",
-                    "\u043f",
-                    "\u0441",
-                }
-            },
+                sharedDayNarrows },
             { "roc.MonthAbbreviations",
                 new String[] {
                     "\u0441\u0442\u0443",
@@ -357,41 +299,15 @@
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "1-\u0448\u044b \u043a\u0432.",
-                    "2-\u0433\u0456 \u043a\u0432.",
-                    "3-\u0446\u0456 \u043a\u0432.",
-                    "4-\u0442\u044b \u043a\u0432.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1-\u0448\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                    "2-\u0433\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                    "3-\u0446\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                    "4-\u0442\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
-                }
-            },
+                sharedQuarterNames },
             { "roc.TimePatterns",
-                new String[] {
-                    "HH.mm.ss zzzz",
-                    "HH.mm.ss z",
-                    "HH.mm.ss",
-                    "HH.mm",
-                }
-            },
+                sharedTimePatterns },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "\u0440\u0430\u043d\u0456\u0446\u044b",
-                    "\u0432\u0435\u0447\u0430\u0440\u0430",
-                }
-            },
+                sharedAbbreviatedAmPmMarkers },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "\u0440\u0430\u043d.",
-                    "\u0432\u0435\u0447.",
-                }
-            },
+                sharedNarrowAmPmMarkers },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_bg.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_bg.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,23 +72,81 @@
 public class JavaTimeSupplementary_bg extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterAbbreviations = {
+            "1. \u0442\u0440\u0438\u043c.",
+            "2. \u0442\u0440\u0438\u043c.",
+            "3. \u0442\u0440\u0438\u043c.",
+            "4. \u0442\u0440\u0438\u043c.",
+        };
+
+        final String[] sharedQuarterNames = {
+            "1. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
+            "2. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
+            "3. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
+            "4. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "\u043f\u0440.\u043e\u0431.",
+            "\u0441\u043b.\u043e\u0431.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE, d MMMM y '\u0433'. GGGG",
+            "d MMMM y '\u0433'. GGGG",
+            "d.MM.y '\u0433'. GGGG",
+            "d.MM.yy GGGG",
+        };
+
+        final String[] sharedDayAbbreviations = {
+            "\u043d\u0434",
+            "\u043f\u043d",
+            "\u0432\u0442",
+            "\u0441\u0440",
+            "\u0447\u0442",
+            "\u043f\u0442",
+            "\u0441\u0431",
+        };
+
+        final String[] sharedDayNames = {
+            "\u043d\u0435\u0434\u0435\u043b\u044f",
+            "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
+            "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+            "\u0441\u0440\u044f\u0434\u0430",
+            "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a",
+            "\u043f\u0435\u0442\u044a\u043a",
+            "\u0441\u044a\u0431\u043e\u0442\u0430",
+        };
+
+        final String[] sharedDayNarrows = {
+            "\u043d",
+            "\u043f",
+            "\u0432",
+            "\u0441",
+            "\u0447",
+            "\u043f",
+            "\u0441",
+        };
+
+        final String[] sharedTimePatterns = {
+            "H:mm:ss zzzz",
+            "H:mm:ss z",
+            "H:mm:ss",
+            "H:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, d MMMM y '\u0433'. G",
+            "d MMMM y '\u0433'. G",
+            "d.MM.y '\u0433'. G",
+            "d.MM.yy G",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "1. \u0442\u0440\u0438\u043c.",
-                    "2. \u0442\u0440\u0438\u043c.",
-                    "3. \u0442\u0440\u0438\u043c.",
-                    "4. \u0442\u0440\u0438\u043c.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "QuarterNames",
-                new String[] {
-                    "1. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                    "2. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                    "3. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                    "4. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                }
-            },
+                sharedQuarterNames },
             { "calendarname.buddhist",
                 "\u0431\u0443\u0434\u0438\u0441\u0442\u043a\u0438 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440" },
             { "calendarname.gregorian",
@@ -124,52 +182,15 @@
             { "field.zone",
                 "\u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "\u043f\u0440.\u043e\u0431.",
-                    "\u0441\u043b.\u043e\u0431.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y '\u0433'. GGGG",
-                    "d MMMM y '\u0433'. GGGG",
-                    "d.MM.y '\u0433'. GGGG",
-                    "d.MM.yy GGGG",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "\u043d\u0434",
-                    "\u043f\u043d",
-                    "\u0432\u0442",
-                    "\u0441\u0440",
-                    "\u0447\u0442",
-                    "\u043f\u0442",
-                    "\u0441\u0431",
-                }
-            },
+                sharedDayAbbreviations },
             { "islamic.DayNames",
-                new String[] {
-                    "\u043d\u0435\u0434\u0435\u043b\u044f",
-                    "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
-                    "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
-                    "\u0441\u0440\u044f\u0434\u0430",
-                    "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a",
-                    "\u043f\u0435\u0442\u044a\u043a",
-                    "\u0441\u044a\u0431\u043e\u0442\u0430",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "\u043d",
-                    "\u043f",
-                    "\u0432",
-                    "\u0441",
-                    "\u0447",
-                    "\u043f",
-                    "\u0441",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.MonthNames",
                 new String[] {
                     "\u043c\u0443\u0445\u0430\u0440\u0430\u043c",
@@ -188,73 +209,21 @@
                 }
             },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "1. \u0442\u0440\u0438\u043c.",
-                    "2. \u0442\u0440\u0438\u043c.",
-                    "3. \u0442\u0440\u0438\u043c.",
-                    "4. \u0442\u0440\u0438\u043c.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                    "2. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                    "3. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                    "4. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                }
-            },
-            { "islamic.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.TimePatterns",
-                new String[] {
-                    "H:mm:ss zzzz",
-                    "H:mm:ss z",
-                    "H:mm:ss",
-                    "H:mm",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "\u043f\u0440.\u043e\u0431.",
-                    "\u0441\u043b.\u043e\u0431.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "\u043f\u0440.\u043e\u0431.",
-                    "\u0441\u043b.\u043e\u0431.",
-                }
-            },
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y '\u0433'. G",
-                    "d MMMM y '\u0433'. G",
-                    "d.MM.y '\u0433'. G",
-                    "d.MM.yy G",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y '\u0433'. G",
-                    "d MMMM y '\u0433'. G",
-                    "d.MM.y '\u0433'. G",
-                    "d.MM.yy G",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y '\u0433'. G",
-                    "d MMMM y '\u0433'. G",
-                    "d.MM.y '\u0433'. G",
-                    "d.MM.yy G",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.long.Eras",
                 new String[] {
                     "\u043f\u0440\u0435\u0434\u0438 \u0425\u0440\u0438\u0441\u0442\u0430",
@@ -262,13 +231,7 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y '\u0433'. G",
-                    "d MMMM y '\u0433'. G",
-                    "d.MM.y '\u0433'. G",
-                    "d.MM.yy G",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.short.Eras",
                 new String[] {
                     "\u043f\u0440.\u043d.\u0435.",
@@ -276,52 +239,15 @@
                 }
             },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "\u043f\u0440.\u043e\u0431.",
-                    "\u0441\u043b.\u043e\u0431.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y '\u0433'. GGGG",
-                    "d MMMM y '\u0433'. GGGG",
-                    "d.MM.y '\u0433'. GGGG",
-                    "d.MM.yy GGGG",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "\u043d\u0434",
-                    "\u043f\u043d",
-                    "\u0432\u0442",
-                    "\u0441\u0440",
-                    "\u0447\u0442",
-                    "\u043f\u0442",
-                    "\u0441\u0431",
-                }
-            },
+                sharedDayAbbreviations },
             { "roc.DayNames",
-                new String[] {
-                    "\u043d\u0435\u0434\u0435\u043b\u044f",
-                    "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
-                    "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
-                    "\u0441\u0440\u044f\u0434\u0430",
-                    "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a",
-                    "\u043f\u0435\u0442\u044a\u043a",
-                    "\u0441\u044a\u0431\u043e\u0442\u0430",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "\u043d",
-                    "\u043f",
-                    "\u0432",
-                    "\u0441",
-                    "\u0447",
-                    "\u043f",
-                    "\u0441",
-                }
-            },
+                sharedDayNarrows },
             { "roc.MonthAbbreviations",
                 new String[] {
                     "\u044f\u043d\u0443",
@@ -374,41 +300,15 @@
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "1. \u0442\u0440\u0438\u043c.",
-                    "2. \u0442\u0440\u0438\u043c.",
-                    "3. \u0442\u0440\u0438\u043c.",
-                    "4. \u0442\u0440\u0438\u043c.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                    "2. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                    "3. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                    "4. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
-                }
-            },
+                sharedQuarterNames },
             { "roc.TimePatterns",
-                new String[] {
-                    "H:mm:ss zzzz",
-                    "H:mm:ss z",
-                    "H:mm:ss",
-                    "H:mm",
-                }
-            },
+                sharedTimePatterns },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "\u043f\u0440.\u043e\u0431.",
-                    "\u0441\u043b.\u043e\u0431.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "\u043f\u0440.\u043e\u0431.",
-                    "\u0441\u043b.\u043e\u0431.",
-                }
-            },
+                sharedAmPmMarkers },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ca.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ca.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,23 +72,79 @@
 public class JavaTimeSupplementary_ca extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterAbbreviations = {
+            "1T",
+            "2T",
+            "3T",
+            "4T",
+        };
+
+        final String[] sharedQuarterNames = {
+            "1r trimestre",
+            "2n trimestre",
+            "3r trimestre",
+            "4t trimestre",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "a. m.",
+            "p. m.",
+        };
+
+        final String[] sharedDayAbbreviations = {
+            "dg.",
+            "dl.",
+            "dt.",
+            "dc.",
+            "dj.",
+            "dv.",
+            "ds.",
+        };
+
+        final String[] sharedDayNames = {
+            "diumenge",
+            "dilluns",
+            "dimarts",
+            "dimecres",
+            "dijous",
+            "divendres",
+            "dissabte",
+        };
+
+        final String[] sharedDayNarrows = {
+            "dg",
+            "dl",
+            "dt",
+            "dc",
+            "dj",
+            "dv",
+            "ds",
+        };
+
+        final String[] sharedTimePatterns = {
+            "H:mm:ss zzzz",
+            "H:mm:ss z",
+            "H:mm:ss",
+            "H:mm",
+        };
+
+        final String[] sharedJavaTimeLongEras = {
+            "BC",
+            "eB",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE d MMMM 'de' y G",
+            "d MMMM 'de' y G",
+            "d/M/y G",
+            "d/M/yy GGGGG",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "1T",
-                    "2T",
-                    "3T",
-                    "4T",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "QuarterNames",
-                new String[] {
-                    "1r trimestre",
-                    "2n trimestre",
-                    "3r trimestre",
-                    "4t trimestre",
-                }
-            },
+                sharedQuarterNames },
             { "calendarname.buddhist",
                 "calendari budista" },
             { "calendarname.gregorian",
@@ -124,11 +180,7 @@
             { "field.zone",
                 "fus horari" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
                 new String[] {
                     "EEEE d MMMM 'de' y GGGG",
@@ -138,82 +190,21 @@
                 }
             },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "dg.",
-                    "dl.",
-                    "dt.",
-                    "dc.",
-                    "dj.",
-                    "dv.",
-                    "ds.",
-                }
-            },
+                sharedDayAbbreviations },
             { "islamic.DayNames",
-                new String[] {
-                    "diumenge",
-                    "dilluns",
-                    "dimarts",
-                    "dimecres",
-                    "dijous",
-                    "divendres",
-                    "dissabte",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "dg",
-                    "dl",
-                    "dt",
-                    "dc",
-                    "dj",
-                    "dv",
-                    "ds",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "1T",
-                    "2T",
-                    "3T",
-                    "4T",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1r trimestre",
-                    "2n trimestre",
-                    "3r trimestre",
-                    "4t trimestre",
-                }
-            },
-            { "islamic.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.TimePatterns",
-                new String[] {
-                    "H:mm:ss zzzz",
-                    "H:mm:ss z",
-                    "H:mm:ss",
-                    "H:mm",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
                 new String[] {
                     "EEEE, dd MMMM y G",
@@ -223,33 +214,13 @@
                 }
             },
             { "java.time.buddhist.long.Eras",
-                new String[] {
-                    "BC",
-                    "eB",
-                }
-            },
+                sharedJavaTimeLongEras },
             { "java.time.buddhist.short.Eras",
-                new String[] {
-                    "BC",
-                    "eB",
-                }
-            },
+                sharedJavaTimeLongEras },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM 'de' y G",
-                    "d MMMM 'de' y G",
-                    "d/M/y G",
-                    "d/M/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM 'de' y G",
-                    "d MMMM 'de' y G",
-                    "d/M/y G",
-                    "d/M/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.long.Eras",
                 new String[] {
                     "abans de Crist",
@@ -271,11 +242,7 @@
                 }
             },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
                 new String[] {
                     "EEEE d MMMM 'de' y GGGG",
@@ -285,38 +252,11 @@
                 }
             },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "dg.",
-                    "dl.",
-                    "dt.",
-                    "dc.",
-                    "dj.",
-                    "dv.",
-                    "ds.",
-                }
-            },
+                sharedDayAbbreviations },
             { "roc.DayNames",
-                new String[] {
-                    "diumenge",
-                    "dilluns",
-                    "dimarts",
-                    "dimecres",
-                    "dijous",
-                    "divendres",
-                    "dissabte",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "dg",
-                    "dl",
-                    "dt",
-                    "dc",
-                    "dj",
-                    "dv",
-                    "ds",
-                }
-            },
+                sharedDayNarrows },
             { "roc.MonthAbbreviations",
                 new String[] {
                     "gen.",
@@ -369,41 +309,15 @@
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "1T",
-                    "2T",
-                    "3T",
-                    "4T",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1r trimestre",
-                    "2n trimestre",
-                    "3r trimestre",
-                    "4t trimestre",
-                }
-            },
+                sharedQuarterNames },
             { "roc.TimePatterns",
-                new String[] {
-                    "H:mm:ss zzzz",
-                    "H:mm:ss z",
-                    "H:mm:ss",
-                    "H:mm",
-                }
-            },
+                sharedTimePatterns },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_cs.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_cs.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,15 +72,84 @@
 public class JavaTimeSupplementary_cs extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterNames = {
+            "1. \u010dtvrtlet\u00ed",
+            "2. \u010dtvrtlet\u00ed",
+            "3. \u010dtvrtlet\u00ed",
+            "4. \u010dtvrtlet\u00ed",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "dop.",
+            "odp.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE d. MMMM y GGGG",
+            "d. MMMM y GGGG",
+            "d. M. y GGGG",
+            "dd.MM.yy G",
+        };
+
+        final String[] sharedDayAbbreviations = {
+            "ne",
+            "po",
+            "\u00fat",
+            "st",
+            "\u010dt",
+            "p\u00e1",
+            "so",
+        };
+
+        final String[] sharedDayNames = {
+            "ned\u011ble",
+            "pond\u011bl\u00ed",
+            "\u00fater\u00fd",
+            "st\u0159eda",
+            "\u010dtvrtek",
+            "p\u00e1tek",
+            "sobota",
+        };
+
+        final String[] sharedDayNarrows = {
+            "N",
+            "P",
+            "\u00da",
+            "S",
+            "\u010c",
+            "P",
+            "S",
+        };
+
+        final String[] sharedQuarterAbbreviations = {
+            "Q1",
+            "Q2",
+            "Q3",
+            "Q4",
+        };
+
+        final String[] sharedTimePatterns = {
+            "H:mm:ss zzzz",
+            "H:mm:ss z",
+            "H:mm:ss",
+            "H:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE d. MMMM y G",
+            "d. MMMM y G",
+            "d. M. y G",
+            "dd.MM.yy GGGGG",
+        };
+
+        final String[] sharedEras = {
+            "P\u0159ed R. O. C.",
+            "",
+        };
+
         return new Object[][] {
             { "QuarterNames",
-                new String[] {
-                    "1. \u010dtvrtlet\u00ed",
-                    "2. \u010dtvrtlet\u00ed",
-                    "3. \u010dtvrtlet\u00ed",
-                    "4. \u010dtvrtlet\u00ed",
-                }
-            },
+                sharedQuarterNames },
             { "calendarname.buddhist",
                 "Buddhistick\u00fd kalend\u00e1\u0159" },
             { "calendarname.gregorian",
@@ -116,134 +185,27 @@
             { "field.zone",
                 "\u010dasov\u00e9 p\u00e1smo" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "dop.",
-                    "odp.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y GGGG",
-                    "d. MMMM y GGGG",
-                    "d. M. y GGGG",
-                    "dd.MM.yy G",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "ne",
-                    "po",
-                    "\u00fat",
-                    "st",
-                    "\u010dt",
-                    "p\u00e1",
-                    "so",
-                }
-            },
+                sharedDayAbbreviations },
             { "islamic.DayNames",
-                new String[] {
-                    "ned\u011ble",
-                    "pond\u011bl\u00ed",
-                    "\u00fater\u00fd",
-                    "st\u0159eda",
-                    "\u010dtvrtek",
-                    "p\u00e1tek",
-                    "sobota",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "N",
-                    "P",
-                    "\u00da",
-                    "S",
-                    "\u010c",
-                    "P",
-                    "S",
-                }
-            },
-            { "islamic.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1. \u010dtvrtlet\u00ed",
-                    "2. \u010dtvrtlet\u00ed",
-                    "3. \u010dtvrtlet\u00ed",
-                    "4. \u010dtvrtlet\u00ed",
-                }
-            },
-            { "islamic.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.TimePatterns",
-                new String[] {
-                    "H:mm:ss zzzz",
-                    "H:mm:ss z",
-                    "H:mm:ss",
-                    "H:mm",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "dop.",
-                    "odp.",
-                }
-            },
-            { "islamic.long.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "dop.",
-                    "odp.",
-                }
-            },
-            { "islamic.narrow.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
-            { "islamic.short.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y G",
-                    "d. MMMM y G",
-                    "d. M. y G",
-                    "dd.MM.yy GGGGG",
-                }
-            },
-            { "java.time.buddhist.long.Eras",
-                new String[] {
-                    "BC",
-                    "BE",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.buddhist.short.Eras",
                 new String[] {
                     "BC",
@@ -251,13 +213,7 @@
                 }
             },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y G",
-                    "d. MMMM y G",
-                    "d. M. y G",
-                    "dd.MM.yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, d. MMMM y G",
@@ -273,13 +229,7 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y G",
-                    "d. MMMM y G",
-                    "d. M. y G",
-                    "dd.MM.yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.short.Eras",
                 new String[] {
                     "p\u0159.Kr.",
@@ -287,58 +237,17 @@
                 }
             },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "dop.",
-                    "odp.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y GGGG",
-                    "d. MMMM y GGGG",
-                    "d. M. y GGGG",
-                    "dd.MM.yy G",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "ne",
-                    "po",
-                    "\u00fat",
-                    "st",
-                    "\u010dt",
-                    "p\u00e1",
-                    "so",
-                }
-            },
+                sharedDayAbbreviations },
             { "roc.DayNames",
-                new String[] {
-                    "ned\u011ble",
-                    "pond\u011bl\u00ed",
-                    "\u00fater\u00fd",
-                    "st\u0159eda",
-                    "\u010dtvrtek",
-                    "p\u00e1tek",
-                    "sobota",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "N",
-                    "P",
-                    "\u00da",
-                    "S",
-                    "\u010c",
-                    "P",
-                    "S",
-                }
-            },
+                sharedDayNarrows },
             { "roc.Eras",
-                new String[] {
-                    "P\u0159ed R. O. C.",
-                    "",
-                }
-            },
+                sharedEras },
             { "roc.MonthAbbreviations",
                 new String[] {
                     "led",
@@ -373,77 +282,22 @@
                     "",
                 }
             },
-            { "roc.MonthNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                    "5",
-                    "6",
-                    "7",
-                    "8",
-                    "9",
-                    "10",
-                    "11",
-                    "12",
-                    "",
-                }
-            },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1. \u010dtvrtlet\u00ed",
-                    "2. \u010dtvrtlet\u00ed",
-                    "3. \u010dtvrtlet\u00ed",
-                    "4. \u010dtvrtlet\u00ed",
-                }
-            },
+                sharedQuarterNames },
             { "roc.TimePatterns",
-                new String[] {
-                    "H:mm:ss zzzz",
-                    "H:mm:ss z",
-                    "H:mm:ss",
-                    "H:mm",
-                }
-            },
+                sharedTimePatterns },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "dop.",
-                    "odp.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.long.Eras",
-                new String[] {
-                    "P\u0159ed R. O. C.",
-                    "",
-                }
-            },
+                sharedEras },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "dop.",
-                    "odp.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.narrow.Eras",
-                new String[] {
-                    "P\u0159ed R. O. C.",
-                    "",
-                }
-            },
+                sharedEras },
             { "roc.short.Eras",
-                new String[] {
-                    "P\u0159ed R. O. C.",
-                    "",
-                }
-            },
+                sharedEras },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_da.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_da.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,27 +72,91 @@
 public class JavaTimeSupplementary_da extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
-        final String[] javatimelongEras = {
+        final String[] sharedQuarterAbbreviations = {
+            "1. kvt.",
+            "2. kvt.",
+            "3. kvt.",
+            "4. kvt.",
+        };
+
+        final String[] sharedQuarterNames = {
+            "1. kvartal",
+            "2. kvartal",
+            "3. kvartal",
+            "4. kvartal",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE d. MMMM y GGGG",
+            "d. MMMM y GGGG",
+            "d. MMM y GGGG",
+            "d/M/y",
+        };
+
+        final String[] sharedDayAbbreviations = {
+            "s\u00f8n.",
+            "man.",
+            "tir.",
+            "ons.",
+            "tor.",
+            "fre.",
+            "l\u00f8r.",
+        };
+
+        final String[] sharedDayNames = {
+            "s\u00f8ndag",
+            "mandag",
+            "tirsdag",
+            "onsdag",
+            "torsdag",
+            "fredag",
+            "l\u00f8rdag",
+        };
+
+        final String[] sharedDayNarrows = {
+            "S",
+            "M",
+            "T",
+            "O",
+            "T",
+            "F",
+            "L",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH.mm.ss zzzz",
+            "HH.mm.ss z",
+            "HH.mm.ss",
+            "HH.mm",
+        };
+
+        final String[] sharedNarrowAmPmMarkers = {
+            "a",
+            "p",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE d. MMMM y G",
+            "d. MMMM y G",
+            "d. MMM y G",
+            "d/M/y",
+        };
+
+        final String[] sharedJavaTimeLongEras = {
             "f.Kr.",
             "e.Kr.",
         };
+
+        final String[] sharedEras = {
+            "Before R.O.C.",
+            "Minguo",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "1. kvt.",
-                    "2. kvt.",
-                    "3. kvt.",
-                    "4. kvt.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "QuarterNames",
-                new String[] {
-                    "1. kvartal",
-                    "2. kvartal",
-                    "3. kvartal",
-                    "4. kvartal",
-                }
-            },
+                sharedQuarterNames },
             { "calendarname.buddhist",
                 "buddhistisk kalender" },
             { "calendarname.gregorian",
@@ -136,122 +200,23 @@
                 }
             },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y GGGG",
-                    "d. MMMM y GGGG",
-                    "d. MMM y GGGG",
-                    "d/M/y",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "s\u00f8n.",
-                    "man.",
-                    "tir.",
-                    "ons.",
-                    "tor.",
-                    "fre.",
-                    "l\u00f8r.",
-                }
-            },
+                sharedDayAbbreviations },
             { "islamic.DayNames",
-                new String[] {
-                    "s\u00f8ndag",
-                    "mandag",
-                    "tirsdag",
-                    "onsdag",
-                    "torsdag",
-                    "fredag",
-                    "l\u00f8rdag",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "S",
-                    "M",
-                    "T",
-                    "O",
-                    "T",
-                    "F",
-                    "L",
-                }
-            },
-            { "islamic.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "1. kvt.",
-                    "2. kvt.",
-                    "3. kvt.",
-                    "4. kvt.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1. kvartal",
-                    "2. kvartal",
-                    "3. kvartal",
-                    "4. kvartal",
-                }
-            },
-            { "islamic.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.TimePatterns",
-                new String[] {
-                    "HH.mm.ss zzzz",
-                    "HH.mm.ss z",
-                    "HH.mm.ss",
-                    "HH.mm",
-                }
-            },
-            { "islamic.long.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "a",
-                    "p",
-                }
-            },
-            { "islamic.narrow.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
-            { "islamic.short.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedNarrowAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y G",
-                    "d. MMMM y G",
-                    "d. MMM y G",
-                    "d/M/y",
-                }
-            },
-            { "java.time.buddhist.long.Eras",
-                new String[] {
-                    "BC",
-                    "BE",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.buddhist.short.Eras",
                 new String[] {
                     "BC",
@@ -259,86 +224,25 @@
                 }
             },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y G",
-                    "d. MMMM y G",
-                    "d. MMM y G",
-                    "d/M/y",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y G",
-                    "d. MMMM y G",
-                    "d. MMM y G",
-                    "d/M/y",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.long.Eras",
-                javatimelongEras },
+                sharedJavaTimeLongEras },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y G",
-                    "d. MMMM y G",
-                    "d. MMM y G",
-                    "d/M/y",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.short.Eras",
-                javatimelongEras },
-            { "roc.AmPmMarkers",
-                new String[] {
-                    "AM",
-                    "PM",
-                }
-            },
+                sharedJavaTimeLongEras },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE d. MMMM y GGGG",
-                    "d. MMMM y GGGG",
-                    "d. MMM y GGGG",
-                    "d/M/y",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "s\u00f8n.",
-                    "man.",
-                    "tir.",
-                    "ons.",
-                    "tor.",
-                    "fre.",
-                    "l\u00f8r.",
-                }
-            },
+                sharedDayAbbreviations },
             { "roc.DayNames",
-                new String[] {
-                    "s\u00f8ndag",
-                    "mandag",
-                    "tirsdag",
-                    "onsdag",
-                    "torsdag",
-                    "fredag",
-                    "l\u00f8rdag",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "S",
-                    "M",
-                    "T",
-                    "O",
-                    "T",
-                    "F",
-                    "L",
-                }
-            },
+                sharedDayNarrows },
             { "roc.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
             { "roc.MonthAbbreviations",
                 new String[] {
                     "jan.",
@@ -391,53 +295,19 @@
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "1. kvt.",
-                    "2. kvt.",
-                    "3. kvt.",
-                    "4. kvt.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1. kvartal",
-                    "2. kvartal",
-                    "3. kvartal",
-                    "4. kvartal",
-                }
-            },
+                sharedQuarterNames },
             { "roc.TimePatterns",
-                new String[] {
-                    "HH.mm.ss zzzz",
-                    "HH.mm.ss z",
-                    "HH.mm.ss",
-                    "HH.mm",
-                }
-            },
+                sharedTimePatterns },
             { "roc.long.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "a",
-                    "p",
-                }
-            },
+                sharedNarrowAmPmMarkers },
             { "roc.narrow.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
             { "roc.short.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,19 +72,87 @@
 public class JavaTimeSupplementary_de extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
-        final String[] javatimelongEras = {
+        final String[] sharedQuarterNames = {
+            "1. Quartal",
+            "2. Quartal",
+            "3. Quartal",
+            "4. Quartal",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "vorm.",
+            "nachm.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE, d. MMMM y GGGG",
+            "d. MMMM y GGGG",
+            "dd.MM.y GGGG",
+            "dd.MM.yy G",
+        };
+
+        final String[] sharedDayAbbreviations = {
+            "So.",
+            "Mo.",
+            "Di.",
+            "Mi.",
+            "Do.",
+            "Fr.",
+            "Sa.",
+        };
+
+        final String[] sharedDayNames = {
+            "Sonntag",
+            "Montag",
+            "Dienstag",
+            "Mittwoch",
+            "Donnerstag",
+            "Freitag",
+            "Samstag",
+        };
+
+        final String[] sharedDayNarrows = {
+            "S",
+            "M",
+            "D",
+            "M",
+            "D",
+            "F",
+            "S",
+        };
+
+        final String[] sharedQuarterAbbreviations = {
+            "Q1",
+            "Q2",
+            "Q3",
+            "Q4",
+        };
+
+        final String[] sharedNarrowAmPmMarkers = {
+            "vm.",
+            "nm.",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, d. MMMM y G",
+            "d. MMMM y G",
+            "dd.MM.y G",
+            "dd.MM.yy GGGGG",
+        };
+
+        final String[] sharedJavaTimeLongEras = {
             "v. Chr.",
             "n. Chr.",
         };
+
+        final String[] sharedEras = {
+            "Before R.O.C.",
+            "Minguo",
+        };
+
         return new Object[][] {
             { "QuarterNames",
-                new String[] {
-                    "1. Quartal",
-                    "2. Quartal",
-                    "3. Quartal",
-                    "4. Quartal",
-                }
-            },
+                sharedQuarterNames },
             { "calendarname.buddhist",
                 "Buddhistischer Kalender" },
             { "calendarname.gregorian",
@@ -120,134 +188,25 @@
             { "field.zone",
                 "Zeitzone" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "vorm.",
-                    "nachm.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d. MMMM y GGGG",
-                    "d. MMMM y GGGG",
-                    "dd.MM.y GGGG",
-                    "dd.MM.yy G",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "So.",
-                    "Mo.",
-                    "Di.",
-                    "Mi.",
-                    "Do.",
-                    "Fr.",
-                    "Sa.",
-                }
-            },
+                sharedDayAbbreviations },
             { "islamic.DayNames",
-                new String[] {
-                    "Sonntag",
-                    "Montag",
-                    "Dienstag",
-                    "Mittwoch",
-                    "Donnerstag",
-                    "Freitag",
-                    "Samstag",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "S",
-                    "M",
-                    "D",
-                    "M",
-                    "D",
-                    "F",
-                    "S",
-                }
-            },
-            { "islamic.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1. Quartal",
-                    "2. Quartal",
-                    "3. Quartal",
-                    "4. Quartal",
-                }
-            },
-            { "islamic.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
-            { "islamic.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "vorm.",
-                    "nachm.",
-                }
-            },
-            { "islamic.long.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "vm.",
-                    "nm.",
-                }
-            },
-            { "islamic.narrow.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
-            { "islamic.short.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedNarrowAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE, d. MMMM y G",
-                    "d. MMMM y G",
-                    "dd.MM.y G",
-                    "dd.MM.yy GGGGG",
-                }
-            },
-            { "java.time.buddhist.long.Eras",
-                new String[] {
-                    "BC",
-                    "BE",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.buddhist.short.Eras",
                 new String[] {
                     "BC",
@@ -255,86 +214,27 @@
                 }
             },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d. MMMM y G",
-                    "d. MMMM y G",
-                    "dd.MM.y G",
-                    "dd.MM.yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
-                new String[] {
-                    "EEEE, d. MMMM y G",
-                    "d. MMMM y G",
-                    "dd.MM.y G",
-                    "dd.MM.yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.long.Eras",
-                javatimelongEras },
+                sharedJavaTimeLongEras },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE, d. MMMM y G",
-                    "d. MMMM y G",
-                    "dd.MM.y G",
-                    "dd.MM.yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.short.Eras",
-                javatimelongEras },
+                sharedJavaTimeLongEras },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "vorm.",
-                    "nachm.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE, d. MMMM y GGGG",
-                    "d. MMMM y GGGG",
-                    "dd.MM.y GGGG",
-                    "dd.MM.yy G",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "So.",
-                    "Mo.",
-                    "Di.",
-                    "Mi.",
-                    "Do.",
-                    "Fr.",
-                    "Sa.",
-                }
-            },
+                sharedDayAbbreviations },
             { "roc.DayNames",
-                new String[] {
-                    "Sonntag",
-                    "Montag",
-                    "Dienstag",
-                    "Mittwoch",
-                    "Donnerstag",
-                    "Freitag",
-                    "Samstag",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "S",
-                    "M",
-                    "D",
-                    "M",
-                    "D",
-                    "F",
-                    "S",
-                }
-            },
+                sharedDayNarrows },
             { "roc.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
             { "roc.MonthAbbreviations",
                 new String[] {
                     "Jan.",
@@ -387,59 +287,19 @@
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1. Quartal",
-                    "2. Quartal",
-                    "3. Quartal",
-                    "4. Quartal",
-                }
-            },
-            { "roc.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedQuarterNames },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "vorm.",
-                    "nachm.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.long.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "vm.",
-                    "nm.",
-                }
-            },
+                sharedNarrowAmPmMarkers },
             { "roc.narrow.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
             { "roc.short.Eras",
-                new String[] {
-                    "Before R.O.C.",
-                    "Minguo",
-                }
-            },
+                sharedEras },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de_AT.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de_AT.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_el.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_el.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,23 +72,91 @@
 public class JavaTimeSupplementary_el extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterAbbreviations = {
+            "\u03a41",
+            "\u03a42",
+            "\u03a43",
+            "\u03a44",
+        };
+
+        final String[] sharedQuarterNames = {
+            "1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
+            "2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
+            "3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
+            "4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "\u03c0.\u03bc.",
+            "\u03bc.\u03bc.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE, d MMMM y GGGG",
+            "d MMMM y GGGG",
+            "d MMM y GGGG",
+            "d/M/y G",
+        };
+
+        final String[] sharedDayAbbreviations = {
+            "\u039a\u03c5\u03c1",
+            "\u0394\u03b5\u03c5",
+            "\u03a4\u03c1\u03af",
+            "\u03a4\u03b5\u03c4",
+            "\u03a0\u03ad\u03bc",
+            "\u03a0\u03b1\u03c1",
+            "\u03a3\u03ac\u03b2",
+        };
+
+        final String[] sharedDayNames = {
+            "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
+            "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
+            "\u03a4\u03c1\u03af\u03c4\u03b7",
+            "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
+            "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
+            "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
+            "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf",
+        };
+
+        final String[] sharedDayNarrows = {
+            "\u039a",
+            "\u0394",
+            "\u03a4",
+            "\u03a4",
+            "\u03a0",
+            "\u03a0",
+            "\u03a3",
+        };
+
+        final String[] sharedTimePatterns = {
+            "h:mm:ss a zzzz",
+            "h:mm:ss a z",
+            "h:mm:ss a",
+            "h:mm a",
+        };
+
+        final String[] sharedNarrowAmPmMarkers = {
+            "\u03c0\u03bc",
+            "\u03bc\u03bc",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, d MMMM y G",
+            "d MMMM y G",
+            "d MMM y G",
+            "d/M/y GGGGG",
+        };
+
+        final String[] sharedEras = {
+            "\u03a0\u03c1\u03b9\u03bd R.O.C.",
+            "R.O.C.",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "\u03a41",
-                    "\u03a42",
-                    "\u03a43",
-                    "\u03a44",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "QuarterNames",
-                new String[] {
-                    "1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                    "2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                    "3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                    "4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                }
-            },
+                sharedQuarterNames },
             { "calendarname.buddhist",
                 "\u0392\u03bf\u03c5\u03b4\u03b9\u03c3\u03c4\u03b9\u03ba\u03cc \u03b7\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03bf" },
             { "calendarname.gregorian",
@@ -124,110 +192,27 @@
             { "field.zone",
                 "\u03b6\u03ce\u03bd\u03b7 \u03ce\u03c1\u03b1\u03c2" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "\u03c0.\u03bc.",
-                    "\u03bc.\u03bc.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y GGGG",
-                    "d MMMM y GGGG",
-                    "d MMM y GGGG",
-                    "d/M/y G",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "\u039a\u03c5\u03c1",
-                    "\u0394\u03b5\u03c5",
-                    "\u03a4\u03c1\u03af",
-                    "\u03a4\u03b5\u03c4",
-                    "\u03a0\u03ad\u03bc",
-                    "\u03a0\u03b1\u03c1",
-                    "\u03a3\u03ac\u03b2",
-                }
-            },
+                sharedDayAbbreviations },
             { "islamic.DayNames",
-                new String[] {
-                    "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
-                    "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
-                    "\u03a4\u03c1\u03af\u03c4\u03b7",
-                    "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
-                    "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
-                    "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
-                    "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "\u039a",
-                    "\u0394",
-                    "\u03a4",
-                    "\u03a4",
-                    "\u03a0",
-                    "\u03a0",
-                    "\u03a3",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "\u03a41",
-                    "\u03a42",
-                    "\u03a43",
-                    "\u03a44",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                    "2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                    "3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                    "4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                }
-            },
-            { "islamic.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "\u03c0.\u03bc.",
-                    "\u03bc.\u03bc.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "\u03c0\u03bc",
-                    "\u03bc\u03bc",
-                }
-            },
+                sharedNarrowAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y G",
-                    "d MMMM y G",
-                    "d MMM y G",
-                    "d/M/y GGGGG",
-                }
-            },
-            { "java.time.buddhist.long.Eras",
-                new String[] {
-                    "BC",
-                    "BE",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.buddhist.short.Eras",
                 new String[] {
                     "BC",
@@ -235,13 +220,7 @@
                 }
             },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y G",
-                    "d MMMM y G",
-                    "d MMM y G",
-                    "d/M/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, d MMMM, y G",
@@ -257,13 +236,7 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y G",
-                    "d MMMM y G",
-                    "d MMM y G",
-                    "d/M/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.short.Eras",
                 new String[] {
                     "\u03c0.\u03a7.",
@@ -271,58 +244,17 @@
                 }
             },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "\u03c0.\u03bc.",
-                    "\u03bc.\u03bc.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE, d MMMM y GGGG",
-                    "d MMMM y GGGG",
-                    "d MMM y GGGG",
-                    "d/M/y G",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "\u039a\u03c5\u03c1",
-                    "\u0394\u03b5\u03c5",
-                    "\u03a4\u03c1\u03af",
-                    "\u03a4\u03b5\u03c4",
-                    "\u03a0\u03ad\u03bc",
-                    "\u03a0\u03b1\u03c1",
-                    "\u03a3\u03ac\u03b2",
-                }
-            },
+                sharedDayAbbreviations },
             { "roc.DayNames",
-                new String[] {
-                    "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
-                    "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
-                    "\u03a4\u03c1\u03af\u03c4\u03b7",
-                    "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
-                    "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
-                    "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
-                    "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "\u039a",
-                    "\u0394",
-                    "\u03a4",
-                    "\u03a4",
-                    "\u03a0",
-                    "\u03a0",
-                    "\u03a3",
-                }
-            },
+                sharedDayNarrows },
             { "roc.Eras",
-                new String[] {
-                    "\u03a0\u03c1\u03b9\u03bd R.O.C.",
-                    "R.O.C.",
-                }
-            },
+                sharedEras },
             { "roc.MonthAbbreviations",
                 new String[] {
                     "\u0399\u03b1\u03bd",
@@ -375,59 +307,21 @@
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "\u03a41",
-                    "\u03a42",
-                    "\u03a43",
-                    "\u03a44",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                    "2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                    "3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                    "4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
-                }
-            },
+                sharedQuarterNames },
             { "roc.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "\u03c0.\u03bc.",
-                    "\u03bc.\u03bc.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.long.Eras",
-                new String[] {
-                    "\u03a0\u03c1\u03b9\u03bd R.O.C.",
-                    "R.O.C.",
-                }
-            },
+                sharedEras },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "\u03c0\u03bc",
-                    "\u03bc\u03bc",
-                }
-            },
+                sharedNarrowAmPmMarkers },
             { "roc.narrow.Eras",
-                new String[] {
-                    "\u03a0\u03c1\u03b9\u03bd R.O.C.",
-                    "R.O.C.",
-                }
-            },
+                sharedEras },
             { "roc.short.Eras",
-                new String[] {
-                    "\u03a0\u03c1\u03b9\u03bd R.O.C.",
-                    "R.O.C.",
-                }
-            },
+                sharedEras },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_AU.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_AU.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,123 +72,100 @@
 public class JavaTimeSupplementary_en_AU extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "am",
+            "pm",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE, d MMMM y GGGG",
+            "d MMMM y GGGG",
+            "d MMM y GGGG",
+            "dd/MM/y G",
+        };
+
+        final String[] sharedDayAbbreviations = {
+            "Sun.",
+            "Mon.",
+            "Tue.",
+            "Wed.",
+            "Thu.",
+            "Fri.",
+            "Sat.",
+        };
+
+        final String[] sharedDayNarrows = {
+            "Su.",
+            "M.",
+            "Tu.",
+            "W.",
+            "Th.",
+            "F.",
+            "Sa.",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, d MMMM y G",
+            "d MMMM y G",
+            "d MMM y G",
+            "dd/MM/y GGGGG",
+        };
+
+        final String[] sharedMonthNarrows = {
+            "Jan.",
+            "Feb.",
+            "Mar.",
+            "Apr.",
+            "May",
+            "Jun.",
+            "Jul.",
+            "Aug.",
+            "Sep.",
+            "Oct.",
+            "Nov.",
+            "Dec.",
+            "",
+        };
+
         return new Object[][] {
             { "field.dayperiod",
                 "am/pm" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
+                sharedAmPmMarkers },
+            { "islamic.DatePatterns",
+                sharedDatePatterns },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "Sun.",
-                    "Mon.",
-                    "Tue.",
-                    "Wed.",
-                    "Thu.",
-                    "Fri.",
-                    "Sat.",
-                }
-            },
+                sharedDayAbbreviations },
             { "islamic.DayNarrows",
-                new String[] {
-                    "Su.",
-                    "M.",
-                    "Tu.",
-                    "W.",
-                    "Th.",
-                    "F.",
-                    "Sa.",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
+                sharedAmPmMarkers },
+            { "java.time.buddhist.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.islamic.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.japanese.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "Sun.",
-                    "Mon.",
-                    "Tue.",
-                    "Wed.",
-                    "Thu.",
-                    "Fri.",
-                    "Sat.",
-                }
-            },
+                sharedDayAbbreviations },
             { "roc.DayNarrows",
-                new String[] {
-                    "Su.",
-                    "M.",
-                    "Tu.",
-                    "W.",
-                    "Th.",
-                    "F.",
-                    "Sa.",
-                }
-            },
+                sharedDayNarrows },
             { "roc.MonthAbbreviations",
-                new String[] {
-                    "Jan.",
-                    "Feb.",
-                    "Mar.",
-                    "Apr.",
-                    "May",
-                    "Jun.",
-                    "Jul.",
-                    "Aug.",
-                    "Sep.",
-                    "Oct.",
-                    "Nov.",
-                    "Dec.",
-                    "",
-                }
-            },
+                sharedMonthNarrows },
             { "roc.MonthNarrows",
-                new String[] {
-                    "Jan.",
-                    "Feb.",
-                    "Mar.",
-                    "Apr.",
-                    "May",
-                    "Jun.",
-                    "Jul.",
-                    "Aug.",
-                    "Sep.",
-                    "Oct.",
-                    "Nov.",
-                    "Dec.",
-                    "",
-                }
-            },
+                sharedMonthNarrows },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
+                sharedAmPmMarkers },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_CA.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_CA.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,55 +72,33 @@
 public class JavaTimeSupplementary_en_CA extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedDatePatterns = {
+            "EEEE, MMMM d, y GGGG",
+            "MMMM d, y GGGG",
+            "MMM d, y GGGG",
+            "G y-MM-dd",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, MMMM d, y G",
+            "MMMM d, y G",
+            "MMM d, y G",
+            "GGGGG y-MM-dd",
+        };
+
         return new Object[][] {
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y GGGG",
-                    "MMMM d, y GGGG",
-                    "MMM d, y GGGG",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y G",
-                    "MMMM d, y G",
-                    "MMM d, y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y G",
-                    "MMMM d, y G",
-                    "MMM d, y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y G",
-                    "MMMM d, y G",
-                    "MMM d, y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y G",
-                    "MMMM d, y G",
-                    "MMM d, y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE, MMMM d, y GGGG",
-                    "MMMM d, y GGGG",
-                    "MMM d, y GGGG",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_GB.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_GB.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,61 +72,59 @@
 public class JavaTimeSupplementary_en_GB extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "am",
+            "pm",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE, d MMMM y GGGG",
+            "d MMMM y GGGG",
+            "d MMM y GGGG",
+            "dd/MM/y G",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, d MMMM y G",
+            "d MMMM y G",
+            "d MMM y G",
+            "dd/MM/y GGGGG",
+        };
+
         return new Object[][] {
             { "field.dayperiod",
                 "am/pm" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
+                sharedAmPmMarkers },
+            { "islamic.DatePatterns",
+                sharedDatePatterns },
             { "islamic.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
-            { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "a",
-                    "p",
-                }
-            },
+                sharedAmPmMarkers },
+            { "java.time.buddhist.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.islamic.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.japanese.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
             { "roc.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedTimePatterns },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "am",
-                    "pm",
-                }
-            },
-            { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "a",
-                    "p",
-                }
-            },
+                sharedAmPmMarkers },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IE.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IE.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,45 +72,43 @@
 public class JavaTimeSupplementary_en_IE extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE d MMMM y GGGG",
+            "GGGG y MMMM d",
+            "GGGG y MMM d",
+            "G y-MM-dd",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE d MMMM y G",
+            "G y MMMM d",
+            "G y MMM d",
+            "GGGGG y-MM-dd",
+        };
+
         return new Object[][] {
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "a.m.",
-                    "p.m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y GGGG",
-                    "GGGG y MMMM d",
-                    "GGGG y MMM d",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedTimePatterns },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y G",
-                    "G y MMMM d",
-                    "G y MMM d",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y G",
-                    "G y MMMM d",
-                    "G y MMM d",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE d MMMM y G",
@@ -120,35 +118,13 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y G",
-                    "G y MMMM d",
-                    "G y MMM d",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "a.m.",
-                    "p.m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y GGGG",
-                    "GGGG y MMMM d",
-                    "GGGG y MMM d",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "roc.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedTimePatterns },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IN.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IN.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,31 +72,27 @@
 public class JavaTimeSupplementary_en_IN extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedDatePatterns = {
+            "EEEE d MMMM y GGGG",
+            "GGGG y MMMM d",
+            "dd-MMM-y GGGG",
+            "G y-MM-dd",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE d MMMM y G",
+            "G y MMMM d",
+            "dd-MMM-y G",
+            "GGGGG y-MM-dd",
+        };
+
         return new Object[][] {
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y GGGG",
-                    "GGGG y MMMM d",
-                    "dd-MMM-y GGGG",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y G",
-                    "G y MMMM d",
-                    "dd-MMM-y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y G",
-                    "G y MMMM d",
-                    "dd-MMM-y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE d MMMM y G",
@@ -106,21 +102,9 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y G",
-                    "G y MMMM d",
-                    "dd-MMM-y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE d MMMM y GGGG",
-                    "GGGG y MMMM d",
-                    "dd-MMM-y GGGG",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_MT.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_MT.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -72,39 +72,36 @@
 public class JavaTimeSupplementary_en_MT extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "dd MMMM y GGGG",
+            "dd MMM y GGGG",
+            "G y-MM-dd",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "dd MMMM y G",
+            "dd MMM y G",
+            "GGGGG y-MM-dd",
+        };
+
         return new Object[][] {
             { "islamic.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "dd MMMM y GGGG",
-                    "dd MMM y GGGG",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedTimePatterns },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "dd MMMM y G",
-                    "dd MMM y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "dd MMMM y G",
-                    "dd MMM y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, MMMM d, y G",
@@ -114,29 +111,11 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "dd MMMM y G",
-                    "dd MMM y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "roc.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "dd MMMM y GGGG",
-                    "dd MMM y GGGG",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "roc.TimePatterns",
-                new String[] {
-                    "HH:mm:ss zzzz",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                }
-            },
+                sharedTimePatterns },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_NZ.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_NZ.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,31 +72,27 @@
 public class JavaTimeSupplementary_en_NZ extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "d/MM/y GGGG",
+            "d/MM/y G",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "d/MM/y G",
+            "d/MM/y GGGGG",
+        };
+
         return new Object[][] {
             { "islamic.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "d/MM/y GGGG",
-                    "d/MM/y G",
-                }
-            },
+                sharedDatePatterns },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d/MM/y G",
-                    "d/MM/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d/MM/y G",
-                    "d/MM/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, MMMM d, y G",
@@ -106,21 +102,9 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d/MM/y G",
-                    "d/MM/y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "roc.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "d/MM/y GGGG",
-                    "d/MM/y G",
-                }
-            },
+                sharedDatePatterns },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_SG.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_SG.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,31 +72,27 @@
 public class JavaTimeSupplementary_en_SG extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "GGGG y MMM d",
+            "d/M/yy G",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "G y MMM d",
+            "d/M/yy GGGGG",
+        };
+
         return new Object[][] {
             { "islamic.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "GGGG y MMM d",
-                    "d/M/yy G",
-                }
-            },
+                sharedDatePatterns },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "G y MMM d",
-                    "d/M/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "G y MMM d",
-                    "d/M/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, MMMM d, y G",
@@ -106,21 +102,9 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "G y MMM d",
-                    "d/M/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "roc.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "GGGG y MMM d",
-                    "d/M/yy G",
-                }
-            },
+                sharedDatePatterns },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_ZA.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_ZA.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,55 +72,33 @@
 public class JavaTimeSupplementary_en_ZA extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedDatePatterns = {
+            "EEEE, dd MMMM y GGGG",
+            "dd MMMM y GGGG",
+            "dd MMM y GGGG",
+            "G y/MM/dd",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, dd MMMM y G",
+            "dd MMMM y G",
+            "dd MMM y G",
+            "GGGGG y/MM/dd",
+        };
+
         return new Object[][] {
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE, dd MMMM y GGGG",
-                    "dd MMMM y GGGG",
-                    "dd MMM y GGGG",
-                    "G y/MM/dd",
-                }
-            },
+                sharedDatePatterns },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE, dd MMMM y G",
-                    "dd MMMM y G",
-                    "dd MMM y G",
-                    "GGGGG y/MM/dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE, dd MMMM y G",
-                    "dd MMMM y G",
-                    "dd MMM y G",
-                    "GGGGG y/MM/dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
-                new String[] {
-                    "EEEE, dd MMMM y G",
-                    "dd MMMM y G",
-                    "dd MMM y G",
-                    "GGGGG y/MM/dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE, dd MMMM y G",
-                    "dd MMMM y G",
-                    "dd MMM y G",
-                    "GGGGG y/MM/dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE, dd MMMM y GGGG",
-                    "dd MMMM y GGGG",
-                    "dd MMM y GGGG",
-                    "G y/MM/dd",
-                }
-            },
+                sharedDatePatterns },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,23 +72,86 @@
 public class JavaTimeSupplementary_es extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterAbbreviations = {
+            "T1",
+            "T2",
+            "T3",
+            "T4",
+        };
+
+        final String[] sharedQuarterNames = {
+            "1.er trimestre",
+            "2.\u00ba trimestre",
+            "3.er trimestre",
+            "4.\u00ba trimestre",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "a. m.",
+            "p. m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE, d 'de' MMMM 'de' y GGGG",
+            "d 'de' MMMM 'de' y GGGG",
+            "d/M/y GGGG",
+            "d/M/yy GGGG",
+        };
+
+        final String[] sharedDayAbbreviations = {
+            "dom.",
+            "lun.",
+            "mar.",
+            "mi\u00e9.",
+            "jue.",
+            "vie.",
+            "s\u00e1b.",
+        };
+
+        final String[] sharedDayNames = {
+            "domingo",
+            "lunes",
+            "martes",
+            "mi\u00e9rcoles",
+            "jueves",
+            "viernes",
+            "s\u00e1bado",
+        };
+
+        final String[] sharedDayNarrows = {
+            "D",
+            "L",
+            "M",
+            "X",
+            "J",
+            "V",
+            "S",
+        };
+
+        final String[] sharedTimePatterns = {
+            "H:mm:ss (zzzz)",
+            "H:mm:ss z",
+            "H:mm:ss",
+            "H:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE, d 'de' MMMM 'de' y G",
+            "d 'de' MMMM 'de' y G",
+            "d/M/y G",
+            "d/M/yy G",
+        };
+
+        final String[] sharedEras = {
+            "antes de R.O.C.",
+            "",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "T1",
-                    "T2",
-                    "T3",
-                    "T4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "QuarterNames",
-                new String[] {
-                    "1.er trimestre",
-                    "2.\u00ba trimestre",
-                    "3.er trimestre",
-                    "4.\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
             { "calendarname.buddhist",
                 "calendario budista" },
             { "calendarname.gregorian",
@@ -124,134 +187,27 @@
             { "field.zone",
                 "zona horaria" },
             { "islamic.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d 'de' MMMM 'de' y GGGG",
-                    "d 'de' MMMM 'de' y GGGG",
-                    "d/M/y GGGG",
-                    "d/M/yy GGGG",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayAbbreviations",
-                new String[] {
-                    "dom.",
-                    "lun.",
-                    "mar.",
-                    "mi\u00e9.",
-                    "jue.",
-                    "vie.",
-                    "s\u00e1b.",
-                }
-            },
+                sharedDayAbbreviations },
             { "islamic.DayNames",
-                new String[] {
-                    "domingo",
-                    "lunes",
-                    "martes",
-                    "mi\u00e9rcoles",
-                    "jueves",
-                    "viernes",
-                    "s\u00e1bado",
-                }
-            },
+                sharedDayNames },
             { "islamic.DayNarrows",
-                new String[] {
-                    "D",
-                    "L",
-                    "M",
-                    "X",
-                    "J",
-                    "V",
-                    "S",
-                }
-            },
-            { "islamic.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "T1",
-                    "T2",
-                    "T3",
-                    "T4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1.er trimestre",
-                    "2.\u00ba trimestre",
-                    "3.er trimestre",
-                    "4.\u00ba trimestre",
-                }
-            },
-            { "islamic.QuarterNarrows",
-                new String[] {
-                    "1",
-                    "2",
-                    "3",
-                    "4",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.TimePatterns",
-                new String[] {
-                    "H:mm:ss (zzzz)",
-                    "H:mm:ss z",
-                    "H:mm:ss",
-                    "H:mm",
-                }
-            },
+                sharedTimePatterns },
             { "islamic.abbreviated.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
-            { "islamic.long.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedAmPmMarkers },
             { "islamic.narrow.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
-            { "islamic.narrow.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
-            { "islamic.short.Eras",
-                new String[] {
-                    "",
-                    "AH",
-                }
-            },
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE, d 'de' MMMM 'de' y G",
-                    "d 'de' MMMM 'de' y G",
-                    "d/M/y G",
-                    "d/M/yy G",
-                }
-            },
-            { "java.time.buddhist.long.Eras",
-                new String[] {
-                    "BC",
-                    "BE",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.buddhist.short.Eras",
                 new String[] {
                     "BC",
@@ -259,13 +215,7 @@
                 }
             },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE, d 'de' MMMM 'de' y G",
-                    "d 'de' MMMM 'de' y G",
-                    "d/M/y G",
-                    "d/M/yy G",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, d 'de' MMMM 'de' y G",
@@ -281,13 +231,7 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "EEEE, d 'de' MMMM 'de' y G",
-                    "d 'de' MMMM 'de' y G",
-                    "d/M/y G",
-                    "d/M/yy G",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.short.Eras",
                 new String[] {
                     "antes de Cristo",
@@ -295,58 +239,17 @@
                 }
             },
             { "roc.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
-                new String[] {
-                    "EEEE, d 'de' MMMM 'de' y GGGG",
-                    "d 'de' MMMM 'de' y GGGG",
-                    "d/M/y GGGG",
-                    "d/M/yy GGGG",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayAbbreviations",
-                new String[] {
-                    "dom.",
-                    "lun.",
-                    "mar.",
-                    "mi\u00e9.",
-                    "jue.",
-                    "vie.",
-                    "s\u00e1b.",
-                }
-            },
+                sharedDayAbbreviations },
             { "roc.DayNames",
-                new String[] {
-                    "domingo",
-                    "lunes",
-                    "martes",
-                    "mi\u00e9rcoles",
-                    "jueves",
-                    "viernes",
-                    "s\u00e1bado",
-                }
-            },
+                sharedDayNames },
             { "roc.DayNarrows",
-                new String[] {
-                    "D",
-                    "L",
-                    "M",
-                    "X",
-                    "J",
-                    "V",
-                    "S",
-                }
-            },
+                sharedDayNarrows },
             { "roc.Eras",
-                new String[] {
-                    "antes de R.O.C.",
-                    "",
-                }
-            },
+                sharedEras },
             { "roc.MonthAbbreviations",
                 new String[] {
                     "ene.",
@@ -399,59 +302,21 @@
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "T1",
-                    "T2",
-                    "T3",
-                    "T4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1.er trimestre",
-                    "2.\u00ba trimestre",
-                    "3.er trimestre",
-                    "4.\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
             { "roc.TimePatterns",
-                new String[] {
-                    "H:mm:ss (zzzz)",
-                    "H:mm:ss z",
-                    "H:mm:ss",
-                    "H:mm",
-                }
-            },
+                sharedTimePatterns },
             { "roc.abbreviated.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.long.Eras",
-                new String[] {
-                    "antes de R.O.C.",
-                    "",
-                }
-            },
+                sharedEras },
             { "roc.narrow.AmPmMarkers",
-                new String[] {
-                    "a. m.",
-                    "p. m.",
-                }
-            },
+                sharedAmPmMarkers },
             { "roc.narrow.Eras",
-                new String[] {
-                    "antes de R.O.C.",
-                    "",
-                }
-            },
+                sharedEras },
             { "roc.short.Eras",
-                new String[] {
-                    "antes de R.O.C.",
-                    "",
-                }
-            },
+                sharedEras },
         };
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_AR.java	Tue Jul 05 13:50:37 2016 -0700
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * COPYRIGHT AND PERMISSION NOTICE
+ *
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
+ * Distributed under the Terms of Use in
+ * http://www.unicode.org/copyright.html.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of the Unicode data files and any associated documentation
+ * (the "Data Files") or Unicode software and any associated documentation
+ * (the "Software") to deal in the Data Files or Software
+ * without restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, and/or sell copies of
+ * the Data Files or Software, and to permit persons to whom the Data Files
+ * or Software are furnished to do so, provided that
+ * (a) this copyright and permission notice appear with all copies
+ * of the Data Files or Software,
+ * (b) this copyright and permission notice appear in associated
+ * documentation, and
+ * (c) there is clear notice in each modified Data File or in the Software
+ * as well as in the documentation associated with the Data File(s) or
+ * Software that the data or software has been modified.
+ *
+ * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+ * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+ * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in these Data Files or Software without prior
+ * written authorization of the copyright holder.
+ */
+
+//  Note: this file has been generated by a tool.
+
+package sun.text.resources.ext;
+
+import sun.util.resources.OpenListResourceBundle;
+
+public class JavaTimeSupplementary_es_AR extends OpenListResourceBundle {
+    @Override
+    protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "GGGG y MMM d",
+            "dd/MM/yy G",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "G y MMM d",
+            "dd/MM/yy GGGGG",
+        };
+
+        return new Object[][] {
+            { "field.dayperiod",
+                "a.m./p.m." },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.DatePatterns",
+                sharedDatePatterns },
+            { "islamic.DayNarrows",
+                sharedDayNarrows },
+            { "islamic.TimePatterns",
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "java.time.buddhist.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.islamic.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthAbbreviations",
+                new String[] {
+                    "ene.",
+                    "feb.",
+                    "mar.",
+                    "abr.",
+                    "may.",
+                    "jun.",
+                    "jul.",
+                    "ago.",
+                    "sep.",
+                    "oct.",
+                    "nov.",
+                    "dic.",
+                    "",
+                }
+            },
+            { "roc.MonthNarrows",
+                new String[] {
+                    "e",
+                    "f",
+                    "m",
+                    "a",
+                    "m",
+                    "j",
+                    "j",
+                    "a",
+                    "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
+                }
+            },
+            { "roc.TimePatterns",
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
+        };
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_BO.java	Tue Jul 05 13:50:37 2016 -0700
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * COPYRIGHT AND PERMISSION NOTICE
+ *
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
+ * Distributed under the Terms of Use in
+ * http://www.unicode.org/copyright.html.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of the Unicode data files and any associated documentation
+ * (the "Data Files") or Unicode software and any associated documentation
+ * (the "Software") to deal in the Data Files or Software
+ * without restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, and/or sell copies of
+ * the Data Files or Software, and to permit persons to whom the Data Files
+ * or Software are furnished to do so, provided that
+ * (a) this copyright and permission notice appear with all copies
+ * of the Data Files or Software,
+ * (b) this copyright and permission notice appear in associated
+ * documentation, and
+ * (c) there is clear notice in each modified Data File or in the Software
+ * as well as in the documentation associated with the Data File(s) or
+ * Software that the data or software has been modified.
+ *
+ * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+ * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+ * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in these Data Files or Software without prior
+ * written authorization of the copyright holder.
+ */
+
+//  Note: this file has been generated by a tool.
+
+package sun.text.resources.ext;
+
+import sun.util.resources.OpenListResourceBundle;
+
+public class JavaTimeSupplementary_es_BO extends OpenListResourceBundle {
+    @Override
+    protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "GGGG y MMM d",
+            "dd/MM/yy G",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "G y MMM d",
+            "dd/MM/yy GGGGG",
+        };
+
+        return new Object[][] {
+            { "field.dayperiod",
+                "a.m./p.m." },
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.DatePatterns",
+                sharedDatePatterns },
+            { "islamic.DayNarrows",
+                sharedDayNarrows },
+            { "islamic.TimePatterns",
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "java.time.buddhist.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.islamic.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthAbbreviations",
+                new String[] {
+                    "ene.",
+                    "feb.",
+                    "mar.",
+                    "abr.",
+                    "may.",
+                    "jun.",
+                    "jul.",
+                    "ago.",
+                    "sep.",
+                    "oct.",
+                    "nov.",
+                    "dic.",
+                    "",
+                }
+            },
+            { "roc.MonthNarrows",
+                new String[] {
+                    "e",
+                    "f",
+                    "m",
+                    "a",
+                    "m",
+                    "j",
+                    "j",
+                    "a",
+                    "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
+                }
+            },
+            { "roc.TimePatterns",
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
+        };
+    }
+}
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CL.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CL.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,47 +72,74 @@
 public class JavaTimeSupplementary_es_CL extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterNames = {
+            "1.\u00b0 trimestre",
+            "2.\u00b0 trimestre",
+            "3.\u00b0 trimestre",
+            "4.\u00ba trimestre",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "dd-MM-y GGGG",
+            "dd-MM-y G",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "dd-MM-y G",
+            "dd-MM-y GGGGG",
+        };
+
         return new Object[][] {
             { "QuarterNames",
-                new String[] {
-                    "1.\u00b0 trimestre",
-                    "2.\u00b0 trimestre",
-                    "3.\u00b0 trimestre",
-                    "4.\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
+            { "field.dayperiod",
+                "a.m./p.m." },
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "dd-MM-y GGGG",
-                    "dd-MM-y G",
-                }
-            },
+                sharedDatePatterns },
+            { "islamic.DayNarrows",
+                sharedDayNarrows },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1.\u00b0 trimestre",
-                    "2.\u00b0 trimestre",
-                    "3.\u00b0 trimestre",
-                    "4.\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
+            { "islamic.TimePatterns",
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "dd-MM-y G",
-                    "dd-MM-y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "dd-MM-y G",
-                    "dd-MM-y GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, d 'de' MMMM 'de' y G",
@@ -122,29 +149,38 @@
                 }
             },
             { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthNarrows",
                 new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "dd-MM-y G",
-                    "dd-MM-y GGGGG",
-                }
-            },
-            { "roc.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "dd-MM-y GGGG",
-                    "dd-MM-y G",
+                    "e",
+                    "f",
+                    "m",
+                    "a",
+                    "m",
+                    "j",
+                    "j",
+                    "a",
+                    "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
                 }
             },
             { "roc.QuarterNames",
-                new String[] {
-                    "1.\u00b0 trimestre",
-                    "2.\u00b0 trimestre",
-                    "3.\u00b0 trimestre",
-                    "4.\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
+            { "roc.TimePatterns",
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CO.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CO.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,50 +72,61 @@
 public class JavaTimeSupplementary_es_CO extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "d/MM/y GGGG",
+            "d/MM/yy G",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "h:mm:ss a zzzz",
+            "h:mm:ss a z",
+            "h:mm:ss a",
+            "h:mm a",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "d/MM/y G",
+            "d/MM/yy GGGGG",
+        };
+
         return new Object[][] {
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "d/MM/y GGGG",
-                    "d/MM/yy G",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayNarrows",
-                new String[] {
-                    "d",
-                    "l",
-                    "m",
-                    "m",
-                    "j",
-                    "v",
-                    "s",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d/MM/y G",
-                    "d/MM/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d/MM/y G",
-                    "d/MM/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, d 'de' MMMM 'de' y G",
@@ -125,40 +136,36 @@
                 }
             },
             { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthNarrows",
                 new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d/MM/y G",
-                    "d/MM/yy GGGGG",
-                }
-            },
-            { "roc.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "d/MM/y GGGG",
-                    "d/MM/yy G",
-                }
-            },
-            { "roc.DayNarrows",
-                new String[] {
-                    "d",
-                    "l",
+                    "e",
+                    "f",
                     "m",
+                    "a",
                     "m",
                     "j",
-                    "v",
+                    "j",
+                    "a",
                     "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
                 }
             },
             { "roc.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
         };
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CR.java	Tue Jul 05 13:50:37 2016 -0700
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * COPYRIGHT AND PERMISSION NOTICE
+ *
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
+ * Distributed under the Terms of Use in
+ * http://www.unicode.org/copyright.html.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of the Unicode data files and any associated documentation
+ * (the "Data Files") or Unicode software and any associated documentation
+ * (the "Software") to deal in the Data Files or Software
+ * without restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, and/or sell copies of
+ * the Data Files or Software, and to permit persons to whom the Data Files
+ * or Software are furnished to do so, provided that
+ * (a) this copyright and permission notice appear with all copies
+ * of the Data Files or Software,
+ * (b) this copyright and permission notice appear in associated
+ * documentation, and
+ * (c) there is clear notice in each modified Data File or in the Software
+ * as well as in the documentation associated with the Data File(s) or
+ * Software that the data or software has been modified.
+ *
+ * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+ * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+ * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in these Data Files or Software without prior
+ * written authorization of the copyright holder.
+ */
+
+//  Note: this file has been generated by a tool.
+
+package sun.text.resources.ext;
+
+import sun.util.resources.OpenListResourceBundle;
+
+public class JavaTimeSupplementary_es_CR extends OpenListResourceBundle {
+    @Override
+    protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "GGGG y MMM d",
+            "dd/MM/yy G",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "G y MMM d",
+            "dd/MM/yy GGGGG",
+        };
+
+        return new Object[][] {
+            { "field.dayperiod",
+                "a.m./p.m." },
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.DatePatterns",
+                sharedDatePatterns },
+            { "islamic.DayNarrows",
+                sharedDayNarrows },
+            { "islamic.TimePatterns",
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "java.time.buddhist.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.islamic.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthAbbreviations",
+                new String[] {
+                    "ene.",
+                    "feb.",
+                    "mar.",
+                    "abr.",
+                    "may.",
+                    "jun.",
+                    "jul.",
+                    "ago.",
+                    "sep.",
+                    "oct.",
+                    "nov.",
+                    "dic.",
+                    "",
+                }
+            },
+            { "roc.MonthNarrows",
+                new String[] {
+                    "e",
+                    "f",
+                    "m",
+                    "a",
+                    "m",
+                    "j",
+                    "j",
+                    "a",
+                    "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
+                }
+            },
+            { "roc.TimePatterns",
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
+        };
+    }
+}
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_DO.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_DO.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,15 +72,54 @@
 public class JavaTimeSupplementary_es_DO extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterAbbreviations = {
+            "Q1",
+            "Q2",
+            "Q3",
+            "Q4",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "dd/MM/y GGGG",
+            "G y-MM-dd",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "h:mm:ss a zzzz",
+            "h:mm:ss a z",
+            "h:mm:ss a",
+            "h:mm a",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "dd/MM/y G",
+            "GGGGG y-MM-dd",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterAbbreviations },
+            { "field.dayperiod",
+                "a.m./p.m." },
             { "field.era",
                 "Era" },
             { "field.minute",
@@ -95,78 +134,76 @@
                 "D\u00eda de la semana" },
             { "field.year",
                 "A\u00f1o" },
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
+                sharedDatePatterns },
+            { "islamic.DayNarrows",
+                sharedDayNarrows },
+            { "islamic.QuarterAbbreviations",
+                sharedQuarterAbbreviations },
+            { "islamic.TimePatterns",
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "java.time.buddhist.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.islamic.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthAbbreviations",
                 new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "dd/MM/y GGGG",
-                    "G y-MM-dd",
+                    "ene.",
+                    "feb.",
+                    "mar.",
+                    "abr.",
+                    "may.",
+                    "jun.",
+                    "jul.",
+                    "ago.",
+                    "sep.",
+                    "oct.",
+                    "nov.",
+                    "dic.",
+                    "",
                 }
             },
-            { "islamic.QuarterAbbreviations",
+            { "roc.MonthNarrows",
                 new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
-            { "islamic.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
-            { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "dd/MM/y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
-            { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "dd/MM/y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
-            { "java.time.roc.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "dd/MM/y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
-            { "roc.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "dd/MM/y GGGG",
-                    "G y-MM-dd",
+                    "e",
+                    "f",
+                    "m",
+                    "a",
+                    "m",
+                    "j",
+                    "j",
+                    "a",
+                    "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
                 }
             },
             { "roc.QuarterAbbreviations",
-                new String[] {
-                    "Q1",
-                    "Q2",
-                    "Q3",
-                    "Q4",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "roc.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
         };
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_EC.java	Tue Jul 05 13:50:37 2016 -0700
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * COPYRIGHT AND PERMISSION NOTICE
+ *
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
+ * Distributed under the Terms of Use in
+ * http://www.unicode.org/copyright.html.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of the Unicode data files and any associated documentation
+ * (the "Data Files") or Unicode software and any associated documentation
+ * (the "Software") to deal in the Data Files or Software
+ * without restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, and/or sell copies of
+ * the Data Files or Software, and to permit persons to whom the Data Files
+ * or Software are furnished to do so, provided that
+ * (a) this copyright and permission notice appear with all copies
+ * of the Data Files or Software,
+ * (b) this copyright and permission notice appear in associated
+ * documentation, and
+ * (c) there is clear notice in each modified Data File or in the Software
+ * as well as in the documentation associated with the Data File(s) or
+ * Software that the data or software has been modified.
+ *
+ * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+ * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+ * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in these Data Files or Software without prior
+ * written authorization of the copyright holder.
+ */
+
+//  Note: this file has been generated by a tool.
+
+package sun.text.resources.ext;
+
+import sun.util.resources.OpenListResourceBundle;
+
+public class JavaTimeSupplementary_es_EC extends OpenListResourceBundle {
+    @Override
+    protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "GGGG y MMM d",
+            "dd/MM/yy G",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "G y MMM d",
+            "dd/MM/yy GGGGG",
+        };
+
+        return new Object[][] {
+            { "field.dayperiod",
+                "a.m./p.m." },
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.DatePatterns",
+                sharedDatePatterns },
+            { "islamic.DayNarrows",
+                sharedDayNarrows },
+            { "islamic.TimePatterns",
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "java.time.buddhist.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.islamic.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthAbbreviations",
+                new String[] {
+                    "ene.",
+                    "feb.",
+                    "mar.",
+                    "abr.",
+                    "may.",
+                    "jun.",
+                    "jul.",
+                    "ago.",
+                    "sep.",
+                    "oct.",
+                    "nov.",
+                    "dic.",
+                    "",
+                }
+            },
+            { "roc.MonthNarrows",
+                new String[] {
+                    "e",
+                    "f",
+                    "m",
+                    "a",
+                    "m",
+                    "j",
+                    "j",
+                    "a",
+                    "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
+                }
+            },
+            { "roc.TimePatterns",
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
+        };
+    }
+}
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_GT.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_GT.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,31 +72,63 @@
 public class JavaTimeSupplementary_es_GT extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "d/MM/y GGGG",
+            "d/MM/yy G",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "d/MM/y G",
+            "d/MM/yy GGGGG",
+        };
+
         return new Object[][] {
+            { "field.dayperiod",
+                "a.m./p.m." },
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "d/MM/y GGGG",
-                    "d/MM/yy G",
-                }
-            },
+                sharedDatePatterns },
+            { "islamic.DayNarrows",
+                sharedDayNarrows },
+            { "islamic.TimePatterns",
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d/MM/y G",
-                    "d/MM/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d/MM/y G",
-                    "d/MM/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, d 'de' MMMM 'de' y G",
@@ -106,21 +138,53 @@
                 }
             },
             { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthAbbreviations",
                 new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d/MM/y G",
-                    "d/MM/yy GGGGG",
+                    "ene.",
+                    "feb.",
+                    "mar.",
+                    "abr.",
+                    "may.",
+                    "jun.",
+                    "jul.",
+                    "ago.",
+                    "sep.",
+                    "oct.",
+                    "nov.",
+                    "dic.",
+                    "",
                 }
             },
-            { "roc.DatePatterns",
+            { "roc.MonthNarrows",
                 new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "d/MM/y GGGG",
-                    "d/MM/yy G",
+                    "e",
+                    "f",
+                    "m",
+                    "a",
+                    "m",
+                    "j",
+                    "j",
+                    "a",
+                    "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
                 }
             },
+            { "roc.TimePatterns",
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_HN.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_HN.java	Tue Jul 05 13:50:37 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 /*
  * COPYRIGHT AND PERMISSION NOTICE
  *
- * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved.
+ * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved.
  * Distributed under the Terms of Use in
  * http://www.unicode.org/copyright.html.
  *
@@ -72,31 +72,63 @@
 public class JavaTimeSupplementary_es_HN extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "EEEE dd 'de' MMMM 'de' y GGGG",
+            "dd 'de' MMMM 'de' y GGGG",
+            "GGGG y MMM d",
+            "G y-MM-dd",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "EEEE dd 'de' MMMM 'de' y G",
+            "dd 'de' MMMM 'de' y G",
+            "G y MMM d",
+            "GGGGG y-MM-dd",
+        };
+
         return new Object[][] {
+            { "field.dayperiod",
+                "a.m./p.m." },
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "EEEE dd 'de' MMMM 'de' y GGGG",
-                    "dd 'de' MMMM 'de' y GGGG",
-                    "GGGG y MMM d",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
+            { "islamic.DayNarrows",
+                sharedDayNarrows },
+            { "islamic.TimePatterns",
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "EEEE dd 'de' MMMM 'de' y G",
-                    "dd 'de' MMMM 'de' y G",
-                    "G y MMM d",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "EEEE dd 'de' MMMM 'de' y G",
-                    "dd 'de' MMMM 'de' y G",
-                    "G y MMM d",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE dd 'de' MMMM 'de' y G",
@@ -106,21 +138,53 @@
                 }
             },
             { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthAbbreviations",
                 new String[] {
-                    "EEEE dd 'de' MMMM 'de' y G",
-                    "dd 'de' MMMM 'de' y G",
-                    "G y MMM d",
-                    "GGGGG y-MM-dd",
+                    "ene.",
+                    "feb.",
+                    "mar.",
+                    "abr.",
+                    "may.",
+                    "jun.",
+                    "jul.",
+                    "ago.",
+                    "sep.",
+                    "oct.",
+                    "nov.",
+                    "dic.",
+                    "",
                 }
             },
-            { "roc.DatePatterns",
+            { "roc.MonthNarrows",
                 new String[] {
-                    "EEEE dd 'de' MMMM 'de' y GGGG",
-                    "dd 'de' MMMM 'de' y GGGG",
-                    "GGGG y MMM d",
-                    "G y-MM-dd",
+                    "e",
+                    "f",
+                    "m",
+                    "a",
+                    "m",
+                    "j",
+                    "j",
+                    "a",
+                    "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
                 }
             },
+            { "roc.TimePatterns",
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_MX.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_MX.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,96 +72,102 @@
 public class JavaTimeSupplementary_es_MX extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterAbbreviations = {
+            "1er. trim.",
+            "2\u00ba. trim.",
+            "3er. trim.",
+            "4\u00ba trim.",
+        };
+
+        final String[] sharedQuarterNames = {
+            "1er. trimestre",
+            "2\u00ba. trimestre",
+            "3er. trimestre",
+            "4\u00ba trimestre",
+        };
+
+        final String[] sharedQuarterNarrows = {
+            "1T",
+            "2T",
+            "3T",
+            "4T",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "d MMM, y GGGG",
+            "G y-MM-dd",
+        };
+
+        final String[] sharedDayNarrows = {
+            "D",
+            "L",
+            "M",
+            "M",
+            "J",
+            "V",
+            "S",
+        };
+
+        final String[] sharedTimePatterns = {
+            "HH:mm:ss zzzz",
+            "HH:mm:ss z",
+            "HH:mm:ss",
+            "HH:mm",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "d MMM, y G",
+            "GGGGG y-MM-dd",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "1er. trim.",
-                    "2\u00ba. trim.",
-                    "3er. trim.",
-                    "4\u00ba trim.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "QuarterNames",
-                new String[] {
-                    "1er. trimestre",
-                    "2\u00ba. trimestre",
-                    "3er. trimestre",
-                    "4\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
             { "QuarterNarrows",
-                new String[] {
-                    "1T",
-                    "2T",
-                    "3T",
-                    "4T",
-                }
-            },
+                sharedQuarterNarrows },
             { "calendarname.gregorian",
                 "Calendario gregoriano" },
             { "calendarname.gregory",
                 "Calendario gregoriano" },
             { "calendarname.roc",
                 "calendario minguo" },
+            { "field.dayperiod",
+                "a.m./p.m." },
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "d MMM, y GGGG",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "islamic.DayNarrows",
-                new String[] {
-                    "D",
-                    "L",
-                    "M",
-                    "M",
-                    "J",
-                    "V",
-                    "S",
-                }
-            },
+                sharedDayNarrows },
             { "islamic.QuarterAbbreviations",
-                new String[] {
-                    "1er. trim.",
-                    "2\u00ba. trim.",
-                    "3er. trim.",
-                    "4\u00ba trim.",
-                }
-            },
+                sharedQuarterAbbreviations },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1er. trimestre",
-                    "2\u00ba. trimestre",
-                    "3er. trimestre",
-                    "4\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.QuarterNarrows",
-                new String[] {
-                    "1T",
-                    "2T",
-                    "3T",
-                    "4T",
-                }
-            },
+                sharedQuarterNarrows },
+            { "islamic.TimePatterns",
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d MMM, y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d MMM, y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, d 'de' MMMM 'de' y G",
@@ -171,32 +177,13 @@
                 }
             },
             { "java.time.roc.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "d MMM, y G",
-                    "GGGGG y-MM-dd",
-                }
-            },
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
             { "roc.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "d MMM, y GGGG",
-                    "G y-MM-dd",
-                }
-            },
+                sharedDatePatterns },
             { "roc.DayNarrows",
-                new String[] {
-                    "D",
-                    "L",
-                    "M",
-                    "M",
-                    "J",
-                    "V",
-                    "S",
-                }
-            },
+                sharedDayNarrows },
             { "roc.MonthAbbreviations",
                 new String[] {
                     "ene",
@@ -214,30 +201,35 @@
                     "",
                 }
             },
-            { "roc.QuarterAbbreviations",
+            { "roc.MonthNarrows",
                 new String[] {
-                    "1er. trim.",
-                    "2\u00ba. trim.",
-                    "3er. trim.",
-                    "4\u00ba trim.",
+                    "e",
+                    "f",
+                    "m",
+                    "a",
+                    "m",
+                    "j",
+                    "j",
+                    "a",
+                    "s",
+                    "o",
+                    "n",
+                    "d",
+                    "",
                 }
             },
+            { "roc.QuarterAbbreviations",
+                sharedQuarterAbbreviations },
             { "roc.QuarterNames",
-                new String[] {
-                    "1er. trimestre",
-                    "2\u00ba. trimestre",
-                    "3er. trimestre",
-                    "4\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
             { "roc.QuarterNarrows",
-                new String[] {
-                    "1T",
-                    "2T",
-                    "3T",
-                    "4T",
-                }
-            },
+                sharedQuarterNarrows },
+            { "roc.TimePatterns",
+                sharedTimePatterns },
+            { "roc.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
         };
     }
 }
--- a/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PA.java	Thu Jun 30 14:57:30 2016 -0700
+++ b/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PA.java	Tue Jul 05 13:50:37 2016 -0700
@@ -72,63 +72,76 @@
 public class JavaTimeSupplementary_es_PA extends OpenListResourceBundle {
     @Override
     protected final Object[][] getContents() {
+        final String[] sharedQuarterNames = {
+            "1er. trimestre",
+            "2do. trimestre",
+            "3er. trimestre",
+            "4.\u00ba trimestre",
+        };
+
+        final String[] sharedAmPmMarkers = {
+            "a.m.",
+            "p.m.",
+        };
+
+        final String[] sharedDatePatterns = {
+            "GGGG y MMMM d, EEEE",
+            "GGGG y MMMM d",
+            "MM/dd/y GGGG",
+            "MM/dd/yy G",
+        };
+
+        final String[] sharedDayNarrows = {
+            "d",
+            "l",
+            "m",
+            "m",
+            "j",
+            "v",
+            "s",
+        };
+
+        final String[] sharedTimePatterns = {
+            "h:mm:ss a zzzz",
+            "h:mm:ss a z",
+            "h:mm:ss a",
+            "h:mm a",
+        };
+
+        final String[] sharedJavaTimeDatePatterns = {
+            "G y MMMM d, EEEE",
+            "G y MMMM d",
+            "MM/dd/y G",
+            "MM/dd/yy GGGGG",
+        };
+
         return new Object[][] {
             { "QuarterAbbreviations",
-                new String[] {
-                    "1er. trimestre",
-                    "2do. trimestre",
-                    "3er. trimestre",
-                    "4.\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
             { "QuarterNames",
-                new String[] {
-                    "1er. trimestre",
-                    "2do. trimestre",
-                    "3er. trimestre",
-                    "4.\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
+            { "field.dayperiod",
+                "a.m./p.m." },
+            { "field.zone",
+                "Zona horaria" },
+            { "islamic.AmPmMarkers",
+                sharedAmPmMarkers },
             { "islamic.DatePatterns",
-                new String[] {
-                    "GGGG y MMMM d, EEEE",
-                    "GGGG y MMMM d",
-                    "MM/dd/y GGGG",
-                    "MM/dd/yy G",
-                }
-            },
+                sharedDatePatterns },
+            { "islamic.DayNarrows",
+                sharedDayNarrows },
             { "islamic.QuarterNames",
-                new String[] {
-                    "1er. trimestre",
-                    "2do. trimestre",
-                    "3er. trimestre",
-                    "4.\u00ba trimestre",
-                }
-            },
+                sharedQuarterNames },
             { "islamic.TimePatterns",
-                new String[] {
-                    "h:mm:ss a zzzz",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                }
-            },
+                sharedTimePatterns },
+            { "islamic.abbreviated.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "islamic.narrow.AmPmMarkers",
+                sharedAmPmMarkers },
             { "java.time.buddhist.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "MM/dd/y G",
-                    "MM/dd/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.islamic.DatePatterns",
-                new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-                    "MM/dd/y G",
-                    "MM/dd/yy GGGGG",
-                }
-            },
+                sharedJavaTimeDatePatterns },
             { "java.time.japanese.DatePatterns",
                 new String[] {
                     "EEEE, d 'de' MMMM 'de' y G",
@@ -138,37 +151,55 @@
                 }
             },
             { "java.time.roc.DatePatterns",
+                sharedJavaTimeDatePatterns },
+            { "roc.AmPmMarkers",
+                sharedAmPmMarkers },
+            { "roc.DatePatterns",
+                sharedDatePatterns },
+            { "roc.DayNarrows",
+                sharedDayNarrows },
+            { "roc.MonthAbbreviations",
                 new String[] {
-                    "G y MMMM d, EEEE",
-                    "G y MMMM d",
-