Merge "Move hiding of stack views into onStart from onResume."
diff --git a/Android.mk b/Android.mk
index f545207..1eff5cc 100644
--- a/Android.mk
+++ b/Android.mk
@@ -743,6 +743,7 @@
 # not be referenced in the documentation.
 framework_docs_LOCAL_DROIDDOC_OPTIONS := \
     -knowntags ./frameworks/base/docs/knowntags.txt \
+    -knowntags ./libcore/known_oj_tags.txt \
     -hidePackage com.android.org.conscrypt \
     -since $(SRC_API_DIR)/1.xml 1 \
     -since $(SRC_API_DIR)/2.xml 2 \
diff --git a/api/current.txt b/api/current.txt
index 24cddd6..c58219d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2734,6 +2734,7 @@
     method public final android.os.IBinder getIBinder();
     method public abstract android.os.Bundle hasFeatures(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String[]) throws android.accounts.NetworkErrorException;
     method public android.os.Bundle startAddAccountSession(android.accounts.AccountAuthenticatorResponse, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle startUpdateCredentialsSession(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
     method public abstract android.os.Bundle updateCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
     field public static final java.lang.String KEY_CUSTOM_TOKEN_EXPIRY = "android.accounts.expiry";
   }
@@ -2799,6 +2800,7 @@
     method public void setPassword(android.accounts.Account, java.lang.String);
     method public void setUserData(android.accounts.Account, java.lang.String, java.lang.String);
     method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
     method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
     field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
     field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
@@ -4867,6 +4869,7 @@
     field public static final int PRIORITY_MAX = 2; // 0x2
     field public static final int PRIORITY_MIN = -2; // 0xfffffffe
     field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff
+    field public static final java.lang.String TOPIC_DEFAULT = "system_default_topic";
     field public static final int VISIBILITY_PRIVATE = 0; // 0x0
     field public static final int VISIBILITY_PUBLIC = 1; // 0x1
     field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
@@ -5866,6 +5869,7 @@
     field public static final java.lang.String EXTRA_PROVISIONING_LOCALE = "android.app.extra.PROVISIONING_LOCALE";
     field public static final java.lang.String EXTRA_PROVISIONING_LOCAL_TIME = "android.app.extra.PROVISIONING_LOCAL_TIME";
     field public static final java.lang.String EXTRA_PROVISIONING_LOGO_URI = "android.app.extra.PROVISIONING_LOGO_URI";
+    field public static final java.lang.String EXTRA_PROVISIONING_MAIN_COLOR = "android.app.extra.PROVISIONING_MAIN_COLOR";
     field public static final java.lang.String EXTRA_PROVISIONING_SKIP_ENCRYPTION = "android.app.extra.PROVISIONING_SKIP_ENCRYPTION";
     field public static final java.lang.String EXTRA_PROVISIONING_TIME_ZONE = "android.app.extra.PROVISIONING_TIME_ZONE";
     field public static final java.lang.String EXTRA_PROVISIONING_WIFI_HIDDEN = "android.app.extra.PROVISIONING_WIFI_HIDDEN";
@@ -36283,6 +36287,7 @@
     method public boolean canResolveTextDirection();
     method public boolean canScrollHorizontally(int);
     method public boolean canScrollVertically(int);
+    method public final void cancelDragAndDrop();
     method public void cancelLongPress();
     method public final void cancelPendingInputEvents();
     method public boolean checkInputConnectionProxy(android.view.View);
@@ -36763,7 +36768,8 @@
     method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback);
     method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback, int);
     method public void startAnimation(android.view.animation.Animation);
-    method public final boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+    method public final deprecated boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+    method public final boolean startDragAndDrop(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
     method public boolean startNestedScroll(int);
     method public void stopNestedScroll();
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
@@ -42750,13 +42756,18 @@
 package java.awt.font {
 
   public final class NumericShaper implements java.io.Serializable {
-    method public static java.awt.font.NumericShaper getContextualShaper(int, int);
     method public static java.awt.font.NumericShaper getContextualShaper(int);
+    method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>);
+    method public static java.awt.font.NumericShaper getContextualShaper(int, int);
+    method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>, java.awt.font.NumericShaper.Range);
+    method public java.util.Set<java.awt.font.NumericShaper.Range> getRangeSet();
     method public int getRanges();
     method public static java.awt.font.NumericShaper getShaper(int);
+    method public static java.awt.font.NumericShaper getShaper(java.awt.font.NumericShaper.Range);
     method public boolean isContextual();
-    method public void shape(char[], int, int, int);
     method public void shape(char[], int, int);
+    method public void shape(char[], int, int, int);
+    method public void shape(char[], int, int, java.awt.font.NumericShaper.Range);
     field public static final int ALL_RANGES = 524287; // 0x7ffff
     field public static final int ARABIC = 2; // 0x2
     field public static final int BENGALI = 16; // 0x10
@@ -42779,6 +42790,46 @@
     field public static final int TIBETAN = 16384; // 0x4000
   }
 
+  public static class NumericShaper.Range extends java.lang.Enum {
+    method public static java.awt.font.NumericShaper.Range valueOf(java.lang.String);
+    method public static final java.awt.font.NumericShaper.Range[] values();
+    enum_constant public static final java.awt.font.NumericShaper.Range ARABIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range BALINESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range BENGALI;
+    enum_constant public static final java.awt.font.NumericShaper.Range CHAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range DEVANAGARI;
+    enum_constant public static final java.awt.font.NumericShaper.Range EASTERN_ARABIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range ETHIOPIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range EUROPEAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range GUJARATI;
+    enum_constant public static final java.awt.font.NumericShaper.Range GURMUKHI;
+    enum_constant public static final java.awt.font.NumericShaper.Range JAVANESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range KANNADA;
+    enum_constant public static final java.awt.font.NumericShaper.Range KAYAH_LI;
+    enum_constant public static final java.awt.font.NumericShaper.Range KHMER;
+    enum_constant public static final java.awt.font.NumericShaper.Range LAO;
+    enum_constant public static final java.awt.font.NumericShaper.Range LEPCHA;
+    enum_constant public static final java.awt.font.NumericShaper.Range LIMBU;
+    enum_constant public static final java.awt.font.NumericShaper.Range MALAYALAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range MEETEI_MAYEK;
+    enum_constant public static final java.awt.font.NumericShaper.Range MONGOLIAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR;
+    enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR_SHAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range NEW_TAI_LUE;
+    enum_constant public static final java.awt.font.NumericShaper.Range NKO;
+    enum_constant public static final java.awt.font.NumericShaper.Range OL_CHIKI;
+    enum_constant public static final java.awt.font.NumericShaper.Range ORIYA;
+    enum_constant public static final java.awt.font.NumericShaper.Range SAURASHTRA;
+    enum_constant public static final java.awt.font.NumericShaper.Range SUNDANESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_HORA;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_THAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAMIL;
+    enum_constant public static final java.awt.font.NumericShaper.Range TELUGU;
+    enum_constant public static final java.awt.font.NumericShaper.Range THAI;
+    enum_constant public static final java.awt.font.NumericShaper.Range TIBETAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range VAI;
+  }
+
   public final class TextAttribute extends java.text.AttributedCharacterIterator.Attribute {
     ctor protected TextAttribute(java.lang.String);
     field public static final java.awt.font.TextAttribute BACKGROUND;
@@ -42872,20 +42923,20 @@
 
   public class PropertyChangeSupport implements java.io.Serializable {
     ctor public PropertyChangeSupport(java.lang.Object);
-    method public void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener);
     method public void addPropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener);
     method public void fireIndexedPropertyChange(java.lang.String, int, java.lang.Object, java.lang.Object);
-    method public void fireIndexedPropertyChange(java.lang.String, int, boolean, boolean);
     method public void fireIndexedPropertyChange(java.lang.String, int, int, int);
+    method public void fireIndexedPropertyChange(java.lang.String, int, boolean, boolean);
     method public void firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object);
-    method public void firePropertyChange(java.lang.String, boolean, boolean);
     method public void firePropertyChange(java.lang.String, int, int);
+    method public void firePropertyChange(java.lang.String, boolean, boolean);
     method public void firePropertyChange(java.beans.PropertyChangeEvent);
-    method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String);
     method public java.beans.PropertyChangeListener[] getPropertyChangeListeners();
+    method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String);
     method public boolean hasListeners(java.lang.String);
-    method public void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener);
     method public void removePropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener);
   }
 
 }
@@ -42910,8 +42961,8 @@
   }
 
   public class BufferedReader extends java.io.Reader {
-    ctor public BufferedReader(java.io.Reader);
     ctor public BufferedReader(java.io.Reader, int);
+    ctor public BufferedReader(java.io.Reader);
     method public void close() throws java.io.IOException;
     method public int read(char[], int, int) throws java.io.IOException;
     method public java.lang.String readLine() throws java.io.IOException;
@@ -42940,10 +42991,10 @@
     ctor public ByteArrayOutputStream();
     ctor public ByteArrayOutputStream(int);
     method public synchronized void reset();
-    method public int size();
+    method public synchronized int size();
     method public synchronized byte[] toByteArray();
-    method public deprecated java.lang.String toString(int);
-    method public java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
+    method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
+    method public deprecated synchronized java.lang.String toString(int);
     method public synchronized void write(int);
     method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException;
     field protected byte[] buf;
@@ -42985,13 +43036,15 @@
   }
 
   public final class Console implements java.io.Flushable {
+    method public static java.io.Console console();
     method public void flush();
     method public java.io.Console format(java.lang.String, java.lang.Object...);
+    method public static synchronized java.io.Console getConsole();
     method public java.io.Console printf(java.lang.String, java.lang.Object...);
-    method public java.lang.String readLine();
     method public java.lang.String readLine(java.lang.String, java.lang.Object...);
-    method public char[] readPassword();
+    method public java.lang.String readLine();
     method public char[] readPassword(java.lang.String, java.lang.Object...);
+    method public char[] readPassword();
     method public java.io.Reader reader();
     method public java.io.PrintWriter writer();
   }
@@ -43037,9 +43090,9 @@
   }
 
   public abstract interface DataOutput {
+    method public abstract void write(int) throws java.io.IOException;
     method public abstract void write(byte[]) throws java.io.IOException;
     method public abstract void write(byte[], int, int) throws java.io.IOException;
-    method public abstract void write(int) throws java.io.IOException;
     method public abstract void writeBoolean(boolean) throws java.io.IOException;
     method public abstract void writeByte(int) throws java.io.IOException;
     method public abstract void writeBytes(java.lang.String) throws java.io.IOException;
@@ -43081,17 +43134,17 @@
   }
 
   public class File implements java.lang.Comparable java.io.Serializable {
-    ctor public File(java.io.File, java.lang.String);
     ctor public File(java.lang.String);
     ctor public File(java.lang.String, java.lang.String);
+    ctor public File(java.io.File, java.lang.String);
     ctor public File(java.net.URI);
     method public boolean canExecute();
     method public boolean canRead();
     method public boolean canWrite();
     method public int compareTo(java.io.File);
     method public boolean createNewFile() throws java.io.IOException;
-    method public static java.io.File createTempFile(java.lang.String, java.lang.String) throws java.io.IOException;
     method public static java.io.File createTempFile(java.lang.String, java.lang.String, java.io.File) throws java.io.IOException;
+    method public static java.io.File createTempFile(java.lang.String, java.lang.String) throws java.io.IOException;
     method public boolean delete();
     method public void deleteOnExit();
     method public boolean exists();
@@ -43129,6 +43182,7 @@
     method public boolean setReadable(boolean);
     method public boolean setWritable(boolean, boolean);
     method public boolean setWritable(boolean);
+    method public java.nio.file.Path toPath();
     method public java.net.URI toURI();
     method public deprecated java.net.URL toURL() throws java.net.MalformedURLException;
     field public static final java.lang.String pathSeparator;
@@ -43151,9 +43205,9 @@
   }
 
   public class FileInputStream extends java.io.InputStream {
+    ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.FileDescriptor);
-    ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public int read() throws java.io.IOException;
@@ -43165,11 +43219,11 @@
   }
 
   public class FileOutputStream extends java.io.OutputStream {
+    ctor public FileOutputStream(java.lang.String) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(java.lang.String, boolean) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.FileDescriptor);
-    ctor public FileOutputStream(java.lang.String) throws java.io.FileNotFoundException;
-    ctor public FileOutputStream(java.lang.String, boolean) throws java.io.FileNotFoundException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
@@ -43177,22 +43231,24 @@
 
   public final class FilePermission extends java.security.Permission implements java.io.Serializable {
     ctor public FilePermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
   public class FileReader extends java.io.InputStreamReader {
+    ctor public FileReader(java.lang.String) throws java.io.FileNotFoundException;
     ctor public FileReader(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileReader(java.io.FileDescriptor);
-    ctor public FileReader(java.lang.String) throws java.io.FileNotFoundException;
   }
 
   public class FileWriter extends java.io.OutputStreamWriter {
+    ctor public FileWriter(java.lang.String) throws java.io.IOException;
+    ctor public FileWriter(java.lang.String, boolean) throws java.io.IOException;
     ctor public FileWriter(java.io.File) throws java.io.IOException;
     ctor public FileWriter(java.io.File, boolean) throws java.io.IOException;
     ctor public FileWriter(java.io.FileDescriptor);
-    ctor public FileWriter(java.lang.String) throws java.io.IOException;
-    ctor public FileWriter(java.lang.String, boolean) throws java.io.IOException;
   }
 
   public abstract interface FilenameFilter {
@@ -43245,7 +43301,7 @@
     ctor public InputStream();
     method public int available() throws java.io.IOException;
     method public void close() throws java.io.IOException;
-    method public void mark(int);
+    method public synchronized void mark(int);
     method public boolean markSupported();
     method public abstract int read() throws java.io.IOException;
     method public int read(byte[]) throws java.io.IOException;
@@ -43257,8 +43313,8 @@
   public class InputStreamReader extends java.io.Reader {
     ctor public InputStreamReader(java.io.InputStream);
     ctor public InputStreamReader(java.io.InputStream, java.lang.String) throws java.io.UnsupportedEncodingException;
-    ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder);
     ctor public InputStreamReader(java.io.InputStream, java.nio.charset.Charset);
+    ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder);
     method public void close() throws java.io.IOException;
     method public java.lang.String getEncoding();
     method public int read(char[], int, int) throws java.io.IOException;
@@ -43267,6 +43323,7 @@
   public class InterruptedIOException extends java.io.IOException {
     ctor public InterruptedIOException();
     ctor public InterruptedIOException(java.lang.String);
+    ctor public InterruptedIOException(java.lang.Throwable);
     field public int bytesTransferred;
   }
 
@@ -43294,13 +43351,13 @@
   }
 
   public class NotActiveException extends java.io.ObjectStreamException {
-    ctor public NotActiveException();
     ctor public NotActiveException(java.lang.String);
+    ctor public NotActiveException();
   }
 
   public class NotSerializableException extends java.io.ObjectStreamException {
-    ctor public NotSerializableException();
     ctor public NotSerializableException(java.lang.String);
+    ctor public NotSerializableException();
   }
 
   public abstract interface ObjectInput implements java.lang.AutoCloseable java.io.DataInput {
@@ -43314,32 +43371,32 @@
   }
 
   public class ObjectInputStream extends java.io.InputStream implements java.io.ObjectInput java.io.ObjectStreamConstants {
-    ctor protected ObjectInputStream() throws java.io.IOException;
-    ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException, java.io.StreamCorruptedException;
-    method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException;
-    method protected boolean enableResolveObject(boolean);
+    ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException;
+    ctor protected ObjectInputStream() throws java.io.IOException, java.lang.SecurityException;
+    method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected boolean enableResolveObject(boolean) throws java.lang.SecurityException;
     method public int read() throws java.io.IOException;
     method public boolean readBoolean() throws java.io.IOException;
     method public byte readByte() throws java.io.IOException;
     method public char readChar() throws java.io.IOException;
     method protected java.io.ObjectStreamClass readClassDescriptor() throws java.lang.ClassNotFoundException, java.io.IOException;
     method public double readDouble() throws java.io.IOException;
-    method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException;
+    method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException;
     method public float readFloat() throws java.io.IOException;
     method public void readFully(byte[]) throws java.io.IOException;
     method public void readFully(byte[], int, int) throws java.io.IOException;
     method public int readInt() throws java.io.IOException;
     method public deprecated java.lang.String readLine() throws java.io.IOException;
     method public long readLong() throws java.io.IOException;
-    method public final java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException;
-    method protected java.lang.Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException;
+    method public final java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected java.lang.Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException;
     method public short readShort() throws java.io.IOException;
     method protected void readStreamHeader() throws java.io.IOException, java.io.StreamCorruptedException;
     method public java.lang.String readUTF() throws java.io.IOException;
     method public java.lang.Object readUnshared() throws java.lang.ClassNotFoundException, java.io.IOException;
     method public int readUnsignedByte() throws java.io.IOException;
     method public int readUnsignedShort() throws java.io.IOException;
-    method public synchronized void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException;
+    method public void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException;
     method protected java.lang.Class<?> resolveClass(java.io.ObjectStreamClass) throws java.lang.ClassNotFoundException, java.io.IOException;
     method protected java.lang.Object resolveObject(java.lang.Object) throws java.io.IOException;
     method protected java.lang.Class<?> resolveProxyClass(java.lang.String[]) throws java.lang.ClassNotFoundException, java.io.IOException;
@@ -43348,16 +43405,16 @@
 
   public static abstract class ObjectInputStream.GetField {
     ctor public ObjectInputStream.GetField();
-    method public abstract boolean defaulted(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract boolean get(java.lang.String, boolean) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract char get(java.lang.String, char) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract byte get(java.lang.String, byte) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract short get(java.lang.String, short) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract int get(java.lang.String, int) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract long get(java.lang.String, long) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract float get(java.lang.String, float) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract double get(java.lang.String, double) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract java.lang.Object get(java.lang.String, java.lang.Object) throws java.io.IOException, java.lang.IllegalArgumentException;
+    method public abstract boolean defaulted(java.lang.String) throws java.io.IOException;
+    method public abstract boolean get(java.lang.String, boolean) throws java.io.IOException;
+    method public abstract byte get(java.lang.String, byte) throws java.io.IOException;
+    method public abstract char get(java.lang.String, char) throws java.io.IOException;
+    method public abstract short get(java.lang.String, short) throws java.io.IOException;
+    method public abstract int get(java.lang.String, int) throws java.io.IOException;
+    method public abstract long get(java.lang.String, long) throws java.io.IOException;
+    method public abstract float get(java.lang.String, float) throws java.io.IOException;
+    method public abstract double get(java.lang.String, double) throws java.io.IOException;
+    method public abstract java.lang.Object get(java.lang.String, java.lang.Object) throws java.io.IOException;
     method public abstract java.io.ObjectStreamClass getObjectStreamClass();
   }
 
@@ -43368,20 +43425,20 @@
   public abstract interface ObjectOutput implements java.lang.AutoCloseable java.io.DataOutput {
     method public abstract void close() throws java.io.IOException;
     method public abstract void flush() throws java.io.IOException;
+    method public abstract void write(int) throws java.io.IOException;
     method public abstract void write(byte[]) throws java.io.IOException;
     method public abstract void write(byte[], int, int) throws java.io.IOException;
-    method public abstract void write(int) throws java.io.IOException;
     method public abstract void writeObject(java.lang.Object) throws java.io.IOException;
   }
 
   public class ObjectOutputStream extends java.io.OutputStream implements java.io.ObjectOutput java.io.ObjectStreamConstants {
-    ctor protected ObjectOutputStream() throws java.io.IOException;
     ctor public ObjectOutputStream(java.io.OutputStream) throws java.io.IOException;
+    ctor protected ObjectOutputStream() throws java.io.IOException, java.lang.SecurityException;
     method protected void annotateClass(java.lang.Class<?>) throws java.io.IOException;
     method protected void annotateProxyClass(java.lang.Class<?>) throws java.io.IOException;
     method public void defaultWriteObject() throws java.io.IOException;
     method protected void drain() throws java.io.IOException;
-    method protected boolean enableReplaceObject(boolean);
+    method protected boolean enableReplaceObject(boolean) throws java.lang.SecurityException;
     method public java.io.ObjectOutputStream.PutField putFields() throws java.io.IOException;
     method protected java.lang.Object replaceObject(java.lang.Object) throws java.io.IOException;
     method public void reset() throws java.io.IOException;
@@ -43409,8 +43466,8 @@
   public static abstract class ObjectOutputStream.PutField {
     ctor public ObjectOutputStream.PutField();
     method public abstract void put(java.lang.String, boolean);
-    method public abstract void put(java.lang.String, char);
     method public abstract void put(java.lang.String, byte);
+    method public abstract void put(java.lang.String, char);
     method public abstract void put(java.lang.String, short);
     method public abstract void put(java.lang.String, int);
     method public abstract void put(java.lang.String, long);
@@ -43464,8 +43521,8 @@
   }
 
   public abstract class ObjectStreamException extends java.io.IOException {
-    ctor protected ObjectStreamException();
     ctor protected ObjectStreamException(java.lang.String);
+    ctor protected ObjectStreamException();
   }
 
   public class ObjectStreamField implements java.lang.Comparable {
@@ -43491,14 +43548,14 @@
     ctor public OutputStream();
     method public void close() throws java.io.IOException;
     method public void flush() throws java.io.IOException;
+    method public abstract void write(int) throws java.io.IOException;
     method public void write(byte[]) throws java.io.IOException;
     method public void write(byte[], int, int) throws java.io.IOException;
-    method public abstract void write(int) throws java.io.IOException;
   }
 
   public class OutputStreamWriter extends java.io.Writer {
-    ctor public OutputStreamWriter(java.io.OutputStream);
     ctor public OutputStreamWriter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException;
+    ctor public OutputStreamWriter(java.io.OutputStream);
     ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.Charset);
     ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.CharsetEncoder);
     method public void close() throws java.io.IOException;
@@ -43508,10 +43565,10 @@
   }
 
   public class PipedInputStream extends java.io.InputStream {
-    ctor public PipedInputStream();
     ctor public PipedInputStream(java.io.PipedOutputStream) throws java.io.IOException;
-    ctor public PipedInputStream(int);
     ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
+    ctor public PipedInputStream();
+    ctor public PipedInputStream(int);
     method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
     method public synchronized int read() throws java.io.IOException;
     method protected synchronized void receive(int) throws java.io.IOException;
@@ -43522,28 +43579,28 @@
   }
 
   public class PipedOutputStream extends java.io.OutputStream {
-    ctor public PipedOutputStream();
     ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
-    method public void connect(java.io.PipedInputStream) throws java.io.IOException;
+    ctor public PipedOutputStream();
+    method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
   }
 
   public class PipedReader extends java.io.Reader {
-    ctor public PipedReader();
     ctor public PipedReader(java.io.PipedWriter) throws java.io.IOException;
-    ctor public PipedReader(int);
     ctor public PipedReader(java.io.PipedWriter, int) throws java.io.IOException;
-    method public synchronized void close() throws java.io.IOException;
+    ctor public PipedReader();
+    ctor public PipedReader(int);
+    method public void close() throws java.io.IOException;
     method public void connect(java.io.PipedWriter) throws java.io.IOException;
     method public synchronized int read(char[], int, int) throws java.io.IOException;
   }
 
   public class PipedWriter extends java.io.Writer {
-    ctor public PipedWriter();
     ctor public PipedWriter(java.io.PipedReader) throws java.io.IOException;
+    ctor public PipedWriter();
     method public void close() throws java.io.IOException;
-    method public void connect(java.io.PipedReader) throws java.io.IOException;
-    method public void flush() throws java.io.IOException;
+    method public synchronized void connect(java.io.PipedReader) throws java.io.IOException;
+    method public synchronized void flush() throws java.io.IOException;
     method public void write(char[], int, int) throws java.io.IOException;
   }
 
@@ -43551,111 +43608,111 @@
     ctor public PrintStream(java.io.OutputStream);
     ctor public PrintStream(java.io.OutputStream, boolean);
     ctor public PrintStream(java.io.OutputStream, boolean, java.lang.String) throws java.io.UnsupportedEncodingException;
-    ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException;
-    ctor public PrintStream(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     ctor public PrintStream(java.lang.String) throws java.io.FileNotFoundException;
     ctor public PrintStream(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
-    method public java.io.PrintStream append(char);
+    ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException;
+    ctor public PrintStream(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     method public java.io.PrintStream append(java.lang.CharSequence);
     method public java.io.PrintStream append(java.lang.CharSequence, int, int);
+    method public java.io.PrintStream append(char);
     method public boolean checkError();
     method protected void clearError();
     method public java.io.PrintStream format(java.lang.String, java.lang.Object...);
     method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...);
-    method public void print(char[]);
+    method public void print(boolean);
     method public void print(char);
-    method public void print(double);
-    method public void print(float);
     method public void print(int);
     method public void print(long);
+    method public void print(float);
+    method public void print(double);
+    method public void print(char[]);
+    method public void print(java.lang.String);
     method public void print(java.lang.Object);
-    method public synchronized void print(java.lang.String);
-    method public void print(boolean);
     method public java.io.PrintStream printf(java.lang.String, java.lang.Object...);
     method public java.io.PrintStream printf(java.util.Locale, java.lang.String, java.lang.Object...);
     method public void println();
-    method public void println(char[]);
+    method public void println(boolean);
     method public void println(char);
-    method public void println(double);
-    method public void println(float);
     method public void println(int);
     method public void println(long);
+    method public void println(float);
+    method public void println(double);
+    method public void println(char[]);
+    method public void println(java.lang.String);
     method public void println(java.lang.Object);
-    method public synchronized void println(java.lang.String);
-    method public void println(boolean);
     method protected void setError();
   }
 
   public class PrintWriter extends java.io.Writer {
-    ctor public PrintWriter(java.io.OutputStream);
-    ctor public PrintWriter(java.io.OutputStream, boolean);
     ctor public PrintWriter(java.io.Writer);
     ctor public PrintWriter(java.io.Writer, boolean);
-    ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
-    ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public PrintWriter(java.io.OutputStream);
+    ctor public PrintWriter(java.io.OutputStream, boolean);
     ctor public PrintWriter(java.lang.String) throws java.io.FileNotFoundException;
     ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
+    ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     method public boolean checkError();
     method protected void clearError();
     method public void close();
     method public void flush();
     method public java.io.PrintWriter format(java.lang.String, java.lang.Object...);
     method public java.io.PrintWriter format(java.util.Locale, java.lang.String, java.lang.Object...);
-    method public void print(char[]);
+    method public void print(boolean);
     method public void print(char);
-    method public void print(double);
-    method public void print(float);
     method public void print(int);
     method public void print(long);
-    method public void print(java.lang.Object);
+    method public void print(float);
+    method public void print(double);
+    method public void print(char[]);
     method public void print(java.lang.String);
-    method public void print(boolean);
+    method public void print(java.lang.Object);
     method public java.io.PrintWriter printf(java.lang.String, java.lang.Object...);
     method public java.io.PrintWriter printf(java.util.Locale, java.lang.String, java.lang.Object...);
     method public void println();
-    method public void println(char[]);
+    method public void println(boolean);
     method public void println(char);
-    method public void println(double);
-    method public void println(float);
     method public void println(int);
     method public void println(long);
-    method public void println(java.lang.Object);
+    method public void println(float);
+    method public void println(double);
+    method public void println(char[]);
     method public void println(java.lang.String);
-    method public void println(boolean);
+    method public void println(java.lang.Object);
     method protected void setError();
     method public void write(char[], int, int);
     field protected java.io.Writer out;
   }
 
   public class PushbackInputStream extends java.io.FilterInputStream {
-    ctor public PushbackInputStream(java.io.InputStream);
     ctor public PushbackInputStream(java.io.InputStream, int);
-    method public void unread(byte[]) throws java.io.IOException;
-    method public void unread(byte[], int, int) throws java.io.IOException;
+    ctor public PushbackInputStream(java.io.InputStream);
     method public void unread(int) throws java.io.IOException;
+    method public void unread(byte[], int, int) throws java.io.IOException;
+    method public void unread(byte[]) throws java.io.IOException;
     field protected byte[] buf;
     field protected int pos;
   }
 
   public class PushbackReader extends java.io.FilterReader {
-    ctor public PushbackReader(java.io.Reader);
     ctor public PushbackReader(java.io.Reader, int);
-    method public void unread(char[]) throws java.io.IOException;
-    method public void unread(char[], int, int) throws java.io.IOException;
+    ctor public PushbackReader(java.io.Reader);
     method public void unread(int) throws java.io.IOException;
+    method public void unread(char[], int, int) throws java.io.IOException;
+    method public void unread(char[]) throws java.io.IOException;
   }
 
   public class RandomAccessFile implements java.io.Closeable java.io.DataInput java.io.DataOutput {
-    ctor public RandomAccessFile(java.io.File, java.lang.String) throws java.io.FileNotFoundException;
     ctor public RandomAccessFile(java.lang.String, java.lang.String) throws java.io.FileNotFoundException;
+    ctor public RandomAccessFile(java.io.File, java.lang.String) throws java.io.FileNotFoundException;
     method public void close() throws java.io.IOException;
-    method public final synchronized java.nio.channels.FileChannel getChannel();
+    method public final java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public long getFilePointer() throws java.io.IOException;
     method public long length() throws java.io.IOException;
     method public int read() throws java.io.IOException;
-    method public int read(byte[]) throws java.io.IOException;
     method public int read(byte[], int, int) throws java.io.IOException;
+    method public int read(byte[]) throws java.io.IOException;
     method public final boolean readBoolean() throws java.io.IOException;
     method public final byte readByte() throws java.io.IOException;
     method public final char readChar() throws java.io.IOException;
@@ -43673,9 +43730,9 @@
     method public void seek(long) throws java.io.IOException;
     method public void setLength(long) throws java.io.IOException;
     method public int skipBytes(int) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
     method public void write(byte[]) throws java.io.IOException;
     method public void write(byte[], int, int) throws java.io.IOException;
-    method public void write(int) throws java.io.IOException;
     method public final void writeBoolean(boolean) throws java.io.IOException;
     method public final void writeByte(int) throws java.io.IOException;
     method public final void writeBytes(java.lang.String) throws java.io.IOException;
@@ -43695,10 +43752,10 @@
     method public abstract void close() throws java.io.IOException;
     method public void mark(int) throws java.io.IOException;
     method public boolean markSupported();
+    method public int read(java.nio.CharBuffer) throws java.io.IOException;
     method public int read() throws java.io.IOException;
     method public int read(char[]) throws java.io.IOException;
     method public abstract int read(char[], int, int) throws java.io.IOException;
-    method public int read(java.nio.CharBuffer) throws java.io.IOException;
     method public boolean ready() throws java.io.IOException;
     method public void reset() throws java.io.IOException;
     method public long skip(long) throws java.io.IOException;
@@ -43706,8 +43763,8 @@
   }
 
   public class SequenceInputStream extends java.io.InputStream {
-    ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream);
     ctor public SequenceInputStream(java.util.Enumeration<? extends java.io.InputStream>);
+    ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream);
     method public int read() throws java.io.IOException;
   }
 
@@ -43720,8 +43777,8 @@
   }
 
   public class StreamCorruptedException extends java.io.ObjectStreamException {
-    ctor public StreamCorruptedException();
     ctor public StreamCorruptedException(java.lang.String);
+    ctor public StreamCorruptedException();
   }
 
   public class StreamTokenizer {
@@ -43796,14 +43853,14 @@
   public abstract class Writer implements java.lang.Appendable java.io.Closeable java.io.Flushable {
     ctor protected Writer();
     ctor protected Writer(java.lang.Object);
-    method public java.io.Writer append(char) throws java.io.IOException;
     method public java.io.Writer append(java.lang.CharSequence) throws java.io.IOException;
     method public java.io.Writer append(java.lang.CharSequence, int, int) throws java.io.IOException;
+    method public java.io.Writer append(char) throws java.io.IOException;
     method public abstract void close() throws java.io.IOException;
     method public abstract void flush() throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
     method public void write(char[]) throws java.io.IOException;
     method public abstract void write(char[], int, int) throws java.io.IOException;
-    method public void write(int) throws java.io.IOException;
     method public void write(java.lang.String) throws java.io.IOException;
     method public void write(java.lang.String, int, int) throws java.io.IOException;
     field protected java.lang.Object lock;
@@ -43818,32 +43875,63 @@
     ctor public AbstractMethodError(java.lang.String);
   }
 
-   abstract class AbstractStringBuilder {
+   abstract class AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence {
+    method public java.lang.AbstractStringBuilder append(java.lang.Object);
+    method public java.lang.AbstractStringBuilder append(java.lang.String);
+    method public java.lang.AbstractStringBuilder append(java.lang.StringBuffer);
+    method public java.lang.AbstractStringBuilder append(java.lang.CharSequence);
+    method public java.lang.AbstractStringBuilder append(java.lang.CharSequence, int, int);
+    method public java.lang.AbstractStringBuilder append(char[]);
+    method public java.lang.AbstractStringBuilder append(char[], int, int);
+    method public java.lang.AbstractStringBuilder append(boolean);
+    method public java.lang.AbstractStringBuilder append(char);
+    method public java.lang.AbstractStringBuilder append(int);
+    method public java.lang.AbstractStringBuilder append(long);
+    method public java.lang.AbstractStringBuilder append(float);
+    method public java.lang.AbstractStringBuilder append(double);
+    method public java.lang.AbstractStringBuilder appendCodePoint(int);
     method public int capacity();
     method public char charAt(int);
     method public int codePointAt(int);
     method public int codePointBefore(int);
     method public int codePointCount(int, int);
+    method public java.lang.AbstractStringBuilder delete(int, int);
+    method public java.lang.AbstractStringBuilder deleteCharAt(int);
     method public void ensureCapacity(int);
     method public void getChars(int, int, char[], int);
     method public int indexOf(java.lang.String);
     method public int indexOf(java.lang.String, int);
+    method public java.lang.AbstractStringBuilder insert(int, char[], int, int);
+    method public java.lang.AbstractStringBuilder insert(int, java.lang.Object);
+    method public java.lang.AbstractStringBuilder insert(int, java.lang.String);
+    method public java.lang.AbstractStringBuilder insert(int, char[]);
+    method public java.lang.AbstractStringBuilder insert(int, java.lang.CharSequence);
+    method public java.lang.AbstractStringBuilder insert(int, java.lang.CharSequence, int, int);
+    method public java.lang.AbstractStringBuilder insert(int, boolean);
+    method public java.lang.AbstractStringBuilder insert(int, char);
+    method public java.lang.AbstractStringBuilder insert(int, int);
+    method public java.lang.AbstractStringBuilder insert(int, long);
+    method public java.lang.AbstractStringBuilder insert(int, float);
+    method public java.lang.AbstractStringBuilder insert(int, double);
     method public int lastIndexOf(java.lang.String);
     method public int lastIndexOf(java.lang.String, int);
     method public int length();
     method public int offsetByCodePoints(int, int);
+    method public java.lang.AbstractStringBuilder replace(int, int, java.lang.String);
+    method public java.lang.AbstractStringBuilder reverse();
     method public void setCharAt(int, char);
     method public void setLength(int);
     method public java.lang.CharSequence subSequence(int, int);
     method public java.lang.String substring(int);
     method public java.lang.String substring(int, int);
+    method public abstract java.lang.String toString();
     method public void trimToSize();
   }
 
   public abstract interface Appendable {
-    method public abstract java.lang.Appendable append(char) throws java.io.IOException;
     method public abstract java.lang.Appendable append(java.lang.CharSequence) throws java.io.IOException;
     method public abstract java.lang.Appendable append(java.lang.CharSequence, int, int) throws java.io.IOException;
+    method public abstract java.lang.Appendable append(char) throws java.io.IOException;
   }
 
   public class ArithmeticException extends java.lang.RuntimeException {
@@ -43864,7 +43952,6 @@
 
   public class AssertionError extends java.lang.Error {
     ctor public AssertionError();
-    ctor public AssertionError(java.lang.String, java.lang.Throwable);
     ctor public AssertionError(java.lang.Object);
     ctor public AssertionError(boolean);
     ctor public AssertionError(char);
@@ -43872,6 +43959,7 @@
     ctor public AssertionError(long);
     ctor public AssertionError(float);
     ctor public AssertionError(double);
+    ctor public AssertionError(java.lang.String, java.lang.Throwable);
   }
 
   public abstract interface AutoCloseable {
@@ -43879,16 +43967,16 @@
   }
 
   public final class Boolean implements java.lang.Comparable java.io.Serializable {
-    ctor public Boolean(java.lang.String);
     ctor public Boolean(boolean);
+    ctor public Boolean(java.lang.String);
     method public boolean booleanValue();
     method public static int compare(boolean, boolean);
     method public int compareTo(java.lang.Boolean);
     method public static boolean getBoolean(java.lang.String);
     method public static boolean parseBoolean(java.lang.String);
     method public static java.lang.String toString(boolean);
-    method public static java.lang.Boolean valueOf(java.lang.String);
     method public static java.lang.Boolean valueOf(boolean);
+    method public static java.lang.Boolean valueOf(java.lang.String);
     field public static final java.lang.Boolean FALSE;
     field public static final java.lang.Boolean TRUE;
     field public static final java.lang.Class<java.lang.Boolean> TYPE;
@@ -43904,12 +43992,13 @@
     method public float floatValue();
     method public int intValue();
     method public long longValue();
-    method public static byte parseByte(java.lang.String) throws java.lang.NumberFormatException;
     method public static byte parseByte(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static byte parseByte(java.lang.String) throws java.lang.NumberFormatException;
+    method public static java.lang.String toHexString(byte, boolean);
     method public static java.lang.String toString(byte);
-    method public static java.lang.Byte valueOf(java.lang.String) throws java.lang.NumberFormatException;
-    method public static java.lang.Byte valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
     method public static java.lang.Byte valueOf(byte);
+    method public static java.lang.Byte valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static java.lang.Byte valueOf(java.lang.String) throws java.lang.NumberFormatException;
     field public static final byte MAX_VALUE = 127; // 0x7f
     field public static final byte MIN_VALUE = -128; // 0xffffff80
     field public static final int SIZE = 8; // 0x8
@@ -44082,7 +44171,7 @@
   }
 
   public static final class Character.UnicodeBlock extends java.lang.Character.Subset {
-    method public static java.lang.Character.UnicodeBlock forName(java.lang.String);
+    method public static final java.lang.Character.UnicodeBlock forName(java.lang.String);
     method public static java.lang.Character.UnicodeBlock of(char);
     method public static java.lang.Character.UnicodeBlock of(int);
     field public static final java.lang.Character.UnicodeBlock AEGEAN_NUMBERS;
@@ -44297,6 +44386,109 @@
     field public static final java.lang.Character.UnicodeBlock YI_SYLLABLES;
   }
 
+  public static final class Character.UnicodeScript extends java.lang.Enum {
+    method public static final java.lang.Character.UnicodeScript forName(java.lang.String);
+    method public static java.lang.Character.UnicodeScript of(int);
+    method public static java.lang.Character.UnicodeScript valueOf(java.lang.String);
+    method public static final java.lang.Character.UnicodeScript[] values();
+    enum_constant public static final java.lang.Character.UnicodeScript ARABIC;
+    enum_constant public static final java.lang.Character.UnicodeScript ARMENIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript AVESTAN;
+    enum_constant public static final java.lang.Character.UnicodeScript BALINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BAMUM;
+    enum_constant public static final java.lang.Character.UnicodeScript BATAK;
+    enum_constant public static final java.lang.Character.UnicodeScript BENGALI;
+    enum_constant public static final java.lang.Character.UnicodeScript BOPOMOFO;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAHMI;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAILLE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUGINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUHID;
+    enum_constant public static final java.lang.Character.UnicodeScript CANADIAN_ABORIGINAL;
+    enum_constant public static final java.lang.Character.UnicodeScript CARIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript CHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript CHEROKEE;
+    enum_constant public static final java.lang.Character.UnicodeScript COMMON;
+    enum_constant public static final java.lang.Character.UnicodeScript COPTIC;
+    enum_constant public static final java.lang.Character.UnicodeScript CUNEIFORM;
+    enum_constant public static final java.lang.Character.UnicodeScript CYPRIOT;
+    enum_constant public static final java.lang.Character.UnicodeScript CYRILLIC;
+    enum_constant public static final java.lang.Character.UnicodeScript DESERET;
+    enum_constant public static final java.lang.Character.UnicodeScript DEVANAGARI;
+    enum_constant public static final java.lang.Character.UnicodeScript EGYPTIAN_HIEROGLYPHS;
+    enum_constant public static final java.lang.Character.UnicodeScript ETHIOPIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GEORGIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript GLAGOLITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GOTHIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GREEK;
+    enum_constant public static final java.lang.Character.UnicodeScript GUJARATI;
+    enum_constant public static final java.lang.Character.UnicodeScript GURMUKHI;
+    enum_constant public static final java.lang.Character.UnicodeScript HAN;
+    enum_constant public static final java.lang.Character.UnicodeScript HANGUL;
+    enum_constant public static final java.lang.Character.UnicodeScript HANUNOO;
+    enum_constant public static final java.lang.Character.UnicodeScript HEBREW;
+    enum_constant public static final java.lang.Character.UnicodeScript HIRAGANA;
+    enum_constant public static final java.lang.Character.UnicodeScript IMPERIAL_ARAMAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript INHERITED;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PAHLAVI;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PARTHIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript JAVANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript KAITHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KANNADA;
+    enum_constant public static final java.lang.Character.UnicodeScript KATAKANA;
+    enum_constant public static final java.lang.Character.UnicodeScript KAYAH_LI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHAROSHTHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHMER;
+    enum_constant public static final java.lang.Character.UnicodeScript LAO;
+    enum_constant public static final java.lang.Character.UnicodeScript LATIN;
+    enum_constant public static final java.lang.Character.UnicodeScript LEPCHA;
+    enum_constant public static final java.lang.Character.UnicodeScript LIMBU;
+    enum_constant public static final java.lang.Character.UnicodeScript LINEAR_B;
+    enum_constant public static final java.lang.Character.UnicodeScript LISU;
+    enum_constant public static final java.lang.Character.UnicodeScript LYCIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript LYDIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MALAYALAM;
+    enum_constant public static final java.lang.Character.UnicodeScript MANDAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript MEETEI_MAYEK;
+    enum_constant public static final java.lang.Character.UnicodeScript MONGOLIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MYANMAR;
+    enum_constant public static final java.lang.Character.UnicodeScript NEW_TAI_LUE;
+    enum_constant public static final java.lang.Character.UnicodeScript NKO;
+    enum_constant public static final java.lang.Character.UnicodeScript OGHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_ITALIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_PERSIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_SOUTH_ARABIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_TURKIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OL_CHIKI;
+    enum_constant public static final java.lang.Character.UnicodeScript ORIYA;
+    enum_constant public static final java.lang.Character.UnicodeScript OSMANYA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHAGS_PA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHOENICIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript REJANG;
+    enum_constant public static final java.lang.Character.UnicodeScript RUNIC;
+    enum_constant public static final java.lang.Character.UnicodeScript SAMARITAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SAURASHTRA;
+    enum_constant public static final java.lang.Character.UnicodeScript SHAVIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SINHALA;
+    enum_constant public static final java.lang.Character.UnicodeScript SUNDANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript SYLOTI_NAGRI;
+    enum_constant public static final java.lang.Character.UnicodeScript SYRIAC;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGALOG;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGBANWA;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_LE;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_THAM;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_VIET;
+    enum_constant public static final java.lang.Character.UnicodeScript TAMIL;
+    enum_constant public static final java.lang.Character.UnicodeScript TELUGU;
+    enum_constant public static final java.lang.Character.UnicodeScript THAANA;
+    enum_constant public static final java.lang.Character.UnicodeScript THAI;
+    enum_constant public static final java.lang.Character.UnicodeScript TIBETAN;
+    enum_constant public static final java.lang.Character.UnicodeScript TIFINAGH;
+    enum_constant public static final java.lang.Character.UnicodeScript UGARITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript UNKNOWN;
+    enum_constant public static final java.lang.Character.UnicodeScript VAI;
+    enum_constant public static final java.lang.Character.UnicodeScript YI;
+  }
+
   public final class Class implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
     method public java.lang.Class<? extends U> asSubclass(java.lang.Class<U>);
     method public T cast(java.lang.Object);
@@ -44309,28 +44501,28 @@
     method public java.lang.ClassLoader getClassLoader();
     method public java.lang.Class<?>[] getClasses();
     method public java.lang.Class<?> getComponentType();
-    method public java.lang.reflect.Constructor<T> getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
-    method public java.lang.reflect.Constructor<?>[] getConstructors();
+    method public java.lang.reflect.Constructor<T> getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method public java.lang.reflect.Constructor<?>[] getConstructors() throws java.lang.SecurityException;
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public java.lang.Class<?>[] getDeclaredClasses();
-    method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
-    method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors();
+    method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors() throws java.lang.SecurityException;
     method public java.lang.reflect.Field getDeclaredField(java.lang.String) throws java.lang.NoSuchFieldException;
     method public java.lang.reflect.Field[] getDeclaredFields();
-    method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
-    method public java.lang.reflect.Method[] getDeclaredMethods();
+    method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method public java.lang.reflect.Method[] getDeclaredMethods() throws java.lang.SecurityException;
     method public java.lang.Class<?> getDeclaringClass();
     method public java.lang.Class<?> getEnclosingClass();
     method public java.lang.reflect.Constructor<?> getEnclosingConstructor();
     method public java.lang.reflect.Method getEnclosingMethod();
     method public T[] getEnumConstants();
     method public java.lang.reflect.Field getField(java.lang.String) throws java.lang.NoSuchFieldException;
-    method public java.lang.reflect.Field[] getFields();
+    method public java.lang.reflect.Field[] getFields() throws java.lang.SecurityException;
     method public java.lang.reflect.Type[] getGenericInterfaces();
     method public java.lang.reflect.Type getGenericSuperclass();
     method public java.lang.Class<?>[] getInterfaces();
-    method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
-    method public java.lang.reflect.Method[] getMethods();
+    method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method public java.lang.reflect.Method[] getMethods() throws java.lang.SecurityException;
     method public int getModifiers();
     method public java.lang.String getName();
     method public java.lang.Package getPackage();
@@ -44372,8 +44564,8 @@
   }
 
   public abstract class ClassLoader {
-    ctor protected ClassLoader();
     ctor protected ClassLoader(java.lang.ClassLoader);
+    ctor protected ClassLoader();
     method public void clearAssertionStatus();
     method protected final deprecated java.lang.Class<?> defineClass(byte[], int, int) throws java.lang.ClassFormatError;
     method protected final java.lang.Class<?> defineClass(java.lang.String, byte[], int, int) throws java.lang.ClassFormatError;
@@ -44398,6 +44590,7 @@
     method public static java.util.Enumeration<java.net.URL> getSystemResources(java.lang.String) throws java.io.IOException;
     method public java.lang.Class<?> loadClass(java.lang.String) throws java.lang.ClassNotFoundException;
     method protected java.lang.Class<?> loadClass(java.lang.String, boolean) throws java.lang.ClassNotFoundException;
+    method protected static boolean registerAsParallelCapable();
     method protected final void resolveClass(java.lang.Class<?>);
     method public void setClassAssertionStatus(java.lang.String, boolean);
     method public void setDefaultAssertionStatus(boolean);
@@ -44445,10 +44638,10 @@
     method public double doubleValue();
     method public float floatValue();
     method public int intValue();
-    method public boolean isInfinite();
     method public static boolean isInfinite(double);
-    method public boolean isNaN();
+    method public boolean isInfinite();
     method public static boolean isNaN(double);
+    method public boolean isNaN();
     method public static double longBitsToDouble(long);
     method public long longValue();
     method public static double parseDouble(java.lang.String) throws java.lang.NumberFormatException;
@@ -44492,6 +44685,7 @@
     ctor public Error(java.lang.String);
     ctor public Error(java.lang.String, java.lang.Throwable);
     ctor public Error(java.lang.Throwable);
+    ctor protected Error(java.lang.String, java.lang.Throwable, boolean, boolean);
   }
 
   public class Exception extends java.lang.Throwable {
@@ -44499,12 +44693,13 @@
     ctor public Exception(java.lang.String);
     ctor public Exception(java.lang.String, java.lang.Throwable);
     ctor public Exception(java.lang.Throwable);
+    ctor protected Exception(java.lang.String, java.lang.Throwable, boolean, boolean);
   }
 
   public class ExceptionInInitializerError extends java.lang.LinkageError {
     ctor public ExceptionInInitializerError();
-    ctor public ExceptionInInitializerError(java.lang.String);
     ctor public ExceptionInInitializerError(java.lang.Throwable);
+    ctor public ExceptionInInitializerError(java.lang.String);
     method public java.lang.Throwable getException();
   }
 
@@ -44520,10 +44715,10 @@
     method public float floatValue();
     method public static float intBitsToFloat(int);
     method public int intValue();
-    method public boolean isInfinite();
     method public static boolean isInfinite(float);
-    method public boolean isNaN();
+    method public boolean isInfinite();
     method public static boolean isNaN(float);
+    method public boolean isNaN();
     method public long longValue();
     method public static float parseFloat(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.String toHexString(float);
@@ -44619,8 +44814,8 @@
     method public static int lowestOneBit(int);
     method public static int numberOfLeadingZeros(int);
     method public static int numberOfTrailingZeros(int);
-    method public static int parseInt(java.lang.String) throws java.lang.NumberFormatException;
     method public static int parseInt(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static int parseInt(java.lang.String) throws java.lang.NumberFormatException;
     method public static int reverse(int);
     method public static int reverseBytes(int);
     method public static int rotateLeft(int, int);
@@ -44629,10 +44824,10 @@
     method public static java.lang.String toBinaryString(int);
     method public static java.lang.String toHexString(int);
     method public static java.lang.String toOctalString(int);
-    method public static java.lang.String toString(int);
     method public static java.lang.String toString(int, int);
-    method public static java.lang.Integer valueOf(java.lang.String) throws java.lang.NumberFormatException;
+    method public static java.lang.String toString(int);
     method public static java.lang.Integer valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static java.lang.Integer valueOf(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.Integer valueOf(int);
     field public static final int MAX_VALUE = 2147483647; // 0x7fffffff
     field public static final int MIN_VALUE = -2147483648; // 0x80000000
@@ -44678,8 +44873,8 @@
     method public static long lowestOneBit(long);
     method public static int numberOfLeadingZeros(long);
     method public static int numberOfTrailingZeros(long);
-    method public static long parseLong(java.lang.String) throws java.lang.NumberFormatException;
     method public static long parseLong(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static long parseLong(java.lang.String) throws java.lang.NumberFormatException;
     method public static long reverse(long);
     method public static long reverseBytes(long);
     method public static long rotateLeft(long, int);
@@ -44688,10 +44883,10 @@
     method public static java.lang.String toBinaryString(long);
     method public static java.lang.String toHexString(long);
     method public static java.lang.String toOctalString(long);
-    method public static java.lang.String toString(long);
     method public static java.lang.String toString(long, int);
-    method public static java.lang.Long valueOf(java.lang.String) throws java.lang.NumberFormatException;
+    method public static java.lang.String toString(long);
     method public static java.lang.Long valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static java.lang.Long valueOf(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.Long valueOf(long);
     field public static final long MAX_VALUE = 9223372036854775807L; // 0x7fffffffffffffffL
     field public static final long MIN_VALUE = -9223372036854775808L; // 0x8000000000000000L
@@ -44701,10 +44896,10 @@
 
   public final class Math {
     method public static double IEEEremainder(double, double);
-    method public static double abs(double);
-    method public static float abs(float);
     method public static int abs(int);
     method public static long abs(long);
+    method public static float abs(float);
+    method public static double abs(double);
     method public static double acos(double);
     method public static double asin(double);
     method public static double atan(double);
@@ -44724,14 +44919,14 @@
     method public static double log(double);
     method public static double log10(double);
     method public static double log1p(double);
-    method public static double max(double, double);
-    method public static float max(float, float);
     method public static int max(int, int);
     method public static long max(long, long);
-    method public static double min(double, double);
-    method public static float min(float, float);
+    method public static float max(float, float);
+    method public static double max(double, double);
     method public static int min(int, int);
     method public static long min(long, long);
+    method public static float min(float, float);
+    method public static double min(double, double);
     method public static double nextAfter(double, double);
     method public static float nextAfter(float, double);
     method public static double nextUp(double);
@@ -44739,8 +44934,8 @@
     method public static double pow(double, double);
     method public static double random();
     method public static double rint(double);
-    method public static long round(double);
     method public static int round(float);
+    method public static long round(double);
     method public static double scalb(double, int);
     method public static float scalb(float, int);
     method public static double signum(double);
@@ -44818,9 +45013,9 @@
     method public final void notify();
     method public final void notifyAll();
     method public java.lang.String toString();
-    method public final void wait() throws java.lang.InterruptedException;
     method public final void wait(long) throws java.lang.InterruptedException;
     method public final void wait(long, int) throws java.lang.InterruptedException;
+    method public final void wait() throws java.lang.InterruptedException;
   }
 
   public class OutOfMemoryError extends java.lang.VirtualMachineError {
@@ -44861,19 +45056,49 @@
   }
 
   public final class ProcessBuilder {
-    ctor public ProcessBuilder(java.lang.String...);
     ctor public ProcessBuilder(java.util.List<java.lang.String>);
-    method public java.util.List<java.lang.String> command();
-    method public java.lang.ProcessBuilder command(java.lang.String...);
+    ctor public ProcessBuilder(java.lang.String...);
     method public java.lang.ProcessBuilder command(java.util.List<java.lang.String>);
+    method public java.lang.ProcessBuilder command(java.lang.String...);
+    method public java.util.List<java.lang.String> command();
     method public java.io.File directory();
     method public java.lang.ProcessBuilder directory(java.io.File);
     method public java.util.Map<java.lang.String, java.lang.String> environment();
+    method public java.lang.ProcessBuilder inheritIO();
+    method public java.lang.ProcessBuilder redirectError(java.lang.ProcessBuilder.Redirect);
+    method public java.lang.ProcessBuilder redirectError(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectError();
     method public boolean redirectErrorStream();
     method public java.lang.ProcessBuilder redirectErrorStream(boolean);
+    method public java.lang.ProcessBuilder redirectInput(java.lang.ProcessBuilder.Redirect);
+    method public java.lang.ProcessBuilder redirectInput(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectInput();
+    method public java.lang.ProcessBuilder redirectOutput(java.lang.ProcessBuilder.Redirect);
+    method public java.lang.ProcessBuilder redirectOutput(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectOutput();
     method public java.lang.Process start() throws java.io.IOException;
   }
 
+  public static abstract class ProcessBuilder.Redirect {
+    method public static java.lang.ProcessBuilder.Redirect appendTo(java.io.File);
+    method public java.io.File file();
+    method public static java.lang.ProcessBuilder.Redirect from(java.io.File);
+    method public static java.lang.ProcessBuilder.Redirect to(java.io.File);
+    method public abstract java.lang.ProcessBuilder.Redirect.Type type();
+    field public static final java.lang.ProcessBuilder.Redirect INHERIT;
+    field public static final java.lang.ProcessBuilder.Redirect PIPE;
+  }
+
+  public static final class ProcessBuilder.Redirect.Type extends java.lang.Enum {
+    method public static java.lang.ProcessBuilder.Redirect.Type valueOf(java.lang.String);
+    method public static final java.lang.ProcessBuilder.Redirect.Type[] values();
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type APPEND;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type INHERIT;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type PIPE;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type READ;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type WRITE;
+  }
+
   public abstract interface Readable {
     method public abstract int read(java.nio.CharBuffer) throws java.io.IOException;
   }
@@ -44881,8 +45106,8 @@
   public class ReflectiveOperationException extends java.lang.Exception {
     ctor public ReflectiveOperationException();
     ctor public ReflectiveOperationException(java.lang.String);
-    ctor public ReflectiveOperationException(java.lang.Throwable);
     ctor public ReflectiveOperationException(java.lang.String, java.lang.Throwable);
+    ctor public ReflectiveOperationException(java.lang.Throwable);
   }
 
   public abstract interface Runnable {
@@ -44892,12 +45117,12 @@
   public class Runtime {
     method public void addShutdownHook(java.lang.Thread);
     method public int availableProcessors();
-    method public java.lang.Process exec(java.lang.String[]) throws java.io.IOException;
-    method public java.lang.Process exec(java.lang.String[], java.lang.String[]) throws java.io.IOException;
-    method public java.lang.Process exec(java.lang.String[], java.lang.String[], java.io.File) throws java.io.IOException;
     method public java.lang.Process exec(java.lang.String) throws java.io.IOException;
     method public java.lang.Process exec(java.lang.String, java.lang.String[]) throws java.io.IOException;
     method public java.lang.Process exec(java.lang.String, java.lang.String[], java.io.File) throws java.io.IOException;
+    method public java.lang.Process exec(java.lang.String[]) throws java.io.IOException;
+    method public java.lang.Process exec(java.lang.String[], java.lang.String[]) throws java.io.IOException;
+    method public java.lang.Process exec(java.lang.String[], java.lang.String[], java.io.File) throws java.io.IOException;
     method public void exit(int);
     method public long freeMemory();
     method public void gc();
@@ -44921,6 +45146,7 @@
     ctor public RuntimeException(java.lang.String);
     ctor public RuntimeException(java.lang.String, java.lang.Throwable);
     ctor public RuntimeException(java.lang.Throwable);
+    ctor protected RuntimeException(java.lang.String, java.lang.Throwable, boolean, boolean);
   }
 
   public final class RuntimePermission extends java.security.BasicPermission {
@@ -44985,8 +45211,8 @@
   }
 
   public final class Short extends java.lang.Number implements java.lang.Comparable {
-    ctor public Short(java.lang.String) throws java.lang.NumberFormatException;
     ctor public Short(short);
+    ctor public Short(java.lang.String) throws java.lang.NumberFormatException;
     method public static int compare(short, short);
     method public int compareTo(java.lang.Short);
     method public static java.lang.Short decode(java.lang.String) throws java.lang.NumberFormatException;
@@ -44994,12 +45220,12 @@
     method public float floatValue();
     method public int intValue();
     method public long longValue();
-    method public static short parseShort(java.lang.String) throws java.lang.NumberFormatException;
     method public static short parseShort(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static short parseShort(java.lang.String) throws java.lang.NumberFormatException;
     method public static short reverseBytes(short);
     method public static java.lang.String toString(short);
-    method public static java.lang.Short valueOf(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.Short valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static java.lang.Short valueOf(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.Short valueOf(short);
     field public static final short MAX_VALUE = 32767; // 0x7fff
     field public static final short MIN_VALUE = -32768; // 0xffff8000
@@ -45023,10 +45249,10 @@
 
   public final class StrictMath {
     method public static double IEEEremainder(double, double);
-    method public static double abs(double);
-    method public static float abs(float);
     method public static int abs(int);
     method public static long abs(long);
+    method public static float abs(float);
+    method public static double abs(double);
     method public static double acos(double);
     method public static double asin(double);
     method public static double atan(double);
@@ -45046,14 +45272,14 @@
     method public static double log(double);
     method public static double log10(double);
     method public static double log1p(double);
-    method public static double max(double, double);
-    method public static float max(float, float);
     method public static int max(int, int);
     method public static long max(long, long);
-    method public static double min(double, double);
-    method public static float min(float, float);
+    method public static float max(float, float);
+    method public static double max(double, double);
     method public static int min(int, int);
     method public static long min(long, long);
+    method public static float min(float, float);
+    method public static double min(double, double);
     method public static double nextAfter(double, double);
     method public static float nextAfter(float, double);
     method public static double nextUp(double);
@@ -45061,8 +45287,8 @@
     method public static double pow(double, double);
     method public static double random();
     method public static double rint(double);
-    method public static long round(double);
     method public static int round(float);
+    method public static long round(double);
     method public static double scalb(double, int);
     method public static float scalb(float, int);
     method public static double signum(double);
@@ -45082,19 +45308,19 @@
 
   public final class String implements java.lang.CharSequence java.lang.Comparable java.io.Serializable {
     ctor public String();
-    ctor public String(byte[]);
-    ctor public deprecated String(byte[], int);
-    ctor public String(byte[], int, int);
-    ctor public deprecated String(byte[], int, int, int);
-    ctor public String(byte[], int, int, java.lang.String) throws java.io.UnsupportedEncodingException;
-    ctor public String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException;
-    ctor public String(byte[], int, int, java.nio.charset.Charset);
-    ctor public String(byte[], java.nio.charset.Charset);
+    ctor public String(java.lang.String);
     ctor public String(char[]);
     ctor public String(char[], int, int);
-    ctor public String(java.lang.String);
-    ctor public String(java.lang.StringBuffer);
     ctor public String(int[], int, int);
+    ctor public deprecated String(byte[], int, int, int);
+    ctor public deprecated String(byte[], int);
+    ctor public String(byte[], int, int, java.lang.String) throws java.io.UnsupportedEncodingException;
+    ctor public String(byte[], int, int, java.nio.charset.Charset);
+    ctor public String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException;
+    ctor public String(byte[], java.nio.charset.Charset);
+    ctor public String(byte[], int, int);
+    ctor public String(byte[]);
+    ctor public String(java.lang.StringBuffer);
     ctor public String(java.lang.StringBuilder);
     method public char charAt(int);
     method public int codePointAt(int);
@@ -45106,16 +45332,16 @@
     method public boolean contains(java.lang.CharSequence);
     method public boolean contentEquals(java.lang.StringBuffer);
     method public boolean contentEquals(java.lang.CharSequence);
-    method public static java.lang.String copyValueOf(char[]);
     method public static java.lang.String copyValueOf(char[], int, int);
+    method public static java.lang.String copyValueOf(char[]);
     method public boolean endsWith(java.lang.String);
     method public boolean equalsIgnoreCase(java.lang.String);
     method public static java.lang.String format(java.lang.String, java.lang.Object...);
     method public static java.lang.String format(java.util.Locale, java.lang.String, java.lang.Object...);
     method public deprecated void getBytes(int, int, byte[], int);
-    method public byte[] getBytes();
     method public byte[] getBytes(java.lang.String) throws java.io.UnsupportedEncodingException;
     method public byte[] getBytes(java.nio.charset.Charset);
+    method public byte[] getBytes();
     method public void getChars(int, int, char[], int);
     method public int indexOf(int);
     method public int indexOf(int, int);
@@ -45136,109 +45362,51 @@
     method public java.lang.String replace(java.lang.CharSequence, java.lang.CharSequence);
     method public java.lang.String replaceAll(java.lang.String, java.lang.String);
     method public java.lang.String replaceFirst(java.lang.String, java.lang.String);
-    method public java.lang.String[] split(java.lang.String);
     method public java.lang.String[] split(java.lang.String, int);
-    method public boolean startsWith(java.lang.String);
+    method public java.lang.String[] split(java.lang.String);
     method public boolean startsWith(java.lang.String, int);
+    method public boolean startsWith(java.lang.String);
     method public java.lang.CharSequence subSequence(int, int);
     method public java.lang.String substring(int);
     method public java.lang.String substring(int, int);
     method public char[] toCharArray();
-    method public java.lang.String toLowerCase();
     method public java.lang.String toLowerCase(java.util.Locale);
-    method public java.lang.String toUpperCase();
+    method public java.lang.String toLowerCase();
     method public java.lang.String toUpperCase(java.util.Locale);
+    method public java.lang.String toUpperCase();
     method public java.lang.String trim();
+    method public static java.lang.String valueOf(java.lang.Object);
     method public static java.lang.String valueOf(char[]);
     method public static java.lang.String valueOf(char[], int, int);
+    method public static java.lang.String valueOf(boolean);
     method public static java.lang.String valueOf(char);
-    method public static java.lang.String valueOf(double);
-    method public static java.lang.String valueOf(float);
     method public static java.lang.String valueOf(int);
     method public static java.lang.String valueOf(long);
-    method public static java.lang.String valueOf(java.lang.Object);
-    method public static java.lang.String valueOf(boolean);
+    method public static java.lang.String valueOf(float);
+    method public static java.lang.String valueOf(double);
     field public static final java.util.Comparator<java.lang.String> CASE_INSENSITIVE_ORDER;
   }
 
-  public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable {
+  public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
     ctor public StringBuffer();
     ctor public StringBuffer(int);
     ctor public StringBuffer(java.lang.String);
     ctor public StringBuffer(java.lang.CharSequence);
-    method public java.lang.StringBuffer append(boolean);
-    method public synchronized java.lang.StringBuffer append(char);
-    method public java.lang.StringBuffer append(double);
-    method public java.lang.StringBuffer append(float);
-    method public java.lang.StringBuffer append(int);
-    method public java.lang.StringBuffer append(long);
-    method public synchronized java.lang.StringBuffer append(java.lang.Object);
-    method public synchronized java.lang.StringBuffer append(java.lang.String);
-    method public synchronized java.lang.StringBuffer append(java.lang.StringBuffer);
-    method public synchronized java.lang.StringBuffer append(char[]);
-    method public synchronized java.lang.StringBuffer append(char[], int, int);
-    method public synchronized java.lang.StringBuffer append(java.lang.CharSequence);
-    method public synchronized java.lang.StringBuffer append(java.lang.CharSequence, int, int);
-    method public java.lang.StringBuffer appendCodePoint(int);
-    method public synchronized java.lang.StringBuffer delete(int, int);
-    method public synchronized java.lang.StringBuffer deleteCharAt(int);
-    method public synchronized java.lang.StringBuffer insert(int, char);
-    method public java.lang.StringBuffer insert(int, boolean);
-    method public java.lang.StringBuffer insert(int, int);
-    method public java.lang.StringBuffer insert(int, long);
-    method public java.lang.StringBuffer insert(int, double);
-    method public java.lang.StringBuffer insert(int, float);
-    method public java.lang.StringBuffer insert(int, java.lang.Object);
-    method public synchronized java.lang.StringBuffer insert(int, java.lang.String);
-    method public synchronized java.lang.StringBuffer insert(int, char[]);
-    method public synchronized java.lang.StringBuffer insert(int, char[], int, int);
-    method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence);
-    method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence, int, int);
-    method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String);
-    method public synchronized java.lang.StringBuffer reverse();
+    method public synchronized java.lang.String toString();
   }
 
-  public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable {
+  public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
     ctor public StringBuilder();
     ctor public StringBuilder(int);
-    ctor public StringBuilder(java.lang.CharSequence);
     ctor public StringBuilder(java.lang.String);
-    method public java.lang.StringBuilder append(boolean);
-    method public java.lang.StringBuilder append(char);
-    method public java.lang.StringBuilder append(int);
-    method public java.lang.StringBuilder append(long);
-    method public java.lang.StringBuilder append(float);
-    method public java.lang.StringBuilder append(double);
-    method public java.lang.StringBuilder append(java.lang.Object);
-    method public java.lang.StringBuilder append(java.lang.String);
-    method public java.lang.StringBuilder append(java.lang.StringBuffer);
-    method public java.lang.StringBuilder append(char[]);
-    method public java.lang.StringBuilder append(char[], int, int);
-    method public java.lang.StringBuilder append(java.lang.CharSequence);
-    method public java.lang.StringBuilder append(java.lang.CharSequence, int, int);
-    method public java.lang.StringBuilder appendCodePoint(int);
-    method public java.lang.StringBuilder delete(int, int);
-    method public java.lang.StringBuilder deleteCharAt(int);
-    method public java.lang.StringBuilder insert(int, boolean);
-    method public java.lang.StringBuilder insert(int, char);
-    method public java.lang.StringBuilder insert(int, int);
-    method public java.lang.StringBuilder insert(int, long);
-    method public java.lang.StringBuilder insert(int, float);
-    method public java.lang.StringBuilder insert(int, double);
-    method public java.lang.StringBuilder insert(int, java.lang.Object);
-    method public java.lang.StringBuilder insert(int, java.lang.String);
-    method public java.lang.StringBuilder insert(int, char[]);
-    method public java.lang.StringBuilder insert(int, char[], int, int);
-    method public java.lang.StringBuilder insert(int, java.lang.CharSequence);
-    method public java.lang.StringBuilder insert(int, java.lang.CharSequence, int, int);
-    method public java.lang.StringBuilder replace(int, int, java.lang.String);
-    method public java.lang.StringBuilder reverse();
+    ctor public StringBuilder(java.lang.CharSequence);
+    method public java.lang.String toString();
   }
 
   public class StringIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException {
     ctor public StringIndexOutOfBoundsException();
-    ctor public StringIndexOutOfBoundsException(int);
     ctor public StringIndexOutOfBoundsException(java.lang.String);
+    ctor public StringIndexOutOfBoundsException(int);
   }
 
   public abstract class SuppressWarnings implements java.lang.annotation.Annotation {
@@ -45280,11 +45448,11 @@
   public class Thread implements java.lang.Runnable {
     ctor public Thread();
     ctor public Thread(java.lang.Runnable);
-    ctor public Thread(java.lang.Runnable, java.lang.String);
-    ctor public Thread(java.lang.String);
     ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable);
-    ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String);
+    ctor public Thread(java.lang.String);
     ctor public Thread(java.lang.ThreadGroup, java.lang.String);
+    ctor public Thread(java.lang.Runnable, java.lang.String);
+    ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String);
     ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String, long);
     method public static int activeCount();
     method public final void checkAccess();
@@ -45309,9 +45477,9 @@
     method public final boolean isAlive();
     method public final boolean isDaemon();
     method public boolean isInterrupted();
-    method public final void join() throws java.lang.InterruptedException;
     method public final void join(long) throws java.lang.InterruptedException;
     method public final void join(long, int) throws java.lang.InterruptedException;
+    method public final void join() throws java.lang.InterruptedException;
     method public final deprecated void resume();
     method public void run();
     method public void setContextClassLoader(java.lang.ClassLoader);
@@ -45324,7 +45492,7 @@
     method public static void sleep(long, int) throws java.lang.InterruptedException;
     method public synchronized void start();
     method public final deprecated void stop();
-    method public final deprecated synchronized void stop(java.lang.Throwable);
+    method public final deprecated void stop(java.lang.Throwable);
     method public final deprecated void suspend();
     method public static void yield();
     field public static final int MAX_PRIORITY = 10; // 0xa
@@ -45393,14 +45561,14 @@
     ctor public Throwable(java.lang.String, java.lang.Throwable);
     ctor public Throwable(java.lang.Throwable);
     ctor protected Throwable(java.lang.String, java.lang.Throwable, boolean, boolean);
-    method public final void addSuppressed(java.lang.Throwable);
-    method public java.lang.Throwable fillInStackTrace();
-    method public java.lang.Throwable getCause();
+    method public final synchronized void addSuppressed(java.lang.Throwable);
+    method public synchronized java.lang.Throwable fillInStackTrace();
+    method public synchronized java.lang.Throwable getCause();
     method public java.lang.String getLocalizedMessage();
     method public java.lang.String getMessage();
     method public java.lang.StackTraceElement[] getStackTrace();
-    method public final java.lang.Throwable[] getSuppressed();
-    method public java.lang.Throwable initCause(java.lang.Throwable);
+    method public final synchronized java.lang.Throwable[] getSuppressed();
+    method public synchronized java.lang.Throwable initCause(java.lang.Throwable);
     method public void printStackTrace();
     method public void printStackTrace(java.io.PrintStream);
     method public void printStackTrace(java.io.PrintWriter);
@@ -45521,15 +45689,16 @@
   public abstract class Reference {
     method public void clear();
     method public boolean enqueue();
+    method public final synchronized boolean enqueueInternal();
     method public T get();
     method public boolean isEnqueued();
   }
 
   public class ReferenceQueue {
     ctor public ReferenceQueue();
-    method public synchronized java.lang.ref.Reference<? extends T> poll();
+    method public java.lang.ref.Reference<? extends T> poll();
+    method public java.lang.ref.Reference<? extends T> remove(long) throws java.lang.IllegalArgumentException, java.lang.InterruptedException;
     method public java.lang.ref.Reference<? extends T> remove() throws java.lang.InterruptedException;
-    method public synchronized java.lang.ref.Reference<? extends T> remove(long) throws java.lang.InterruptedException;
   }
 
   public class SoftReference extends java.lang.ref.Reference {
@@ -45553,8 +45722,8 @@
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public boolean isAccessible();
     method public boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
-    method public void setAccessible(boolean);
-    method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean);
+    method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean) throws java.lang.SecurityException;
+    method public void setAccessible(boolean) throws java.lang.SecurityException;
   }
 
   public abstract interface AnnotatedElement {
@@ -45575,8 +45744,9 @@
     method public static int getLength(java.lang.Object);
     method public static long getLong(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
     method public static short getShort(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
-    method public static java.lang.Object newInstance(java.lang.Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException;
+    method public static java.lang.Object newArray(java.lang.Class<?>, int) throws java.lang.NegativeArraySizeException;
     method public static java.lang.Object newInstance(java.lang.Class<?>, int) throws java.lang.NegativeArraySizeException;
+    method public static java.lang.Object newInstance(java.lang.Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException;
     method public static void set(java.lang.Object, int, java.lang.Object) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
     method public static void setBoolean(java.lang.Object, int, boolean);
     method public static void setByte(java.lang.Object, int, byte) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
@@ -45591,7 +45761,6 @@
   public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
     method public boolean equals(java.lang.Object);
     method public A getAnnotation(java.lang.Class<A>);
-    method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public java.lang.Class<T> getDeclaringClass();
     method public java.lang.Class<?>[] getExceptionTypes();
@@ -45678,7 +45847,6 @@
   public final class Method extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
     method public boolean equals(java.lang.Object);
     method public A getAnnotation(java.lang.Class<A>);
-    method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public java.lang.Class<?> getDeclaringClass();
     method public java.lang.Object getDefaultValue();
@@ -45959,10 +46127,10 @@
     method protected final java.net.InetAddress getRequestingSite();
     method protected java.net.URL getRequestingURL();
     method protected java.net.Authenticator.RequestorType getRequestorType();
-    method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);
-    method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);
     method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String, java.net.URL, java.net.Authenticator.RequestorType);
-    method public static void setDefault(java.net.Authenticator);
+    method public static synchronized void setDefault(java.net.Authenticator);
   }
 
   public static final class Authenticator.RequestorType extends java.lang.Enum {
@@ -45973,8 +46141,9 @@
   }
 
   public class BindException extends java.net.SocketException {
-    ctor public BindException();
     ctor public BindException(java.lang.String);
+    ctor public BindException();
+    ctor public BindException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract class CacheRequest {
@@ -45990,8 +46159,9 @@
   }
 
   public class ConnectException extends java.net.SocketException {
-    ctor public ConnectException();
     ctor public ConnectException(java.lang.String);
+    ctor public ConnectException();
+    ctor public ConnectException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract class ContentHandler {
@@ -46007,9 +46177,9 @@
   public abstract class CookieHandler {
     ctor public CookieHandler();
     method public abstract java.util.Map<java.lang.String, java.util.List<java.lang.String>> get(java.net.URI, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException;
-    method public static java.net.CookieHandler getDefault();
+    method public static synchronized java.net.CookieHandler getDefault();
     method public abstract void put(java.net.URI, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException;
-    method public static void setDefault(java.net.CookieHandler);
+    method public static synchronized void setDefault(java.net.CookieHandler);
   }
 
   public class CookieManager extends java.net.CookieHandler {
@@ -46038,12 +46208,12 @@
   }
 
   public final class DatagramPacket {
-    ctor public DatagramPacket(byte[], int);
     ctor public DatagramPacket(byte[], int, int);
+    ctor public DatagramPacket(byte[], int);
     ctor public DatagramPacket(byte[], int, int, java.net.InetAddress, int);
+    ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress) throws java.net.SocketException;
     ctor public DatagramPacket(byte[], int, java.net.InetAddress, int);
     ctor public DatagramPacket(byte[], int, java.net.SocketAddress) throws java.net.SocketException;
-    ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress) throws java.net.SocketException;
     method public synchronized java.net.InetAddress getAddress();
     method public synchronized byte[] getData();
     method public synchronized int getLength();
@@ -46060,17 +46230,18 @@
 
   public class DatagramSocket implements java.io.Closeable {
     ctor public DatagramSocket() throws java.net.SocketException;
-    ctor public DatagramSocket(int) throws java.net.SocketException;
-    ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException;
     ctor protected DatagramSocket(java.net.DatagramSocketImpl);
     ctor public DatagramSocket(java.net.SocketAddress) throws java.net.SocketException;
-    method public void bind(java.net.SocketAddress) throws java.net.SocketException;
+    ctor public DatagramSocket(int) throws java.net.SocketException;
+    ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException;
+    method public synchronized void bind(java.net.SocketAddress) throws java.net.SocketException;
     method public void close();
-    method public void connect(java.net.SocketAddress) throws java.net.SocketException;
     method public void connect(java.net.InetAddress, int);
+    method public void connect(java.net.SocketAddress) throws java.net.SocketException;
     method public void disconnect();
-    method public boolean getBroadcast() throws java.net.SocketException;
+    method public synchronized boolean getBroadcast() throws java.net.SocketException;
     method public java.nio.channels.DatagramChannel getChannel();
+    method public final java.io.FileDescriptor getFileDescriptor$();
     method public java.net.InetAddress getInetAddress();
     method public java.net.InetAddress getLocalAddress();
     method public int getLocalPort();
@@ -46078,22 +46249,22 @@
     method public int getPort();
     method public synchronized int getReceiveBufferSize() throws java.net.SocketException;
     method public java.net.SocketAddress getRemoteSocketAddress();
-    method public boolean getReuseAddress() throws java.net.SocketException;
+    method public synchronized boolean getReuseAddress() throws java.net.SocketException;
     method public synchronized int getSendBufferSize() throws java.net.SocketException;
     method public synchronized int getSoTimeout() throws java.net.SocketException;
-    method public int getTrafficClass() throws java.net.SocketException;
+    method public synchronized int getTrafficClass() throws java.net.SocketException;
     method public boolean isBound();
     method public boolean isClosed();
     method public boolean isConnected();
     method public synchronized void receive(java.net.DatagramPacket) throws java.io.IOException;
     method public void send(java.net.DatagramPacket) throws java.io.IOException;
-    method public void setBroadcast(boolean) throws java.net.SocketException;
+    method public synchronized void setBroadcast(boolean) throws java.net.SocketException;
     method public static synchronized void setDatagramSocketImplFactory(java.net.DatagramSocketImplFactory) throws java.io.IOException;
     method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException;
-    method public void setReuseAddress(boolean) throws java.net.SocketException;
+    method public synchronized void setReuseAddress(boolean) throws java.net.SocketException;
     method public synchronized void setSendBufferSize(int) throws java.net.SocketException;
     method public synchronized void setSoTimeout(int) throws java.net.SocketException;
-    method public void setTrafficClass(int) throws java.net.SocketException;
+    method public synchronized void setTrafficClass(int) throws java.net.SocketException;
   }
 
   public abstract class DatagramSocketImpl implements java.net.SocketOptions {
@@ -46145,11 +46316,14 @@
     method public java.lang.String getValue();
     method public int getVersion();
     method public boolean hasExpired();
+    method public boolean isHttpOnly();
     method public static java.util.List<java.net.HttpCookie> parse(java.lang.String);
+    method public static java.util.List<java.net.HttpCookie> parse(java.lang.String, boolean);
     method public void setComment(java.lang.String);
     method public void setCommentURL(java.lang.String);
     method public void setDiscard(boolean);
     method public void setDomain(java.lang.String);
+    method public void setHttpOnly(boolean);
     method public void setMaxAge(long);
     method public void setPath(java.lang.String);
     method public void setPortlist(java.lang.String);
@@ -46176,8 +46350,8 @@
     method public int getResponseCode() throws java.io.IOException;
     method public java.lang.String getResponseMessage() throws java.io.IOException;
     method public void setChunkedStreamingMode(int);
-    method public void setFixedLengthStreamingMode(long);
     method public void setFixedLengthStreamingMode(int);
+    method public void setFixedLengthStreamingMode(long);
     method public static void setFollowRedirects(boolean);
     method public void setInstanceFollowRedirects(boolean);
     method public void setRequestMethod(java.lang.String) throws java.net.ProtocolException;
@@ -46237,21 +46411,27 @@
   }
 
   public final class Inet4Address extends java.net.InetAddress {
+    field public static final java.net.InetAddress ALL;
+    field public static final java.net.InetAddress ANY;
+    field public static final java.net.InetAddress LOOPBACK;
   }
 
   public final class Inet6Address extends java.net.InetAddress {
-    method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], int) throws java.net.UnknownHostException;
     method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], java.net.NetworkInterface) throws java.net.UnknownHostException;
+    method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], int) throws java.net.UnknownHostException;
     method public int getScopeId();
     method public java.net.NetworkInterface getScopedInterface();
     method public boolean isIPv4CompatibleAddress();
+    field public static final java.net.InetAddress ANY;
+    field public static final java.net.InetAddress LOOPBACK;
   }
 
   public class InetAddress implements java.io.Serializable {
     method public byte[] getAddress();
+    method public byte[] getAddressInternal();
     method public static java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException;
-    method public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException;
     method public static java.net.InetAddress getByAddress(java.lang.String, byte[]) throws java.net.UnknownHostException;
+    method public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException;
     method public static java.net.InetAddress getByName(java.lang.String) throws java.net.UnknownHostException;
     method public java.lang.String getCanonicalHostName();
     method public java.lang.String getHostAddress();
@@ -46358,8 +46538,8 @@
   }
 
   public class NoRouteToHostException extends java.net.SocketException {
-    ctor public NoRouteToHostException();
     ctor public NoRouteToHostException(java.lang.String);
+    ctor public NoRouteToHostException();
   }
 
   public final class PasswordAuthentication {
@@ -46369,13 +46549,19 @@
   }
 
   public class PortUnreachableException extends java.net.SocketException {
-    ctor public PortUnreachableException();
     ctor public PortUnreachableException(java.lang.String);
+    ctor public PortUnreachableException();
+    ctor public PortUnreachableException(java.lang.String, java.lang.Throwable);
   }
 
   public class ProtocolException extends java.io.IOException {
-    ctor public ProtocolException();
     ctor public ProtocolException(java.lang.String);
+    ctor public ProtocolException();
+    ctor public ProtocolException(java.lang.String, java.lang.Throwable);
+  }
+
+  public abstract interface ProtocolFamily {
+    method public abstract java.lang.String name();
   }
 
   public class Proxy {
@@ -46406,9 +46592,9 @@
   public abstract class ResponseCache {
     ctor public ResponseCache();
     method public abstract java.net.CacheResponse get(java.net.URI, java.lang.String, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException;
-    method public static java.net.ResponseCache getDefault();
+    method public static synchronized java.net.ResponseCache getDefault();
     method public abstract java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException;
-    method public static void setDefault(java.net.ResponseCache);
+    method public static synchronized void setDefault(java.net.ResponseCache);
   }
 
   public abstract class SecureCacheResponse extends java.net.CacheResponse {
@@ -46433,14 +46619,14 @@
     method public java.net.InetAddress getInetAddress();
     method public int getLocalPort();
     method public java.net.SocketAddress getLocalSocketAddress();
-    method public int getReceiveBufferSize() throws java.net.SocketException;
+    method public synchronized int getReceiveBufferSize() throws java.net.SocketException;
     method public boolean getReuseAddress() throws java.net.SocketException;
     method public synchronized int getSoTimeout() throws java.io.IOException;
     method protected final void implAccept(java.net.Socket) throws java.io.IOException;
     method public boolean isBound();
     method public boolean isClosed();
     method public void setPerformancePreferences(int, int, int);
-    method public void setReceiveBufferSize(int) throws java.net.SocketException;
+    method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException;
     method public void setReuseAddress(boolean) throws java.net.SocketException;
     method public synchronized void setSoTimeout(int) throws java.net.SocketException;
     method public static synchronized void setSocketFactory(java.net.SocketImplFactory) throws java.io.IOException;
@@ -46449,13 +46635,13 @@
   public class Socket implements java.io.Closeable {
     ctor public Socket();
     ctor public Socket(java.net.Proxy);
-    ctor public Socket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException;
-    ctor public Socket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException;
-    ctor public deprecated Socket(java.lang.String, int, boolean) throws java.io.IOException;
-    ctor public Socket(java.net.InetAddress, int) throws java.io.IOException;
-    ctor public Socket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
-    ctor public deprecated Socket(java.net.InetAddress, int, boolean) throws java.io.IOException;
     ctor protected Socket(java.net.SocketImpl) throws java.net.SocketException;
+    ctor public Socket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException;
+    ctor public Socket(java.net.InetAddress, int) throws java.io.IOException;
+    ctor public Socket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException;
+    ctor public Socket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    ctor public deprecated Socket(java.lang.String, int, boolean) throws java.io.IOException;
+    ctor public deprecated Socket(java.net.InetAddress, int, boolean) throws java.io.IOException;
     method public void bind(java.net.SocketAddress) throws java.io.IOException;
     method public synchronized void close() throws java.io.IOException;
     method public void connect(java.net.SocketAddress) throws java.io.IOException;
@@ -46504,8 +46690,10 @@
   }
 
   public class SocketException extends java.io.IOException {
-    ctor public SocketException();
     ctor public SocketException(java.lang.String);
+    ctor public SocketException();
+    ctor public SocketException(java.lang.Throwable);
+    ctor public SocketException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract class SocketImpl implements java.net.SocketOptions {
@@ -46518,7 +46706,7 @@
     method protected abstract void connect(java.net.InetAddress, int) throws java.io.IOException;
     method protected abstract void connect(java.net.SocketAddress, int) throws java.io.IOException;
     method protected abstract void create(boolean) throws java.io.IOException;
-    method protected java.io.FileDescriptor getFileDescriptor();
+    method public java.io.FileDescriptor getFileDescriptor();
     method protected java.net.InetAddress getInetAddress();
     method protected abstract java.io.InputStream getInputStream() throws java.io.IOException;
     method protected int getLocalPort();
@@ -46540,6 +46728,11 @@
     method public abstract java.net.SocketImpl createSocketImpl();
   }
 
+  public abstract interface SocketOption {
+    method public abstract java.lang.String name();
+    method public abstract java.lang.Class<T> type();
+  }
+
   public abstract interface SocketOptions {
     method public abstract java.lang.Object getOption(int) throws java.net.SocketException;
     method public abstract void setOption(int, java.lang.Object) throws java.net.SocketException;
@@ -46561,21 +46754,46 @@
 
   public final class SocketPermission extends java.security.Permission implements java.io.Serializable {
     ctor public SocketPermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
   public class SocketTimeoutException extends java.io.InterruptedIOException {
-    ctor public SocketTimeoutException();
     ctor public SocketTimeoutException(java.lang.String);
+    ctor public SocketTimeoutException();
+    ctor public SocketTimeoutException(java.lang.Throwable);
+    ctor public SocketTimeoutException(java.lang.String, java.lang.Throwable);
+  }
+
+  public final class StandardProtocolFamily extends java.lang.Enum implements java.net.ProtocolFamily {
+    method public static java.net.StandardProtocolFamily valueOf(java.lang.String);
+    method public static final java.net.StandardProtocolFamily[] values();
+    enum_constant public static final java.net.StandardProtocolFamily INET;
+    enum_constant public static final java.net.StandardProtocolFamily INET6;
+  }
+
+  public final class StandardSocketOptions {
+    field public static final java.net.SocketOption<java.net.NetworkInterface> IP_MULTICAST_IF;
+    field public static final java.net.SocketOption<java.lang.Boolean> IP_MULTICAST_LOOP;
+    field public static final java.net.SocketOption<java.lang.Integer> IP_MULTICAST_TTL;
+    field public static final java.net.SocketOption<java.lang.Integer> IP_TOS;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_BROADCAST;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_KEEPALIVE;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_LINGER;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_RCVBUF;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_REUSEADDR;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_SNDBUF;
+    field public static final java.net.SocketOption<java.lang.Boolean> TCP_NODELAY;
   }
 
   public final class URI implements java.lang.Comparable java.io.Serializable {
     ctor public URI(java.lang.String) throws java.net.URISyntaxException;
-    ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
     ctor public URI(java.lang.String, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
-    ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
     ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
+    ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
+    ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
     method public int compareTo(java.net.URI);
     method public static java.net.URI create(java.lang.String);
     method public java.lang.String getAuthority();
@@ -46613,12 +46831,12 @@
   }
 
   public final class URL implements java.io.Serializable {
+    ctor public URL(java.lang.String, java.lang.String, int, java.lang.String) throws java.net.MalformedURLException;
+    ctor public URL(java.lang.String, java.lang.String, java.lang.String) throws java.net.MalformedURLException;
+    ctor public URL(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
     ctor public URL(java.lang.String) throws java.net.MalformedURLException;
     ctor public URL(java.net.URL, java.lang.String) throws java.net.MalformedURLException;
     ctor public URL(java.net.URL, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
-    ctor public URL(java.lang.String, java.lang.String, java.lang.String) throws java.net.MalformedURLException;
-    ctor public URL(java.lang.String, java.lang.String, int, java.lang.String) throws java.net.MalformedURLException;
-    ctor public URL(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
     method public java.lang.String getAuthority();
     method public final java.lang.Object getContent() throws java.io.IOException;
     method public final java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException;
@@ -46637,22 +46855,24 @@
     method public boolean sameFile(java.net.URL);
     method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String);
     method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
-    method public static synchronized void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory);
+    method public static void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory);
     method public java.lang.String toExternalForm();
     method public java.net.URI toURI() throws java.net.URISyntaxException;
+    method public java.net.URI toURILenient() throws java.net.URISyntaxException;
   }
 
-  public class URLClassLoader extends java.security.SecureClassLoader {
-    ctor public URLClassLoader(java.net.URL[]);
+  public class URLClassLoader extends java.security.SecureClassLoader implements java.io.Closeable {
     ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader);
+    ctor public URLClassLoader(java.net.URL[]);
     ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader, java.net.URLStreamHandlerFactory);
     method protected void addURL(java.net.URL);
+    method public void close() throws java.io.IOException;
     method protected java.lang.Package definePackage(java.lang.String, java.util.jar.Manifest, java.net.URL) throws java.lang.IllegalArgumentException;
     method public java.net.URL findResource(java.lang.String);
     method public java.util.Enumeration<java.net.URL> findResources(java.lang.String) throws java.io.IOException;
     method public java.net.URL[] getURLs();
-    method public static java.net.URLClassLoader newInstance(java.net.URL[]);
     method public static java.net.URLClassLoader newInstance(java.net.URL[], java.lang.ClassLoader);
+    method public static java.net.URLClassLoader newInstance(java.net.URL[]);
   }
 
   public abstract class URLConnection {
@@ -46665,6 +46885,7 @@
     method public java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException;
     method public java.lang.String getContentEncoding();
     method public int getContentLength();
+    method public long getContentLengthLong();
     method public java.lang.String getContentType();
     method public long getDate();
     method public static boolean getDefaultAllowUserInteraction();
@@ -46673,12 +46894,13 @@
     method public boolean getDoInput();
     method public boolean getDoOutput();
     method public long getExpiration();
-    method public static java.net.FileNameMap getFileNameMap();
-    method public java.lang.String getHeaderField(int);
+    method public static synchronized java.net.FileNameMap getFileNameMap();
     method public java.lang.String getHeaderField(java.lang.String);
+    method public java.lang.String getHeaderField(int);
     method public long getHeaderFieldDate(java.lang.String, long);
     method public int getHeaderFieldInt(java.lang.String, int);
     method public java.lang.String getHeaderFieldKey(int);
+    method public long getHeaderFieldLong(java.lang.String, long);
     method public java.util.Map<java.lang.String, java.util.List<java.lang.String>> getHeaderFields();
     method public long getIfModifiedSince();
     method public java.io.InputStream getInputStream() throws java.io.IOException;
@@ -46729,15 +46951,15 @@
     ctor public URLStreamHandler();
     method protected boolean equals(java.net.URL, java.net.URL);
     method protected int getDefaultPort();
-    method protected java.net.InetAddress getHostAddress(java.net.URL);
+    method protected synchronized java.net.InetAddress getHostAddress(java.net.URL);
     method protected int hashCode(java.net.URL);
     method protected boolean hostsEqual(java.net.URL, java.net.URL);
     method protected abstract java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException;
     method protected java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException;
     method protected void parseURL(java.net.URL, java.lang.String, int, int);
     method protected boolean sameFile(java.net.URL, java.net.URL);
-    method protected deprecated void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String);
     method protected void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
+    method protected deprecated void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String);
     method protected java.lang.String toExternalForm(java.net.URL);
   }
 
@@ -46746,8 +46968,8 @@
   }
 
   public class UnknownHostException extends java.io.IOException {
-    ctor public UnknownHostException();
     ctor public UnknownHostException(java.lang.String);
+    ctor public UnknownHostException();
   }
 
   public class UnknownServiceException extends java.io.IOException {
@@ -46803,9 +47025,9 @@
     method public int compareTo(java.nio.ByteBuffer);
     method public abstract java.nio.ByteBuffer duplicate();
     method public abstract byte get();
-    method public java.nio.ByteBuffer get(byte[]);
-    method public java.nio.ByteBuffer get(byte[], int, int);
     method public abstract byte get(int);
+    method public java.nio.ByteBuffer get(byte[], int, int);
+    method public java.nio.ByteBuffer get(byte[]);
     method public abstract char getChar();
     method public abstract char getChar(int);
     method public abstract double getDouble();
@@ -46823,10 +47045,10 @@
     method public final java.nio.ByteOrder order();
     method public final java.nio.ByteBuffer order(java.nio.ByteOrder);
     method public abstract java.nio.ByteBuffer put(byte);
-    method public final java.nio.ByteBuffer put(byte[]);
-    method public java.nio.ByteBuffer put(byte[], int, int);
-    method public java.nio.ByteBuffer put(java.nio.ByteBuffer);
     method public abstract java.nio.ByteBuffer put(int, byte);
+    method public java.nio.ByteBuffer put(java.nio.ByteBuffer);
+    method public java.nio.ByteBuffer put(byte[], int, int);
+    method public final java.nio.ByteBuffer put(byte[]);
     method public abstract java.nio.ByteBuffer putChar(char);
     method public abstract java.nio.ByteBuffer putChar(int, char);
     method public abstract java.nio.ByteBuffer putDouble(double);
@@ -46840,8 +47062,8 @@
     method public abstract java.nio.ByteBuffer putShort(short);
     method public abstract java.nio.ByteBuffer putShort(int, short);
     method public abstract java.nio.ByteBuffer slice();
-    method public static java.nio.ByteBuffer wrap(byte[]);
     method public static java.nio.ByteBuffer wrap(byte[], int, int);
+    method public static java.nio.ByteBuffer wrap(byte[]);
   }
 
   public final class ByteOrder {
@@ -46852,9 +47074,9 @@
 
   public abstract class CharBuffer extends java.nio.Buffer implements java.lang.Appendable java.lang.CharSequence java.lang.Comparable java.lang.Readable {
     method public static java.nio.CharBuffer allocate(int);
-    method public java.nio.CharBuffer append(char);
     method public java.nio.CharBuffer append(java.lang.CharSequence);
     method public java.nio.CharBuffer append(java.lang.CharSequence, int, int);
+    method public java.nio.CharBuffer append(char);
     method public final char[] array();
     method public final int arrayOffset();
     method public abstract java.nio.CharBuffer asReadOnlyBuffer();
@@ -46863,27 +47085,27 @@
     method public int compareTo(java.nio.CharBuffer);
     method public abstract java.nio.CharBuffer duplicate();
     method public abstract char get();
-    method public java.nio.CharBuffer get(char[]);
-    method public java.nio.CharBuffer get(char[], int, int);
     method public abstract char get(int);
+    method public java.nio.CharBuffer get(char[], int, int);
+    method public java.nio.CharBuffer get(char[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public final int length();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.CharBuffer put(char);
-    method public final java.nio.CharBuffer put(char[]);
-    method public java.nio.CharBuffer put(char[], int, int);
-    method public java.nio.CharBuffer put(java.nio.CharBuffer);
     method public abstract java.nio.CharBuffer put(int, char);
-    method public final java.nio.CharBuffer put(java.lang.String);
+    method public java.nio.CharBuffer put(java.nio.CharBuffer);
+    method public java.nio.CharBuffer put(char[], int, int);
+    method public final java.nio.CharBuffer put(char[]);
     method public java.nio.CharBuffer put(java.lang.String, int, int);
+    method public final java.nio.CharBuffer put(java.lang.String);
     method public int read(java.nio.CharBuffer) throws java.io.IOException;
     method public abstract java.nio.CharBuffer slice();
     method public abstract java.nio.CharBuffer subSequence(int, int);
-    method public static java.nio.CharBuffer wrap(char[]);
     method public static java.nio.CharBuffer wrap(char[], int, int);
-    method public static java.nio.CharBuffer wrap(java.lang.CharSequence);
+    method public static java.nio.CharBuffer wrap(char[]);
     method public static java.nio.CharBuffer wrap(java.lang.CharSequence, int, int);
+    method public static java.nio.CharBuffer wrap(java.lang.CharSequence);
   }
 
   public abstract class DoubleBuffer extends java.nio.Buffer implements java.lang.Comparable {
@@ -46895,20 +47117,20 @@
     method public int compareTo(java.nio.DoubleBuffer);
     method public abstract java.nio.DoubleBuffer duplicate();
     method public abstract double get();
-    method public java.nio.DoubleBuffer get(double[]);
-    method public java.nio.DoubleBuffer get(double[], int, int);
     method public abstract double get(int);
+    method public java.nio.DoubleBuffer get(double[], int, int);
+    method public java.nio.DoubleBuffer get(double[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.DoubleBuffer put(double);
-    method public final java.nio.DoubleBuffer put(double[]);
-    method public java.nio.DoubleBuffer put(double[], int, int);
-    method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer);
     method public abstract java.nio.DoubleBuffer put(int, double);
+    method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer);
+    method public java.nio.DoubleBuffer put(double[], int, int);
+    method public final java.nio.DoubleBuffer put(double[]);
     method public abstract java.nio.DoubleBuffer slice();
-    method public static java.nio.DoubleBuffer wrap(double[]);
     method public static java.nio.DoubleBuffer wrap(double[], int, int);
+    method public static java.nio.DoubleBuffer wrap(double[]);
   }
 
   public abstract class FloatBuffer extends java.nio.Buffer implements java.lang.Comparable {
@@ -46920,20 +47142,20 @@
     method public int compareTo(java.nio.FloatBuffer);
     method public abstract java.nio.FloatBuffer duplicate();
     method public abstract float get();
-    method public java.nio.FloatBuffer get(float[]);
-    method public java.nio.FloatBuffer get(float[], int, int);
     method public abstract float get(int);
+    method public java.nio.FloatBuffer get(float[], int, int);
+    method public java.nio.FloatBuffer get(float[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.FloatBuffer put(float);
-    method public final java.nio.FloatBuffer put(float[]);
-    method public java.nio.FloatBuffer put(float[], int, int);
-    method public java.nio.FloatBuffer put(java.nio.FloatBuffer);
     method public abstract java.nio.FloatBuffer put(int, float);
+    method public java.nio.FloatBuffer put(java.nio.FloatBuffer);
+    method public java.nio.FloatBuffer put(float[], int, int);
+    method public final java.nio.FloatBuffer put(float[]);
     method public abstract java.nio.FloatBuffer slice();
-    method public static java.nio.FloatBuffer wrap(float[]);
     method public static java.nio.FloatBuffer wrap(float[], int, int);
+    method public static java.nio.FloatBuffer wrap(float[]);
   }
 
   public abstract class IntBuffer extends java.nio.Buffer implements java.lang.Comparable {
@@ -46945,20 +47167,20 @@
     method public int compareTo(java.nio.IntBuffer);
     method public abstract java.nio.IntBuffer duplicate();
     method public abstract int get();
-    method public java.nio.IntBuffer get(int[]);
-    method public java.nio.IntBuffer get(int[], int, int);
     method public abstract int get(int);
+    method public java.nio.IntBuffer get(int[], int, int);
+    method public java.nio.IntBuffer get(int[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.IntBuffer put(int);
-    method public final java.nio.IntBuffer put(int[]);
-    method public java.nio.IntBuffer put(int[], int, int);
-    method public java.nio.IntBuffer put(java.nio.IntBuffer);
     method public abstract java.nio.IntBuffer put(int, int);
+    method public java.nio.IntBuffer put(java.nio.IntBuffer);
+    method public java.nio.IntBuffer put(int[], int, int);
+    method public final java.nio.IntBuffer put(int[]);
     method public abstract java.nio.IntBuffer slice();
-    method public static java.nio.IntBuffer wrap(int[]);
     method public static java.nio.IntBuffer wrap(int[], int, int);
+    method public static java.nio.IntBuffer wrap(int[]);
   }
 
   public class InvalidMarkException extends java.lang.IllegalStateException {
@@ -46974,20 +47196,20 @@
     method public int compareTo(java.nio.LongBuffer);
     method public abstract java.nio.LongBuffer duplicate();
     method public abstract long get();
-    method public java.nio.LongBuffer get(long[]);
-    method public java.nio.LongBuffer get(long[], int, int);
     method public abstract long get(int);
+    method public java.nio.LongBuffer get(long[], int, int);
+    method public java.nio.LongBuffer get(long[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.LongBuffer put(long);
-    method public final java.nio.LongBuffer put(long[]);
-    method public java.nio.LongBuffer put(long[], int, int);
-    method public java.nio.LongBuffer put(java.nio.LongBuffer);
     method public abstract java.nio.LongBuffer put(int, long);
+    method public java.nio.LongBuffer put(java.nio.LongBuffer);
+    method public java.nio.LongBuffer put(long[], int, int);
+    method public final java.nio.LongBuffer put(long[]);
     method public abstract java.nio.LongBuffer slice();
-    method public static java.nio.LongBuffer wrap(long[]);
     method public static java.nio.LongBuffer wrap(long[], int, int);
+    method public static java.nio.LongBuffer wrap(long[]);
   }
 
   public abstract class MappedByteBuffer extends java.nio.ByteBuffer {
@@ -47009,34 +47231,119 @@
     method public int compareTo(java.nio.ShortBuffer);
     method public abstract java.nio.ShortBuffer duplicate();
     method public abstract short get();
-    method public java.nio.ShortBuffer get(short[]);
-    method public java.nio.ShortBuffer get(short[], int, int);
     method public abstract short get(int);
+    method public java.nio.ShortBuffer get(short[], int, int);
+    method public java.nio.ShortBuffer get(short[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.ShortBuffer put(short);
-    method public final java.nio.ShortBuffer put(short[]);
-    method public java.nio.ShortBuffer put(short[], int, int);
-    method public java.nio.ShortBuffer put(java.nio.ShortBuffer);
     method public abstract java.nio.ShortBuffer put(int, short);
+    method public java.nio.ShortBuffer put(java.nio.ShortBuffer);
+    method public java.nio.ShortBuffer put(short[], int, int);
+    method public final java.nio.ShortBuffer put(short[]);
     method public abstract java.nio.ShortBuffer slice();
-    method public static java.nio.ShortBuffer wrap(short[]);
     method public static java.nio.ShortBuffer wrap(short[], int, int);
+    method public static java.nio.ShortBuffer wrap(short[]);
   }
 
 }
 
 package java.nio.channels {
 
+  public class AcceptPendingException extends java.lang.IllegalStateException {
+    ctor public AcceptPendingException();
+  }
+
+  public class AlreadyBoundException extends java.lang.IllegalStateException {
+    ctor public AlreadyBoundException();
+  }
+
   public class AlreadyConnectedException extends java.lang.IllegalStateException {
     ctor public AlreadyConnectedException();
   }
 
+  public abstract interface AsynchronousByteChannel implements java.nio.channels.AsynchronousChannel {
+    method public abstract void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
+    method public abstract void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
+  }
+
+  public abstract interface AsynchronousChannel implements java.nio.channels.Channel {
+    method public abstract void close() throws java.io.IOException;
+  }
+
+  public abstract class AsynchronousChannelGroup {
+    ctor protected AsynchronousChannelGroup(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public abstract boolean isShutdown();
+    method public abstract boolean isTerminated();
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract void shutdown();
+    method public abstract void shutdownNow() throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withCachedThreadPool(java.util.concurrent.ExecutorService, int) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withFixedThreadPool(int, java.util.concurrent.ThreadFactory) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withThreadPool(java.util.concurrent.ExecutorService) throws java.io.IOException;
+  }
+
   public class AsynchronousCloseException extends java.nio.channels.ClosedChannelException {
     ctor public AsynchronousCloseException();
   }
 
+  public abstract class AsynchronousFileChannel implements java.nio.channels.AsynchronousChannel {
+    ctor protected AsynchronousFileChannel();
+    method public abstract void force(boolean) throws java.io.IOException;
+    method public abstract void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+    method public final void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+    method public abstract java.util.concurrent.Future<java.nio.channels.FileLock> lock(long, long, boolean);
+    method public final java.util.concurrent.Future<java.nio.channels.FileLock> lock();
+    method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer, long);
+    method public abstract long size() throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousFileChannel truncate(long) throws java.io.IOException;
+    method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
+    method public abstract void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer, long);
+  }
+
+  public abstract class AsynchronousServerSocketChannel implements java.nio.channels.AsynchronousChannel java.nio.channels.NetworkChannel {
+    ctor protected AsynchronousServerSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel, ? super A>);
+    method public abstract java.util.concurrent.Future<java.nio.channels.AsynchronousSocketChannel> accept();
+    method public final java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousServerSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousServerSocketChannel open() throws java.io.IOException;
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+  }
+
+  public abstract class AsynchronousSocketChannel implements java.nio.channels.AsynchronousByteChannel java.nio.channels.NetworkChannel {
+    ctor protected AsynchronousSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract java.nio.channels.AsynchronousSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Void> connect(java.net.SocketAddress);
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousSocketChannel open() throws java.io.IOException;
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public final void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
+    method public abstract void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+    method public abstract java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel shutdownInput() throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel shutdownOutput() throws java.io.IOException;
+    method public abstract void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public final void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
+    method public abstract void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+  }
+
   public abstract interface ByteChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel {
   }
 
@@ -47053,7 +47360,9 @@
     method public static java.nio.channels.ReadableByteChannel newChannel(java.io.InputStream);
     method public static java.nio.channels.WritableByteChannel newChannel(java.io.OutputStream);
     method public static java.io.InputStream newInputStream(java.nio.channels.ReadableByteChannel);
+    method public static java.io.InputStream newInputStream(java.nio.channels.AsynchronousByteChannel);
     method public static java.io.OutputStream newOutputStream(java.nio.channels.WritableByteChannel);
+    method public static java.io.OutputStream newOutputStream(java.nio.channels.AsynchronousByteChannel);
     method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.nio.charset.CharsetDecoder, int);
     method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.lang.String);
     method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, java.nio.charset.CharsetEncoder, int);
@@ -47072,50 +47381,61 @@
     ctor public ClosedSelectorException();
   }
 
+  public abstract interface CompletionHandler {
+    method public abstract void completed(V, A);
+    method public abstract void failed(java.lang.Throwable, A);
+  }
+
   public class ConnectionPendingException extends java.lang.IllegalStateException {
     ctor public ConnectionPendingException();
   }
 
-  public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel {
+  public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.MulticastChannel java.nio.channels.ScatteringByteChannel {
     ctor protected DatagramChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.DatagramChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.nio.channels.DatagramChannel connect(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.nio.channels.DatagramChannel disconnect() throws java.io.IOException;
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
     method public abstract boolean isConnected();
     method public static java.nio.channels.DatagramChannel open() throws java.io.IOException;
+    method public static java.nio.channels.DatagramChannel open(java.net.ProtocolFamily) throws java.io.IOException;
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
-    method public final synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract java.net.SocketAddress receive(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract int send(java.nio.ByteBuffer, java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.DatagramSocket socket();
     method public final int validOps();
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
-    method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
   }
 
-  public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel {
+  public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel java.nio.channels.SeekableByteChannel {
     ctor protected FileChannel();
     method public abstract void force(boolean) throws java.io.IOException;
-    method public final java.nio.channels.FileLock lock() throws java.io.IOException;
     method public abstract java.nio.channels.FileLock lock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock lock() throws java.io.IOException;
     method public abstract java.nio.MappedByteBuffer map(java.nio.channels.FileChannel.MapMode, long, long) throws java.io.IOException;
+    method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
     method public abstract long position() throws java.io.IOException;
     method public abstract java.nio.channels.FileChannel position(long) throws java.io.IOException;
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
-    method public abstract int read(java.nio.ByteBuffer, long) throws java.io.IOException;
-    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract int read(java.nio.ByteBuffer, long) throws java.io.IOException;
     method public abstract long size() throws java.io.IOException;
     method public abstract long transferFrom(java.nio.channels.ReadableByteChannel, long, long) throws java.io.IOException;
     method public abstract long transferTo(long, long, java.nio.channels.WritableByteChannel) throws java.io.IOException;
     method public abstract java.nio.channels.FileChannel truncate(long) throws java.io.IOException;
-    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
     method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
-    method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException;
-    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException;
   }
 
   public static class FileChannel.MapMode {
@@ -47126,6 +47446,8 @@
 
   public abstract class FileLock implements java.lang.AutoCloseable {
     ctor protected FileLock(java.nio.channels.FileChannel, long, long, boolean);
+    ctor protected FileLock(java.nio.channels.AsynchronousFileChannel, long, long, boolean);
+    method public java.nio.channels.Channel acquiredBy();
     method public final java.nio.channels.FileChannel channel();
     method public final void close() throws java.io.IOException;
     method public final boolean isShared();
@@ -47142,22 +47464,56 @@
   }
 
   public abstract interface GatheringByteChannel implements java.nio.channels.WritableByteChannel {
-    method public abstract long write(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public abstract long write(java.nio.ByteBuffer[]) throws java.io.IOException;
   }
 
   public class IllegalBlockingModeException extends java.lang.IllegalStateException {
     ctor public IllegalBlockingModeException();
   }
 
+  public class IllegalChannelGroupException extends java.lang.IllegalArgumentException {
+    ctor public IllegalChannelGroupException();
+  }
+
   public class IllegalSelectorException extends java.lang.IllegalArgumentException {
     ctor public IllegalSelectorException();
   }
 
+  public class InterruptedByTimeoutException extends java.io.IOException {
+    ctor public InterruptedByTimeoutException();
+  }
+
   public abstract interface InterruptibleChannel implements java.nio.channels.Channel {
     method public abstract void close() throws java.io.IOException;
   }
 
+  public abstract class MembershipKey {
+    ctor protected MembershipKey();
+    method public abstract java.nio.channels.MembershipKey block(java.net.InetAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.MulticastChannel channel();
+    method public abstract void drop();
+    method public abstract java.net.InetAddress group();
+    method public abstract boolean isValid();
+    method public abstract java.net.NetworkInterface networkInterface();
+    method public abstract java.net.InetAddress sourceAddress();
+    method public abstract java.nio.channels.MembershipKey unblock(java.net.InetAddress);
+  }
+
+  public abstract interface MulticastChannel implements java.nio.channels.NetworkChannel {
+    method public abstract void close() throws java.io.IOException;
+    method public abstract java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method public abstract java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface, java.net.InetAddress) throws java.io.IOException;
+  }
+
+  public abstract interface NetworkChannel implements java.nio.channels.Channel {
+    method public abstract java.nio.channels.NetworkChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.net.SocketAddress getLocalAddress() throws java.io.IOException;
+    method public abstract T getOption(java.net.SocketOption<T>) throws java.io.IOException;
+    method public abstract java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.util.Set<java.net.SocketOption<?>> supportedOptions();
+  }
+
   public class NoConnectionPendingException extends java.lang.IllegalStateException {
     ctor public NoConnectionPendingException();
   }
@@ -47199,13 +47555,26 @@
     method public final int validOps();
   }
 
+  public class ReadPendingException extends java.lang.IllegalStateException {
+    ctor public ReadPendingException();
+  }
+
   public abstract interface ReadableByteChannel implements java.nio.channels.Channel {
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
   }
 
   public abstract interface ScatteringByteChannel implements java.nio.channels.ReadableByteChannel {
-    method public abstract long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public abstract long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public abstract interface SeekableByteChannel implements java.nio.channels.ByteChannel {
+    method public abstract long position() throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel position(long) throws java.io.IOException;
+    method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
+    method public abstract long size() throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel truncate(long) throws java.io.IOException;
+    method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
   }
 
   public abstract class SelectableChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.Channel {
@@ -47216,8 +47585,8 @@
     method public abstract boolean isRegistered();
     method public abstract java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
     method public abstract java.nio.channels.spi.SelectorProvider provider();
-    method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException;
     method public abstract java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException;
+    method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException;
     method public abstract int validOps();
   }
 
@@ -47249,37 +47618,49 @@
     method public abstract java.util.Set<java.nio.channels.SelectionKey> keys();
     method public static java.nio.channels.Selector open() throws java.io.IOException;
     method public abstract java.nio.channels.spi.SelectorProvider provider();
-    method public abstract int select() throws java.io.IOException;
     method public abstract int select(long) throws java.io.IOException;
+    method public abstract int select() throws java.io.IOException;
     method public abstract int selectNow() throws java.io.IOException;
     method public abstract java.util.Set<java.nio.channels.SelectionKey> selectedKeys();
     method public abstract java.nio.channels.Selector wakeup();
   }
 
-  public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel {
+  public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.NetworkChannel {
     ctor protected ServerSocketChannel(java.nio.channels.spi.SelectorProvider);
     method public abstract java.nio.channels.SocketChannel accept() throws java.io.IOException;
+    method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
     method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException;
+    method public abstract java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.ServerSocket socket();
     method public final int validOps();
   }
 
-  public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel {
+  public class ShutdownChannelGroupException extends java.lang.IllegalStateException {
+    ctor public ShutdownChannelGroupException();
+  }
+
+  public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.NetworkChannel java.nio.channels.ScatteringByteChannel {
     ctor protected SocketChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.SocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract boolean connect(java.net.SocketAddress) throws java.io.IOException;
     method public abstract boolean finishConnect() throws java.io.IOException;
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
     method public abstract boolean isConnected();
     method public abstract boolean isConnectionPending();
     method public static java.nio.channels.SocketChannel open() throws java.io.IOException;
     method public static java.nio.channels.SocketChannel open(java.net.SocketAddress) throws java.io.IOException;
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
-    method public final synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel shutdownInput() throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel shutdownOutput() throws java.io.IOException;
     method public abstract java.net.Socket socket();
     method public final int validOps();
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
-    method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
   }
 
   public class UnresolvedAddressException extends java.lang.IllegalArgumentException {
@@ -47294,6 +47675,10 @@
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
   }
 
+  public class WritePendingException extends java.lang.IllegalStateException {
+    ctor public WritePendingException();
+  }
+
 }
 
 package java.nio.channels.spi {
@@ -47304,19 +47689,19 @@
     method public final void close() throws java.io.IOException;
     method protected final void end(boolean) throws java.nio.channels.AsynchronousCloseException;
     method protected abstract void implCloseChannel() throws java.io.IOException;
-    method public final synchronized boolean isOpen();
+    method public final boolean isOpen();
   }
 
   public abstract class AbstractSelectableChannel extends java.nio.channels.SelectableChannel {
     ctor protected AbstractSelectableChannel(java.nio.channels.spi.SelectorProvider);
     method public final java.lang.Object blockingLock();
     method public final java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException;
-    method protected final synchronized void implCloseChannel() throws java.io.IOException;
+    method protected final void implCloseChannel() throws java.io.IOException;
     method protected abstract void implCloseSelectableChannel() throws java.io.IOException;
     method protected abstract void implConfigureBlocking(boolean) throws java.io.IOException;
     method public final boolean isBlocking();
-    method public final synchronized boolean isRegistered();
-    method public final synchronized java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
+    method public final boolean isRegistered();
+    method public final java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
     method public final java.nio.channels.spi.SelectorProvider provider();
     method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException;
   }
@@ -47340,15 +47725,25 @@
     method protected abstract java.nio.channels.SelectionKey register(java.nio.channels.spi.AbstractSelectableChannel, int, java.lang.Object);
   }
 
+  public abstract class AsynchronousChannelProvider {
+    ctor protected AsynchronousChannelProvider();
+    method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(int, java.util.concurrent.ThreadFactory) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(java.util.concurrent.ExecutorService, int) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel openAsynchronousSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.spi.AsynchronousChannelProvider provider();
+  }
+
   public abstract class SelectorProvider {
     ctor protected SelectorProvider();
     method public java.nio.channels.Channel inheritedChannel() throws java.io.IOException;
     method public abstract java.nio.channels.DatagramChannel openDatagramChannel() throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel openDatagramChannel(java.net.ProtocolFamily) throws java.io.IOException;
     method public abstract java.nio.channels.Pipe openPipe() throws java.io.IOException;
     method public abstract java.nio.channels.spi.AbstractSelector openSelector() throws java.io.IOException;
     method public abstract java.nio.channels.ServerSocketChannel openServerSocketChannel() throws java.io.IOException;
     method public abstract java.nio.channels.SocketChannel openSocketChannel() throws java.io.IOException;
-    method public static synchronized java.nio.channels.spi.SelectorProvider provider();
+    method public static java.nio.channels.spi.SelectorProvider provider();
   }
 
 }
@@ -47387,8 +47782,8 @@
     ctor protected CharsetDecoder(java.nio.charset.Charset, float, float);
     method public final float averageCharsPerByte();
     method public final java.nio.charset.Charset charset();
-    method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException;
     method public final java.nio.charset.CoderResult decode(java.nio.ByteBuffer, java.nio.CharBuffer, boolean);
+    method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException;
     method protected abstract java.nio.charset.CoderResult decodeLoop(java.nio.ByteBuffer, java.nio.CharBuffer);
     method public java.nio.charset.Charset detectedCharset();
     method public final java.nio.charset.CoderResult flush(java.nio.CharBuffer);
@@ -47410,14 +47805,14 @@
   }
 
   public abstract class CharsetEncoder {
-    ctor protected CharsetEncoder(java.nio.charset.Charset, float, float);
     ctor protected CharsetEncoder(java.nio.charset.Charset, float, float, byte[]);
+    ctor protected CharsetEncoder(java.nio.charset.Charset, float, float);
     method public final float averageBytesPerChar();
     method public boolean canEncode(char);
     method public boolean canEncode(java.lang.CharSequence);
     method public final java.nio.charset.Charset charset();
-    method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException;
     method public final java.nio.charset.CoderResult encode(java.nio.CharBuffer, java.nio.ByteBuffer, boolean);
+    method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException;
     method protected abstract java.nio.charset.CoderResult encodeLoop(java.nio.CharBuffer, java.nio.ByteBuffer);
     method public final java.nio.charset.CoderResult flush(java.nio.ByteBuffer);
     method protected java.nio.charset.CoderResult implFlush(java.nio.ByteBuffer);
@@ -47446,10 +47841,10 @@
     method public boolean isOverflow();
     method public boolean isUnderflow();
     method public boolean isUnmappable();
-    method public int length() throws java.lang.UnsupportedOperationException;
-    method public static synchronized java.nio.charset.CoderResult malformedForLength(int) throws java.lang.IllegalArgumentException;
-    method public void throwException() throws java.nio.BufferOverflowException, java.nio.BufferUnderflowException, java.nio.charset.CharacterCodingException, java.nio.charset.MalformedInputException, java.nio.charset.UnmappableCharacterException;
-    method public static synchronized java.nio.charset.CoderResult unmappableForLength(int) throws java.lang.IllegalArgumentException;
+    method public int length();
+    method public static java.nio.charset.CoderResult malformedForLength(int);
+    method public void throwException() throws java.nio.charset.CharacterCodingException;
+    method public static java.nio.charset.CoderResult unmappableForLength(int);
     field public static final java.nio.charset.CoderResult OVERFLOW;
     field public static final java.nio.charset.CoderResult UNDERFLOW;
   }
@@ -47501,11 +47896,597 @@
 
 }
 
+package java.nio.file {
+
+  public class AccessDeniedException extends java.nio.file.FileSystemException {
+    ctor public AccessDeniedException(java.lang.String);
+    ctor public AccessDeniedException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public final class AccessMode extends java.lang.Enum {
+    method public static java.nio.file.AccessMode valueOf(java.lang.String);
+    method public static final java.nio.file.AccessMode[] values();
+    enum_constant public static final java.nio.file.AccessMode EXECUTE;
+    enum_constant public static final java.nio.file.AccessMode READ;
+    enum_constant public static final java.nio.file.AccessMode WRITE;
+  }
+
+  public class AtomicMoveNotSupportedException extends java.nio.file.FileSystemException {
+    ctor public AtomicMoveNotSupportedException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public class ClosedDirectoryStreamException extends java.lang.IllegalStateException {
+    ctor public ClosedDirectoryStreamException();
+  }
+
+  public class ClosedFileSystemException extends java.lang.IllegalStateException {
+    ctor public ClosedFileSystemException();
+  }
+
+  public class ClosedWatchServiceException extends java.lang.IllegalStateException {
+    ctor public ClosedWatchServiceException();
+  }
+
+  public abstract interface CopyOption {
+  }
+
+  public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
+    ctor public DirectoryIteratorException(java.io.IOException);
+  }
+
+  public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
+    ctor public DirectoryNotEmptyException(java.lang.String);
+  }
+
+  public abstract interface DirectoryStream implements java.io.Closeable java.lang.Iterable {
+    method public abstract java.util.Iterator<T> iterator();
+  }
+
+  public static abstract interface DirectoryStream.Filter {
+    method public abstract boolean accept(T) throws java.io.IOException;
+  }
+
+  public class FileAlreadyExistsException extends java.nio.file.FileSystemException {
+    ctor public FileAlreadyExistsException(java.lang.String);
+    ctor public FileAlreadyExistsException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public abstract class FileStore {
+    ctor protected FileStore();
+    method public abstract java.lang.Object getAttribute(java.lang.String) throws java.io.IOException;
+    method public abstract V getFileStoreAttributeView(java.lang.Class<V>);
+    method public abstract long getTotalSpace() throws java.io.IOException;
+    method public abstract long getUnallocatedSpace() throws java.io.IOException;
+    method public abstract long getUsableSpace() throws java.io.IOException;
+    method public abstract boolean isReadOnly();
+    method public abstract java.lang.String name();
+    method public abstract boolean supportsFileAttributeView(java.lang.Class<? extends java.nio.file.attribute.FileAttributeView>);
+    method public abstract boolean supportsFileAttributeView(java.lang.String);
+    method public abstract java.lang.String type();
+  }
+
+  public abstract class FileSystem implements java.io.Closeable {
+    ctor protected FileSystem();
+    method public abstract void close() throws java.io.IOException;
+    method public abstract java.lang.Iterable<java.nio.file.FileStore> getFileStores();
+    method public abstract java.nio.file.Path getPath(java.lang.String, java.lang.String...);
+    method public abstract java.nio.file.PathMatcher getPathMatcher(java.lang.String);
+    method public abstract java.lang.Iterable<java.nio.file.Path> getRootDirectories();
+    method public abstract java.lang.String getSeparator();
+    method public abstract java.nio.file.attribute.UserPrincipalLookupService getUserPrincipalLookupService();
+    method public abstract boolean isOpen();
+    method public abstract boolean isReadOnly();
+    method public abstract java.nio.file.WatchService newWatchService() throws java.io.IOException;
+    method public abstract java.nio.file.spi.FileSystemProvider provider();
+    method public abstract java.util.Set<java.lang.String> supportedFileAttributeViews();
+  }
+
+  public class FileSystemAlreadyExistsException extends java.lang.RuntimeException {
+    ctor public FileSystemAlreadyExistsException();
+    ctor public FileSystemAlreadyExistsException(java.lang.String);
+  }
+
+  public class FileSystemException extends java.io.IOException {
+    ctor public FileSystemException(java.lang.String);
+    ctor public FileSystemException(java.lang.String, java.lang.String, java.lang.String);
+    method public java.lang.String getFile();
+    method public java.lang.String getOtherFile();
+    method public java.lang.String getReason();
+  }
+
+  public class FileSystemLoopException extends java.nio.file.FileSystemException {
+    ctor public FileSystemLoopException(java.lang.String);
+  }
+
+  public class FileSystemNotFoundException extends java.lang.RuntimeException {
+    ctor public FileSystemNotFoundException();
+    ctor public FileSystemNotFoundException(java.lang.String);
+  }
+
+  public final class FileSystems {
+    method public static java.nio.file.FileSystem getDefault();
+    method public static java.nio.file.FileSystem getFileSystem(java.net.URI);
+    method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>) throws java.io.IOException;
+    method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>, java.lang.ClassLoader) throws java.io.IOException;
+    method public static java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.lang.ClassLoader) throws java.io.IOException;
+  }
+
+  public final class FileVisitOption extends java.lang.Enum {
+    method public static java.nio.file.FileVisitOption valueOf(java.lang.String);
+    method public static final java.nio.file.FileVisitOption[] values();
+    enum_constant public static final java.nio.file.FileVisitOption FOLLOW_LINKS;
+  }
+
+  public final class FileVisitResult extends java.lang.Enum {
+    method public static java.nio.file.FileVisitResult valueOf(java.lang.String);
+    method public static final java.nio.file.FileVisitResult[] values();
+    enum_constant public static final java.nio.file.FileVisitResult CONTINUE;
+    enum_constant public static final java.nio.file.FileVisitResult SKIP_SIBLINGS;
+    enum_constant public static final java.nio.file.FileVisitResult SKIP_SUBTREE;
+    enum_constant public static final java.nio.file.FileVisitResult TERMINATE;
+  }
+
+  public abstract interface FileVisitor {
+    method public abstract java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
+    method public abstract java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public abstract java.nio.file.FileVisitResult visitFile(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public abstract java.nio.file.FileVisitResult visitFileFailed(T, java.io.IOException) throws java.io.IOException;
+  }
+
+  public final class Files {
+    method public static java.nio.file.Path copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static long copy(java.io.InputStream, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static long copy(java.nio.file.Path, java.io.OutputStream) throws java.io.IOException;
+    method public static java.nio.file.Path createDirectories(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createFile(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempDirectory(java.nio.file.Path, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempDirectory(java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempFile(java.nio.file.Path, java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempFile(java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static void delete(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean exists(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static java.lang.Object getAttribute(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+    method public static java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.attribute.UserPrincipal getOwner(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> getPosixFilePermissions(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static boolean isDirectory(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static boolean isExecutable(java.nio.file.Path);
+    method public static boolean isHidden(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean isReadable(java.nio.file.Path);
+    method public static boolean isRegularFile(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public static boolean isSymbolicLink(java.nio.file.Path);
+    method public static boolean isWritable(java.nio.file.Path);
+    method public static java.nio.file.Path move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static java.io.BufferedReader newBufferedReader(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.lang.String) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static boolean notExists(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static java.lang.String probeContentType(java.nio.file.Path) throws java.io.IOException;
+    method public static byte[] readAllBytes(java.nio.file.Path) throws java.io.IOException;
+    method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.Path setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime) throws java.io.IOException;
+    method public static java.nio.file.Path setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal) throws java.io.IOException;
+    method public static java.nio.file.Path setPosixFilePermissions(java.nio.file.Path, java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException;
+    method public static long size(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.util.Set<java.nio.file.FileVisitOption>, int, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, byte[], java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, java.lang.Iterable<? extends java.lang.CharSequence>, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException;
+  }
+
+  public class InvalidPathException extends java.lang.IllegalArgumentException {
+    ctor public InvalidPathException(java.lang.String, java.lang.String, int);
+    ctor public InvalidPathException(java.lang.String, java.lang.String);
+    method public int getIndex();
+    method public java.lang.String getInput();
+    method public java.lang.String getReason();
+  }
+
+  public final class LinkOption extends java.lang.Enum implements java.nio.file.CopyOption java.nio.file.OpenOption {
+    method public static java.nio.file.LinkOption valueOf(java.lang.String);
+    method public static final java.nio.file.LinkOption[] values();
+    enum_constant public static final java.nio.file.LinkOption NOFOLLOW_LINKS;
+  }
+
+  public final class LinkPermission extends java.security.BasicPermission {
+    ctor public LinkPermission(java.lang.String);
+    ctor public LinkPermission(java.lang.String, java.lang.String);
+  }
+
+  public class NoSuchFileException extends java.nio.file.FileSystemException {
+    ctor public NoSuchFileException(java.lang.String);
+    ctor public NoSuchFileException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public class NotDirectoryException extends java.nio.file.FileSystemException {
+    ctor public NotDirectoryException(java.lang.String);
+  }
+
+  public class NotLinkException extends java.nio.file.FileSystemException {
+    ctor public NotLinkException(java.lang.String);
+    ctor public NotLinkException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public abstract interface OpenOption {
+  }
+
+  public abstract interface Path implements java.lang.Comparable java.lang.Iterable java.nio.file.Watchable {
+    method public abstract int compareTo(java.nio.file.Path);
+    method public abstract boolean endsWith(java.nio.file.Path);
+    method public abstract boolean endsWith(java.lang.String);
+    method public abstract boolean equals(java.lang.Object);
+    method public abstract java.nio.file.Path getFileName();
+    method public abstract java.nio.file.FileSystem getFileSystem();
+    method public abstract java.nio.file.Path getName(int);
+    method public abstract int getNameCount();
+    method public abstract java.nio.file.Path getParent();
+    method public abstract java.nio.file.Path getRoot();
+    method public abstract int hashCode();
+    method public abstract boolean isAbsolute();
+    method public abstract java.util.Iterator<java.nio.file.Path> iterator();
+    method public abstract java.nio.file.Path normalize();
+    method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException;
+    method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.Path relativize(java.nio.file.Path);
+    method public abstract java.nio.file.Path resolve(java.nio.file.Path);
+    method public abstract java.nio.file.Path resolve(java.lang.String);
+    method public abstract java.nio.file.Path resolveSibling(java.nio.file.Path);
+    method public abstract java.nio.file.Path resolveSibling(java.lang.String);
+    method public abstract boolean startsWith(java.nio.file.Path);
+    method public abstract boolean startsWith(java.lang.String);
+    method public abstract java.nio.file.Path subpath(int, int);
+    method public abstract java.nio.file.Path toAbsolutePath();
+    method public abstract java.io.File toFile();
+    method public abstract java.nio.file.Path toRealPath(java.nio.file.LinkOption...) throws java.io.IOException;
+    method public abstract java.lang.String toString();
+    method public abstract java.net.URI toUri();
+  }
+
+  public abstract interface PathMatcher {
+    method public abstract boolean matches(java.nio.file.Path);
+  }
+
+  public final class Paths {
+    method public static java.nio.file.Path get(java.lang.String, java.lang.String...);
+    method public static java.nio.file.Path get(java.net.URI);
+  }
+
+  public class ProviderMismatchException extends java.lang.IllegalArgumentException {
+    ctor public ProviderMismatchException();
+    ctor public ProviderMismatchException(java.lang.String);
+  }
+
+  public class ProviderNotFoundException extends java.lang.RuntimeException {
+    ctor public ProviderNotFoundException();
+    ctor public ProviderNotFoundException(java.lang.String);
+  }
+
+  public class ReadOnlyFileSystemException extends java.lang.UnsupportedOperationException {
+    ctor public ReadOnlyFileSystemException();
+  }
+
+  public abstract interface SecureDirectoryStream implements java.nio.file.DirectoryStream {
+    method public abstract void deleteDirectory(T) throws java.io.IOException;
+    method public abstract void deleteFile(T) throws java.io.IOException;
+    method public abstract V getFileAttributeView(java.lang.Class<V>);
+    method public abstract V getFileAttributeView(T, java.lang.Class<V>, java.nio.file.LinkOption...);
+    method public abstract void move(T, java.nio.file.SecureDirectoryStream<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel newByteChannel(T, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.SecureDirectoryStream<T> newDirectoryStream(T, java.nio.file.LinkOption...) throws java.io.IOException;
+  }
+
+  public final class StandardCopyOption extends java.lang.Enum implements java.nio.file.CopyOption {
+    method public static java.nio.file.StandardCopyOption valueOf(java.lang.String);
+    method public static final java.nio.file.StandardCopyOption[] values();
+    enum_constant public static final java.nio.file.StandardCopyOption ATOMIC_MOVE;
+    enum_constant public static final java.nio.file.StandardCopyOption COPY_ATTRIBUTES;
+    enum_constant public static final java.nio.file.StandardCopyOption REPLACE_EXISTING;
+  }
+
+  public final class StandardOpenOption extends java.lang.Enum implements java.nio.file.OpenOption {
+    method public static java.nio.file.StandardOpenOption valueOf(java.lang.String);
+    method public static final java.nio.file.StandardOpenOption[] values();
+    enum_constant public static final java.nio.file.StandardOpenOption APPEND;
+    enum_constant public static final java.nio.file.StandardOpenOption CREATE;
+    enum_constant public static final java.nio.file.StandardOpenOption CREATE_NEW;
+    enum_constant public static final java.nio.file.StandardOpenOption DELETE_ON_CLOSE;
+    enum_constant public static final java.nio.file.StandardOpenOption DSYNC;
+    enum_constant public static final java.nio.file.StandardOpenOption READ;
+    enum_constant public static final java.nio.file.StandardOpenOption SPARSE;
+    enum_constant public static final java.nio.file.StandardOpenOption SYNC;
+    enum_constant public static final java.nio.file.StandardOpenOption TRUNCATE_EXISTING;
+    enum_constant public static final java.nio.file.StandardOpenOption WRITE;
+  }
+
+  public final class StandardWatchEventKinds {
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_CREATE;
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_DELETE;
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_MODIFY;
+    field public static final java.nio.file.WatchEvent.Kind<java.lang.Object> OVERFLOW;
+  }
+
+  public abstract interface WatchEvent {
+    method public abstract T context();
+    method public abstract int count();
+    method public abstract java.nio.file.WatchEvent.Kind<T> kind();
+  }
+
+  public static abstract interface WatchEvent.Kind {
+    method public abstract java.lang.String name();
+    method public abstract java.lang.Class<T> type();
+  }
+
+  public static abstract interface WatchEvent.Modifier {
+    method public abstract java.lang.String name();
+  }
+
+  public abstract interface WatchKey {
+    method public abstract void cancel();
+    method public abstract boolean isValid();
+    method public abstract java.util.List<java.nio.file.WatchEvent<?>> pollEvents();
+    method public abstract boolean reset();
+    method public abstract java.nio.file.Watchable watchable();
+  }
+
+  public abstract interface WatchService implements java.io.Closeable {
+    method public abstract void close() throws java.io.IOException;
+    method public abstract java.nio.file.WatchKey poll();
+    method public abstract java.nio.file.WatchKey poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public abstract java.nio.file.WatchKey take() throws java.lang.InterruptedException;
+  }
+
+  public abstract interface Watchable {
+    method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException;
+    method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException;
+  }
+
+}
+
+package java.nio.file.attribute {
+
+  public final class AclEntry {
+    method public java.util.Set<java.nio.file.attribute.AclEntryFlag> flags();
+    method public static java.nio.file.attribute.AclEntry.Builder newBuilder();
+    method public static java.nio.file.attribute.AclEntry.Builder newBuilder(java.nio.file.attribute.AclEntry);
+    method public java.util.Set<java.nio.file.attribute.AclEntryPermission> permissions();
+    method public java.nio.file.attribute.UserPrincipal principal();
+    method public java.nio.file.attribute.AclEntryType type();
+  }
+
+  public static final class AclEntry.Builder {
+    method public java.nio.file.attribute.AclEntry build();
+    method public java.nio.file.attribute.AclEntry.Builder setFlags(java.util.Set<java.nio.file.attribute.AclEntryFlag>);
+    method public java.nio.file.attribute.AclEntry.Builder setFlags(java.nio.file.attribute.AclEntryFlag...);
+    method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.util.Set<java.nio.file.attribute.AclEntryPermission>);
+    method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.nio.file.attribute.AclEntryPermission...);
+    method public java.nio.file.attribute.AclEntry.Builder setPrincipal(java.nio.file.attribute.UserPrincipal);
+    method public java.nio.file.attribute.AclEntry.Builder setType(java.nio.file.attribute.AclEntryType);
+  }
+
+  public final class AclEntryFlag extends java.lang.Enum {
+    method public static java.nio.file.attribute.AclEntryFlag valueOf(java.lang.String);
+    method public static final java.nio.file.attribute.AclEntryFlag[] values();
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag DIRECTORY_INHERIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag FILE_INHERIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag INHERIT_ONLY;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag NO_PROPAGATE_INHERIT;
+  }
+
+  public final class AclEntryPermission extends java.lang.Enum {
+    method public static java.nio.file.attribute.AclEntryPermission valueOf(java.lang.String);
+    method public static final java.nio.file.attribute.AclEntryPermission[] values();
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission APPEND_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE_CHILD;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission EXECUTE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ACL;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ATTRIBUTES;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_NAMED_ATTRS;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission SYNCHRONIZE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ACL;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ATTRIBUTES;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_NAMED_ATTRS;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_OWNER;
+    field public static final java.nio.file.attribute.AclEntryPermission ADD_FILE;
+    field public static final java.nio.file.attribute.AclEntryPermission ADD_SUBDIRECTORY;
+    field public static final java.nio.file.attribute.AclEntryPermission LIST_DIRECTORY;
+  }
+
+  public final class AclEntryType extends java.lang.Enum {
+    method public static java.nio.file.attribute.AclEntryType valueOf(java.lang.String);
+    method public static final java.nio.file.attribute.AclEntryType[] values();
+    enum_constant public static final java.nio.file.attribute.AclEntryType ALARM;
+    enum_constant public static final java.nio.file.attribute.AclEntryType ALLOW;
+    enum_constant public static final java.nio.file.attribute.AclEntryType AUDIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryType DENY;
+  }
+
+  public abstract interface AclFileAttributeView implements java.nio.file.attribute.FileOwnerAttributeView {
+    method public abstract java.util.List<java.nio.file.attribute.AclEntry> getAcl() throws java.io.IOException;
+    method public abstract java.lang.String name();
+    method public abstract void setAcl(java.util.List<java.nio.file.attribute.AclEntry>) throws java.io.IOException;
+  }
+
+  public abstract interface AttributeView {
+    method public abstract java.lang.String name();
+  }
+
+  public abstract interface BasicFileAttributeView implements java.nio.file.attribute.FileAttributeView {
+    method public abstract java.lang.String name();
+    method public abstract java.nio.file.attribute.BasicFileAttributes readAttributes() throws java.io.IOException;
+    method public abstract void setTimes(java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime) throws java.io.IOException;
+  }
+
+  public abstract interface BasicFileAttributes {
+    method public abstract java.nio.file.attribute.FileTime creationTime();
+    method public abstract java.lang.Object fileKey();
+    method public abstract boolean isDirectory();
+    method public abstract boolean isOther();
+    method public abstract boolean isRegularFile();
+    method public abstract boolean isSymbolicLink();
+    method public abstract java.nio.file.attribute.FileTime lastAccessTime();
+    method public abstract java.nio.file.attribute.FileTime lastModifiedTime();
+    method public abstract long size();
+  }
+
+  public abstract interface DosFileAttributeView implements java.nio.file.attribute.BasicFileAttributeView {
+    method public abstract java.lang.String name();
+    method public abstract java.nio.file.attribute.DosFileAttributes readAttributes() throws java.io.IOException;
+    method public abstract void setArchive(boolean) throws java.io.IOException;
+    method public abstract void setHidden(boolean) throws java.io.IOException;
+    method public abstract void setReadOnly(boolean) throws java.io.IOException;
+    method public abstract void setSystem(boolean) throws java.io.IOException;
+  }
+
+  public abstract interface DosFileAttributes implements java.nio.file.attribute.BasicFileAttributes {
+    method public abstract boolean isArchive();
+    method public abstract boolean isHidden();
+    method public abstract boolean isReadOnly();
+    method public abstract boolean isSystem();
+  }
+
+  public abstract interface FileAttribute {
+    method public abstract java.lang.String name();
+    method public abstract T value();
+  }
+
+  public abstract interface FileAttributeView implements java.nio.file.attribute.AttributeView {
+  }
+
+  public abstract interface FileOwnerAttributeView implements java.nio.file.attribute.FileAttributeView {
+    method public abstract java.nio.file.attribute.UserPrincipal getOwner() throws java.io.IOException;
+    method public abstract java.lang.String name();
+    method public abstract void setOwner(java.nio.file.attribute.UserPrincipal) throws java.io.IOException;
+  }
+
+  public abstract interface FileStoreAttributeView implements java.nio.file.attribute.AttributeView {
+  }
+
+  public final class FileTime implements java.lang.Comparable {
+    method public int compareTo(java.nio.file.attribute.FileTime);
+    method public static java.nio.file.attribute.FileTime from(long, java.util.concurrent.TimeUnit);
+    method public static java.nio.file.attribute.FileTime fromMillis(long);
+    method public long to(java.util.concurrent.TimeUnit);
+    method public long toMillis();
+  }
+
+  public abstract interface GroupPrincipal implements java.nio.file.attribute.UserPrincipal {
+  }
+
+  public abstract interface PosixFileAttributeView implements java.nio.file.attribute.BasicFileAttributeView java.nio.file.attribute.FileOwnerAttributeView {
+    method public abstract java.lang.String name();
+    method public abstract java.nio.file.attribute.PosixFileAttributes readAttributes() throws java.io.IOException;
+    method public abstract void setGroup(java.nio.file.attribute.GroupPrincipal) throws java.io.IOException;
+    method public abstract void setPermissions(java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException;
+  }
+
+  public abstract interface PosixFileAttributes implements java.nio.file.attribute.BasicFileAttributes {
+    method public abstract java.nio.file.attribute.GroupPrincipal group();
+    method public abstract java.nio.file.attribute.UserPrincipal owner();
+    method public abstract java.util.Set<java.nio.file.attribute.PosixFilePermission> permissions();
+  }
+
+  public final class PosixFilePermission extends java.lang.Enum {
+    method public static java.nio.file.attribute.PosixFilePermission valueOf(java.lang.String);
+    method public static final java.nio.file.attribute.PosixFilePermission[] values();
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_WRITE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_WRITE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_WRITE;
+  }
+
+  public final class PosixFilePermissions {
+    method public static java.nio.file.attribute.FileAttribute<java.util.Set<java.nio.file.attribute.PosixFilePermission>> asFileAttribute(java.util.Set<java.nio.file.attribute.PosixFilePermission>);
+    method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> fromString(java.lang.String);
+    method public static java.lang.String toString(java.util.Set<java.nio.file.attribute.PosixFilePermission>);
+  }
+
+  public abstract interface UserPrincipal implements java.security.Principal {
+  }
+
+  public abstract class UserPrincipalLookupService {
+    ctor protected UserPrincipalLookupService();
+    method public abstract java.nio.file.attribute.GroupPrincipal lookupPrincipalByGroupName(java.lang.String) throws java.io.IOException;
+    method public abstract java.nio.file.attribute.UserPrincipal lookupPrincipalByName(java.lang.String) throws java.io.IOException;
+  }
+
+  public class UserPrincipalNotFoundException extends java.io.IOException {
+    ctor public UserPrincipalNotFoundException(java.lang.String);
+    method public java.lang.String getName();
+  }
+
+}
+
+package java.nio.file.spi {
+
+  public abstract class FileSystemProvider {
+    ctor protected FileSystemProvider();
+    method public abstract void checkAccess(java.nio.file.Path, java.nio.file.AccessMode...) throws java.io.IOException;
+    method public abstract void copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public abstract void createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public void createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public void createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract void delete(java.nio.file.Path) throws java.io.IOException;
+    method public boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
+    method public abstract V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+    method public abstract java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
+    method public abstract java.nio.file.FileSystem getFileSystem(java.net.URI);
+    method public abstract java.nio.file.Path getPath(java.net.URI);
+    method public abstract java.lang.String getScheme();
+    method public static java.util.List<java.nio.file.spi.FileSystemProvider> installedProviders();
+    method public abstract boolean isHidden(java.nio.file.Path) throws java.io.IOException;
+    method public abstract boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public abstract void move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public java.nio.channels.AsynchronousFileChannel newAsynchronousFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException;
+    method public java.nio.channels.FileChannel newFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>) throws java.io.IOException;
+    method public java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.util.Map<java.lang.String, ?>) throws java.io.IOException;
+    method public java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public abstract java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
+    method public abstract void setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
+  }
+
+  public abstract class FileTypeDetector {
+    ctor protected FileTypeDetector();
+    method public abstract java.lang.String probeContentType(java.nio.file.Path) throws java.io.IOException;
+  }
+
+}
+
 package java.security {
 
   public final class AccessControlContext {
-    ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner);
     ctor public AccessControlContext(java.security.ProtectionDomain[]);
+    ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner);
     method public void checkPermission(java.security.Permission) throws java.security.AccessControlException;
     method public java.security.DomainCombiner getDomainCombiner();
   }
@@ -47527,6 +48508,12 @@
     method public static java.security.AccessControlContext getContext();
   }
 
+  public abstract interface AlgorithmConstraints {
+    method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.lang.String, java.security.AlgorithmParameters);
+    method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.security.Key);
+    method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.lang.String, java.security.Key, java.security.AlgorithmParameters);
+  }
+
   public class AlgorithmParameterGenerator {
     ctor protected AlgorithmParameterGenerator(java.security.AlgorithmParameterGeneratorSpi, java.security.Provider, java.lang.String);
     method public final java.security.AlgorithmParameters generateParameters();
@@ -47576,9 +48563,11 @@
   }
 
   public final class AllPermission extends java.security.Permission {
-    ctor public AllPermission(java.lang.String, java.lang.String);
     ctor public AllPermission();
+    ctor public AllPermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
@@ -47592,7 +48581,9 @@
   public abstract class BasicPermission extends java.security.Permission implements java.io.Serializable {
     ctor public BasicPermission(java.lang.String);
     ctor public BasicPermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
@@ -47621,9 +48612,24 @@
     method public boolean implies(java.security.CodeSource);
   }
 
+  public final class CryptoPrimitive extends java.lang.Enum {
+    method public static java.security.CryptoPrimitive valueOf(java.lang.String);
+    method public static final java.security.CryptoPrimitive[] values();
+    enum_constant public static final java.security.CryptoPrimitive BLOCK_CIPHER;
+    enum_constant public static final java.security.CryptoPrimitive KEY_AGREEMENT;
+    enum_constant public static final java.security.CryptoPrimitive KEY_ENCAPSULATION;
+    enum_constant public static final java.security.CryptoPrimitive KEY_WRAP;
+    enum_constant public static final java.security.CryptoPrimitive MAC;
+    enum_constant public static final java.security.CryptoPrimitive MESSAGE_DIGEST;
+    enum_constant public static final java.security.CryptoPrimitive PUBLIC_KEY_ENCRYPTION;
+    enum_constant public static final java.security.CryptoPrimitive SECURE_RANDOM;
+    enum_constant public static final java.security.CryptoPrimitive SIGNATURE;
+    enum_constant public static final java.security.CryptoPrimitive STREAM_CIPHER;
+  }
+
   public class DigestException extends java.security.GeneralSecurityException {
-    ctor public DigestException(java.lang.String);
     ctor public DigestException();
+    ctor public DigestException(java.lang.String);
     ctor public DigestException(java.lang.String, java.lang.Throwable);
     ctor public DigestException(java.lang.Throwable);
   }
@@ -47649,8 +48655,8 @@
   }
 
   public class GeneralSecurityException extends java.lang.Exception {
-    ctor public GeneralSecurityException(java.lang.String);
     ctor public GeneralSecurityException();
+    ctor public GeneralSecurityException(java.lang.String);
     ctor public GeneralSecurityException(java.lang.String, java.lang.Throwable);
     ctor public GeneralSecurityException(java.lang.Throwable);
   }
@@ -47666,8 +48672,8 @@
 
   public abstract deprecated class Identity implements java.security.Principal java.io.Serializable {
     ctor protected Identity();
-    ctor public Identity(java.lang.String);
     ctor public Identity(java.lang.String, java.security.IdentityScope) throws java.security.KeyManagementException;
+    ctor public Identity(java.lang.String);
     method public void addCertificate(java.security.Certificate) throws java.security.KeyManagementException;
     method public java.security.Certificate[] certificates();
     method public final boolean equals(java.lang.Object);
@@ -47698,22 +48704,22 @@
   }
 
   public class InvalidAlgorithmParameterException extends java.security.GeneralSecurityException {
-    ctor public InvalidAlgorithmParameterException(java.lang.String);
     ctor public InvalidAlgorithmParameterException();
+    ctor public InvalidAlgorithmParameterException(java.lang.String);
     ctor public InvalidAlgorithmParameterException(java.lang.String, java.lang.Throwable);
     ctor public InvalidAlgorithmParameterException(java.lang.Throwable);
   }
 
   public class InvalidKeyException extends java.security.KeyException {
-    ctor public InvalidKeyException(java.lang.String);
     ctor public InvalidKeyException();
+    ctor public InvalidKeyException(java.lang.String);
     ctor public InvalidKeyException(java.lang.String, java.lang.Throwable);
     ctor public InvalidKeyException(java.lang.Throwable);
   }
 
   public class InvalidParameterException extends java.lang.IllegalArgumentException {
-    ctor public InvalidParameterException(java.lang.String);
     ctor public InvalidParameterException();
+    ctor public InvalidParameterException(java.lang.String);
   }
 
   public abstract interface Key implements java.io.Serializable {
@@ -47724,8 +48730,8 @@
   }
 
   public class KeyException extends java.security.GeneralSecurityException {
-    ctor public KeyException(java.lang.String);
     ctor public KeyException();
+    ctor public KeyException(java.lang.String);
     ctor public KeyException(java.lang.String, java.lang.Throwable);
     ctor public KeyException(java.lang.Throwable);
   }
@@ -47752,8 +48758,8 @@
   }
 
   public class KeyManagementException extends java.security.KeyException {
-    ctor public KeyManagementException(java.lang.String);
     ctor public KeyManagementException();
+    ctor public KeyManagementException(java.lang.String);
     ctor public KeyManagementException(java.lang.String, java.lang.Throwable);
     ctor public KeyManagementException(java.lang.Throwable);
   }
@@ -47774,8 +48780,8 @@
     method public static java.security.KeyPairGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
     method public final java.security.Provider getProvider();
     method public void initialize(int);
-    method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
     method public void initialize(int, java.security.SecureRandom);
+    method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
   }
 
   public abstract class KeyPairGeneratorSpi {
@@ -47878,8 +48884,8 @@
   }
 
   public class KeyStoreException extends java.security.GeneralSecurityException {
-    ctor public KeyStoreException(java.lang.String);
     ctor public KeyStoreException();
+    ctor public KeyStoreException(java.lang.String);
     ctor public KeyStoreException(java.lang.String, java.lang.Throwable);
     ctor public KeyStoreException(java.lang.Throwable);
   }
@@ -47941,22 +48947,24 @@
   }
 
   public class NoSuchAlgorithmException extends java.security.GeneralSecurityException {
-    ctor public NoSuchAlgorithmException(java.lang.String);
     ctor public NoSuchAlgorithmException();
+    ctor public NoSuchAlgorithmException(java.lang.String);
     ctor public NoSuchAlgorithmException(java.lang.String, java.lang.Throwable);
     ctor public NoSuchAlgorithmException(java.lang.Throwable);
   }
 
   public class NoSuchProviderException extends java.security.GeneralSecurityException {
-    ctor public NoSuchProviderException(java.lang.String);
     ctor public NoSuchProviderException();
+    ctor public NoSuchProviderException(java.lang.String);
   }
 
   public abstract class Permission implements java.security.Guard java.io.Serializable {
     ctor public Permission(java.lang.String);
     method public void checkGuard(java.lang.Object) throws java.lang.SecurityException;
+    method public abstract boolean equals(java.lang.Object);
     method public abstract java.lang.String getActions();
     method public final java.lang.String getName();
+    method public abstract int hashCode();
     method public abstract boolean implies(java.security.Permission);
     method public java.security.PermissionCollection newPermissionCollection();
   }
@@ -48064,8 +49072,8 @@
   }
 
   public class ProviderException extends java.lang.RuntimeException {
-    ctor public ProviderException(java.lang.String);
     ctor public ProviderException();
+    ctor public ProviderException(java.lang.String);
     ctor public ProviderException(java.lang.String, java.lang.Throwable);
     ctor public ProviderException(java.lang.Throwable);
   }
@@ -48075,8 +49083,8 @@
   }
 
   public class SecureClassLoader extends java.lang.ClassLoader {
-    ctor protected SecureClassLoader();
     ctor protected SecureClassLoader(java.lang.ClassLoader);
+    ctor protected SecureClassLoader();
     method protected final java.lang.Class<?> defineClass(java.lang.String, byte[], int, int, java.security.CodeSource);
     method protected final java.lang.Class<?> defineClass(java.lang.String, java.nio.ByteBuffer, java.security.CodeSource);
     method protected java.security.PermissionCollection getPermissions(java.security.CodeSource);
@@ -48109,10 +49117,10 @@
     method public static deprecated java.lang.String getAlgorithmProperty(java.lang.String, java.lang.String);
     method public static java.util.Set<java.lang.String> getAlgorithms(java.lang.String);
     method public static java.lang.String getProperty(java.lang.String);
-    method public static synchronized java.security.Provider getProvider(java.lang.String);
-    method public static synchronized java.security.Provider[] getProviders();
+    method public static java.security.Provider getProvider(java.lang.String);
+    method public static java.security.Provider[] getProviders();
     method public static java.security.Provider[] getProviders(java.lang.String);
-    method public static synchronized java.security.Provider[] getProviders(java.util.Map<java.lang.String, java.lang.String>);
+    method public static java.security.Provider[] getProviders(java.util.Map<java.lang.String, java.lang.String>);
     method public static synchronized int insertProviderAt(java.security.Provider, int);
     method public static synchronized void removeProvider(java.lang.String);
     method public static void setProperty(java.lang.String, java.lang.String);
@@ -48126,6 +49134,7 @@
   public abstract class Signature extends java.security.SignatureSpi {
     ctor protected Signature(java.lang.String);
     method public final java.lang.String getAlgorithm();
+    method public java.security.SignatureSpi getCurrentSpi();
     method public static java.security.Signature getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static java.security.Signature getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static java.security.Signature getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
@@ -48153,8 +49162,8 @@
   }
 
   public class SignatureException extends java.security.GeneralSecurityException {
-    ctor public SignatureException(java.lang.String);
     ctor public SignatureException();
+    ctor public SignatureException(java.lang.String);
     ctor public SignatureException(java.lang.String, java.lang.Throwable);
     ctor public SignatureException(java.lang.Throwable);
   }
@@ -48207,17 +49216,19 @@
   }
 
   public class UnrecoverableKeyException extends java.security.UnrecoverableEntryException {
-    ctor public UnrecoverableKeyException(java.lang.String);
     ctor public UnrecoverableKeyException();
+    ctor public UnrecoverableKeyException(java.lang.String);
   }
 
   public final class UnresolvedPermission extends java.security.Permission implements java.io.Serializable {
     ctor public UnresolvedPermission(java.lang.String, java.lang.String, java.lang.String, java.security.cert.Certificate[]);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
     method public java.lang.String getUnresolvedActions();
     method public java.security.cert.Certificate[] getUnresolvedCerts();
     method public java.lang.String getUnresolvedName();
     method public java.lang.String getUnresolvedType();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
@@ -48291,12 +49302,28 @@
   }
 
   public class CRLException extends java.security.GeneralSecurityException {
-    ctor public CRLException(java.lang.String);
     ctor public CRLException();
+    ctor public CRLException(java.lang.String);
     ctor public CRLException(java.lang.String, java.lang.Throwable);
     ctor public CRLException(java.lang.Throwable);
   }
 
+  public final class CRLReason extends java.lang.Enum {
+    method public static java.security.cert.CRLReason valueOf(java.lang.String);
+    method public static final java.security.cert.CRLReason[] values();
+    enum_constant public static final java.security.cert.CRLReason AA_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason AFFILIATION_CHANGED;
+    enum_constant public static final java.security.cert.CRLReason CA_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason CERTIFICATE_HOLD;
+    enum_constant public static final java.security.cert.CRLReason CESSATION_OF_OPERATION;
+    enum_constant public static final java.security.cert.CRLReason KEY_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason PRIVILEGE_WITHDRAWN;
+    enum_constant public static final java.security.cert.CRLReason REMOVE_FROM_CRL;
+    enum_constant public static final java.security.cert.CRLReason SUPERSEDED;
+    enum_constant public static final java.security.cert.CRLReason UNSPECIFIED;
+    enum_constant public static final java.security.cert.CRLReason UNUSED;
+  }
+
   public abstract interface CRLSelector implements java.lang.Cloneable {
     method public abstract java.lang.Object clone();
     method public abstract boolean match(java.security.cert.CRL);
@@ -48329,10 +49356,10 @@
   }
 
   public class CertPathBuilderException extends java.security.GeneralSecurityException {
-    ctor public CertPathBuilderException(java.lang.String, java.lang.Throwable);
-    ctor public CertPathBuilderException(java.lang.Throwable);
-    ctor public CertPathBuilderException(java.lang.String);
     ctor public CertPathBuilderException();
+    ctor public CertPathBuilderException(java.lang.String);
+    ctor public CertPathBuilderException(java.lang.Throwable);
+    ctor public CertPathBuilderException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract interface CertPathBuilderResult implements java.lang.Cloneable {
@@ -48361,13 +49388,30 @@
   }
 
   public class CertPathValidatorException extends java.security.GeneralSecurityException {
-    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int);
-    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable);
-    ctor public CertPathValidatorException(java.lang.Throwable);
-    ctor public CertPathValidatorException(java.lang.String);
     ctor public CertPathValidatorException();
+    ctor public CertPathValidatorException(java.lang.String);
+    ctor public CertPathValidatorException(java.lang.Throwable);
+    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable);
+    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int);
+    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int, java.security.cert.CertPathValidatorException.Reason);
     method public java.security.cert.CertPath getCertPath();
     method public int getIndex();
+    method public java.security.cert.CertPathValidatorException.Reason getReason();
+  }
+
+  public static final class CertPathValidatorException.BasicReason extends java.lang.Enum implements java.security.cert.CertPathValidatorException.Reason {
+    method public static java.security.cert.CertPathValidatorException.BasicReason valueOf(java.lang.String);
+    method public static final java.security.cert.CertPathValidatorException.BasicReason[] values();
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason ALGORITHM_CONSTRAINED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason EXPIRED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason INVALID_SIGNATURE;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason NOT_YET_VALID;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason REVOKED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNDETERMINED_REVOCATION_STATUS;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNSPECIFIED;
+  }
+
+  public static abstract interface CertPathValidatorException.Reason implements java.io.Serializable {
   }
 
   public abstract interface CertPathValidatorResult implements java.lang.Cloneable {
@@ -48398,10 +49442,10 @@
   }
 
   public class CertStoreException extends java.security.GeneralSecurityException {
-    ctor public CertStoreException(java.lang.String, java.lang.Throwable);
-    ctor public CertStoreException(java.lang.Throwable);
-    ctor public CertStoreException(java.lang.String);
     ctor public CertStoreException();
+    ctor public CertStoreException(java.lang.String);
+    ctor public CertStoreException(java.lang.Throwable);
+    ctor public CertStoreException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract interface CertStoreParameters implements java.lang.Cloneable {
@@ -48431,22 +49475,22 @@
   }
 
   public class CertificateEncodingException extends java.security.cert.CertificateException {
-    ctor public CertificateEncodingException(java.lang.String);
     ctor public CertificateEncodingException();
+    ctor public CertificateEncodingException(java.lang.String);
     ctor public CertificateEncodingException(java.lang.String, java.lang.Throwable);
     ctor public CertificateEncodingException(java.lang.Throwable);
   }
 
   public class CertificateException extends java.security.GeneralSecurityException {
-    ctor public CertificateException(java.lang.String);
     ctor public CertificateException();
+    ctor public CertificateException(java.lang.String);
     ctor public CertificateException(java.lang.String, java.lang.Throwable);
     ctor public CertificateException(java.lang.Throwable);
   }
 
   public class CertificateExpiredException extends java.security.cert.CertificateException {
-    ctor public CertificateExpiredException(java.lang.String);
     ctor public CertificateExpiredException();
+    ctor public CertificateExpiredException(java.lang.String);
   }
 
   public class CertificateFactory {
@@ -48479,28 +49523,44 @@
   }
 
   public class CertificateNotYetValidException extends java.security.cert.CertificateException {
-    ctor public CertificateNotYetValidException(java.lang.String);
     ctor public CertificateNotYetValidException();
+    ctor public CertificateNotYetValidException(java.lang.String);
   }
 
   public class CertificateParsingException extends java.security.cert.CertificateException {
-    ctor public CertificateParsingException(java.lang.String);
     ctor public CertificateParsingException();
+    ctor public CertificateParsingException(java.lang.String);
     ctor public CertificateParsingException(java.lang.String, java.lang.Throwable);
     ctor public CertificateParsingException(java.lang.Throwable);
   }
 
+  public class CertificateRevokedException extends java.security.cert.CertificateException {
+    ctor public CertificateRevokedException(java.util.Date, java.security.cert.CRLReason, javax.security.auth.x500.X500Principal, java.util.Map<java.lang.String, java.security.cert.Extension>);
+    method public javax.security.auth.x500.X500Principal getAuthorityName();
+    method public java.util.Map<java.lang.String, java.security.cert.Extension> getExtensions();
+    method public java.util.Date getInvalidityDate();
+    method public java.util.Date getRevocationDate();
+    method public java.security.cert.CRLReason getRevocationReason();
+  }
+
   public class CollectionCertStoreParameters implements java.security.cert.CertStoreParameters {
-    ctor public CollectionCertStoreParameters();
     ctor public CollectionCertStoreParameters(java.util.Collection<?>);
+    ctor public CollectionCertStoreParameters();
     method public java.lang.Object clone();
     method public java.util.Collection<?> getCollection();
   }
 
+  public abstract interface Extension {
+    method public abstract void encode(java.io.OutputStream) throws java.io.IOException;
+    method public abstract java.lang.String getId();
+    method public abstract byte[] getValue();
+    method public abstract boolean isCritical();
+  }
+
   public class LDAPCertStoreParameters implements java.security.cert.CertStoreParameters {
     ctor public LDAPCertStoreParameters(java.lang.String, int);
-    ctor public LDAPCertStoreParameters();
     ctor public LDAPCertStoreParameters(java.lang.String);
+    ctor public LDAPCertStoreParameters();
     method public java.lang.Object clone();
     method public int getPort();
     method public java.lang.String getServerName();
@@ -48567,6 +49627,19 @@
     method public void setTrustAnchors(java.util.Set<java.security.cert.TrustAnchor>) throws java.security.InvalidAlgorithmParameterException;
   }
 
+  public final class PKIXReason extends java.lang.Enum implements java.security.cert.CertPathValidatorException.Reason {
+    method public static java.security.cert.PKIXReason valueOf(java.lang.String);
+    method public static final java.security.cert.PKIXReason[] values();
+    enum_constant public static final java.security.cert.PKIXReason INVALID_KEY_USAGE;
+    enum_constant public static final java.security.cert.PKIXReason INVALID_NAME;
+    enum_constant public static final java.security.cert.PKIXReason INVALID_POLICY;
+    enum_constant public static final java.security.cert.PKIXReason NAME_CHAINING;
+    enum_constant public static final java.security.cert.PKIXReason NOT_CA_CERT;
+    enum_constant public static final java.security.cert.PKIXReason NO_TRUST_ANCHOR;
+    enum_constant public static final java.security.cert.PKIXReason PATH_TOO_LONG;
+    enum_constant public static final java.security.cert.PKIXReason UNRECOGNIZED_CRIT_EXT;
+  }
+
   public abstract interface PolicyNode {
     method public abstract java.util.Iterator<? extends java.security.cert.PolicyNode> getChildren();
     method public abstract int getDepth();
@@ -48586,8 +49659,8 @@
 
   public class TrustAnchor {
     ctor public TrustAnchor(java.security.cert.X509Certificate, byte[]);
-    ctor public TrustAnchor(java.lang.String, java.security.PublicKey, byte[]);
     ctor public TrustAnchor(javax.security.auth.x500.X500Principal, java.security.PublicKey, byte[]);
+    ctor public TrustAnchor(java.lang.String, java.security.PublicKey, byte[]);
     method public final javax.security.auth.x500.X500Principal getCA();
     method public final java.lang.String getCAName();
     method public final java.security.PublicKey getCAPublicKey();
@@ -48620,6 +49693,7 @@
     method public javax.security.auth.x500.X500Principal getCertificateIssuer();
     method public abstract byte[] getEncoded() throws java.security.cert.CRLException;
     method public abstract java.util.Date getRevocationDate();
+    method public java.security.cert.CRLReason getRevocationReason();
     method public abstract java.math.BigInteger getSerialNumber();
     method public abstract boolean hasExtensions();
     method public abstract java.lang.String toString();
@@ -48895,8 +49969,8 @@
   }
 
   public class EllipticCurve {
-    ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]);
     ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger);
+    ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]);
     method public java.math.BigInteger getA();
     method public java.math.BigInteger getB();
     method public java.security.spec.ECField getField();
@@ -48910,15 +49984,15 @@
   }
 
   public class InvalidKeySpecException extends java.security.GeneralSecurityException {
-    ctor public InvalidKeySpecException(java.lang.String);
     ctor public InvalidKeySpecException();
+    ctor public InvalidKeySpecException(java.lang.String);
     ctor public InvalidKeySpecException(java.lang.String, java.lang.Throwable);
     ctor public InvalidKeySpecException(java.lang.Throwable);
   }
 
   public class InvalidParameterSpecException extends java.security.GeneralSecurityException {
-    ctor public InvalidParameterSpecException(java.lang.String);
     ctor public InvalidParameterSpecException();
+    ctor public InvalidParameterSpecException(java.lang.String);
   }
 
   public abstract interface KeySpec {
@@ -48939,8 +50013,8 @@
   }
 
   public class PSSParameterSpec implements java.security.spec.AlgorithmParameterSpec {
-    ctor public PSSParameterSpec(int);
     ctor public PSSParameterSpec(java.lang.String, java.lang.String, java.security.spec.AlgorithmParameterSpec, int, int);
+    ctor public PSSParameterSpec(int);
     method public java.lang.String getDigestAlgorithm();
     method public java.lang.String getMGFAlgorithm();
     method public java.security.spec.AlgorithmParameterSpec getMGFParameters();
@@ -49009,28 +50083,28 @@
   public abstract interface Array {
     method public abstract void free() throws java.sql.SQLException;
     method public abstract java.lang.Object getArray() throws java.sql.SQLException;
+    method public abstract java.lang.Object getArray(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.lang.Object getArray(long, int) throws java.sql.SQLException;
     method public abstract java.lang.Object getArray(long, int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
-    method public abstract java.lang.Object getArray(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract int getBaseType() throws java.sql.SQLException;
     method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException;
     method public abstract java.sql.ResultSet getResultSet() throws java.sql.SQLException;
+    method public abstract java.sql.ResultSet getResultSet(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.sql.ResultSet getResultSet(long, int) throws java.sql.SQLException;
     method public abstract java.sql.ResultSet getResultSet(long, int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
-    method public abstract java.sql.ResultSet getResultSet(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
   }
 
-  public class BatchUpdateException extends java.sql.SQLException implements java.io.Serializable {
+  public class BatchUpdateException extends java.sql.SQLException {
+    ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[]);
+    ctor public BatchUpdateException(java.lang.String, java.lang.String, int[]);
+    ctor public BatchUpdateException(java.lang.String, int[]);
+    ctor public BatchUpdateException(int[]);
     ctor public BatchUpdateException();
     ctor public BatchUpdateException(java.lang.Throwable);
     ctor public BatchUpdateException(int[], java.lang.Throwable);
     ctor public BatchUpdateException(java.lang.String, int[], java.lang.Throwable);
     ctor public BatchUpdateException(java.lang.String, java.lang.String, int[], java.lang.Throwable);
     ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[], java.lang.Throwable);
-    ctor public BatchUpdateException(int[]);
-    ctor public BatchUpdateException(java.lang.String, int[]);
-    ctor public BatchUpdateException(java.lang.String, java.lang.String, int[]);
-    ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[]);
     method public int[] getUpdateCounts();
   }
 
@@ -49040,8 +50114,8 @@
     method public abstract java.io.InputStream getBinaryStream(long, long) throws java.sql.SQLException;
     method public abstract byte[] getBytes(long, int) throws java.sql.SQLException;
     method public abstract long length() throws java.sql.SQLException;
-    method public abstract long position(java.sql.Blob, long) throws java.sql.SQLException;
     method public abstract long position(byte[], long) throws java.sql.SQLException;
+    method public abstract long position(java.sql.Blob, long) throws java.sql.SQLException;
     method public abstract java.io.OutputStream setBinaryStream(long) throws java.sql.SQLException;
     method public abstract int setBytes(long, byte[]) throws java.sql.SQLException;
     method public abstract int setBytes(long, byte[], int, int) throws java.sql.SQLException;
@@ -49051,8 +50125,8 @@
   public abstract interface CallableStatement implements java.sql.PreparedStatement {
     method public abstract java.sql.Array getArray(int) throws java.sql.SQLException;
     method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException;
-    method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
     method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException;
+    method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
     method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException;
     method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException;
     method public abstract java.sql.Blob getBlob(java.lang.String) throws java.sql.SQLException;
@@ -49147,9 +50221,9 @@
     method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException;
     method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException;
-    method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
-    method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
     method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException;
+    method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
     method public abstract void setRowId(java.lang.String, java.sql.RowId) throws java.sql.SQLException;
     method public abstract void setSQLXML(java.lang.String, java.sql.SQLXML) throws java.sql.SQLException;
     method public abstract void setShort(java.lang.String, short) throws java.sql.SQLException;
@@ -49178,8 +50252,8 @@
     method public abstract java.io.Reader getCharacterStream(long, long) throws java.sql.SQLException;
     method public abstract java.lang.String getSubString(long, int) throws java.sql.SQLException;
     method public abstract long length() throws java.sql.SQLException;
-    method public abstract long position(java.sql.Clob, long) throws java.sql.SQLException;
     method public abstract long position(java.lang.String, long) throws java.sql.SQLException;
+    method public abstract long position(java.sql.Clob, long) throws java.sql.SQLException;
     method public abstract java.io.OutputStream setAsciiStream(long) throws java.sql.SQLException;
     method public abstract java.io.Writer setCharacterStream(long) throws java.sql.SQLException;
     method public abstract int setString(long, java.lang.String) throws java.sql.SQLException;
@@ -49217,10 +50291,10 @@
     method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int) throws java.sql.SQLException;
     method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int, int) throws java.sql.SQLException;
     method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String) throws java.sql.SQLException;
-    method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int) throws java.sql.SQLException;
-    method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int[]) throws java.sql.SQLException;
     method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int) throws java.sql.SQLException;
     method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int, int) throws java.sql.SQLException;
+    method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int) throws java.sql.SQLException;
+    method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int[]) throws java.sql.SQLException;
     method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, java.lang.String[]) throws java.sql.SQLException;
     method public abstract void releaseSavepoint(java.sql.Savepoint) throws java.sql.SQLException;
     method public abstract void rollback() throws java.sql.SQLException;
@@ -49242,7 +50316,7 @@
     field public static final int TRANSACTION_SERIALIZABLE = 8; // 0x8
   }
 
-  public class DataTruncation extends java.sql.SQLWarning implements java.io.Serializable {
+  public class DataTruncation extends java.sql.SQLWarning {
     ctor public DataTruncation(int, boolean, boolean, int, int);
     ctor public DataTruncation(int, boolean, boolean, int, int, java.lang.Throwable);
     method public int getDataSize();
@@ -49504,17 +50578,17 @@
   }
 
   public class DriverManager {
-    method public static void deregisterDriver(java.sql.Driver) throws java.sql.SQLException;
-    method public static java.sql.Connection getConnection(java.lang.String) throws java.sql.SQLException;
+    method public static synchronized void deregisterDriver(java.sql.Driver) throws java.sql.SQLException;
     method public static java.sql.Connection getConnection(java.lang.String, java.util.Properties) throws java.sql.SQLException;
     method public static java.sql.Connection getConnection(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException;
+    method public static java.sql.Connection getConnection(java.lang.String) throws java.sql.SQLException;
     method public static java.sql.Driver getDriver(java.lang.String) throws java.sql.SQLException;
     method public static java.util.Enumeration<java.sql.Driver> getDrivers();
     method public static deprecated java.io.PrintStream getLogStream();
     method public static java.io.PrintWriter getLogWriter();
     method public static int getLoginTimeout();
     method public static void println(java.lang.String);
-    method public static void registerDriver(java.sql.Driver) throws java.sql.SQLException;
+    method public static synchronized void registerDriver(java.sql.Driver) throws java.sql.SQLException;
     method public static deprecated void setLogStream(java.io.PrintStream);
     method public static void setLogWriter(java.io.PrintWriter);
     method public static void setLoginTimeout(int);
@@ -49593,8 +50667,8 @@
     method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(int, int) throws java.sql.SQLException;
     method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException;
-    method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException;
     method public abstract void setRef(int, java.sql.Ref) throws java.sql.SQLException;
     method public abstract void setRowId(int, java.sql.RowId) throws java.sql.SQLException;
@@ -49611,8 +50685,8 @@
 
   public abstract interface Ref {
     method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException;
-    method public abstract java.lang.Object getObject() throws java.sql.SQLException;
     method public abstract java.lang.Object getObject(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
+    method public abstract java.lang.Object getObject() throws java.sql.SQLException;
     method public abstract void setObject(java.lang.Object) throws java.sql.SQLException;
   }
 
@@ -49630,10 +50704,10 @@
     method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException;
     method public abstract java.io.InputStream getAsciiStream(int) throws java.sql.SQLException;
     method public abstract java.io.InputStream getAsciiStream(java.lang.String) throws java.sql.SQLException;
-    method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
     method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException;
-    method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException;
     method public abstract deprecated java.math.BigDecimal getBigDecimal(java.lang.String, int) throws java.sql.SQLException;
+    method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
+    method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException;
     method public abstract java.io.InputStream getBinaryStream(int) throws java.sql.SQLException;
     method public abstract java.io.InputStream getBinaryStream(java.lang.String) throws java.sql.SQLException;
     method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException;
@@ -49651,8 +50725,8 @@
     method public abstract int getConcurrency() throws java.sql.SQLException;
     method public abstract java.lang.String getCursorName() throws java.sql.SQLException;
     method public abstract java.sql.Date getDate(int) throws java.sql.SQLException;
-    method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Date getDate(java.lang.String) throws java.sql.SQLException;
+    method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Date getDate(java.lang.String, java.util.Calendar) throws java.sql.SQLException;
     method public abstract double getDouble(int) throws java.sql.SQLException;
     method public abstract double getDouble(java.lang.String) throws java.sql.SQLException;
@@ -49673,8 +50747,8 @@
     method public abstract java.lang.String getNString(int) throws java.sql.SQLException;
     method public abstract java.lang.String getNString(java.lang.String) throws java.sql.SQLException;
     method public abstract java.lang.Object getObject(int) throws java.sql.SQLException;
-    method public abstract java.lang.Object getObject(int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.lang.Object getObject(java.lang.String) throws java.sql.SQLException;
+    method public abstract java.lang.Object getObject(int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.lang.Object getObject(java.lang.String, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.sql.Ref getRef(int) throws java.sql.SQLException;
     method public abstract java.sql.Ref getRef(java.lang.String) throws java.sql.SQLException;
@@ -49689,12 +50763,12 @@
     method public abstract java.lang.String getString(int) throws java.sql.SQLException;
     method public abstract java.lang.String getString(java.lang.String) throws java.sql.SQLException;
     method public abstract java.sql.Time getTime(int) throws java.sql.SQLException;
-    method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Time getTime(java.lang.String) throws java.sql.SQLException;
+    method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Time getTime(java.lang.String, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException;
-    method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Timestamp getTimestamp(java.lang.String) throws java.sql.SQLException;
+    method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Timestamp getTimestamp(java.lang.String, java.util.Calendar) throws java.sql.SQLException;
     method public abstract int getType() throws java.sql.SQLException;
     method public abstract java.net.URL getURL(int) throws java.sql.SQLException;
@@ -49784,10 +50858,10 @@
     method public abstract void updateNString(java.lang.String, java.lang.String) throws java.sql.SQLException;
     method public abstract void updateNull(int) throws java.sql.SQLException;
     method public abstract void updateNull(java.lang.String) throws java.sql.SQLException;
-    method public abstract void updateObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void updateObject(int, java.lang.Object, int) throws java.sql.SQLException;
-    method public abstract void updateObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
+    method public abstract void updateObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void updateObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void updateObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
     method public abstract void updateRef(int, java.sql.Ref) throws java.sql.SQLException;
     method public abstract void updateRef(java.lang.String, java.sql.Ref) throws java.sql.SQLException;
     method public abstract void updateRow() throws java.sql.SQLException;
@@ -49866,10 +50940,10 @@
     ctor public SQLClientInfoException(java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
     ctor public SQLClientInfoException(java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>);
     ctor public SQLClientInfoException(java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
-    ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>);
-    ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
     ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>);
     ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
+    ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
     method public java.util.Map<java.lang.String, java.sql.ClientInfoStatus> getFailedProperties();
   }
 
@@ -49890,11 +50964,11 @@
     ctor public SQLDataException(java.lang.String, java.lang.String, int, java.lang.Throwable);
   }
 
-  public class SQLException extends java.lang.Exception implements java.lang.Iterable java.io.Serializable {
-    ctor public SQLException();
-    ctor public SQLException(java.lang.String);
-    ctor public SQLException(java.lang.String, java.lang.String);
+  public class SQLException extends java.lang.Exception implements java.lang.Iterable {
     ctor public SQLException(java.lang.String, java.lang.String, int);
+    ctor public SQLException(java.lang.String, java.lang.String);
+    ctor public SQLException(java.lang.String);
+    ctor public SQLException();
     ctor public SQLException(java.lang.Throwable);
     ctor public SQLException(java.lang.String, java.lang.Throwable);
     ctor public SQLException(java.lang.String, java.lang.String, java.lang.Throwable);
@@ -50021,7 +51095,7 @@
     method public abstract void writeURL(java.net.URL) throws java.sql.SQLException;
   }
 
-  public final class SQLPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable {
+  public final class SQLPermission extends java.security.BasicPermission {
     ctor public SQLPermission(java.lang.String);
     ctor public SQLPermission(java.lang.String, java.lang.String);
   }
@@ -50092,11 +51166,11 @@
     ctor public SQLTransientException(java.lang.String, java.lang.String, int, java.lang.Throwable);
   }
 
-  public class SQLWarning extends java.sql.SQLException implements java.io.Serializable {
-    ctor public SQLWarning();
-    ctor public SQLWarning(java.lang.String);
-    ctor public SQLWarning(java.lang.String, java.lang.String);
+  public class SQLWarning extends java.sql.SQLException {
     ctor public SQLWarning(java.lang.String, java.lang.String, int);
+    ctor public SQLWarning(java.lang.String, java.lang.String);
+    ctor public SQLWarning(java.lang.String);
+    ctor public SQLWarning();
     ctor public SQLWarning(java.lang.Throwable);
     ctor public SQLWarning(java.lang.String, java.lang.Throwable);
     ctor public SQLWarning(java.lang.String, java.lang.String, java.lang.Throwable);
@@ -50185,15 +51259,15 @@
   }
 
   public class Timestamp extends java.util.Date {
-    ctor public deprecated Timestamp(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
+    ctor public deprecated Timestamp(int, int, int, int, int, int, int);
     ctor public Timestamp(long);
     method public boolean after(java.sql.Timestamp);
     method public boolean before(java.sql.Timestamp);
     method public int compareTo(java.sql.Timestamp);
     method public boolean equals(java.sql.Timestamp);
     method public int getNanos();
-    method public void setNanos(int) throws java.lang.IllegalArgumentException;
-    method public static java.sql.Timestamp valueOf(java.lang.String) throws java.lang.IllegalArgumentException;
+    method public void setNanos(int);
+    method public static java.sql.Timestamp valueOf(java.lang.String);
   }
 
   public class Types {
@@ -50273,11 +51347,11 @@
   }
 
   public class AttributedString {
+    ctor public AttributedString(java.lang.String);
+    ctor public AttributedString(java.lang.String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>);
     ctor public AttributedString(java.text.AttributedCharacterIterator);
     ctor public AttributedString(java.text.AttributedCharacterIterator, int, int);
     ctor public AttributedString(java.text.AttributedCharacterIterator, int, int, java.text.AttributedCharacterIterator.Attribute[]);
-    ctor public AttributedString(java.lang.String);
-    ctor public AttributedString(java.lang.String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>);
     method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object);
     method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object, int, int);
     method public void addAttributes(java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>, int, int);
@@ -50287,9 +51361,9 @@
   }
 
   public final class Bidi {
+    ctor public Bidi(java.lang.String, int);
     ctor public Bidi(java.text.AttributedCharacterIterator);
     ctor public Bidi(char[], int, byte[], int, int, int);
-    ctor public Bidi(java.lang.String, int);
     method public boolean baseIsLeftToRight();
     method public java.text.Bidi createLineBidi(int, int);
     method public int getBaseLevel();
@@ -50316,7 +51390,7 @@
     method public abstract int current();
     method public abstract int first();
     method public abstract int following(int);
-    method public static java.util.Locale[] getAvailableLocales();
+    method public static synchronized java.util.Locale[] getAvailableLocales();
     method public static java.text.BreakIterator getCharacterInstance();
     method public static java.text.BreakIterator getCharacterInstance(java.util.Locale);
     method public static java.text.BreakIterator getLineInstance();
@@ -50328,8 +51402,8 @@
     method public static java.text.BreakIterator getWordInstance(java.util.Locale);
     method public boolean isBoundary(int);
     method public abstract int last();
-    method public abstract int next();
     method public abstract int next(int);
+    method public abstract int next();
     method public int preceding(int);
     method public abstract int previous();
     method public void setText(java.lang.String);
@@ -50352,11 +51426,11 @@
   }
 
   public class ChoiceFormat extends java.text.NumberFormat {
-    ctor public ChoiceFormat(double[], java.lang.String[]);
     ctor public ChoiceFormat(java.lang.String);
+    ctor public ChoiceFormat(double[], java.lang.String[]);
     method public void applyPattern(java.lang.String);
-    method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
+    method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.Object[] getFormats();
     method public double[] getLimits();
     method public static final double nextDouble(double);
@@ -50376,8 +51450,8 @@
     method public void reset();
     method public static final short secondaryOrder(int);
     method public void setOffset(int);
-    method public void setText(java.text.CharacterIterator);
     method public void setText(java.lang.String);
+    method public void setText(java.text.CharacterIterator);
     method public static final short tertiaryOrder(int);
     field public static final int NULLORDER = -1; // 0xffffffff
   }
@@ -50392,18 +51466,18 @@
   public abstract class Collator implements java.lang.Cloneable java.util.Comparator {
     ctor protected Collator();
     method public java.lang.Object clone();
-    method public int compare(java.lang.Object, java.lang.Object);
     method public abstract int compare(java.lang.String, java.lang.String);
+    method public int compare(java.lang.Object, java.lang.Object);
     method public boolean equals(java.lang.String, java.lang.String);
-    method public static java.util.Locale[] getAvailableLocales();
+    method public static synchronized java.util.Locale[] getAvailableLocales();
     method public abstract java.text.CollationKey getCollationKey(java.lang.String);
-    method public int getDecomposition();
-    method public static java.text.Collator getInstance();
-    method public static java.text.Collator getInstance(java.util.Locale);
-    method public int getStrength();
+    method public synchronized int getDecomposition();
+    method public static synchronized java.text.Collator getInstance();
+    method public static synchronized java.text.Collator getInstance(java.util.Locale);
+    method public synchronized int getStrength();
     method public abstract int hashCode();
-    method public void setDecomposition(int);
-    method public void setStrength(int);
+    method public synchronized void setDecomposition(int);
+    method public synchronized void setStrength(int);
     field public static final int CANONICAL_DECOMPOSITION = 1; // 0x1
     field public static final int FULL_DECOMPOSITION = 2; // 0x2
     field public static final int IDENTICAL = 3; // 0x3
@@ -50416,8 +51490,8 @@
   public abstract class DateFormat extends java.text.Format {
     ctor protected DateFormat();
     method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
-    method public final java.lang.String format(java.util.Date);
     method public abstract java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition);
+    method public final java.lang.String format(java.util.Date);
     method public static java.util.Locale[] getAvailableLocales();
     method public java.util.Calendar getCalendar();
     method public static final java.text.DateFormat getDateInstance();
@@ -50522,9 +51596,9 @@
     ctor public DecimalFormat(java.lang.String, java.text.DecimalFormatSymbols);
     method public void applyLocalizedPattern(java.lang.String);
     method public void applyPattern(java.lang.String);
+    method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
-    method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.text.DecimalFormatSymbols getDecimalFormatSymbols();
     method public int getGroupingSize();
     method public int getMultiplier();
@@ -50560,15 +51634,17 @@
     method public java.lang.String getExponentSeparator();
     method public char getGroupingSeparator();
     method public java.lang.String getInfinity();
-    method public static java.text.DecimalFormatSymbols getInstance();
-    method public static java.text.DecimalFormatSymbols getInstance(java.util.Locale);
+    method public static final java.text.DecimalFormatSymbols getInstance();
+    method public static final java.text.DecimalFormatSymbols getInstance(java.util.Locale);
     method public java.lang.String getInternationalCurrencySymbol();
     method public char getMinusSign();
+    method public java.lang.String getMinusSignString();
     method public char getMonetaryDecimalSeparator();
     method public java.lang.String getNaN();
     method public char getPatternSeparator();
     method public char getPerMill();
     method public char getPercent();
+    method public java.lang.String getPercentString();
     method public char getZeroDigit();
     method public void setCurrency(java.util.Currency);
     method public void setCurrencySymbol(java.lang.String);
@@ -50605,8 +51681,8 @@
     method public final java.lang.String format(java.lang.Object);
     method public abstract java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object);
-    method public java.lang.Object parseObject(java.lang.String) throws java.text.ParseException;
     method public abstract java.lang.Object parseObject(java.lang.String, java.text.ParsePosition);
+    method public java.lang.Object parseObject(java.lang.String) throws java.text.ParseException;
   }
 
   public static class Format.Field extends java.text.AttributedCharacterIterator.Attribute {
@@ -50614,17 +51690,17 @@
   }
 
   public class MessageFormat extends java.text.Format {
-    ctor public MessageFormat(java.lang.String, java.util.Locale);
     ctor public MessageFormat(java.lang.String);
+    ctor public MessageFormat(java.lang.String, java.util.Locale);
     method public void applyPattern(java.lang.String);
     method public final java.lang.StringBuffer format(java.lang.Object[], java.lang.StringBuffer, java.text.FieldPosition);
-    method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public static java.lang.String format(java.lang.String, java.lang.Object...);
+    method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.text.Format[] getFormats();
     method public java.text.Format[] getFormatsByArgumentIndex();
     method public java.util.Locale getLocale();
-    method public java.lang.Object[] parse(java.lang.String) throws java.text.ParseException;
     method public java.lang.Object[] parse(java.lang.String, java.text.ParsePosition);
+    method public java.lang.Object[] parse(java.lang.String) throws java.text.ParseException;
     method public java.lang.Object parseObject(java.lang.String, java.text.ParsePosition);
     method public void setFormat(int, java.text.Format);
     method public void setFormatByArgumentIndex(int, java.text.Format);
@@ -50655,11 +51731,11 @@
 
   public abstract class NumberFormat extends java.text.Format {
     ctor protected NumberFormat();
-    method public final java.lang.String format(double);
-    method public abstract java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
-    method public final java.lang.String format(long);
-    method public abstract java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
+    method public final java.lang.String format(double);
+    method public final java.lang.String format(long);
+    method public abstract java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
+    method public abstract java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
     method public static java.util.Locale[] getAvailableLocales();
     method public java.util.Currency getCurrency();
     method public static final java.text.NumberFormat getCurrencyInstance();
@@ -50679,8 +51755,8 @@
     method public java.math.RoundingMode getRoundingMode();
     method public boolean isGroupingUsed();
     method public boolean isParseIntegerOnly();
-    method public java.lang.Number parse(java.lang.String) throws java.text.ParseException;
     method public abstract java.lang.Number parse(java.lang.String, java.text.ParsePosition);
+    method public java.lang.Number parse(java.lang.String) throws java.text.ParseException;
     method public final java.lang.Object parseObject(java.lang.String, java.text.ParsePosition);
     method public void setCurrency(java.util.Currency);
     method public void setGroupingUsed(boolean);
@@ -50724,10 +51800,10 @@
 
   public class RuleBasedCollator extends java.text.Collator {
     ctor public RuleBasedCollator(java.lang.String) throws java.text.ParseException;
-    method public int compare(java.lang.String, java.lang.String);
-    method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
+    method public synchronized int compare(java.lang.String, java.lang.String);
     method public java.text.CollationElementIterator getCollationElementIterator(java.lang.String);
-    method public java.text.CollationKey getCollationKey(java.lang.String);
+    method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
+    method public synchronized java.text.CollationKey getCollationKey(java.lang.String);
     method public java.lang.String getRules();
     method public int hashCode();
   }
@@ -50735,8 +51811,8 @@
   public class SimpleDateFormat extends java.text.DateFormat {
     ctor public SimpleDateFormat();
     ctor public SimpleDateFormat(java.lang.String);
-    ctor public SimpleDateFormat(java.lang.String, java.text.DateFormatSymbols);
     ctor public SimpleDateFormat(java.lang.String, java.util.Locale);
+    ctor public SimpleDateFormat(java.lang.String, java.text.DateFormatSymbols);
     method public void applyLocalizedPattern(java.lang.String);
     method public void applyPattern(java.lang.String);
     method public java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition);
@@ -50883,7 +51959,7 @@
     method public int size();
   }
 
-  public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.RandomAccess java.io.Serializable {
+  public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public ArrayList(int);
     ctor public ArrayList();
     ctor public ArrayList(java.util.Collection<? extends E>);
@@ -50896,109 +51972,109 @@
 
   public class Arrays {
     method public static java.util.List<T> asList(T...);
-    method public static int binarySearch(byte[], byte);
-    method public static int binarySearch(byte[], int, int, byte);
+    method public static int binarySearch(long[], long);
+    method public static int binarySearch(long[], int, int, long);
+    method public static int binarySearch(int[], int);
+    method public static int binarySearch(int[], int, int, int);
+    method public static int binarySearch(short[], short);
+    method public static int binarySearch(short[], int, int, short);
     method public static int binarySearch(char[], char);
     method public static int binarySearch(char[], int, int, char);
+    method public static int binarySearch(byte[], byte);
+    method public static int binarySearch(byte[], int, int, byte);
     method public static int binarySearch(double[], double);
     method public static int binarySearch(double[], int, int, double);
     method public static int binarySearch(float[], float);
     method public static int binarySearch(float[], int, int, float);
-    method public static int binarySearch(int[], int);
-    method public static int binarySearch(int[], int, int, int);
-    method public static int binarySearch(long[], long);
-    method public static int binarySearch(long[], int, int, long);
     method public static int binarySearch(java.lang.Object[], java.lang.Object);
     method public static int binarySearch(java.lang.Object[], int, int, java.lang.Object);
     method public static int binarySearch(T[], T, java.util.Comparator<? super T>);
     method public static int binarySearch(T[], int, int, T, java.util.Comparator<? super T>);
-    method public static int binarySearch(short[], short);
-    method public static int binarySearch(short[], int, int, short);
-    method public static boolean[] copyOf(boolean[], int);
-    method public static byte[] copyOf(byte[], int);
-    method public static char[] copyOf(char[], int);
-    method public static double[] copyOf(double[], int);
-    method public static float[] copyOf(float[], int);
-    method public static int[] copyOf(int[], int);
-    method public static long[] copyOf(long[], int);
-    method public static short[] copyOf(short[], int);
     method public static T[] copyOf(T[], int);
     method public static T[] copyOf(U[], int, java.lang.Class<? extends T[]>);
-    method public static boolean[] copyOfRange(boolean[], int, int);
-    method public static byte[] copyOfRange(byte[], int, int);
-    method public static char[] copyOfRange(char[], int, int);
-    method public static double[] copyOfRange(double[], int, int);
-    method public static float[] copyOfRange(float[], int, int);
-    method public static int[] copyOfRange(int[], int, int);
-    method public static long[] copyOfRange(long[], int, int);
-    method public static short[] copyOfRange(short[], int, int);
+    method public static byte[] copyOf(byte[], int);
+    method public static short[] copyOf(short[], int);
+    method public static int[] copyOf(int[], int);
+    method public static long[] copyOf(long[], int);
+    method public static char[] copyOf(char[], int);
+    method public static float[] copyOf(float[], int);
+    method public static double[] copyOf(double[], int);
+    method public static boolean[] copyOf(boolean[], int);
     method public static T[] copyOfRange(T[], int, int);
     method public static T[] copyOfRange(U[], int, int, java.lang.Class<? extends T[]>);
+    method public static byte[] copyOfRange(byte[], int, int);
+    method public static short[] copyOfRange(short[], int, int);
+    method public static int[] copyOfRange(int[], int, int);
+    method public static long[] copyOfRange(long[], int, int);
+    method public static char[] copyOfRange(char[], int, int);
+    method public static float[] copyOfRange(float[], int, int);
+    method public static double[] copyOfRange(double[], int, int);
+    method public static boolean[] copyOfRange(boolean[], int, int);
     method public static boolean deepEquals(java.lang.Object[], java.lang.Object[]);
     method public static int deepHashCode(java.lang.Object[]);
     method public static java.lang.String deepToString(java.lang.Object[]);
-    method public static boolean equals(byte[], byte[]);
+    method public static boolean equals(long[], long[]);
+    method public static boolean equals(int[], int[]);
     method public static boolean equals(short[], short[]);
     method public static boolean equals(char[], char[]);
-    method public static boolean equals(int[], int[]);
-    method public static boolean equals(long[], long[]);
-    method public static boolean equals(float[], float[]);
-    method public static boolean equals(double[], double[]);
+    method public static boolean equals(byte[], byte[]);
     method public static boolean equals(boolean[], boolean[]);
+    method public static boolean equals(double[], double[]);
+    method public static boolean equals(float[], float[]);
     method public static boolean equals(java.lang.Object[], java.lang.Object[]);
-    method public static void fill(byte[], byte);
-    method public static void fill(byte[], int, int, byte);
+    method public static void fill(long[], long);
+    method public static void fill(long[], int, int, long);
+    method public static void fill(int[], int);
+    method public static void fill(int[], int, int, int);
     method public static void fill(short[], short);
     method public static void fill(short[], int, int, short);
     method public static void fill(char[], char);
     method public static void fill(char[], int, int, char);
-    method public static void fill(int[], int);
-    method public static void fill(int[], int, int, int);
-    method public static void fill(long[], long);
-    method public static void fill(long[], int, int, long);
-    method public static void fill(float[], float);
-    method public static void fill(float[], int, int, float);
-    method public static void fill(double[], double);
-    method public static void fill(double[], int, int, double);
+    method public static void fill(byte[], byte);
+    method public static void fill(byte[], int, int, byte);
     method public static void fill(boolean[], boolean);
     method public static void fill(boolean[], int, int, boolean);
+    method public static void fill(double[], double);
+    method public static void fill(double[], int, int, double);
+    method public static void fill(float[], float);
+    method public static void fill(float[], int, int, float);
     method public static void fill(java.lang.Object[], java.lang.Object);
     method public static void fill(java.lang.Object[], int, int, java.lang.Object);
-    method public static int hashCode(boolean[]);
+    method public static int hashCode(long[]);
     method public static int hashCode(int[]);
     method public static int hashCode(short[]);
     method public static int hashCode(char[]);
     method public static int hashCode(byte[]);
-    method public static int hashCode(long[]);
+    method public static int hashCode(boolean[]);
     method public static int hashCode(float[]);
     method public static int hashCode(double[]);
     method public static int hashCode(java.lang.Object[]);
-    method public static void sort(byte[]);
-    method public static void sort(byte[], int, int);
-    method public static void sort(char[]);
-    method public static void sort(char[], int, int);
-    method public static void sort(double[]);
-    method public static void sort(double[], int, int);
-    method public static void sort(float[]);
-    method public static void sort(float[], int, int);
     method public static void sort(int[]);
     method public static void sort(int[], int, int);
     method public static void sort(long[]);
     method public static void sort(long[], int, int);
     method public static void sort(short[]);
     method public static void sort(short[], int, int);
+    method public static void sort(char[]);
+    method public static void sort(char[], int, int);
+    method public static void sort(byte[]);
+    method public static void sort(byte[], int, int);
+    method public static void sort(float[]);
+    method public static void sort(float[], int, int);
+    method public static void sort(double[]);
+    method public static void sort(double[], int, int);
     method public static void sort(java.lang.Object[]);
     method public static void sort(java.lang.Object[], int, int);
-    method public static void sort(T[], int, int, java.util.Comparator<? super T>);
     method public static void sort(T[], java.util.Comparator<? super T>);
-    method public static java.lang.String toString(boolean[]);
-    method public static java.lang.String toString(byte[]);
-    method public static java.lang.String toString(char[]);
-    method public static java.lang.String toString(double[]);
-    method public static java.lang.String toString(float[]);
-    method public static java.lang.String toString(int[]);
+    method public static void sort(T[], int, int, java.util.Comparator<? super T>);
     method public static java.lang.String toString(long[]);
+    method public static java.lang.String toString(int[]);
     method public static java.lang.String toString(short[]);
+    method public static java.lang.String toString(char[]);
+    method public static java.lang.String toString(byte[]);
+    method public static java.lang.String toString(boolean[]);
+    method public static java.lang.String toString(float[]);
+    method public static java.lang.String toString(double[]);
     method public static java.lang.String toString(java.lang.Object[]);
   }
 
@@ -51009,8 +52085,8 @@
     method public void andNot(java.util.BitSet);
     method public int cardinality();
     method public void clear(int);
-    method public void clear();
     method public void clear(int, int);
+    method public void clear();
     method public java.lang.Object clone();
     method public void flip(int);
     method public void flip(int, int);
@@ -51026,8 +52102,8 @@
     method public int previousSetBit(int);
     method public void set(int);
     method public void set(int, boolean);
-    method public void set(int, int, boolean);
     method public void set(int, int);
+    method public void set(int, int, boolean);
     method public int size();
     method public byte[] toByteArray();
     method public long[] toLongArray();
@@ -51059,10 +52135,10 @@
     method public java.util.Map<java.lang.String, java.lang.Integer> getDisplayNames(int, int, java.util.Locale);
     method public int getFirstDayOfWeek();
     method public abstract int getGreatestMinimum(int);
-    method public static synchronized java.util.Calendar getInstance();
-    method public static synchronized java.util.Calendar getInstance(java.util.Locale);
-    method public static synchronized java.util.Calendar getInstance(java.util.TimeZone);
-    method public static synchronized java.util.Calendar getInstance(java.util.TimeZone, java.util.Locale);
+    method public static java.util.Calendar getInstance();
+    method public static java.util.Calendar getInstance(java.util.TimeZone);
+    method public static java.util.Calendar getInstance(java.util.Locale);
+    method public static java.util.Calendar getInstance(java.util.TimeZone, java.util.Locale);
     method public abstract int getLeastMaximum(int);
     method public abstract int getMaximum(int);
     method public int getMinimalDaysInFirstWeek();
@@ -51070,11 +52146,14 @@
     method public final java.util.Date getTime();
     method public long getTimeInMillis();
     method public java.util.TimeZone getTimeZone();
+    method public int getWeekYear();
+    method public int getWeeksInWeekYear();
     method protected final int internalGet(int);
     method public boolean isLenient();
     method public final boolean isSet(int);
-    method public void roll(int, int);
+    method public boolean isWeekDateSupported();
     method public abstract void roll(int, boolean);
+    method public void roll(int, int);
     method public void set(int, int);
     method public final void set(int, int, int);
     method public final void set(int, int, int, int, int);
@@ -51085,6 +52164,7 @@
     method public final void setTime(java.util.Date);
     method public void setTimeInMillis(long);
     method public void setTimeZone(java.util.TimeZone);
+    method public void setWeekDate(int, int, int);
     field public static final int ALL_STYLES = 0; // 0x0
     field public static final int AM = 0; // 0x0
     field public static final int AM_PM = 9; // 0x9
@@ -51201,15 +52281,15 @@
     method public static java.util.Collection<T> synchronizedCollection(java.util.Collection<T>);
     method public static java.util.List<T> synchronizedList(java.util.List<T>);
     method public static java.util.Map<K, V> synchronizedMap(java.util.Map<K, V>);
-    method public static java.util.Set<E> synchronizedSet(java.util.Set<E>);
+    method public static java.util.Set<T> synchronizedSet(java.util.Set<T>);
     method public static java.util.SortedMap<K, V> synchronizedSortedMap(java.util.SortedMap<K, V>);
-    method public static java.util.SortedSet<E> synchronizedSortedSet(java.util.SortedSet<E>);
-    method public static java.util.Collection<E> unmodifiableCollection(java.util.Collection<? extends E>);
-    method public static java.util.List<E> unmodifiableList(java.util.List<? extends E>);
+    method public static java.util.SortedSet<T> synchronizedSortedSet(java.util.SortedSet<T>);
+    method public static java.util.Collection<T> unmodifiableCollection(java.util.Collection<? extends T>);
+    method public static java.util.List<T> unmodifiableList(java.util.List<? extends T>);
     method public static java.util.Map<K, V> unmodifiableMap(java.util.Map<? extends K, ? extends V>);
-    method public static java.util.Set<E> unmodifiableSet(java.util.Set<? extends E>);
+    method public static java.util.Set<T> unmodifiableSet(java.util.Set<? extends T>);
     method public static java.util.SortedMap<K, V> unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>);
-    method public static java.util.SortedSet<E> unmodifiableSortedSet(java.util.SortedSet<E>);
+    method public static java.util.SortedSet<T> unmodifiableSortedSet(java.util.SortedSet<T>);
     field public static final java.util.List EMPTY_LIST;
     field public static final java.util.Map EMPTY_MAP;
     field public static final java.util.Set EMPTY_SET;
@@ -51223,8 +52303,8 @@
   public class ConcurrentModificationException extends java.lang.RuntimeException {
     ctor public ConcurrentModificationException();
     ctor public ConcurrentModificationException(java.lang.String);
-    ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable);
     ctor public ConcurrentModificationException(java.lang.Throwable);
+    ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable);
   }
 
   public final class Currency implements java.io.Serializable {
@@ -51235,16 +52315,17 @@
     method public java.lang.String getDisplayName(java.util.Locale);
     method public static java.util.Currency getInstance(java.lang.String);
     method public static java.util.Currency getInstance(java.util.Locale);
+    method public int getNumericCode();
     method public java.lang.String getSymbol();
     method public java.lang.String getSymbol(java.util.Locale);
   }
 
   public class Date implements java.lang.Cloneable java.lang.Comparable java.io.Serializable {
     ctor public Date();
+    ctor public Date(long);
     ctor public deprecated Date(int, int, int);
     ctor public deprecated Date(int, int, int, int, int);
     ctor public deprecated Date(int, int, int, int, int, int);
-    ctor public Date(long);
     ctor public deprecated Date(java.lang.String);
     method public static deprecated long UTC(int, int, int, int, int, int);
     method public boolean after(java.util.Date);
@@ -51322,7 +52403,7 @@
     ctor public EmptyStackException();
   }
 
-  public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
     ctor public EnumMap(java.lang.Class<K>);
     ctor public EnumMap(java.util.EnumMap<K, ? extends V>);
     ctor public EnumMap(java.util.Map<K, ? extends V>);
@@ -51355,8 +52436,8 @@
   }
 
   public abstract class EventListenerProxy implements java.util.EventListener {
-    ctor public EventListenerProxy(java.util.EventListener);
-    method public java.util.EventListener getListener();
+    ctor public EventListenerProxy(T);
+    method public T getListener();
   }
 
   public class EventObject implements java.io.Serializable {
@@ -51365,14 +52446,14 @@
     field protected transient java.lang.Object source;
   }
 
-  public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException implements java.io.Serializable {
+  public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException {
     ctor public FormatFlagsConversionMismatchException(java.lang.String, char);
     method public char getConversion();
     method public java.lang.String getFlags();
   }
 
   public abstract interface Formattable {
-    method public abstract void formatTo(java.util.Formatter, int, int, int) throws java.util.IllegalFormatException;
+    method public abstract void formatTo(java.util.Formatter, int, int, int);
   }
 
   public class FormattableFlags {
@@ -51392,10 +52473,10 @@
     ctor public Formatter(java.io.File) throws java.io.FileNotFoundException;
     ctor public Formatter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     ctor public Formatter(java.io.File, java.lang.String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.PrintStream);
     ctor public Formatter(java.io.OutputStream);
     ctor public Formatter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException;
     ctor public Formatter(java.io.OutputStream, java.lang.String, java.util.Locale) throws java.io.UnsupportedEncodingException;
-    ctor public Formatter(java.io.PrintStream);
     method public void close();
     method public void flush();
     method public java.util.Formatter format(java.lang.String, java.lang.Object...);
@@ -51412,18 +52493,18 @@
     enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC;
   }
 
-  public class FormatterClosedException extends java.lang.IllegalStateException implements java.io.Serializable {
+  public class FormatterClosedException extends java.lang.IllegalStateException {
     ctor public FormatterClosedException();
   }
 
   public class GregorianCalendar extends java.util.Calendar {
     ctor public GregorianCalendar();
+    ctor public GregorianCalendar(java.util.TimeZone);
+    ctor public GregorianCalendar(java.util.Locale);
+    ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale);
     ctor public GregorianCalendar(int, int, int);
     ctor public GregorianCalendar(int, int, int, int, int);
     ctor public GregorianCalendar(int, int, int, int, int, int);
-    ctor public GregorianCalendar(java.util.Locale);
-    ctor public GregorianCalendar(java.util.TimeZone);
-    ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale);
     method public void add(int, int);
     method protected void computeFields();
     method protected void computeTime();
@@ -51433,16 +52514,17 @@
     method public int getMaximum(int);
     method public int getMinimum(int);
     method public boolean isLeapYear(int);
+    method public final boolean isWeekDateSupported();
     method public void roll(int, boolean);
     method public void setGregorianChange(java.util.Date);
     field public static final int AD = 1; // 0x1
     field public static final int BC = 0; // 0x0
   }
 
-  public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
-    ctor public HashMap();
-    ctor public HashMap(int);
+  public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public HashMap(int, float);
+    ctor public HashMap(int);
+    ctor public HashMap();
     ctor public HashMap(java.util.Map<? extends K, ? extends V>);
     method public java.lang.Object clone();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
@@ -51450,36 +52532,36 @@
 
   public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
     ctor public HashSet();
-    ctor public HashSet(int);
-    ctor public HashSet(int, float);
     ctor public HashSet(java.util.Collection<? extends E>);
+    ctor public HashSet(int, float);
+    ctor public HashSet(int);
     method public java.lang.Object clone();
     method public java.util.Iterator<E> iterator();
     method public int size();
   }
 
   public class Hashtable extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
-    ctor public Hashtable();
-    ctor public Hashtable(int);
     ctor public Hashtable(int, float);
+    ctor public Hashtable(int);
+    ctor public Hashtable();
     ctor public Hashtable(java.util.Map<? extends K, ? extends V>);
     method public synchronized void clear();
     method public synchronized java.lang.Object clone();
-    method public boolean contains(java.lang.Object);
+    method public synchronized boolean contains(java.lang.Object);
     method public synchronized boolean containsKey(java.lang.Object);
-    method public synchronized boolean containsValue(java.lang.Object);
+    method public boolean containsValue(java.lang.Object);
     method public synchronized java.util.Enumeration<V> elements();
-    method public synchronized java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+    method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public synchronized V get(java.lang.Object);
     method public synchronized boolean isEmpty();
-    method public synchronized java.util.Set<K> keySet();
+    method public java.util.Set<K> keySet();
     method public synchronized java.util.Enumeration<K> keys();
     method public synchronized V put(K, V);
     method public synchronized void putAll(java.util.Map<? extends K, ? extends V>);
     method protected void rehash();
     method public synchronized V remove(java.lang.Object);
     method public synchronized int size();
-    method public synchronized java.util.Collection<V> values();
+    method public java.util.Collection<V> values();
   }
 
   public class IdentityHashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
@@ -51490,21 +52572,21 @@
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
   }
 
-  public class IllegalFormatCodePointException extends java.util.IllegalFormatException implements java.io.Serializable {
+  public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
     ctor public IllegalFormatCodePointException(int);
     method public int getCodePoint();
   }
 
-  public class IllegalFormatConversionException extends java.util.IllegalFormatException implements java.io.Serializable {
+  public class IllegalFormatConversionException extends java.util.IllegalFormatException {
     ctor public IllegalFormatConversionException(char, java.lang.Class<?>);
     method public java.lang.Class<?> getArgumentClass();
     method public char getConversion();
   }
 
-  public class IllegalFormatException extends java.lang.IllegalArgumentException implements java.io.Serializable {
+  public class IllegalFormatException extends java.lang.IllegalArgumentException {
   }
 
-  public class IllegalFormatFlagsException extends java.util.IllegalFormatException implements java.io.Serializable {
+  public class IllegalFormatFlagsException extends java.util.IllegalFormatException {
     ctor public IllegalFormatFlagsException(java.lang.String);
     method public java.lang.String getFlags();
   }
@@ -51526,14 +52608,14 @@
     method public int getErrorIndex();
   }
 
-  public class InputMismatchException extends java.util.NoSuchElementException implements java.io.Serializable {
+  public class InputMismatchException extends java.util.NoSuchElementException {
     ctor public InputMismatchException();
     ctor public InputMismatchException(java.lang.String);
   }
 
   public class InvalidPropertiesFormatException extends java.io.IOException {
-    ctor public InvalidPropertiesFormatException(java.lang.String);
     ctor public InvalidPropertiesFormatException(java.lang.Throwable);
+    ctor public InvalidPropertiesFormatException(java.lang.String);
   }
 
   public abstract interface Iterator {
@@ -51542,23 +52624,23 @@
     method public abstract void remove();
   }
 
-  public class LinkedHashMap extends java.util.HashMap {
-    ctor public LinkedHashMap();
-    ctor public LinkedHashMap(int);
+  public class LinkedHashMap extends java.util.HashMap implements java.util.Map {
     ctor public LinkedHashMap(int, float);
-    ctor public LinkedHashMap(int, float, boolean);
+    ctor public LinkedHashMap(int);
+    ctor public LinkedHashMap();
     ctor public LinkedHashMap(java.util.Map<? extends K, ? extends V>);
+    ctor public LinkedHashMap(int, float, boolean);
     method protected boolean removeEldestEntry(java.util.Map.Entry<K, V>);
   }
 
   public class LinkedHashSet extends java.util.HashSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
-    ctor public LinkedHashSet();
-    ctor public LinkedHashSet(int);
     ctor public LinkedHashSet(int, float);
+    ctor public LinkedHashSet(int);
+    ctor public LinkedHashSet();
     ctor public LinkedHashSet(java.util.Collection<? extends E>);
   }
 
-  public class LinkedList extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.util.Queue java.io.Serializable {
+  public class LinkedList extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.io.Serializable {
     ctor public LinkedList();
     ctor public LinkedList(java.util.Collection<? extends E>);
     method public void addFirst(E);
@@ -51589,10 +52671,10 @@
   }
 
   public abstract interface List implements java.util.Collection {
-    method public abstract void add(int, E);
     method public abstract boolean add(E);
-    method public abstract boolean addAll(int, java.util.Collection<? extends E>);
+    method public abstract void add(int, E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
+    method public abstract boolean addAll(int, java.util.Collection<? extends E>);
     method public abstract void clear();
     method public abstract boolean contains(java.lang.Object);
     method public abstract boolean containsAll(java.util.Collection<?>);
@@ -51605,8 +52687,8 @@
     method public abstract int lastIndexOf(java.lang.Object);
     method public abstract java.util.ListIterator<E> listIterator();
     method public abstract java.util.ListIterator<E> listIterator(int);
-    method public abstract E remove(int);
     method public abstract boolean remove(java.lang.Object);
+    method public abstract E remove(int);
     method public abstract boolean removeAll(java.util.Collection<?>);
     method public abstract boolean retainAll(java.util.Collection<?>);
     method public abstract E set(int, E);
@@ -51636,14 +52718,15 @@
   }
 
   public final class Locale implements java.lang.Cloneable java.io.Serializable {
-    ctor public Locale(java.lang.String);
-    ctor public Locale(java.lang.String, java.lang.String);
     ctor public Locale(java.lang.String, java.lang.String, java.lang.String);
+    ctor public Locale(java.lang.String, java.lang.String);
+    ctor public Locale(java.lang.String);
     method public java.lang.Object clone();
     method public static java.util.Locale forLanguageTag(java.lang.String);
     method public static java.util.Locale[] getAvailableLocales();
     method public java.lang.String getCountry();
     method public static java.util.Locale getDefault();
+    method public static java.util.Locale getDefault(java.util.Locale.Category);
     method public final java.lang.String getDisplayCountry();
     method public java.lang.String getDisplayCountry(java.util.Locale);
     method public final java.lang.String getDisplayLanguage();
@@ -51656,8 +52739,8 @@
     method public java.lang.String getDisplayVariant(java.util.Locale);
     method public java.lang.String getExtension(char);
     method public java.util.Set<java.lang.Character> getExtensionKeys();
-    method public java.lang.String getISO3Country();
-    method public java.lang.String getISO3Language();
+    method public java.lang.String getISO3Country() throws java.util.MissingResourceException;
+    method public java.lang.String getISO3Language() throws java.util.MissingResourceException;
     method public static java.lang.String[] getISOCountries();
     method public static java.lang.String[] getISOLanguages();
     method public java.lang.String getLanguage();
@@ -51667,6 +52750,7 @@
     method public java.lang.String getUnicodeLocaleType(java.lang.String);
     method public java.lang.String getVariant();
     method public static synchronized void setDefault(java.util.Locale);
+    method public static synchronized void setDefault(java.util.Locale.Category, java.util.Locale);
     method public java.lang.String toLanguageTag();
     method public final java.lang.String toString();
     field public static final java.util.Locale CANADA;
@@ -51712,6 +52796,13 @@
     method public java.util.Locale.Builder setVariant(java.lang.String);
   }
 
+  public static final class Locale.Category extends java.lang.Enum {
+    method public static java.util.Locale.Category valueOf(java.lang.String);
+    method public static final java.util.Locale.Category[] values();
+    enum_constant public static final java.util.Locale.Category DISPLAY;
+    enum_constant public static final java.util.Locale.Category FORMAT;
+  }
+
   public abstract interface Map {
     method public abstract void clear();
     method public abstract boolean containsKey(java.lang.Object);
@@ -51814,15 +52905,15 @@
 
   public class Observable {
     ctor public Observable();
-    method public void addObserver(java.util.Observer);
-    method protected void clearChanged();
-    method public int countObservers();
+    method public synchronized void addObserver(java.util.Observer);
+    method protected synchronized void clearChanged();
+    method public synchronized int countObservers();
     method public synchronized void deleteObserver(java.util.Observer);
     method public synchronized void deleteObservers();
-    method public boolean hasChanged();
+    method public synchronized boolean hasChanged();
     method public void notifyObservers();
     method public void notifyObservers(java.lang.Object);
-    method protected void setChanged();
+    method protected synchronized void setChanged();
   }
 
   public abstract interface Observer {
@@ -51851,16 +52942,16 @@
     method public java.lang.String getProperty(java.lang.String, java.lang.String);
     method public void list(java.io.PrintStream);
     method public void list(java.io.PrintWriter);
-    method public synchronized void load(java.io.InputStream) throws java.io.IOException;
     method public synchronized void load(java.io.Reader) throws java.io.IOException;
+    method public synchronized void load(java.io.InputStream) throws java.io.IOException;
     method public synchronized void loadFromXML(java.io.InputStream) throws java.io.IOException, java.util.InvalidPropertiesFormatException;
     method public java.util.Enumeration<?> propertyNames();
     method public deprecated void save(java.io.OutputStream, java.lang.String);
-    method public java.lang.Object setProperty(java.lang.String, java.lang.String);
-    method public synchronized void store(java.io.OutputStream, java.lang.String) throws java.io.IOException;
-    method public synchronized void store(java.io.Writer, java.lang.String) throws java.io.IOException;
+    method public synchronized java.lang.Object setProperty(java.lang.String, java.lang.String);
+    method public void store(java.io.Writer, java.lang.String) throws java.io.IOException;
+    method public void store(java.io.OutputStream, java.lang.String) throws java.io.IOException;
     method public void storeToXML(java.io.OutputStream, java.lang.String) throws java.io.IOException;
-    method public synchronized void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException;
+    method public void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException;
     method public java.util.Set<java.lang.String> stringPropertyNames();
     field protected java.util.Properties defaults;
   }
@@ -51888,7 +52979,7 @@
   public class Random implements java.io.Serializable {
     ctor public Random();
     ctor public Random(long);
-    method protected synchronized int next(int);
+    method protected int next(int);
     method public boolean nextBoolean();
     method public void nextBytes(byte[]);
     method public double nextDouble();
@@ -51905,14 +52996,14 @@
 
   public abstract class ResourceBundle {
     ctor public ResourceBundle();
-    method public static void clearCache();
-    method public static void clearCache(java.lang.ClassLoader);
+    method public static final void clearCache();
+    method public static final void clearCache(java.lang.ClassLoader);
     method public boolean containsKey(java.lang.String);
-    method public static java.util.ResourceBundle getBundle(java.lang.String) throws java.util.MissingResourceException;
-    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale);
-    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader) throws java.util.MissingResourceException;
-    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control);
-    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle.Control);
+    method public static final java.util.ResourceBundle getBundle(java.lang.String);
+    method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control);
+    method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale);
+    method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle.Control);
+    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader);
     method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader, java.util.ResourceBundle.Control);
     method public abstract java.util.Enumeration<java.lang.String> getKeys();
     method public java.util.Locale getLocale();
@@ -51929,10 +53020,10 @@
   public static class ResourceBundle.Control {
     ctor protected ResourceBundle.Control();
     method public java.util.List<java.util.Locale> getCandidateLocales(java.lang.String, java.util.Locale);
-    method public static java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>);
+    method public static final java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>);
     method public java.util.Locale getFallbackLocale(java.lang.String, java.util.Locale);
     method public java.util.List<java.lang.String> getFormats(java.lang.String);
-    method public static java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>);
+    method public static final java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>);
     method public long getTimeToLive(java.lang.String, java.util.Locale);
     method public boolean needsReload(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, java.util.ResourceBundle, long);
     method public java.util.ResourceBundle newBundle(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, boolean) throws java.io.IOException, java.lang.IllegalAccessException, java.lang.InstantiationException;
@@ -51946,23 +53037,25 @@
   }
 
   public final class Scanner implements java.io.Closeable java.util.Iterator {
-    ctor public Scanner(java.io.File) throws java.io.FileNotFoundException;
-    ctor public Scanner(java.io.File, java.lang.String) throws java.io.FileNotFoundException;
-    ctor public Scanner(java.lang.String);
+    ctor public Scanner(java.lang.Readable);
     ctor public Scanner(java.io.InputStream);
     ctor public Scanner(java.io.InputStream, java.lang.String);
-    ctor public Scanner(java.lang.Readable);
+    ctor public Scanner(java.io.File) throws java.io.FileNotFoundException;
+    ctor public Scanner(java.io.File, java.lang.String) throws java.io.FileNotFoundException;
+    ctor public Scanner(java.nio.file.Path) throws java.io.IOException;
+    ctor public Scanner(java.nio.file.Path, java.lang.String) throws java.io.IOException;
+    ctor public Scanner(java.lang.String);
     ctor public Scanner(java.nio.channels.ReadableByteChannel);
     ctor public Scanner(java.nio.channels.ReadableByteChannel, java.lang.String);
     method public void close();
     method public java.util.regex.Pattern delimiter();
-    method public java.lang.String findInLine(java.util.regex.Pattern);
     method public java.lang.String findInLine(java.lang.String);
-    method public java.lang.String findWithinHorizon(java.util.regex.Pattern, int);
+    method public java.lang.String findInLine(java.util.regex.Pattern);
     method public java.lang.String findWithinHorizon(java.lang.String, int);
+    method public java.lang.String findWithinHorizon(java.util.regex.Pattern, int);
     method public boolean hasNext();
-    method public boolean hasNext(java.util.regex.Pattern);
     method public boolean hasNext(java.lang.String);
+    method public boolean hasNext(java.util.regex.Pattern);
     method public boolean hasNextBigDecimal();
     method public boolean hasNextBigInteger();
     method public boolean hasNextBigInteger(int);
@@ -51982,8 +53075,8 @@
     method public java.util.Locale locale();
     method public java.util.regex.MatchResult match();
     method public java.lang.String next();
-    method public java.lang.String next(java.util.regex.Pattern);
     method public java.lang.String next(java.lang.String);
+    method public java.lang.String next(java.util.regex.Pattern);
     method public java.math.BigDecimal nextBigDecimal();
     method public java.math.BigInteger nextBigInteger();
     method public java.math.BigInteger nextBigInteger(int);
@@ -52050,12 +53143,12 @@
     method public int getRawOffset();
     method public boolean inDaylightTime(java.util.Date);
     method public void setDSTSavings(int);
-    method public void setEndRule(int, int, int);
     method public void setEndRule(int, int, int, int);
+    method public void setEndRule(int, int, int);
     method public void setEndRule(int, int, int, int, boolean);
     method public void setRawOffset(int);
-    method public void setStartRule(int, int, int);
     method public void setStartRule(int, int, int, int);
+    method public void setStartRule(int, int, int);
     method public void setStartRule(int, int, int, int, boolean);
     method public void setStartYear(int);
     method public boolean useDaylightTime();
@@ -52066,11 +53159,14 @@
 
   public abstract interface SortedMap implements java.util.Map {
     method public abstract java.util.Comparator<? super K> comparator();
+    method public abstract java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public abstract K firstKey();
     method public abstract java.util.SortedMap<K, V> headMap(K);
+    method public abstract java.util.Set<K> keySet();
     method public abstract K lastKey();
     method public abstract java.util.SortedMap<K, V> subMap(K, K);
     method public abstract java.util.SortedMap<K, V> tailMap(K);
+    method public abstract java.util.Collection<V> values();
   }
 
   public abstract interface SortedSet implements java.util.Set {
@@ -52092,9 +53188,9 @@
   }
 
   public class StringTokenizer implements java.util.Enumeration {
-    ctor public StringTokenizer(java.lang.String);
-    ctor public StringTokenizer(java.lang.String, java.lang.String);
     ctor public StringTokenizer(java.lang.String, java.lang.String, boolean);
+    ctor public StringTokenizer(java.lang.String, java.lang.String);
+    ctor public StringTokenizer(java.lang.String);
     method public int countTokens();
     method public boolean hasMoreElements();
     method public boolean hasMoreTokens();
@@ -52106,21 +53202,22 @@
   public abstract class TimeZone implements java.lang.Cloneable java.io.Serializable {
     ctor public TimeZone();
     method public java.lang.Object clone();
-    method public static synchronized java.lang.String[] getAvailableIDs();
     method public static synchronized java.lang.String[] getAvailableIDs(int);
+    method public static synchronized java.lang.String[] getAvailableIDs();
     method public int getDSTSavings();
-    method public static synchronized java.util.TimeZone getDefault();
+    method public static java.util.TimeZone getDefault();
     method public final java.lang.String getDisplayName();
     method public final java.lang.String getDisplayName(java.util.Locale);
     method public final java.lang.String getDisplayName(boolean, int);
     method public java.lang.String getDisplayName(boolean, int, java.util.Locale);
     method public java.lang.String getID();
-    method public int getOffset(long);
     method public abstract int getOffset(int, int, int, int, int, int);
+    method public int getOffset(long);
     method public abstract int getRawOffset();
     method public static synchronized java.util.TimeZone getTimeZone(java.lang.String);
     method public boolean hasSameRules(java.util.TimeZone);
     method public abstract boolean inDaylightTime(java.util.Date);
+    method public boolean observesDaylightTime();
     method public static synchronized void setDefault(java.util.TimeZone);
     method public void setID(java.lang.String);
     method public abstract void setRawOffset(int);
@@ -52130,14 +53227,14 @@
   }
 
   public class Timer {
-    ctor public Timer(java.lang.String, boolean);
-    ctor public Timer(java.lang.String);
-    ctor public Timer(boolean);
     ctor public Timer();
+    ctor public Timer(boolean);
+    ctor public Timer(java.lang.String);
+    ctor public Timer(java.lang.String, boolean);
     method public void cancel();
     method public int purge();
-    method public void schedule(java.util.TimerTask, java.util.Date);
     method public void schedule(java.util.TimerTask, long);
+    method public void schedule(java.util.TimerTask, java.util.Date);
     method public void schedule(java.util.TimerTask, long, long);
     method public void schedule(java.util.TimerTask, java.util.Date, long);
     method public void scheduleAtFixedRate(java.util.TimerTask, long, long);
@@ -52156,10 +53253,10 @@
     ctor public TooManyListenersException(java.lang.String);
   }
 
-  public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable java.util.SortedMap {
+  public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable {
     ctor public TreeMap();
-    ctor public TreeMap(java.util.Map<? extends K, ? extends V>);
     ctor public TreeMap(java.util.Comparator<? super K>);
+    ctor public TreeMap(java.util.Map<? extends K, ? extends V>);
     ctor public TreeMap(java.util.SortedMap<K, ? extends V>);
     method public java.util.Map.Entry<K, V> ceilingEntry(K);
     method public K ceilingKey(K);
@@ -52191,8 +53288,8 @@
 
   public class TreeSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
     ctor public TreeSet();
-    ctor public TreeSet(java.util.Collection<? extends E>);
     ctor public TreeSet(java.util.Comparator<? super E>);
+    ctor public TreeSet(java.util.Collection<? extends E>);
     ctor public TreeSet(java.util.SortedSet<E>);
     method public E ceiling(E);
     method public java.lang.Object clone();
@@ -52242,9 +53339,9 @@
   }
 
   public class Vector extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
-    ctor public Vector();
-    ctor public Vector(int);
     ctor public Vector(int, int);
+    ctor public Vector(int);
+    ctor public Vector();
     ctor public Vector(java.util.Collection<? extends E>);
     method public synchronized void addElement(E);
     method public synchronized int capacity();
@@ -52254,7 +53351,7 @@
     method public java.util.Enumeration<E> elements();
     method public synchronized void ensureCapacity(int);
     method public synchronized E firstElement();
-    method public E get(int);
+    method public synchronized E get(int);
     method public synchronized int indexOf(java.lang.Object, int);
     method public synchronized void insertElementAt(E, int);
     method public synchronized E lastElement();
@@ -52272,9 +53369,9 @@
   }
 
   public class WeakHashMap extends java.util.AbstractMap implements java.util.Map {
-    ctor public WeakHashMap();
-    ctor public WeakHashMap(int);
     ctor public WeakHashMap(int, float);
+    ctor public WeakHashMap(int);
+    ctor public WeakHashMap();
     ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>);
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
   }
@@ -53512,16 +54609,16 @@
 
   public class Attributes implements java.lang.Cloneable java.util.Map {
     ctor public Attributes();
-    ctor public Attributes(java.util.jar.Attributes);
     ctor public Attributes(int);
+    ctor public Attributes(java.util.jar.Attributes);
     method public void clear();
     method public java.lang.Object clone();
     method public boolean containsKey(java.lang.Object);
     method public boolean containsValue(java.lang.Object);
     method public java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet();
     method public java.lang.Object get(java.lang.Object);
-    method public java.lang.String getValue(java.util.jar.Attributes.Name);
     method public java.lang.String getValue(java.lang.String);
+    method public java.lang.String getValue(java.util.jar.Attributes.Name);
     method public boolean isEmpty();
     method public java.util.Set<java.lang.Object> keySet();
     method public java.lang.Object put(java.lang.Object, java.lang.Object);
@@ -53569,19 +54666,20 @@
   }
 
   public class JarFile extends java.util.zip.ZipFile {
+    ctor public JarFile(java.lang.String) throws java.io.IOException;
+    ctor public JarFile(java.lang.String, boolean) throws java.io.IOException;
     ctor public JarFile(java.io.File) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
-    ctor public JarFile(java.lang.String) throws java.io.IOException;
-    ctor public JarFile(java.lang.String, boolean) throws java.io.IOException;
     method public java.util.jar.JarEntry getJarEntry(java.lang.String);
     method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+    method public boolean hasClassPathAttribute() throws java.io.IOException;
     field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF";
   }
 
   public class JarInputStream extends java.util.zip.ZipInputStream {
-    ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException;
     ctor public JarInputStream(java.io.InputStream) throws java.io.IOException;
+    ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException;
     method public java.util.jar.Manifest getManifest();
     method public java.util.jar.JarEntry getNextJarEntry() throws java.io.IOException;
   }
@@ -53605,7 +54703,7 @@
   }
 
   public abstract class Pack200 {
-    method public static java.util.jar.Pack200.Packer newPacker();
+    method public static synchronized java.util.jar.Pack200.Packer newPacker();
     method public static java.util.jar.Pack200.Unpacker newUnpacker();
   }
 
@@ -53659,7 +54757,7 @@
 
   public class ErrorManager {
     ctor public ErrorManager();
-    method public void error(java.lang.String, java.lang.Exception, int);
+    method public synchronized void error(java.lang.String, java.lang.Exception, int);
     field public static final int CLOSE_FAILURE = 3; // 0x3
     field public static final int FLUSH_FAILURE = 2; // 0x2
     field public static final int FORMAT_FAILURE = 5; // 0x5
@@ -53669,11 +54767,11 @@
   }
 
   public class FileHandler extends java.util.logging.StreamHandler {
-    ctor public FileHandler() throws java.io.IOException;
-    ctor public FileHandler(java.lang.String) throws java.io.IOException;
-    ctor public FileHandler(java.lang.String, boolean) throws java.io.IOException;
-    ctor public FileHandler(java.lang.String, int, int) throws java.io.IOException;
-    ctor public FileHandler(java.lang.String, int, int, boolean) throws java.io.IOException;
+    ctor public FileHandler() throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(java.lang.String) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(java.lang.String, boolean) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(java.lang.String, int, int) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(java.lang.String, int, int, boolean) throws java.io.IOException, java.lang.SecurityException;
   }
 
   public abstract interface Filter {
@@ -53683,28 +54781,28 @@
   public abstract class Formatter {
     ctor protected Formatter();
     method public abstract java.lang.String format(java.util.logging.LogRecord);
-    method public java.lang.String formatMessage(java.util.logging.LogRecord);
+    method public synchronized java.lang.String formatMessage(java.util.logging.LogRecord);
     method public java.lang.String getHead(java.util.logging.Handler);
     method public java.lang.String getTail(java.util.logging.Handler);
   }
 
   public abstract class Handler {
     ctor protected Handler();
-    method public abstract void close();
+    method public abstract void close() throws java.lang.SecurityException;
     method public abstract void flush();
     method public java.lang.String getEncoding();
     method public java.util.logging.ErrorManager getErrorManager();
     method public java.util.logging.Filter getFilter();
     method public java.util.logging.Formatter getFormatter();
-    method public java.util.logging.Level getLevel();
+    method public synchronized java.util.logging.Level getLevel();
     method public boolean isLoggable(java.util.logging.LogRecord);
     method public abstract void publish(java.util.logging.LogRecord);
     method protected void reportError(java.lang.String, java.lang.Exception, int);
-    method public void setEncoding(java.lang.String) throws java.io.UnsupportedEncodingException;
+    method public void setEncoding(java.lang.String) throws java.lang.SecurityException, java.io.UnsupportedEncodingException;
     method public void setErrorManager(java.util.logging.ErrorManager);
-    method public void setFilter(java.util.logging.Filter);
-    method public void setFormatter(java.util.logging.Formatter);
-    method public void setLevel(java.util.logging.Level);
+    method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException;
+    method public void setFormatter(java.util.logging.Formatter) throws java.lang.SecurityException;
+    method public synchronized void setLevel(java.util.logging.Level) throws java.lang.SecurityException;
   }
 
   public class Level implements java.io.Serializable {
@@ -53714,7 +54812,7 @@
     method public java.lang.String getName();
     method public java.lang.String getResourceBundleName();
     method public final int intValue();
-    method public static java.util.logging.Level parse(java.lang.String) throws java.lang.IllegalArgumentException;
+    method public static synchronized java.util.logging.Level parse(java.lang.String) throws java.lang.IllegalArgumentException;
     method public final java.lang.String toString();
     field public static final java.util.logging.Level ALL;
     field public static final java.util.logging.Level CONFIG;
@@ -53729,18 +54827,18 @@
 
   public class LogManager {
     ctor protected LogManager();
-    method public synchronized boolean addLogger(java.util.logging.Logger);
-    method public void addPropertyChangeListener(java.beans.PropertyChangeListener);
-    method public void checkAccess();
+    method public boolean addLogger(java.util.logging.Logger);
+    method public void addPropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException;
+    method public void checkAccess() throws java.lang.SecurityException;
     method public static java.util.logging.LogManager getLogManager();
-    method public synchronized java.util.logging.Logger getLogger(java.lang.String);
-    method public synchronized java.util.Enumeration<java.lang.String> getLoggerNames();
-    method public static java.util.logging.LoggingMXBean getLoggingMXBean();
+    method public java.util.logging.Logger getLogger(java.lang.String);
+    method public java.util.Enumeration<java.lang.String> getLoggerNames();
+    method public static synchronized java.util.logging.LoggingMXBean getLoggingMXBean();
     method public java.lang.String getProperty(java.lang.String);
-    method public void readConfiguration() throws java.io.IOException;
-    method public void readConfiguration(java.io.InputStream) throws java.io.IOException;
-    method public void removePropertyChangeListener(java.beans.PropertyChangeListener);
-    method public synchronized void reset();
+    method public void readConfiguration() throws java.io.IOException, java.lang.SecurityException;
+    method public void readConfiguration(java.io.InputStream) throws java.io.IOException, java.lang.SecurityException;
+    method public void removePropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException;
+    method public void reset() throws java.lang.SecurityException;
     field public static final java.lang.String LOGGING_MXBEAN_NAME = "java.util.logging:type=Logging";
   }
 
@@ -53774,7 +54872,7 @@
 
   public class Logger {
     ctor protected Logger(java.lang.String, java.lang.String);
-    method public void addHandler(java.util.logging.Handler);
+    method public void addHandler(java.util.logging.Handler) throws java.lang.SecurityException;
     method public void config(java.lang.String);
     method public void entering(java.lang.String, java.lang.String);
     method public void entering(java.lang.String, java.lang.String, java.lang.Object);
@@ -53787,7 +54885,7 @@
     method public static java.util.logging.Logger getAnonymousLogger();
     method public static java.util.logging.Logger getAnonymousLogger(java.lang.String);
     method public java.util.logging.Filter getFilter();
-    method public static java.util.logging.Logger getGlobal();
+    method public static final java.util.logging.Logger getGlobal();
     method public java.util.logging.Handler[] getHandlers();
     method public java.util.logging.Level getLevel();
     method public static java.util.logging.Logger getLogger(java.lang.String);
@@ -53799,11 +54897,11 @@
     method public boolean getUseParentHandlers();
     method public void info(java.lang.String);
     method public boolean isLoggable(java.util.logging.Level);
+    method public void log(java.util.logging.LogRecord);
     method public void log(java.util.logging.Level, java.lang.String);
     method public void log(java.util.logging.Level, java.lang.String, java.lang.Object);
     method public void log(java.util.logging.Level, java.lang.String, java.lang.Object[]);
     method public void log(java.util.logging.Level, java.lang.String, java.lang.Throwable);
-    method public void log(java.util.logging.LogRecord);
     method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String);
     method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object);
     method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]);
@@ -53812,9 +54910,9 @@
     method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object);
     method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]);
     method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable);
-    method public void removeHandler(java.util.logging.Handler);
-    method public void setFilter(java.util.logging.Filter);
-    method public void setLevel(java.util.logging.Level);
+    method public void removeHandler(java.util.logging.Handler) throws java.lang.SecurityException;
+    method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException;
+    method public void setLevel(java.util.logging.Level) throws java.lang.SecurityException;
     method public void setParent(java.util.logging.Logger);
     method public void setUseParentHandlers(boolean);
     method public void severe(java.lang.String);
@@ -53831,24 +54929,24 @@
     method public abstract void setLoggerLevel(java.lang.String, java.lang.String);
   }
 
-  public final class LoggingPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable {
-    ctor public LoggingPermission(java.lang.String, java.lang.String);
+  public final class LoggingPermission extends java.security.BasicPermission {
+    ctor public LoggingPermission(java.lang.String, java.lang.String) throws java.lang.IllegalArgumentException;
   }
 
   public class MemoryHandler extends java.util.logging.Handler {
     ctor public MemoryHandler();
     ctor public MemoryHandler(java.util.logging.Handler, int, java.util.logging.Level);
-    method public void close();
+    method public void close() throws java.lang.SecurityException;
     method public void flush();
-    method public java.util.logging.Level getPushLevel();
+    method public synchronized java.util.logging.Level getPushLevel();
     method public synchronized void publish(java.util.logging.LogRecord);
-    method public void push();
-    method public void setPushLevel(java.util.logging.Level);
+    method public synchronized void push();
+    method public void setPushLevel(java.util.logging.Level) throws java.lang.SecurityException;
   }
 
   public class SimpleFormatter extends java.util.logging.Formatter {
     ctor public SimpleFormatter();
-    method public java.lang.String format(java.util.logging.LogRecord);
+    method public synchronized java.lang.String format(java.util.logging.LogRecord);
   }
 
   public class SocketHandler extends java.util.logging.StreamHandler {
@@ -53859,10 +54957,10 @@
   public class StreamHandler extends java.util.logging.Handler {
     ctor public StreamHandler();
     ctor public StreamHandler(java.io.OutputStream, java.util.logging.Formatter);
-    method public void close();
-    method public void flush();
+    method public synchronized void close() throws java.lang.SecurityException;
+    method public synchronized void flush();
     method public synchronized void publish(java.util.logging.LogRecord);
-    method protected void setOutputStream(java.io.OutputStream);
+    method protected synchronized void setOutputStream(java.io.OutputStream) throws java.lang.SecurityException;
   }
 
   public class XMLFormatter extends java.util.logging.Formatter {
@@ -53932,12 +55030,12 @@
   }
 
   public class InvalidPreferencesFormatException extends java.lang.Exception {
+    ctor public InvalidPreferencesFormatException(java.lang.Throwable);
     ctor public InvalidPreferencesFormatException(java.lang.String);
     ctor public InvalidPreferencesFormatException(java.lang.String, java.lang.Throwable);
-    ctor public InvalidPreferencesFormatException(java.lang.Throwable);
   }
 
-  public class NodeChangeEvent extends java.util.EventObject implements java.io.Serializable {
+  public class NodeChangeEvent extends java.util.EventObject {
     ctor public NodeChangeEvent(java.util.prefs.Preferences, java.util.prefs.Preferences);
     method public java.util.prefs.Preferences getChild();
     method public java.util.prefs.Preferences getParent();
@@ -53948,7 +55046,7 @@
     method public abstract void childRemoved(java.util.prefs.NodeChangeEvent);
   }
 
-  public class PreferenceChangeEvent extends java.util.EventObject implements java.io.Serializable {
+  public class PreferenceChangeEvent extends java.util.EventObject {
     ctor public PreferenceChangeEvent(java.util.prefs.Preferences, java.lang.String, java.lang.String);
     method public java.lang.String getKey();
     method public java.lang.String getNewValue();
@@ -54093,8 +55191,8 @@
     method public long getValue();
     method public void reset();
     method public void update(int);
-    method public void update(byte[]);
     method public void update(byte[], int, int);
+    method public void update(byte[]);
   }
 
   public class CRC32 implements java.util.zip.Checksum {
@@ -54102,8 +55200,8 @@
     method public long getValue();
     method public void reset();
     method public void update(int);
-    method public void update(byte[]);
     method public void update(byte[], int, int);
+    method public void update(byte[]);
   }
 
   public class CheckedInputStream extends java.io.FilterInputStream {
@@ -54119,8 +55217,8 @@
   public abstract interface Checksum {
     method public abstract long getValue();
     method public abstract void reset();
-    method public abstract void update(byte[], int, int);
     method public abstract void update(int);
+    method public abstract void update(byte[], int, int);
   }
 
   public class DataFormatException extends java.lang.Exception {
@@ -54129,28 +55227,28 @@
   }
 
   public class Deflater {
-    ctor public Deflater();
-    ctor public Deflater(int);
     ctor public Deflater(int, boolean);
+    ctor public Deflater(int);
+    ctor public Deflater();
+    method public int deflate(byte[], int, int);
     method public int deflate(byte[]);
-    method public synchronized int deflate(byte[], int, int);
-    method public synchronized int deflate(byte[], int, int, int);
-    method public synchronized void end();
-    method public synchronized void finish();
-    method public synchronized boolean finished();
-    method public synchronized int getAdler();
-    method public synchronized long getBytesRead();
-    method public synchronized long getBytesWritten();
-    method public synchronized int getTotalIn();
-    method public synchronized int getTotalOut();
-    method public synchronized boolean needsInput();
-    method public synchronized void reset();
+    method public int deflate(byte[], int, int, int);
+    method public void end();
+    method public void finish();
+    method public boolean finished();
+    method public int getAdler();
+    method public long getBytesRead();
+    method public long getBytesWritten();
+    method public int getTotalIn();
+    method public int getTotalOut();
+    method public boolean needsInput();
+    method public void reset();
+    method public void setDictionary(byte[], int, int);
     method public void setDictionary(byte[]);
-    method public synchronized void setDictionary(byte[], int, int);
+    method public void setInput(byte[], int, int);
     method public void setInput(byte[]);
-    method public synchronized void setInput(byte[], int, int);
-    method public synchronized void setLevel(int);
-    method public synchronized void setStrategy(int);
+    method public void setLevel(int);
+    method public void setStrategy(int);
     field public static final int BEST_COMPRESSION = 9; // 0x9
     field public static final int BEST_SPEED = 1; // 0x1
     field public static final int DEFAULT_COMPRESSION = -1; // 0xffffffff
@@ -54173,12 +55271,12 @@
   }
 
   public class DeflaterOutputStream extends java.io.FilterOutputStream {
-    ctor public DeflaterOutputStream(java.io.OutputStream);
-    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater);
-    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int);
-    ctor public DeflaterOutputStream(java.io.OutputStream, boolean);
-    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean);
     ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater);
+    ctor public DeflaterOutputStream(java.io.OutputStream, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream);
     method protected void deflate() throws java.io.IOException;
     method public void finish() throws java.io.IOException;
     field protected byte[] buf;
@@ -54186,49 +55284,50 @@
   }
 
   public class GZIPInputStream extends java.util.zip.InflaterInputStream {
-    ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException;
     ctor public GZIPInputStream(java.io.InputStream, int) throws java.io.IOException;
+    ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException;
     field public static final int GZIP_MAGIC = 35615; // 0x8b1f
     field protected java.util.zip.CRC32 crc;
     field protected boolean eos;
   }
 
   public class GZIPOutputStream extends java.util.zip.DeflaterOutputStream {
-    ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
-    ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream, int) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
     field protected java.util.zip.CRC32 crc;
   }
 
   public class Inflater {
-    ctor public Inflater();
     ctor public Inflater(boolean);
-    method public synchronized void end();
-    method public synchronized boolean finished();
-    method public synchronized int getAdler();
-    method public synchronized long getBytesRead();
-    method public synchronized long getBytesWritten();
-    method public synchronized int getRemaining();
-    method public synchronized int getTotalIn();
-    method public synchronized int getTotalOut();
+    ctor public Inflater();
+    method public void end();
+    method public boolean finished();
+    method public int getAdler();
+    method public long getBytesRead();
+    method public long getBytesWritten();
+    method public int getRemaining();
+    method public int getTotalIn();
+    method public int getTotalOut();
+    method public int inflate(byte[], int, int) throws java.util.zip.DataFormatException;
     method public int inflate(byte[]) throws java.util.zip.DataFormatException;
-    method public synchronized int inflate(byte[], int, int) throws java.util.zip.DataFormatException;
-    method public synchronized boolean needsDictionary();
-    method public synchronized boolean needsInput();
-    method public synchronized void reset();
-    method public synchronized void setDictionary(byte[]);
-    method public synchronized void setDictionary(byte[], int, int);
-    method public synchronized void setInput(byte[]);
-    method public synchronized void setInput(byte[], int, int);
+    method public boolean needsDictionary();
+    method public boolean needsInput();
+    method public void reset();
+    method public void setDictionary(byte[], int, int);
+    method public void setDictionary(byte[]);
+    method public void setInput(byte[], int, int);
+    method public void setInput(byte[]);
   }
 
   public class InflaterInputStream extends java.io.FilterInputStream {
-    ctor public InflaterInputStream(java.io.InputStream);
-    ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater);
     ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater, int);
+    ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater);
+    ctor public InflaterInputStream(java.io.InputStream);
     method protected void fill() throws java.io.IOException;
     field protected byte[] buf;
+    field protected boolean closed;
     field protected java.util.zip.Inflater inf;
     field protected int len;
   }
@@ -54316,9 +55415,12 @@
   }
 
   public class ZipFile implements java.io.Closeable {
-    ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException;
     ctor public ZipFile(java.lang.String) throws java.io.IOException;
     ctor public ZipFile(java.io.File, int) throws java.io.IOException;
+    ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException;
+    ctor public ZipFile(java.io.File, int, java.nio.charset.Charset) throws java.io.IOException;
+    ctor public ZipFile(java.lang.String, java.nio.charset.Charset) throws java.io.IOException;
+    ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
     method public void close() throws java.io.IOException;
     method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
     method public java.lang.String getComment();
@@ -54372,6 +55474,7 @@
 
   public class ZipInputStream extends java.util.zip.InflaterInputStream {
     ctor public ZipInputStream(java.io.InputStream);
+    ctor public ZipInputStream(java.io.InputStream, java.nio.charset.Charset);
     method public void closeEntry() throws java.io.IOException;
     method protected java.util.zip.ZipEntry createZipEntry(java.lang.String);
     method public java.util.zip.ZipEntry getNextEntry() throws java.io.IOException;
@@ -54419,6 +55522,7 @@
 
   public class ZipOutputStream extends java.util.zip.DeflaterOutputStream {
     ctor public ZipOutputStream(java.io.OutputStream);
+    ctor public ZipOutputStream(java.io.OutputStream, java.nio.charset.Charset);
     method public void closeEntry() throws java.io.IOException;
     method public void putNextEntry(java.util.zip.ZipEntry) throws java.io.IOException;
     method public void setComment(java.lang.String);
@@ -54478,8 +55582,8 @@
   }
 
   public class BadPaddingException extends java.security.GeneralSecurityException {
-    ctor public BadPaddingException(java.lang.String);
     ctor public BadPaddingException();
+    ctor public BadPaddingException(java.lang.String);
   }
 
   public class Cipher {
@@ -54590,14 +55694,14 @@
     method public final int getOutputSize(int) throws java.lang.IllegalStateException;
     method public final java.security.Provider getProvider();
     method public final void init(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException;
-    method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method public final boolean isCryptoAllowed(java.security.Key) throws javax.crypto.ExemptionMechanismException;
   }
 
   public class ExemptionMechanismException extends java.security.GeneralSecurityException {
-    ctor public ExemptionMechanismException(java.lang.String);
     ctor public ExemptionMechanismException();
+    ctor public ExemptionMechanismException(java.lang.String);
   }
 
   public abstract class ExemptionMechanismSpi {
@@ -54606,13 +55710,13 @@
     method protected abstract int engineGenExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, javax.crypto.ShortBufferException;
     method protected abstract int engineGetOutputSize(int);
     method protected abstract void engineInit(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException;
-    method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
   }
 
   public class IllegalBlockSizeException extends java.security.GeneralSecurityException {
-    ctor public IllegalBlockSizeException(java.lang.String);
     ctor public IllegalBlockSizeException();
+    ctor public IllegalBlockSizeException(java.lang.String);
   }
 
   public class KeyAgreement {
@@ -54650,19 +55754,19 @@
     method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
     method public final java.security.Provider getProvider();
+    method public final void init(java.security.SecureRandom);
     method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
     method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
     method public final void init(int);
     method public final void init(int, java.security.SecureRandom);
-    method public final void init(java.security.SecureRandom);
   }
 
   public abstract class KeyGeneratorSpi {
     ctor public KeyGeneratorSpi();
     method protected abstract javax.crypto.SecretKey engineGenerateKey();
+    method protected abstract void engineInit(java.security.SecureRandom);
     method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
     method protected abstract void engineInit(int, java.security.SecureRandom);
-    method protected abstract void engineInit(java.security.SecureRandom);
   }
 
   public class Mac implements java.lang.Cloneable {
@@ -54677,12 +55781,12 @@
     method public static final javax.crypto.Mac getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
     method public final int getMacLength();
     method public final java.security.Provider getProvider();
-    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method public final void init(java.security.Key) throws java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method public final void reset();
     method public final void update(byte) throws java.lang.IllegalStateException;
-    method public final void update(byte[], int, int) throws java.lang.IllegalStateException;
     method public final void update(byte[]) throws java.lang.IllegalStateException;
+    method public final void update(byte[], int, int) throws java.lang.IllegalStateException;
     method public final void update(java.nio.ByteBuffer);
   }
 
@@ -54699,8 +55803,8 @@
   }
 
   public class NoSuchPaddingException extends java.security.GeneralSecurityException {
-    ctor public NoSuchPaddingException(java.lang.String);
     ctor public NoSuchPaddingException();
+    ctor public NoSuchPaddingException(java.lang.String);
   }
 
   public class NullCipher extends javax.crypto.Cipher {
@@ -54741,8 +55845,8 @@
   }
 
   public class ShortBufferException extends java.security.GeneralSecurityException {
-    ctor public ShortBufferException(java.lang.String);
     ctor public ShortBufferException();
+    ctor public ShortBufferException(java.lang.String);
   }
 
 }
@@ -54887,7 +55991,7 @@
     method public int getWordSize();
   }
 
-  public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey java.io.Serializable {
+  public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey {
     ctor public SecretKeySpec(byte[], java.lang.String);
     ctor public SecretKeySpec(byte[], int, int, java.lang.String);
     method public java.lang.String getAlgorithm();
@@ -55782,7 +56886,7 @@
     method public abstract java.net.ServerSocket createServerSocket(int) throws java.io.IOException;
     method public abstract java.net.ServerSocket createServerSocket(int, int) throws java.io.IOException;
     method public abstract java.net.ServerSocket createServerSocket(int, int, java.net.InetAddress) throws java.io.IOException;
-    method public static synchronized javax.net.ServerSocketFactory getDefault();
+    method public static javax.net.ServerSocketFactory getDefault();
   }
 
   public abstract class SocketFactory {
@@ -55792,7 +56896,7 @@
     method public abstract java.net.Socket createSocket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException;
     method public abstract java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException;
     method public abstract java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
-    method public static synchronized javax.net.SocketFactory getDefault();
+    method public static javax.net.SocketFactory getDefault();
   }
 
 }
@@ -55804,6 +56908,12 @@
     method public java.security.cert.CertPathParameters getParameters();
   }
 
+  public abstract class ExtendedSSLSession implements javax.net.ssl.SSLSession {
+    ctor public ExtendedSSLSession();
+    method public abstract java.lang.String[] getLocalSupportedSignatureAlgorithms();
+    method public abstract java.lang.String[] getPeerSupportedSignatureAlgorithms();
+  }
+
   public class HandshakeCompletedEvent extends java.util.EventObject {
     ctor public HandshakeCompletedEvent(javax.net.ssl.SSLSocket, javax.net.ssl.SSLSession);
     method public java.lang.String getCipherSuite();
@@ -55879,7 +56989,7 @@
     method public final javax.net.ssl.SSLEngine createSSLEngine();
     method public final javax.net.ssl.SSLEngine createSSLEngine(java.lang.String, int);
     method public final javax.net.ssl.SSLSessionContext getClientSessionContext();
-    method public static javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException;
+    method public static synchronized javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException;
     method public final javax.net.ssl.SSLParameters getDefaultSSLParameters();
     method public static javax.net.ssl.SSLContext getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static javax.net.ssl.SSLContext getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
@@ -55891,13 +57001,13 @@
     method public final javax.net.ssl.SSLSocketFactory getSocketFactory();
     method public final javax.net.ssl.SSLParameters getSupportedSSLParameters();
     method public final void init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException;
-    method public static void setDefault(javax.net.ssl.SSLContext);
+    method public static synchronized void setDefault(javax.net.ssl.SSLContext);
   }
 
   public abstract class SSLContextSpi {
     ctor public SSLContextSpi();
-    method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(java.lang.String, int);
     method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine();
+    method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(java.lang.String, int);
     method protected abstract javax.net.ssl.SSLSessionContext engineGetClientSessionContext();
     method protected javax.net.ssl.SSLParameters engineGetDefaultSSLParameters();
     method protected abstract javax.net.ssl.SSLSessionContext engineGetServerSessionContext();
@@ -55917,6 +57027,7 @@
     method public abstract boolean getEnableSessionCreation();
     method public abstract java.lang.String[] getEnabledCipherSuites();
     method public abstract java.lang.String[] getEnabledProtocols();
+    method public javax.net.ssl.SSLSession getHandshakeSession();
     method public abstract javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus();
     method public abstract boolean getNeedClientAuth();
     method public java.lang.String getPeerHost();
@@ -55936,12 +57047,12 @@
     method public void setSSLParameters(javax.net.ssl.SSLParameters);
     method public abstract void setUseClientMode(boolean);
     method public abstract void setWantClientAuth(boolean);
-    method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException;
     method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
     method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[]) throws javax.net.ssl.SSLException;
-    method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
-    method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException;
     method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
   }
 
   public class SSLEngineResult {
@@ -55989,11 +57100,15 @@
     ctor public SSLParameters();
     ctor public SSLParameters(java.lang.String[]);
     ctor public SSLParameters(java.lang.String[], java.lang.String[]);
+    method public java.security.AlgorithmConstraints getAlgorithmConstraints();
     method public java.lang.String[] getCipherSuites();
+    method public java.lang.String getEndpointIdentificationAlgorithm();
     method public boolean getNeedClientAuth();
     method public java.lang.String[] getProtocols();
     method public boolean getWantClientAuth();
+    method public void setAlgorithmConstraints(java.security.AlgorithmConstraints);
     method public void setCipherSuites(java.lang.String[]);
+    method public void setEndpointIdentificationAlgorithm(java.lang.String);
     method public void setNeedClientAuth(boolean);
     method public void setProtocols(java.lang.String[]);
     method public void setWantClientAuth(boolean);
@@ -56021,6 +57136,7 @@
     method public abstract java.lang.String[] getEnabledCipherSuites();
     method public abstract java.lang.String[] getEnabledProtocols();
     method public abstract boolean getNeedClientAuth();
+    method public javax.net.ssl.SSLParameters getSSLParameters();
     method public abstract java.lang.String[] getSupportedCipherSuites();
     method public abstract java.lang.String[] getSupportedProtocols();
     method public abstract boolean getUseClientMode();
@@ -56029,6 +57145,7 @@
     method public abstract void setEnabledCipherSuites(java.lang.String[]);
     method public abstract void setEnabledProtocols(java.lang.String[]);
     method public abstract void setNeedClientAuth(boolean);
+    method public void setSSLParameters(javax.net.ssl.SSLParameters);
     method public abstract void setUseClientMode(boolean);
     method public abstract void setWantClientAuth(boolean);
   }
@@ -56094,6 +57211,7 @@
     method public abstract boolean getEnableSessionCreation();
     method public abstract java.lang.String[] getEnabledCipherSuites();
     method public abstract java.lang.String[] getEnabledProtocols();
+    method public javax.net.ssl.SSLSession getHandshakeSession();
     method public abstract boolean getNeedClientAuth();
     method public javax.net.ssl.SSLParameters getSSLParameters();
     method public abstract javax.net.ssl.SSLSession getSession();
@@ -56149,6 +57267,14 @@
     method public java.lang.String chooseEngineServerAlias(java.lang.String, java.security.Principal[], javax.net.ssl.SSLEngine);
   }
 
+  public abstract class X509ExtendedTrustManager implements javax.net.ssl.X509TrustManager {
+    ctor public X509ExtendedTrustManager();
+    method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+    method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+  }
+
   public abstract interface X509KeyManager implements javax.net.ssl.KeyManager {
     method public abstract java.lang.String chooseClientAlias(java.lang.String[], java.security.Principal[], java.net.Socket);
     method public abstract java.lang.String chooseServerAlias(java.lang.String, java.security.Principal[], java.net.Socket);
@@ -56183,11 +57309,21 @@
     method public abstract boolean isDestroyed();
   }
 
+  public abstract deprecated class Policy {
+    ctor protected Policy();
+    method public abstract java.security.PermissionCollection getPermissions(javax.security.auth.Subject, java.security.CodeSource);
+    method public static javax.security.auth.Policy getPolicy();
+    method public abstract void refresh();
+    method public static void setPolicy(javax.security.auth.Policy);
+  }
+
   public final class PrivateCredentialPermission extends java.security.Permission {
     ctor public PrivateCredentialPermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
     method public java.lang.String getCredentialClass();
     method public java.lang.String[][] getPrincipals();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
@@ -56245,6 +57381,43 @@
 
 package javax.security.auth.login {
 
+  public class AppConfigurationEntry {
+    ctor public AppConfigurationEntry(java.lang.String, javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag, java.util.Map<java.lang.String, ?>);
+    method public javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag getControlFlag();
+    method public java.lang.String getLoginModuleName();
+    method public java.util.Map<java.lang.String, ?> getOptions();
+  }
+
+  public static class AppConfigurationEntry.LoginModuleControlFlag {
+    field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag OPTIONAL;
+    field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag REQUIRED;
+    field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag REQUISITE;
+    field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag SUFFICIENT;
+  }
+
+  public abstract class Configuration {
+    ctor protected Configuration();
+    method public abstract javax.security.auth.login.AppConfigurationEntry[] getAppConfigurationEntry(java.lang.String);
+    method public static javax.security.auth.login.Configuration getConfiguration();
+    method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters) throws java.security.NoSuchAlgorithmException;
+    method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public javax.security.auth.login.Configuration.Parameters getParameters();
+    method public java.security.Provider getProvider();
+    method public java.lang.String getType();
+    method public void refresh();
+    method public static void setConfiguration(javax.security.auth.login.Configuration);
+  }
+
+  public static abstract interface Configuration.Parameters {
+  }
+
+  public abstract class ConfigurationSpi {
+    ctor public ConfigurationSpi();
+    method protected abstract javax.security.auth.login.AppConfigurationEntry[] engineGetAppConfigurationEntry(java.lang.String);
+    method protected void engineRefresh();
+  }
+
   public class LoginException extends java.security.GeneralSecurityException {
     ctor public LoginException();
     ctor public LoginException(java.lang.String);
@@ -56255,10 +57428,10 @@
 package javax.security.auth.x500 {
 
   public final class X500Principal implements java.security.Principal java.io.Serializable {
-    ctor public X500Principal(byte[]);
-    ctor public X500Principal(java.io.InputStream);
     ctor public X500Principal(java.lang.String);
     ctor public X500Principal(java.lang.String, java.util.Map<java.lang.String, java.lang.String>);
+    ctor public X500Principal(byte[]);
+    ctor public X500Principal(java.io.InputStream);
     method public byte[] getEncoded();
     method public java.lang.String getName();
     method public java.lang.String getName(java.lang.String);
@@ -56282,28 +57455,28 @@
   }
 
   public class CertificateEncodingException extends javax.security.cert.CertificateException {
-    ctor public CertificateEncodingException(java.lang.String);
     ctor public CertificateEncodingException();
+    ctor public CertificateEncodingException(java.lang.String);
   }
 
   public class CertificateException extends java.lang.Exception {
-    ctor public CertificateException(java.lang.String);
     ctor public CertificateException();
+    ctor public CertificateException(java.lang.String);
   }
 
   public class CertificateExpiredException extends javax.security.cert.CertificateException {
-    ctor public CertificateExpiredException(java.lang.String);
     ctor public CertificateExpiredException();
+    ctor public CertificateExpiredException(java.lang.String);
   }
 
   public class CertificateNotYetValidException extends javax.security.cert.CertificateException {
-    ctor public CertificateNotYetValidException(java.lang.String);
     ctor public CertificateNotYetValidException();
+    ctor public CertificateNotYetValidException(java.lang.String);
   }
 
   public class CertificateParsingException extends javax.security.cert.CertificateException {
-    ctor public CertificateParsingException(java.lang.String);
     ctor public CertificateParsingException();
+    ctor public CertificateParsingException(java.lang.String);
   }
 
   public abstract class X509Certificate extends javax.security.cert.Certificate {
@@ -56330,11 +57503,12 @@
   public abstract interface CommonDataSource {
     method public abstract java.io.PrintWriter getLogWriter() throws java.sql.SQLException;
     method public abstract int getLoginTimeout() throws java.sql.SQLException;
+    method public abstract java.util.logging.Logger getParentLogger() throws java.sql.SQLFeatureNotSupportedException;
     method public abstract void setLogWriter(java.io.PrintWriter) throws java.sql.SQLException;
     method public abstract void setLoginTimeout(int) throws java.sql.SQLException;
   }
 
-  public class ConnectionEvent extends java.util.EventObject implements java.io.Serializable {
+  public class ConnectionEvent extends java.util.EventObject {
     ctor public ConnectionEvent(javax.sql.PooledConnection);
     ctor public ConnectionEvent(javax.sql.PooledConnection, java.sql.SQLException);
     method public java.sql.SQLException getSQLException();
@@ -56383,21 +57557,21 @@
     method public abstract void removeRowSetListener(javax.sql.RowSetListener);
     method public abstract void setArray(int, java.sql.Array) throws java.sql.SQLException;
     method public abstract void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException;
     method public abstract void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setAsciiStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException;
-    method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException;
     method public abstract void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException;
     method public abstract void setBigDecimal(java.lang.String, java.math.BigDecimal) throws java.sql.SQLException;
     method public abstract void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException;
     method public abstract void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setBinaryStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException;
-    method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException;
     method public abstract void setBlob(int, java.sql.Blob) throws java.sql.SQLException;
-    method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException;
-    method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException;
+    method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setBlob(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException;
     method public abstract void setBlob(java.lang.String, java.sql.Blob) throws java.sql.SQLException;
+    method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setBoolean(int, boolean) throws java.sql.SQLException;
     method public abstract void setBoolean(java.lang.String, boolean) throws java.sql.SQLException;
     method public abstract void setByte(int, byte) throws java.sql.SQLException;
@@ -56405,15 +57579,15 @@
     method public abstract void setBytes(int, byte[]) throws java.sql.SQLException;
     method public abstract void setBytes(java.lang.String, byte[]) throws java.sql.SQLException;
     method public abstract void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException;
+    method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException;
     method public abstract void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
     method public abstract void setCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException;
-    method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException;
     method public abstract void setClob(int, java.sql.Clob) throws java.sql.SQLException;
-    method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException;
     method public abstract void setClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
     method public abstract void setClob(java.lang.String, java.sql.Clob) throws java.sql.SQLException;
     method public abstract void setClob(java.lang.String, java.io.Reader) throws java.sql.SQLException;
-    method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
     method public abstract void setCommand(java.lang.String) throws java.sql.SQLException;
     method public abstract void setConcurrency(int) throws java.sql.SQLException;
     method public abstract void setDataSourceName(java.lang.String) throws java.sql.SQLException;
@@ -56434,26 +57608,26 @@
     method public abstract void setMaxRows(int) throws java.sql.SQLException;
     method public abstract void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
     method public abstract void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
-    method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException;
     method public abstract void setNCharacterStream(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
+    method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException;
+    method public abstract void setNClob(java.lang.String, java.sql.NClob) throws java.sql.SQLException;
+    method public abstract void setNClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
+    method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException;
+    method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException;
     method public abstract void setNClob(int, java.sql.NClob) throws java.sql.SQLException;
     method public abstract void setNClob(int, java.io.Reader) throws java.sql.SQLException;
-    method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException;
-    method public abstract void setNClob(java.lang.String, java.sql.NClob) throws java.sql.SQLException;
-    method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException;
-    method public abstract void setNClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
     method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(int, int) throws java.sql.SQLException;
-    method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException;
+    method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException;
-    method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException;
-    method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException;
     method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException;
-    method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
-    method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
     method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException;
+    method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
+    method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void setPassword(java.lang.String) throws java.sql.SQLException;
     method public abstract void setQueryTimeout(int) throws java.sql.SQLException;
     method public abstract void setReadOnly(boolean) throws java.sql.SQLException;
@@ -56471,8 +57645,8 @@
     method public abstract void setTime(java.lang.String, java.sql.Time) throws java.sql.SQLException;
     method public abstract void setTime(java.lang.String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
     method public abstract void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException;
-    method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
     method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp) throws java.sql.SQLException;
+    method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
     method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
     method public abstract void setTransactionIsolation(int) throws java.sql.SQLException;
     method public abstract void setType(int) throws java.sql.SQLException;
@@ -56482,7 +57656,7 @@
     method public abstract void setUsername(java.lang.String) throws java.sql.SQLException;
   }
 
-  public class RowSetEvent extends java.util.EventObject implements java.io.Serializable {
+  public class RowSetEvent extends java.util.EventObject {
     ctor public RowSetEvent(javax.sql.RowSet);
   }
 
@@ -56529,8 +57703,8 @@
   }
 
   public class StatementEvent extends java.util.EventObject {
-    ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException);
     ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement);
+    ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException);
     method public java.sql.SQLException getSQLException();
     method public java.sql.PreparedStatement getStatement();
   }
diff --git a/api/system-current.txt b/api/system-current.txt
index 00d5745..5b976a9 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -2833,6 +2833,7 @@
     method public final android.os.IBinder getIBinder();
     method public abstract android.os.Bundle hasFeatures(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String[]) throws android.accounts.NetworkErrorException;
     method public android.os.Bundle startAddAccountSession(android.accounts.AccountAuthenticatorResponse, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle startUpdateCredentialsSession(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
     method public abstract android.os.Bundle updateCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
     field public static final java.lang.String KEY_CUSTOM_TOKEN_EXPIRY = "android.accounts.expiry";
   }
@@ -2898,6 +2899,7 @@
     method public void setPassword(android.accounts.Account, java.lang.String);
     method public void setUserData(android.accounts.Account, java.lang.String, java.lang.String);
     method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
     method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
     field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
     field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
@@ -4985,6 +4987,7 @@
     field public static final int PRIORITY_MAX = 2; // 0x2
     field public static final int PRIORITY_MIN = -2; // 0xfffffffe
     field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff
+    field public static final java.lang.String TOPIC_DEFAULT = "system_default_topic";
     field public static final int VISIBILITY_PRIVATE = 0; // 0x0
     field public static final int VISIBILITY_PUBLIC = 1; // 0x1
     field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
@@ -6000,6 +6003,7 @@
     field public static final java.lang.String EXTRA_PROVISIONING_LOCALE = "android.app.extra.PROVISIONING_LOCALE";
     field public static final java.lang.String EXTRA_PROVISIONING_LOCAL_TIME = "android.app.extra.PROVISIONING_LOCAL_TIME";
     field public static final java.lang.String EXTRA_PROVISIONING_LOGO_URI = "android.app.extra.PROVISIONING_LOGO_URI";
+    field public static final java.lang.String EXTRA_PROVISIONING_MAIN_COLOR = "android.app.extra.PROVISIONING_MAIN_COLOR";
     field public static final java.lang.String EXTRA_PROVISIONING_SKIP_ENCRYPTION = "android.app.extra.PROVISIONING_SKIP_ENCRYPTION";
     field public static final java.lang.String EXTRA_PROVISIONING_TIME_ZONE = "android.app.extra.PROVISIONING_TIME_ZONE";
     field public static final java.lang.String EXTRA_PROVISIONING_WIFI_HIDDEN = "android.app.extra.PROVISIONING_WIFI_HIDDEN";
@@ -38606,6 +38610,7 @@
     method public boolean canResolveTextDirection();
     method public boolean canScrollHorizontally(int);
     method public boolean canScrollVertically(int);
+    method public final void cancelDragAndDrop();
     method public void cancelLongPress();
     method public final void cancelPendingInputEvents();
     method public boolean checkInputConnectionProxy(android.view.View);
@@ -39086,7 +39091,8 @@
     method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback);
     method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback, int);
     method public void startAnimation(android.view.animation.Animation);
-    method public final boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+    method public final deprecated boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+    method public final boolean startDragAndDrop(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
     method public boolean startNestedScroll(int);
     method public void stopNestedScroll();
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
@@ -45389,13 +45395,18 @@
 package java.awt.font {
 
   public final class NumericShaper implements java.io.Serializable {
-    method public static java.awt.font.NumericShaper getContextualShaper(int, int);
     method public static java.awt.font.NumericShaper getContextualShaper(int);
+    method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>);
+    method public static java.awt.font.NumericShaper getContextualShaper(int, int);
+    method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>, java.awt.font.NumericShaper.Range);
+    method public java.util.Set<java.awt.font.NumericShaper.Range> getRangeSet();
     method public int getRanges();
     method public static java.awt.font.NumericShaper getShaper(int);
+    method public static java.awt.font.NumericShaper getShaper(java.awt.font.NumericShaper.Range);
     method public boolean isContextual();
-    method public void shape(char[], int, int, int);
     method public void shape(char[], int, int);
+    method public void shape(char[], int, int, int);
+    method public void shape(char[], int, int, java.awt.font.NumericShaper.Range);
     field public static final int ALL_RANGES = 524287; // 0x7ffff
     field public static final int ARABIC = 2; // 0x2
     field public static final int BENGALI = 16; // 0x10
@@ -45418,6 +45429,46 @@
     field public static final int TIBETAN = 16384; // 0x4000
   }
 
+  public static class NumericShaper.Range extends java.lang.Enum {
+    method public static java.awt.font.NumericShaper.Range valueOf(java.lang.String);
+    method public static final java.awt.font.NumericShaper.Range[] values();
+    enum_constant public static final java.awt.font.NumericShaper.Range ARABIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range BALINESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range BENGALI;
+    enum_constant public static final java.awt.font.NumericShaper.Range CHAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range DEVANAGARI;
+    enum_constant public static final java.awt.font.NumericShaper.Range EASTERN_ARABIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range ETHIOPIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range EUROPEAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range GUJARATI;
+    enum_constant public static final java.awt.font.NumericShaper.Range GURMUKHI;
+    enum_constant public static final java.awt.font.NumericShaper.Range JAVANESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range KANNADA;
+    enum_constant public static final java.awt.font.NumericShaper.Range KAYAH_LI;
+    enum_constant public static final java.awt.font.NumericShaper.Range KHMER;
+    enum_constant public static final java.awt.font.NumericShaper.Range LAO;
+    enum_constant public static final java.awt.font.NumericShaper.Range LEPCHA;
+    enum_constant public static final java.awt.font.NumericShaper.Range LIMBU;
+    enum_constant public static final java.awt.font.NumericShaper.Range MALAYALAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range MEETEI_MAYEK;
+    enum_constant public static final java.awt.font.NumericShaper.Range MONGOLIAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR;
+    enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR_SHAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range NEW_TAI_LUE;
+    enum_constant public static final java.awt.font.NumericShaper.Range NKO;
+    enum_constant public static final java.awt.font.NumericShaper.Range OL_CHIKI;
+    enum_constant public static final java.awt.font.NumericShaper.Range ORIYA;
+    enum_constant public static final java.awt.font.NumericShaper.Range SAURASHTRA;
+    enum_constant public static final java.awt.font.NumericShaper.Range SUNDANESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_HORA;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_THAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAMIL;
+    enum_constant public static final java.awt.font.NumericShaper.Range TELUGU;
+    enum_constant public static final java.awt.font.NumericShaper.Range THAI;
+    enum_constant public static final java.awt.font.NumericShaper.Range TIBETAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range VAI;
+  }
+
   public final class TextAttribute extends java.text.AttributedCharacterIterator.Attribute {
     ctor protected TextAttribute(java.lang.String);
     field public static final java.awt.font.TextAttribute BACKGROUND;
@@ -45511,20 +45562,20 @@
 
   public class PropertyChangeSupport implements java.io.Serializable {
     ctor public PropertyChangeSupport(java.lang.Object);
-    method public void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener);
     method public void addPropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener);
     method public void fireIndexedPropertyChange(java.lang.String, int, java.lang.Object, java.lang.Object);
-    method public void fireIndexedPropertyChange(java.lang.String, int, boolean, boolean);
     method public void fireIndexedPropertyChange(java.lang.String, int, int, int);
+    method public void fireIndexedPropertyChange(java.lang.String, int, boolean, boolean);
     method public void firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object);
-    method public void firePropertyChange(java.lang.String, boolean, boolean);
     method public void firePropertyChange(java.lang.String, int, int);
+    method public void firePropertyChange(java.lang.String, boolean, boolean);
     method public void firePropertyChange(java.beans.PropertyChangeEvent);
-    method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String);
     method public java.beans.PropertyChangeListener[] getPropertyChangeListeners();
+    method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String);
     method public boolean hasListeners(java.lang.String);
-    method public void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener);
     method public void removePropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener);
   }
 
 }
@@ -45549,8 +45600,8 @@
   }
 
   public class BufferedReader extends java.io.Reader {
-    ctor public BufferedReader(java.io.Reader);
     ctor public BufferedReader(java.io.Reader, int);
+    ctor public BufferedReader(java.io.Reader);
     method public void close() throws java.io.IOException;
     method public int read(char[], int, int) throws java.io.IOException;
     method public java.lang.String readLine() throws java.io.IOException;
@@ -45579,10 +45630,10 @@
     ctor public ByteArrayOutputStream();
     ctor public ByteArrayOutputStream(int);
     method public synchronized void reset();
-    method public int size();
+    method public synchronized int size();
     method public synchronized byte[] toByteArray();
-    method public deprecated java.lang.String toString(int);
-    method public java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
+    method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
+    method public deprecated synchronized java.lang.String toString(int);
     method public synchronized void write(int);
     method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException;
     field protected byte[] buf;
@@ -45624,13 +45675,15 @@
   }
 
   public final class Console implements java.io.Flushable {
+    method public static java.io.Console console();
     method public void flush();
     method public java.io.Console format(java.lang.String, java.lang.Object...);
+    method public static synchronized java.io.Console getConsole();
     method public java.io.Console printf(java.lang.String, java.lang.Object...);
-    method public java.lang.String readLine();
     method public java.lang.String readLine(java.lang.String, java.lang.Object...);
-    method public char[] readPassword();
+    method public java.lang.String readLine();
     method public char[] readPassword(java.lang.String, java.lang.Object...);
+    method public char[] readPassword();
     method public java.io.Reader reader();
     method public java.io.PrintWriter writer();
   }
@@ -45676,9 +45729,9 @@
   }
 
   public abstract interface DataOutput {
+    method public abstract void write(int) throws java.io.IOException;
     method public abstract void write(byte[]) throws java.io.IOException;
     method public abstract void write(byte[], int, int) throws java.io.IOException;
-    method public abstract void write(int) throws java.io.IOException;
     method public abstract void writeBoolean(boolean) throws java.io.IOException;
     method public abstract void writeByte(int) throws java.io.IOException;
     method public abstract void writeBytes(java.lang.String) throws java.io.IOException;
@@ -45720,17 +45773,17 @@
   }
 
   public class File implements java.lang.Comparable java.io.Serializable {
-    ctor public File(java.io.File, java.lang.String);
     ctor public File(java.lang.String);
     ctor public File(java.lang.String, java.lang.String);
+    ctor public File(java.io.File, java.lang.String);
     ctor public File(java.net.URI);
     method public boolean canExecute();
     method public boolean canRead();
     method public boolean canWrite();
     method public int compareTo(java.io.File);
     method public boolean createNewFile() throws java.io.IOException;
-    method public static java.io.File createTempFile(java.lang.String, java.lang.String) throws java.io.IOException;
     method public static java.io.File createTempFile(java.lang.String, java.lang.String, java.io.File) throws java.io.IOException;
+    method public static java.io.File createTempFile(java.lang.String, java.lang.String) throws java.io.IOException;
     method public boolean delete();
     method public void deleteOnExit();
     method public boolean exists();
@@ -45768,6 +45821,7 @@
     method public boolean setReadable(boolean);
     method public boolean setWritable(boolean, boolean);
     method public boolean setWritable(boolean);
+    method public java.nio.file.Path toPath();
     method public java.net.URI toURI();
     method public deprecated java.net.URL toURL() throws java.net.MalformedURLException;
     field public static final java.lang.String pathSeparator;
@@ -45790,9 +45844,9 @@
   }
 
   public class FileInputStream extends java.io.InputStream {
+    ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.FileDescriptor);
-    ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public int read() throws java.io.IOException;
@@ -45804,11 +45858,11 @@
   }
 
   public class FileOutputStream extends java.io.OutputStream {
+    ctor public FileOutputStream(java.lang.String) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(java.lang.String, boolean) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.FileDescriptor);
-    ctor public FileOutputStream(java.lang.String) throws java.io.FileNotFoundException;
-    ctor public FileOutputStream(java.lang.String, boolean) throws java.io.FileNotFoundException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
@@ -45816,22 +45870,24 @@
 
   public final class FilePermission extends java.security.Permission implements java.io.Serializable {
     ctor public FilePermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
   public class FileReader extends java.io.InputStreamReader {
+    ctor public FileReader(java.lang.String) throws java.io.FileNotFoundException;
     ctor public FileReader(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileReader(java.io.FileDescriptor);
-    ctor public FileReader(java.lang.String) throws java.io.FileNotFoundException;
   }
 
   public class FileWriter extends java.io.OutputStreamWriter {
+    ctor public FileWriter(java.lang.String) throws java.io.IOException;
+    ctor public FileWriter(java.lang.String, boolean) throws java.io.IOException;
     ctor public FileWriter(java.io.File) throws java.io.IOException;
     ctor public FileWriter(java.io.File, boolean) throws java.io.IOException;
     ctor public FileWriter(java.io.FileDescriptor);
-    ctor public FileWriter(java.lang.String) throws java.io.IOException;
-    ctor public FileWriter(java.lang.String, boolean) throws java.io.IOException;
   }
 
   public abstract interface FilenameFilter {
@@ -45884,7 +45940,7 @@
     ctor public InputStream();
     method public int available() throws java.io.IOException;
     method public void close() throws java.io.IOException;
-    method public void mark(int);
+    method public synchronized void mark(int);
     method public boolean markSupported();
     method public abstract int read() throws java.io.IOException;
     method public int read(byte[]) throws java.io.IOException;
@@ -45896,8 +45952,8 @@
   public class InputStreamReader extends java.io.Reader {
     ctor public InputStreamReader(java.io.InputStream);
     ctor public InputStreamReader(java.io.InputStream, java.lang.String) throws java.io.UnsupportedEncodingException;
-    ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder);
     ctor public InputStreamReader(java.io.InputStream, java.nio.charset.Charset);
+    ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder);
     method public void close() throws java.io.IOException;
     method public java.lang.String getEncoding();
     method public int read(char[], int, int) throws java.io.IOException;
@@ -45906,6 +45962,7 @@
   public class InterruptedIOException extends java.io.IOException {
     ctor public InterruptedIOException();
     ctor public InterruptedIOException(java.lang.String);
+    ctor public InterruptedIOException(java.lang.Throwable);
     field public int bytesTransferred;
   }
 
@@ -45933,13 +45990,13 @@
   }
 
   public class NotActiveException extends java.io.ObjectStreamException {
-    ctor public NotActiveException();
     ctor public NotActiveException(java.lang.String);
+    ctor public NotActiveException();
   }
 
   public class NotSerializableException extends java.io.ObjectStreamException {
-    ctor public NotSerializableException();
     ctor public NotSerializableException(java.lang.String);
+    ctor public NotSerializableException();
   }
 
   public abstract interface ObjectInput implements java.lang.AutoCloseable java.io.DataInput {
@@ -45953,32 +46010,32 @@
   }
 
   public class ObjectInputStream extends java.io.InputStream implements java.io.ObjectInput java.io.ObjectStreamConstants {
-    ctor protected ObjectInputStream() throws java.io.IOException;
-    ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException, java.io.StreamCorruptedException;
-    method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException;
-    method protected boolean enableResolveObject(boolean);
+    ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException;
+    ctor protected ObjectInputStream() throws java.io.IOException, java.lang.SecurityException;
+    method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected boolean enableResolveObject(boolean) throws java.lang.SecurityException;
     method public int read() throws java.io.IOException;
     method public boolean readBoolean() throws java.io.IOException;
     method public byte readByte() throws java.io.IOException;
     method public char readChar() throws java.io.IOException;
     method protected java.io.ObjectStreamClass readClassDescriptor() throws java.lang.ClassNotFoundException, java.io.IOException;
     method public double readDouble() throws java.io.IOException;
-    method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException;
+    method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException;
     method public float readFloat() throws java.io.IOException;
     method public void readFully(byte[]) throws java.io.IOException;
     method public void readFully(byte[], int, int) throws java.io.IOException;
     method public int readInt() throws java.io.IOException;
     method public deprecated java.lang.String readLine() throws java.io.IOException;
     method public long readLong() throws java.io.IOException;
-    method public final java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException;
-    method protected java.lang.Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException;
+    method public final java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected java.lang.Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException;
     method public short readShort() throws java.io.IOException;
     method protected void readStreamHeader() throws java.io.IOException, java.io.StreamCorruptedException;
     method public java.lang.String readUTF() throws java.io.IOException;
     method public java.lang.Object readUnshared() throws java.lang.ClassNotFoundException, java.io.IOException;
     method public int readUnsignedByte() throws java.io.IOException;
     method public int readUnsignedShort() throws java.io.IOException;
-    method public synchronized void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException;
+    method public void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException;
     method protected java.lang.Class<?> resolveClass(java.io.ObjectStreamClass) throws java.lang.ClassNotFoundException, java.io.IOException;
     method protected java.lang.Object resolveObject(java.lang.Object) throws java.io.IOException;
     method protected java.lang.Class<?> resolveProxyClass(java.lang.String[]) throws java.lang.ClassNotFoundException, java.io.IOException;
@@ -45987,16 +46044,16 @@
 
   public static abstract class ObjectInputStream.GetField {
     ctor public ObjectInputStream.GetField();
-    method public abstract boolean defaulted(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract boolean get(java.lang.String, boolean) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract char get(java.lang.String, char) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract byte get(java.lang.String, byte) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract short get(java.lang.String, short) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract int get(java.lang.String, int) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract long get(java.lang.String, long) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract float get(java.lang.String, float) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract double get(java.lang.String, double) throws java.io.IOException, java.lang.IllegalArgumentException;
-    method public abstract java.lang.Object get(java.lang.String, java.lang.Object) throws java.io.IOException, java.lang.IllegalArgumentException;
+    method public abstract boolean defaulted(java.lang.String) throws java.io.IOException;
+    method public abstract boolean get(java.lang.String, boolean) throws java.io.IOException;
+    method public abstract byte get(java.lang.String, byte) throws java.io.IOException;
+    method public abstract char get(java.lang.String, char) throws java.io.IOException;
+    method public abstract short get(java.lang.String, short) throws java.io.IOException;
+    method public abstract int get(java.lang.String, int) throws java.io.IOException;
+    method public abstract long get(java.lang.String, long) throws java.io.IOException;
+    method public abstract float get(java.lang.String, float) throws java.io.IOException;
+    method public abstract double get(java.lang.String, double) throws java.io.IOException;
+    method public abstract java.lang.Object get(java.lang.String, java.lang.Object) throws java.io.IOException;
     method public abstract java.io.ObjectStreamClass getObjectStreamClass();
   }
 
@@ -46007,20 +46064,20 @@
   public abstract interface ObjectOutput implements java.lang.AutoCloseable java.io.DataOutput {
     method public abstract void close() throws java.io.IOException;
     method public abstract void flush() throws java.io.IOException;
+    method public abstract void write(int) throws java.io.IOException;
     method public abstract void write(byte[]) throws java.io.IOException;
     method public abstract void write(byte[], int, int) throws java.io.IOException;
-    method public abstract void write(int) throws java.io.IOException;
     method public abstract void writeObject(java.lang.Object) throws java.io.IOException;
   }
 
   public class ObjectOutputStream extends java.io.OutputStream implements java.io.ObjectOutput java.io.ObjectStreamConstants {
-    ctor protected ObjectOutputStream() throws java.io.IOException;
     ctor public ObjectOutputStream(java.io.OutputStream) throws java.io.IOException;
+    ctor protected ObjectOutputStream() throws java.io.IOException, java.lang.SecurityException;
     method protected void annotateClass(java.lang.Class<?>) throws java.io.IOException;
     method protected void annotateProxyClass(java.lang.Class<?>) throws java.io.IOException;
     method public void defaultWriteObject() throws java.io.IOException;
     method protected void drain() throws java.io.IOException;
-    method protected boolean enableReplaceObject(boolean);
+    method protected boolean enableReplaceObject(boolean) throws java.lang.SecurityException;
     method public java.io.ObjectOutputStream.PutField putFields() throws java.io.IOException;
     method protected java.lang.Object replaceObject(java.lang.Object) throws java.io.IOException;
     method public void reset() throws java.io.IOException;
@@ -46048,8 +46105,8 @@
   public static abstract class ObjectOutputStream.PutField {
     ctor public ObjectOutputStream.PutField();
     method public abstract void put(java.lang.String, boolean);
-    method public abstract void put(java.lang.String, char);
     method public abstract void put(java.lang.String, byte);
+    method public abstract void put(java.lang.String, char);
     method public abstract void put(java.lang.String, short);
     method public abstract void put(java.lang.String, int);
     method public abstract void put(java.lang.String, long);
@@ -46103,8 +46160,8 @@
   }
 
   public abstract class ObjectStreamException extends java.io.IOException {
-    ctor protected ObjectStreamException();
     ctor protected ObjectStreamException(java.lang.String);
+    ctor protected ObjectStreamException();
   }
 
   public class ObjectStreamField implements java.lang.Comparable {
@@ -46130,14 +46187,14 @@
     ctor public OutputStream();
     method public void close() throws java.io.IOException;
     method public void flush() throws java.io.IOException;
+    method public abstract void write(int) throws java.io.IOException;
     method public void write(byte[]) throws java.io.IOException;
     method public void write(byte[], int, int) throws java.io.IOException;
-    method public abstract void write(int) throws java.io.IOException;
   }
 
   public class OutputStreamWriter extends java.io.Writer {
-    ctor public OutputStreamWriter(java.io.OutputStream);
     ctor public OutputStreamWriter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException;
+    ctor public OutputStreamWriter(java.io.OutputStream);
     ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.Charset);
     ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.CharsetEncoder);
     method public void close() throws java.io.IOException;
@@ -46147,10 +46204,10 @@
   }
 
   public class PipedInputStream extends java.io.InputStream {
-    ctor public PipedInputStream();
     ctor public PipedInputStream(java.io.PipedOutputStream) throws java.io.IOException;
-    ctor public PipedInputStream(int);
     ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
+    ctor public PipedInputStream();
+    ctor public PipedInputStream(int);
     method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
     method public synchronized int read() throws java.io.IOException;
     method protected synchronized void receive(int) throws java.io.IOException;
@@ -46161,28 +46218,28 @@
   }
 
   public class PipedOutputStream extends java.io.OutputStream {
-    ctor public PipedOutputStream();
     ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
-    method public void connect(java.io.PipedInputStream) throws java.io.IOException;
+    ctor public PipedOutputStream();
+    method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
   }
 
   public class PipedReader extends java.io.Reader {
-    ctor public PipedReader();
     ctor public PipedReader(java.io.PipedWriter) throws java.io.IOException;
-    ctor public PipedReader(int);
     ctor public PipedReader(java.io.PipedWriter, int) throws java.io.IOException;
-    method public synchronized void close() throws java.io.IOException;
+    ctor public PipedReader();
+    ctor public PipedReader(int);
+    method public void close() throws java.io.IOException;
     method public void connect(java.io.PipedWriter) throws java.io.IOException;
     method public synchronized int read(char[], int, int) throws java.io.IOException;
   }
 
   public class PipedWriter extends java.io.Writer {
-    ctor public PipedWriter();
     ctor public PipedWriter(java.io.PipedReader) throws java.io.IOException;
+    ctor public PipedWriter();
     method public void close() throws java.io.IOException;
-    method public void connect(java.io.PipedReader) throws java.io.IOException;
-    method public void flush() throws java.io.IOException;
+    method public synchronized void connect(java.io.PipedReader) throws java.io.IOException;
+    method public synchronized void flush() throws java.io.IOException;
     method public void write(char[], int, int) throws java.io.IOException;
   }
 
@@ -46190,111 +46247,111 @@
     ctor public PrintStream(java.io.OutputStream);
     ctor public PrintStream(java.io.OutputStream, boolean);
     ctor public PrintStream(java.io.OutputStream, boolean, java.lang.String) throws java.io.UnsupportedEncodingException;
-    ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException;
-    ctor public PrintStream(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     ctor public PrintStream(java.lang.String) throws java.io.FileNotFoundException;
     ctor public PrintStream(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
-    method public java.io.PrintStream append(char);
+    ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException;
+    ctor public PrintStream(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     method public java.io.PrintStream append(java.lang.CharSequence);
     method public java.io.PrintStream append(java.lang.CharSequence, int, int);
+    method public java.io.PrintStream append(char);
     method public boolean checkError();
     method protected void clearError();
     method public java.io.PrintStream format(java.lang.String, java.lang.Object...);
     method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...);
-    method public void print(char[]);
+    method public void print(boolean);
     method public void print(char);
-    method public void print(double);
-    method public void print(float);
     method public void print(int);
     method public void print(long);
+    method public void print(float);
+    method public void print(double);
+    method public void print(char[]);
+    method public void print(java.lang.String);
     method public void print(java.lang.Object);
-    method public synchronized void print(java.lang.String);
-    method public void print(boolean);
     method public java.io.PrintStream printf(java.lang.String, java.lang.Object...);
     method public java.io.PrintStream printf(java.util.Locale, java.lang.String, java.lang.Object...);
     method public void println();
-    method public void println(char[]);
+    method public void println(boolean);
     method public void println(char);
-    method public void println(double);
-    method public void println(float);
     method public void println(int);
     method public void println(long);
+    method public void println(float);
+    method public void println(double);
+    method public void println(char[]);
+    method public void println(java.lang.String);
     method public void println(java.lang.Object);
-    method public synchronized void println(java.lang.String);
-    method public void println(boolean);
     method protected void setError();
   }
 
   public class PrintWriter extends java.io.Writer {
-    ctor public PrintWriter(java.io.OutputStream);
-    ctor public PrintWriter(java.io.OutputStream, boolean);
     ctor public PrintWriter(java.io.Writer);
     ctor public PrintWriter(java.io.Writer, boolean);
-    ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
-    ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public PrintWriter(java.io.OutputStream);
+    ctor public PrintWriter(java.io.OutputStream, boolean);
     ctor public PrintWriter(java.lang.String) throws java.io.FileNotFoundException;
     ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
+    ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     method public boolean checkError();
     method protected void clearError();
     method public void close();
     method public void flush();
     method public java.io.PrintWriter format(java.lang.String, java.lang.Object...);
     method public java.io.PrintWriter format(java.util.Locale, java.lang.String, java.lang.Object...);
-    method public void print(char[]);
+    method public void print(boolean);
     method public void print(char);
-    method public void print(double);
-    method public void print(float);
     method public void print(int);
     method public void print(long);
-    method public void print(java.lang.Object);
+    method public void print(float);
+    method public void print(double);
+    method public void print(char[]);
     method public void print(java.lang.String);
-    method public void print(boolean);
+    method public void print(java.lang.Object);
     method public java.io.PrintWriter printf(java.lang.String, java.lang.Object...);
     method public java.io.PrintWriter printf(java.util.Locale, java.lang.String, java.lang.Object...);
     method public void println();
-    method public void println(char[]);
+    method public void println(boolean);
     method public void println(char);
-    method public void println(double);
-    method public void println(float);
     method public void println(int);
     method public void println(long);
-    method public void println(java.lang.Object);
+    method public void println(float);
+    method public void println(double);
+    method public void println(char[]);
     method public void println(java.lang.String);
-    method public void println(boolean);
+    method public void println(java.lang.Object);
     method protected void setError();
     method public void write(char[], int, int);
     field protected java.io.Writer out;
   }
 
   public class PushbackInputStream extends java.io.FilterInputStream {
-    ctor public PushbackInputStream(java.io.InputStream);
     ctor public PushbackInputStream(java.io.InputStream, int);
-    method public void unread(byte[]) throws java.io.IOException;
-    method public void unread(byte[], int, int) throws java.io.IOException;
+    ctor public PushbackInputStream(java.io.InputStream);
     method public void unread(int) throws java.io.IOException;
+    method public void unread(byte[], int, int) throws java.io.IOException;
+    method public void unread(byte[]) throws java.io.IOException;
     field protected byte[] buf;
     field protected int pos;
   }
 
   public class PushbackReader extends java.io.FilterReader {
-    ctor public PushbackReader(java.io.Reader);
     ctor public PushbackReader(java.io.Reader, int);
-    method public void unread(char[]) throws java.io.IOException;
-    method public void unread(char[], int, int) throws java.io.IOException;
+    ctor public PushbackReader(java.io.Reader);
     method public void unread(int) throws java.io.IOException;
+    method public void unread(char[], int, int) throws java.io.IOException;
+    method public void unread(char[]) throws java.io.IOException;
   }
 
   public class RandomAccessFile implements java.io.Closeable java.io.DataInput java.io.DataOutput {
-    ctor public RandomAccessFile(java.io.File, java.lang.String) throws java.io.FileNotFoundException;
     ctor public RandomAccessFile(java.lang.String, java.lang.String) throws java.io.FileNotFoundException;
+    ctor public RandomAccessFile(java.io.File, java.lang.String) throws java.io.FileNotFoundException;
     method public void close() throws java.io.IOException;
-    method public final synchronized java.nio.channels.FileChannel getChannel();
+    method public final java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public long getFilePointer() throws java.io.IOException;
     method public long length() throws java.io.IOException;
     method public int read() throws java.io.IOException;
-    method public int read(byte[]) throws java.io.IOException;
     method public int read(byte[], int, int) throws java.io.IOException;
+    method public int read(byte[]) throws java.io.IOException;
     method public final boolean readBoolean() throws java.io.IOException;
     method public final byte readByte() throws java.io.IOException;
     method public final char readChar() throws java.io.IOException;
@@ -46312,9 +46369,9 @@
     method public void seek(long) throws java.io.IOException;
     method public void setLength(long) throws java.io.IOException;
     method public int skipBytes(int) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
     method public void write(byte[]) throws java.io.IOException;
     method public void write(byte[], int, int) throws java.io.IOException;
-    method public void write(int) throws java.io.IOException;
     method public final void writeBoolean(boolean) throws java.io.IOException;
     method public final void writeByte(int) throws java.io.IOException;
     method public final void writeBytes(java.lang.String) throws java.io.IOException;
@@ -46334,10 +46391,10 @@
     method public abstract void close() throws java.io.IOException;
     method public void mark(int) throws java.io.IOException;
     method public boolean markSupported();
+    method public int read(java.nio.CharBuffer) throws java.io.IOException;
     method public int read() throws java.io.IOException;
     method public int read(char[]) throws java.io.IOException;
     method public abstract int read(char[], int, int) throws java.io.IOException;
-    method public int read(java.nio.CharBuffer) throws java.io.IOException;
     method public boolean ready() throws java.io.IOException;
     method public void reset() throws java.io.IOException;
     method public long skip(long) throws java.io.IOException;
@@ -46345,8 +46402,8 @@
   }
 
   public class SequenceInputStream extends java.io.InputStream {
-    ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream);
     ctor public SequenceInputStream(java.util.Enumeration<? extends java.io.InputStream>);
+    ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream);
     method public int read() throws java.io.IOException;
   }
 
@@ -46359,8 +46416,8 @@
   }
 
   public class StreamCorruptedException extends java.io.ObjectStreamException {
-    ctor public StreamCorruptedException();
     ctor public StreamCorruptedException(java.lang.String);
+    ctor public StreamCorruptedException();
   }
 
   public class StreamTokenizer {
@@ -46435,14 +46492,14 @@
   public abstract class Writer implements java.lang.Appendable java.io.Closeable java.io.Flushable {
     ctor protected Writer();
     ctor protected Writer(java.lang.Object);
-    method public java.io.Writer append(char) throws java.io.IOException;
     method public java.io.Writer append(java.lang.CharSequence) throws java.io.IOException;
     method public java.io.Writer append(java.lang.CharSequence, int, int) throws java.io.IOException;
+    method public java.io.Writer append(char) throws java.io.IOException;
     method public abstract void close() throws java.io.IOException;
     method public abstract void flush() throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
     method public void write(char[]) throws java.io.IOException;
     method public abstract void write(char[], int, int) throws java.io.IOException;
-    method public void write(int) throws java.io.IOException;
     method public void write(java.lang.String) throws java.io.IOException;
     method public void write(java.lang.String, int, int) throws java.io.IOException;
     field protected java.lang.Object lock;
@@ -46457,32 +46514,63 @@
     ctor public AbstractMethodError(java.lang.String);
   }
 
-   abstract class AbstractStringBuilder {
+   abstract class AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence {
+    method public java.lang.AbstractStringBuilder append(java.lang.Object);
+    method public java.lang.AbstractStringBuilder append(java.lang.String);
+    method public java.lang.AbstractStringBuilder append(java.lang.StringBuffer);
+    method public java.lang.AbstractStringBuilder append(java.lang.CharSequence);
+    method public java.lang.AbstractStringBuilder append(java.lang.CharSequence, int, int);
+    method public java.lang.AbstractStringBuilder append(char[]);
+    method public java.lang.AbstractStringBuilder append(char[], int, int);
+    method public java.lang.AbstractStringBuilder append(boolean);
+    method public java.lang.AbstractStringBuilder append(char);
+    method public java.lang.AbstractStringBuilder append(int);
+    method public java.lang.AbstractStringBuilder append(long);
+    method public java.lang.AbstractStringBuilder append(float);
+    method public java.lang.AbstractStringBuilder append(double);
+    method public java.lang.AbstractStringBuilder appendCodePoint(int);
     method public int capacity();
     method public char charAt(int);
     method public int codePointAt(int);
     method public int codePointBefore(int);
     method public int codePointCount(int, int);
+    method public java.lang.AbstractStringBuilder delete(int, int);
+    method public java.lang.AbstractStringBuilder deleteCharAt(int);
     method public void ensureCapacity(int);
     method public void getChars(int, int, char[], int);
     method public int indexOf(java.lang.String);
     method public int indexOf(java.lang.String, int);
+    method public java.lang.AbstractStringBuilder insert(int, char[], int, int);
+    method public java.lang.AbstractStringBuilder insert(int, java.lang.Object);
+    method public java.lang.AbstractStringBuilder insert(int, java.lang.String);
+    method public java.lang.AbstractStringBuilder insert(int, char[]);
+    method public java.lang.AbstractStringBuilder insert(int, java.lang.CharSequence);
+    method public java.lang.AbstractStringBuilder insert(int, java.lang.CharSequence, int, int);
+    method public java.lang.AbstractStringBuilder insert(int, boolean);
+    method public java.lang.AbstractStringBuilder insert(int, char);
+    method public java.lang.AbstractStringBuilder insert(int, int);
+    method public java.lang.AbstractStringBuilder insert(int, long);
+    method public java.lang.AbstractStringBuilder insert(int, float);
+    method public java.lang.AbstractStringBuilder insert(int, double);
     method public int lastIndexOf(java.lang.String);
     method public int lastIndexOf(java.lang.String, int);
     method public int length();
     method public int offsetByCodePoints(int, int);
+    method public java.lang.AbstractStringBuilder replace(int, int, java.lang.String);
+    method public java.lang.AbstractStringBuilder reverse();
     method public void setCharAt(int, char);
     method public void setLength(int);
     method public java.lang.CharSequence subSequence(int, int);
     method public java.lang.String substring(int);
     method public java.lang.String substring(int, int);
+    method public abstract java.lang.String toString();
     method public void trimToSize();
   }
 
   public abstract interface Appendable {
-    method public abstract java.lang.Appendable append(char) throws java.io.IOException;
     method public abstract java.lang.Appendable append(java.lang.CharSequence) throws java.io.IOException;
     method public abstract java.lang.Appendable append(java.lang.CharSequence, int, int) throws java.io.IOException;
+    method public abstract java.lang.Appendable append(char) throws java.io.IOException;
   }
 
   public class ArithmeticException extends java.lang.RuntimeException {
@@ -46503,7 +46591,6 @@
 
   public class AssertionError extends java.lang.Error {
     ctor public AssertionError();
-    ctor public AssertionError(java.lang.String, java.lang.Throwable);
     ctor public AssertionError(java.lang.Object);
     ctor public AssertionError(boolean);
     ctor public AssertionError(char);
@@ -46511,6 +46598,7 @@
     ctor public AssertionError(long);
     ctor public AssertionError(float);
     ctor public AssertionError(double);
+    ctor public AssertionError(java.lang.String, java.lang.Throwable);
   }
 
   public abstract interface AutoCloseable {
@@ -46518,16 +46606,16 @@
   }
 
   public final class Boolean implements java.lang.Comparable java.io.Serializable {
-    ctor public Boolean(java.lang.String);
     ctor public Boolean(boolean);
+    ctor public Boolean(java.lang.String);
     method public boolean booleanValue();
     method public static int compare(boolean, boolean);
     method public int compareTo(java.lang.Boolean);
     method public static boolean getBoolean(java.lang.String);
     method public static boolean parseBoolean(java.lang.String);
     method public static java.lang.String toString(boolean);
-    method public static java.lang.Boolean valueOf(java.lang.String);
     method public static java.lang.Boolean valueOf(boolean);
+    method public static java.lang.Boolean valueOf(java.lang.String);
     field public static final java.lang.Boolean FALSE;
     field public static final java.lang.Boolean TRUE;
     field public static final java.lang.Class<java.lang.Boolean> TYPE;
@@ -46543,12 +46631,13 @@
     method public float floatValue();
     method public int intValue();
     method public long longValue();
-    method public static byte parseByte(java.lang.String) throws java.lang.NumberFormatException;
     method public static byte parseByte(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static byte parseByte(java.lang.String) throws java.lang.NumberFormatException;
+    method public static java.lang.String toHexString(byte, boolean);
     method public static java.lang.String toString(byte);
-    method public static java.lang.Byte valueOf(java.lang.String) throws java.lang.NumberFormatException;
-    method public static java.lang.Byte valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
     method public static java.lang.Byte valueOf(byte);
+    method public static java.lang.Byte valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static java.lang.Byte valueOf(java.lang.String) throws java.lang.NumberFormatException;
     field public static final byte MAX_VALUE = 127; // 0x7f
     field public static final byte MIN_VALUE = -128; // 0xffffff80
     field public static final int SIZE = 8; // 0x8
@@ -46721,7 +46810,7 @@
   }
 
   public static final class Character.UnicodeBlock extends java.lang.Character.Subset {
-    method public static java.lang.Character.UnicodeBlock forName(java.lang.String);
+    method public static final java.lang.Character.UnicodeBlock forName(java.lang.String);
     method public static java.lang.Character.UnicodeBlock of(char);
     method public static java.lang.Character.UnicodeBlock of(int);
     field public static final java.lang.Character.UnicodeBlock AEGEAN_NUMBERS;
@@ -46936,6 +47025,109 @@
     field public static final java.lang.Character.UnicodeBlock YI_SYLLABLES;
   }
 
+  public static final class Character.UnicodeScript extends java.lang.Enum {
+    method public static final java.lang.Character.UnicodeScript forName(java.lang.String);
+    method public static java.lang.Character.UnicodeScript of(int);
+    method public static java.lang.Character.UnicodeScript valueOf(java.lang.String);
+    method public static final java.lang.Character.UnicodeScript[] values();
+    enum_constant public static final java.lang.Character.UnicodeScript ARABIC;
+    enum_constant public static final java.lang.Character.UnicodeScript ARMENIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript AVESTAN;
+    enum_constant public static final java.lang.Character.UnicodeScript BALINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BAMUM;
+    enum_constant public static final java.lang.Character.UnicodeScript BATAK;
+    enum_constant public static final java.lang.Character.UnicodeScript BENGALI;
+    enum_constant public static final java.lang.Character.UnicodeScript BOPOMOFO;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAHMI;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAILLE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUGINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUHID;
+    enum_constant public static final java.lang.Character.UnicodeScript CANADIAN_ABORIGINAL;
+    enum_constant public static final java.lang.Character.UnicodeScript CARIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript CHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript CHEROKEE;
+    enum_constant public static final java.lang.Character.UnicodeScript COMMON;
+    enum_constant public static final java.lang.Character.UnicodeScript COPTIC;
+    enum_constant public static final java.lang.Character.UnicodeScript CUNEIFORM;
+    enum_constant public static final java.lang.Character.UnicodeScript CYPRIOT;
+    enum_constant public static final java.lang.Character.UnicodeScript CYRILLIC;
+    enum_constant public static final java.lang.Character.UnicodeScript DESERET;
+    enum_constant public static final java.lang.Character.UnicodeScript DEVANAGARI;
+    enum_constant public static final java.lang.Character.UnicodeScript EGYPTIAN_HIEROGLYPHS;
+    enum_constant public static final java.lang.Character.UnicodeScript ETHIOPIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GEORGIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript GLAGOLITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GOTHIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GREEK;
+    enum_constant public static final java.lang.Character.UnicodeScript GUJARATI;
+    enum_constant public static final java.lang.Character.UnicodeScript GURMUKHI;
+    enum_constant public static final java.lang.Character.UnicodeScript HAN;
+    enum_constant public static final java.lang.Character.UnicodeScript HANGUL;
+    enum_constant public static final java.lang.Character.UnicodeScript HANUNOO;
+    enum_constant public static final java.lang.Character.UnicodeScript HEBREW;
+    enum_constant public static final java.lang.Character.UnicodeScript HIRAGANA;
+    enum_constant public static final java.lang.Character.UnicodeScript IMPERIAL_ARAMAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript INHERITED;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PAHLAVI;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PARTHIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript JAVANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript KAITHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KANNADA;
+    enum_constant public static final java.lang.Character.UnicodeScript KATAKANA;
+    enum_constant public static final java.lang.Character.UnicodeScript KAYAH_LI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHAROSHTHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHMER;
+    enum_constant public static final java.lang.Character.UnicodeScript LAO;
+    enum_constant public static final java.lang.Character.UnicodeScript LATIN;
+    enum_constant public static final java.lang.Character.UnicodeScript LEPCHA;
+    enum_constant public static final java.lang.Character.UnicodeScript LIMBU;
+    enum_constant public static final java.lang.Character.UnicodeScript LINEAR_B;
+    enum_constant public static final java.lang.Character.UnicodeScript LISU;
+    enum_constant public static final java.lang.Character.UnicodeScript LYCIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript LYDIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MALAYALAM;
+    enum_constant public static final java.lang.Character.UnicodeScript MANDAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript MEETEI_MAYEK;
+    enum_constant public static final java.lang.Character.UnicodeScript MONGOLIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MYANMAR;
+    enum_constant public static final java.lang.Character.UnicodeScript NEW_TAI_LUE;
+    enum_constant public static final java.lang.Character.UnicodeScript NKO;
+    enum_constant public static final java.lang.Character.UnicodeScript OGHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_ITALIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_PERSIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_SOUTH_ARABIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_TURKIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OL_CHIKI;
+    enum_constant public static final java.lang.Character.UnicodeScript ORIYA;
+    enum_constant public static final java.lang.Character.UnicodeScript OSMANYA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHAGS_PA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHOENICIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript REJANG;
+    enum_constant public static final java.lang.Character.UnicodeScript RUNIC;
+    enum_constant public static final java.lang.Character.UnicodeScript SAMARITAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SAURASHTRA;
+    enum_constant public static final java.lang.Character.UnicodeScript SHAVIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SINHALA;
+    enum_constant public static final java.lang.Character.UnicodeScript SUNDANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript SYLOTI_NAGRI;
+    enum_constant public static final java.lang.Character.UnicodeScript SYRIAC;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGALOG;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGBANWA;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_LE;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_THAM;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_VIET;
+    enum_constant public static final java.lang.Character.UnicodeScript TAMIL;
+    enum_constant public static final java.lang.Character.UnicodeScript TELUGU;
+    enum_constant public static final java.lang.Character.UnicodeScript THAANA;
+    enum_constant public static final java.lang.Character.UnicodeScript THAI;
+    enum_constant public static final java.lang.Character.UnicodeScript TIBETAN;
+    enum_constant public static final java.lang.Character.UnicodeScript TIFINAGH;
+    enum_constant public static final java.lang.Character.UnicodeScript UGARITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript UNKNOWN;
+    enum_constant public static final java.lang.Character.UnicodeScript VAI;
+    enum_constant public static final java.lang.Character.UnicodeScript YI;
+  }
+
   public final class Class implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
     method public java.lang.Class<? extends U> asSubclass(java.lang.Class<U>);
     method public T cast(java.lang.Object);
@@ -46948,28 +47140,28 @@
     method public java.lang.ClassLoader getClassLoader();
     method public java.lang.Class<?>[] getClasses();
     method public java.lang.Class<?> getComponentType();
-    method public java.lang.reflect.Constructor<T> getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
-    method public java.lang.reflect.Constructor<?>[] getConstructors();
+    method public java.lang.reflect.Constructor<T> getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method public java.lang.reflect.Constructor<?>[] getConstructors() throws java.lang.SecurityException;
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public java.lang.Class<?>[] getDeclaredClasses();
-    method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
-    method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors();
+    method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors() throws java.lang.SecurityException;
     method public java.lang.reflect.Field getDeclaredField(java.lang.String) throws java.lang.NoSuchFieldException;
     method public java.lang.reflect.Field[] getDeclaredFields();
-    method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
-    method public java.lang.reflect.Method[] getDeclaredMethods();
+    method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method public java.lang.reflect.Method[] getDeclaredMethods() throws java.lang.SecurityException;
     method public java.lang.Class<?> getDeclaringClass();
     method public java.lang.Class<?> getEnclosingClass();
     method public java.lang.reflect.Constructor<?> getEnclosingConstructor();
     method public java.lang.reflect.Method getEnclosingMethod();
     method public T[] getEnumConstants();
     method public java.lang.reflect.Field getField(java.lang.String) throws java.lang.NoSuchFieldException;
-    method public java.lang.reflect.Field[] getFields();
+    method public java.lang.reflect.Field[] getFields() throws java.lang.SecurityException;
     method public java.lang.reflect.Type[] getGenericInterfaces();
     method public java.lang.reflect.Type getGenericSuperclass();
     method public java.lang.Class<?>[] getInterfaces();
-    method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
-    method public java.lang.reflect.Method[] getMethods();
+    method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method public java.lang.reflect.Method[] getMethods() throws java.lang.SecurityException;
     method public int getModifiers();
     method public java.lang.String getName();
     method public java.lang.Package getPackage();
@@ -47011,8 +47203,8 @@
   }
 
   public abstract class ClassLoader {
-    ctor protected ClassLoader();
     ctor protected ClassLoader(java.lang.ClassLoader);
+    ctor protected ClassLoader();
     method public void clearAssertionStatus();
     method protected final deprecated java.lang.Class<?> defineClass(byte[], int, int) throws java.lang.ClassFormatError;
     method protected final java.lang.Class<?> defineClass(java.lang.String, byte[], int, int) throws java.lang.ClassFormatError;
@@ -47037,6 +47229,7 @@
     method public static java.util.Enumeration<java.net.URL> getSystemResources(java.lang.String) throws java.io.IOException;
     method public java.lang.Class<?> loadClass(java.lang.String) throws java.lang.ClassNotFoundException;
     method protected java.lang.Class<?> loadClass(java.lang.String, boolean) throws java.lang.ClassNotFoundException;
+    method protected static boolean registerAsParallelCapable();
     method protected final void resolveClass(java.lang.Class<?>);
     method public void setClassAssertionStatus(java.lang.String, boolean);
     method public void setDefaultAssertionStatus(boolean);
@@ -47084,10 +47277,10 @@
     method public double doubleValue();
     method public float floatValue();
     method public int intValue();
-    method public boolean isInfinite();
     method public static boolean isInfinite(double);
-    method public boolean isNaN();
+    method public boolean isInfinite();
     method public static boolean isNaN(double);
+    method public boolean isNaN();
     method public static double longBitsToDouble(long);
     method public long longValue();
     method public static double parseDouble(java.lang.String) throws java.lang.NumberFormatException;
@@ -47131,6 +47324,7 @@
     ctor public Error(java.lang.String);
     ctor public Error(java.lang.String, java.lang.Throwable);
     ctor public Error(java.lang.Throwable);
+    ctor protected Error(java.lang.String, java.lang.Throwable, boolean, boolean);
   }
 
   public class Exception extends java.lang.Throwable {
@@ -47138,12 +47332,13 @@
     ctor public Exception(java.lang.String);
     ctor public Exception(java.lang.String, java.lang.Throwable);
     ctor public Exception(java.lang.Throwable);
+    ctor protected Exception(java.lang.String, java.lang.Throwable, boolean, boolean);
   }
 
   public class ExceptionInInitializerError extends java.lang.LinkageError {
     ctor public ExceptionInInitializerError();
-    ctor public ExceptionInInitializerError(java.lang.String);
     ctor public ExceptionInInitializerError(java.lang.Throwable);
+    ctor public ExceptionInInitializerError(java.lang.String);
     method public java.lang.Throwable getException();
   }
 
@@ -47159,10 +47354,10 @@
     method public float floatValue();
     method public static float intBitsToFloat(int);
     method public int intValue();
-    method public boolean isInfinite();
     method public static boolean isInfinite(float);
-    method public boolean isNaN();
+    method public boolean isInfinite();
     method public static boolean isNaN(float);
+    method public boolean isNaN();
     method public long longValue();
     method public static float parseFloat(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.String toHexString(float);
@@ -47258,8 +47453,8 @@
     method public static int lowestOneBit(int);
     method public static int numberOfLeadingZeros(int);
     method public static int numberOfTrailingZeros(int);
-    method public static int parseInt(java.lang.String) throws java.lang.NumberFormatException;
     method public static int parseInt(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static int parseInt(java.lang.String) throws java.lang.NumberFormatException;
     method public static int reverse(int);
     method public static int reverseBytes(int);
     method public static int rotateLeft(int, int);
@@ -47268,10 +47463,10 @@
     method public static java.lang.String toBinaryString(int);
     method public static java.lang.String toHexString(int);
     method public static java.lang.String toOctalString(int);
-    method public static java.lang.String toString(int);
     method public static java.lang.String toString(int, int);
-    method public static java.lang.Integer valueOf(java.lang.String) throws java.lang.NumberFormatException;
+    method public static java.lang.String toString(int);
     method public static java.lang.Integer valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static java.lang.Integer valueOf(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.Integer valueOf(int);
     field public static final int MAX_VALUE = 2147483647; // 0x7fffffff
     field public static final int MIN_VALUE = -2147483648; // 0x80000000
@@ -47317,8 +47512,8 @@
     method public static long lowestOneBit(long);
     method public static int numberOfLeadingZeros(long);
     method public static int numberOfTrailingZeros(long);
-    method public static long parseLong(java.lang.String) throws java.lang.NumberFormatException;
     method public static long parseLong(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static long parseLong(java.lang.String) throws java.lang.NumberFormatException;
     method public static long reverse(long);
     method public static long reverseBytes(long);
     method public static long rotateLeft(long, int);
@@ -47327,10 +47522,10 @@
     method public static java.lang.String toBinaryString(long);
     method public static java.lang.String toHexString(long);
     method public static java.lang.String toOctalString(long);
-    method public static java.lang.String toString(long);
     method public static java.lang.String toString(long, int);
-    method public static java.lang.Long valueOf(java.lang.String) throws java.lang.NumberFormatException;
+    method public static java.lang.String toString(long);
     method public static java.lang.Long valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static java.lang.Long valueOf(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.Long valueOf(long);
     field public static final long MAX_VALUE = 9223372036854775807L; // 0x7fffffffffffffffL
     field public static final long MIN_VALUE = -9223372036854775808L; // 0x8000000000000000L
@@ -47340,10 +47535,10 @@
 
   public final class Math {
     method public static double IEEEremainder(double, double);
-    method public static double abs(double);
-    method public static float abs(float);
     method public static int abs(int);
     method public static long abs(long);
+    method public static float abs(float);
+    method public static double abs(double);
     method public static double acos(double);
     method public static double asin(double);
     method public static double atan(double);
@@ -47363,14 +47558,14 @@
     method public static double log(double);
     method public static double log10(double);
     method public static double log1p(double);
-    method public static double max(double, double);
-    method public static float max(float, float);
     method public static int max(int, int);
     method public static long max(long, long);
-    method public static double min(double, double);
-    method public static float min(float, float);
+    method public static float max(float, float);
+    method public static double max(double, double);
     method public static int min(int, int);
     method public static long min(long, long);
+    method public static float min(float, float);
+    method public static double min(double, double);
     method public static double nextAfter(double, double);
     method public static float nextAfter(float, double);
     method public static double nextUp(double);
@@ -47378,8 +47573,8 @@
     method public static double pow(double, double);
     method public static double random();
     method public static double rint(double);
-    method public static long round(double);
     method public static int round(float);
+    method public static long round(double);
     method public static double scalb(double, int);
     method public static float scalb(float, int);
     method public static double signum(double);
@@ -47457,9 +47652,9 @@
     method public final void notify();
     method public final void notifyAll();
     method public java.lang.String toString();
-    method public final void wait() throws java.lang.InterruptedException;
     method public final void wait(long) throws java.lang.InterruptedException;
     method public final void wait(long, int) throws java.lang.InterruptedException;
+    method public final void wait() throws java.lang.InterruptedException;
   }
 
   public class OutOfMemoryError extends java.lang.VirtualMachineError {
@@ -47500,19 +47695,49 @@
   }
 
   public final class ProcessBuilder {
-    ctor public ProcessBuilder(java.lang.String...);
     ctor public ProcessBuilder(java.util.List<java.lang.String>);
-    method public java.util.List<java.lang.String> command();
-    method public java.lang.ProcessBuilder command(java.lang.String...);
+    ctor public ProcessBuilder(java.lang.String...);
     method public java.lang.ProcessBuilder command(java.util.List<java.lang.String>);
+    method public java.lang.ProcessBuilder command(java.lang.String...);
+    method public java.util.List<java.lang.String> command();
     method public java.io.File directory();
     method public java.lang.ProcessBuilder directory(java.io.File);
     method public java.util.Map<java.lang.String, java.lang.String> environment();
+    method public java.lang.ProcessBuilder inheritIO();
+    method public java.lang.ProcessBuilder redirectError(java.lang.ProcessBuilder.Redirect);
+    method public java.lang.ProcessBuilder redirectError(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectError();
     method public boolean redirectErrorStream();
     method public java.lang.ProcessBuilder redirectErrorStream(boolean);
+    method public java.lang.ProcessBuilder redirectInput(java.lang.ProcessBuilder.Redirect);
+    method public java.lang.ProcessBuilder redirectInput(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectInput();
+    method public java.lang.ProcessBuilder redirectOutput(java.lang.ProcessBuilder.Redirect);
+    method public java.lang.ProcessBuilder redirectOutput(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectOutput();
     method public java.lang.Process start() throws java.io.IOException;
   }
 
+  public static abstract class ProcessBuilder.Redirect {
+    method public static java.lang.ProcessBuilder.Redirect appendTo(java.io.File);
+    method public java.io.File file();
+    method public static java.lang.ProcessBuilder.Redirect from(java.io.File);
+    method public static java.lang.ProcessBuilder.Redirect to(java.io.File);
+    method public abstract java.lang.ProcessBuilder.Redirect.Type type();
+    field public static final java.lang.ProcessBuilder.Redirect INHERIT;
+    field public static final java.lang.ProcessBuilder.Redirect PIPE;
+  }
+
+  public static final class ProcessBuilder.Redirect.Type extends java.lang.Enum {
+    method public static java.lang.ProcessBuilder.Redirect.Type valueOf(java.lang.String);
+    method public static final java.lang.ProcessBuilder.Redirect.Type[] values();
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type APPEND;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type INHERIT;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type PIPE;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type READ;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type WRITE;
+  }
+
   public abstract interface Readable {
     method public abstract int read(java.nio.CharBuffer) throws java.io.IOException;
   }
@@ -47520,8 +47745,8 @@
   public class ReflectiveOperationException extends java.lang.Exception {
     ctor public ReflectiveOperationException();
     ctor public ReflectiveOperationException(java.lang.String);
-    ctor public ReflectiveOperationException(java.lang.Throwable);
     ctor public ReflectiveOperationException(java.lang.String, java.lang.Throwable);
+    ctor public ReflectiveOperationException(java.lang.Throwable);
   }
 
   public abstract interface Runnable {
@@ -47531,12 +47756,12 @@
   public class Runtime {
     method public void addShutdownHook(java.lang.Thread);
     method public int availableProcessors();
-    method public java.lang.Process exec(java.lang.String[]) throws java.io.IOException;
-    method public java.lang.Process exec(java.lang.String[], java.lang.String[]) throws java.io.IOException;
-    method public java.lang.Process exec(java.lang.String[], java.lang.String[], java.io.File) throws java.io.IOException;
     method public java.lang.Process exec(java.lang.String) throws java.io.IOException;
     method public java.lang.Process exec(java.lang.String, java.lang.String[]) throws java.io.IOException;
     method public java.lang.Process exec(java.lang.String, java.lang.String[], java.io.File) throws java.io.IOException;
+    method public java.lang.Process exec(java.lang.String[]) throws java.io.IOException;
+    method public java.lang.Process exec(java.lang.String[], java.lang.String[]) throws java.io.IOException;
+    method public java.lang.Process exec(java.lang.String[], java.lang.String[], java.io.File) throws java.io.IOException;
     method public void exit(int);
     method public long freeMemory();
     method public void gc();
@@ -47560,6 +47785,7 @@
     ctor public RuntimeException(java.lang.String);
     ctor public RuntimeException(java.lang.String, java.lang.Throwable);
     ctor public RuntimeException(java.lang.Throwable);
+    ctor protected RuntimeException(java.lang.String, java.lang.Throwable, boolean, boolean);
   }
 
   public final class RuntimePermission extends java.security.BasicPermission {
@@ -47624,8 +47850,8 @@
   }
 
   public final class Short extends java.lang.Number implements java.lang.Comparable {
-    ctor public Short(java.lang.String) throws java.lang.NumberFormatException;
     ctor public Short(short);
+    ctor public Short(java.lang.String) throws java.lang.NumberFormatException;
     method public static int compare(short, short);
     method public int compareTo(java.lang.Short);
     method public static java.lang.Short decode(java.lang.String) throws java.lang.NumberFormatException;
@@ -47633,12 +47859,12 @@
     method public float floatValue();
     method public int intValue();
     method public long longValue();
-    method public static short parseShort(java.lang.String) throws java.lang.NumberFormatException;
     method public static short parseShort(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static short parseShort(java.lang.String) throws java.lang.NumberFormatException;
     method public static short reverseBytes(short);
     method public static java.lang.String toString(short);
-    method public static java.lang.Short valueOf(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.Short valueOf(java.lang.String, int) throws java.lang.NumberFormatException;
+    method public static java.lang.Short valueOf(java.lang.String) throws java.lang.NumberFormatException;
     method public static java.lang.Short valueOf(short);
     field public static final short MAX_VALUE = 32767; // 0x7fff
     field public static final short MIN_VALUE = -32768; // 0xffff8000
@@ -47662,10 +47888,10 @@
 
   public final class StrictMath {
     method public static double IEEEremainder(double, double);
-    method public static double abs(double);
-    method public static float abs(float);
     method public static int abs(int);
     method public static long abs(long);
+    method public static float abs(float);
+    method public static double abs(double);
     method public static double acos(double);
     method public static double asin(double);
     method public static double atan(double);
@@ -47685,14 +47911,14 @@
     method public static double log(double);
     method public static double log10(double);
     method public static double log1p(double);
-    method public static double max(double, double);
-    method public static float max(float, float);
     method public static int max(int, int);
     method public static long max(long, long);
-    method public static double min(double, double);
-    method public static float min(float, float);
+    method public static float max(float, float);
+    method public static double max(double, double);
     method public static int min(int, int);
     method public static long min(long, long);
+    method public static float min(float, float);
+    method public static double min(double, double);
     method public static double nextAfter(double, double);
     method public static float nextAfter(float, double);
     method public static double nextUp(double);
@@ -47700,8 +47926,8 @@
     method public static double pow(double, double);
     method public static double random();
     method public static double rint(double);
-    method public static long round(double);
     method public static int round(float);
+    method public static long round(double);
     method public static double scalb(double, int);
     method public static float scalb(float, int);
     method public static double signum(double);
@@ -47721,19 +47947,19 @@
 
   public final class String implements java.lang.CharSequence java.lang.Comparable java.io.Serializable {
     ctor public String();
-    ctor public String(byte[]);
-    ctor public deprecated String(byte[], int);
-    ctor public String(byte[], int, int);
-    ctor public deprecated String(byte[], int, int, int);
-    ctor public String(byte[], int, int, java.lang.String) throws java.io.UnsupportedEncodingException;
-    ctor public String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException;
-    ctor public String(byte[], int, int, java.nio.charset.Charset);
-    ctor public String(byte[], java.nio.charset.Charset);
+    ctor public String(java.lang.String);
     ctor public String(char[]);
     ctor public String(char[], int, int);
-    ctor public String(java.lang.String);
-    ctor public String(java.lang.StringBuffer);
     ctor public String(int[], int, int);
+    ctor public deprecated String(byte[], int, int, int);
+    ctor public deprecated String(byte[], int);
+    ctor public String(byte[], int, int, java.lang.String) throws java.io.UnsupportedEncodingException;
+    ctor public String(byte[], int, int, java.nio.charset.Charset);
+    ctor public String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException;
+    ctor public String(byte[], java.nio.charset.Charset);
+    ctor public String(byte[], int, int);
+    ctor public String(byte[]);
+    ctor public String(java.lang.StringBuffer);
     ctor public String(java.lang.StringBuilder);
     method public char charAt(int);
     method public int codePointAt(int);
@@ -47745,16 +47971,16 @@
     method public boolean contains(java.lang.CharSequence);
     method public boolean contentEquals(java.lang.StringBuffer);
     method public boolean contentEquals(java.lang.CharSequence);
-    method public static java.lang.String copyValueOf(char[]);
     method public static java.lang.String copyValueOf(char[], int, int);
+    method public static java.lang.String copyValueOf(char[]);
     method public boolean endsWith(java.lang.String);
     method public boolean equalsIgnoreCase(java.lang.String);
     method public static java.lang.String format(java.lang.String, java.lang.Object...);
     method public static java.lang.String format(java.util.Locale, java.lang.String, java.lang.Object...);
     method public deprecated void getBytes(int, int, byte[], int);
-    method public byte[] getBytes();
     method public byte[] getBytes(java.lang.String) throws java.io.UnsupportedEncodingException;
     method public byte[] getBytes(java.nio.charset.Charset);
+    method public byte[] getBytes();
     method public void getChars(int, int, char[], int);
     method public int indexOf(int);
     method public int indexOf(int, int);
@@ -47775,109 +48001,51 @@
     method public java.lang.String replace(java.lang.CharSequence, java.lang.CharSequence);
     method public java.lang.String replaceAll(java.lang.String, java.lang.String);
     method public java.lang.String replaceFirst(java.lang.String, java.lang.String);
-    method public java.lang.String[] split(java.lang.String);
     method public java.lang.String[] split(java.lang.String, int);
-    method public boolean startsWith(java.lang.String);
+    method public java.lang.String[] split(java.lang.String);
     method public boolean startsWith(java.lang.String, int);
+    method public boolean startsWith(java.lang.String);
     method public java.lang.CharSequence subSequence(int, int);
     method public java.lang.String substring(int);
     method public java.lang.String substring(int, int);
     method public char[] toCharArray();
-    method public java.lang.String toLowerCase();
     method public java.lang.String toLowerCase(java.util.Locale);
-    method public java.lang.String toUpperCase();
+    method public java.lang.String toLowerCase();
     method public java.lang.String toUpperCase(java.util.Locale);
+    method public java.lang.String toUpperCase();
     method public java.lang.String trim();
+    method public static java.lang.String valueOf(java.lang.Object);
     method public static java.lang.String valueOf(char[]);
     method public static java.lang.String valueOf(char[], int, int);
+    method public static java.lang.String valueOf(boolean);
     method public static java.lang.String valueOf(char);
-    method public static java.lang.String valueOf(double);
-    method public static java.lang.String valueOf(float);
     method public static java.lang.String valueOf(int);
     method public static java.lang.String valueOf(long);
-    method public static java.lang.String valueOf(java.lang.Object);
-    method public static java.lang.String valueOf(boolean);
+    method public static java.lang.String valueOf(float);
+    method public static java.lang.String valueOf(double);
     field public static final java.util.Comparator<java.lang.String> CASE_INSENSITIVE_ORDER;
   }
 
-  public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable {
+  public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
     ctor public StringBuffer();
     ctor public StringBuffer(int);
     ctor public StringBuffer(java.lang.String);
     ctor public StringBuffer(java.lang.CharSequence);
-    method public java.lang.StringBuffer append(boolean);
-    method public synchronized java.lang.StringBuffer append(char);
-    method public java.lang.StringBuffer append(double);
-    method public java.lang.StringBuffer append(float);
-    method public java.lang.StringBuffer append(int);
-    method public java.lang.StringBuffer append(long);
-    method public synchronized java.lang.StringBuffer append(java.lang.Object);
-    method public synchronized java.lang.StringBuffer append(java.lang.String);
-    method public synchronized java.lang.StringBuffer append(java.lang.StringBuffer);
-    method public synchronized java.lang.StringBuffer append(char[]);
-    method public synchronized java.lang.StringBuffer append(char[], int, int);
-    method public synchronized java.lang.StringBuffer append(java.lang.CharSequence);
-    method public synchronized java.lang.StringBuffer append(java.lang.CharSequence, int, int);
-    method public java.lang.StringBuffer appendCodePoint(int);
-    method public synchronized java.lang.StringBuffer delete(int, int);
-    method public synchronized java.lang.StringBuffer deleteCharAt(int);
-    method public synchronized java.lang.StringBuffer insert(int, char);
-    method public java.lang.StringBuffer insert(int, boolean);
-    method public java.lang.StringBuffer insert(int, int);
-    method public java.lang.StringBuffer insert(int, long);
-    method public java.lang.StringBuffer insert(int, double);
-    method public java.lang.StringBuffer insert(int, float);
-    method public java.lang.StringBuffer insert(int, java.lang.Object);
-    method public synchronized java.lang.StringBuffer insert(int, java.lang.String);
-    method public synchronized java.lang.StringBuffer insert(int, char[]);
-    method public synchronized java.lang.StringBuffer insert(int, char[], int, int);
-    method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence);
-    method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence, int, int);
-    method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String);
-    method public synchronized java.lang.StringBuffer reverse();
+    method public synchronized java.lang.String toString();
   }
 
-  public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable {
+  public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
     ctor public StringBuilder();
     ctor public StringBuilder(int);
-    ctor public StringBuilder(java.lang.CharSequence);
     ctor public StringBuilder(java.lang.String);
-    method public java.lang.StringBuilder append(boolean);
-    method public java.lang.StringBuilder append(char);
-    method public java.lang.StringBuilder append(int);
-    method public java.lang.StringBuilder append(long);
-    method public java.lang.StringBuilder append(float);
-    method public java.lang.StringBuilder append(double);
-    method public java.lang.StringBuilder append(java.lang.Object);
-    method public java.lang.StringBuilder append(java.lang.String);
-    method public java.lang.StringBuilder append(java.lang.StringBuffer);
-    method public java.lang.StringBuilder append(char[]);
-    method public java.lang.StringBuilder append(char[], int, int);
-    method public java.lang.StringBuilder append(java.lang.CharSequence);
-    method public java.lang.StringBuilder append(java.lang.CharSequence, int, int);
-    method public java.lang.StringBuilder appendCodePoint(int);
-    method public java.lang.StringBuilder delete(int, int);
-    method public java.lang.StringBuilder deleteCharAt(int);
-    method public java.lang.StringBuilder insert(int, boolean);
-    method public java.lang.StringBuilder insert(int, char);
-    method public java.lang.StringBuilder insert(int, int);
-    method public java.lang.StringBuilder insert(int, long);
-    method public java.lang.StringBuilder insert(int, float);
-    method public java.lang.StringBuilder insert(int, double);
-    method public java.lang.StringBuilder insert(int, java.lang.Object);
-    method public java.lang.StringBuilder insert(int, java.lang.String);
-    method public java.lang.StringBuilder insert(int, char[]);
-    method public java.lang.StringBuilder insert(int, char[], int, int);
-    method public java.lang.StringBuilder insert(int, java.lang.CharSequence);
-    method public java.lang.StringBuilder insert(int, java.lang.CharSequence, int, int);
-    method public java.lang.StringBuilder replace(int, int, java.lang.String);
-    method public java.lang.StringBuilder reverse();
+    ctor public StringBuilder(java.lang.CharSequence);
+    method public java.lang.String toString();
   }
 
   public class StringIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException {
     ctor public StringIndexOutOfBoundsException();
-    ctor public StringIndexOutOfBoundsException(int);
     ctor public StringIndexOutOfBoundsException(java.lang.String);
+    ctor public StringIndexOutOfBoundsException(int);
   }
 
   public abstract class SuppressWarnings implements java.lang.annotation.Annotation {
@@ -47919,11 +48087,11 @@
   public class Thread implements java.lang.Runnable {
     ctor public Thread();
     ctor public Thread(java.lang.Runnable);
-    ctor public Thread(java.lang.Runnable, java.lang.String);
-    ctor public Thread(java.lang.String);
     ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable);
-    ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String);
+    ctor public Thread(java.lang.String);
     ctor public Thread(java.lang.ThreadGroup, java.lang.String);
+    ctor public Thread(java.lang.Runnable, java.lang.String);
+    ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String);
     ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String, long);
     method public static int activeCount();
     method public final void checkAccess();
@@ -47948,9 +48116,9 @@
     method public final boolean isAlive();
     method public final boolean isDaemon();
     method public boolean isInterrupted();
-    method public final void join() throws java.lang.InterruptedException;
     method public final void join(long) throws java.lang.InterruptedException;
     method public final void join(long, int) throws java.lang.InterruptedException;
+    method public final void join() throws java.lang.InterruptedException;
     method public final deprecated void resume();
     method public void run();
     method public void setContextClassLoader(java.lang.ClassLoader);
@@ -47963,7 +48131,7 @@
     method public static void sleep(long, int) throws java.lang.InterruptedException;
     method public synchronized void start();
     method public final deprecated void stop();
-    method public final deprecated synchronized void stop(java.lang.Throwable);
+    method public final deprecated void stop(java.lang.Throwable);
     method public final deprecated void suspend();
     method public static void yield();
     field public static final int MAX_PRIORITY = 10; // 0xa
@@ -48032,14 +48200,14 @@
     ctor public Throwable(java.lang.String, java.lang.Throwable);
     ctor public Throwable(java.lang.Throwable);
     ctor protected Throwable(java.lang.String, java.lang.Throwable, boolean, boolean);
-    method public final void addSuppressed(java.lang.Throwable);
-    method public java.lang.Throwable fillInStackTrace();
-    method public java.lang.Throwable getCause();
+    method public final synchronized void addSuppressed(java.lang.Throwable);
+    method public synchronized java.lang.Throwable fillInStackTrace();
+    method public synchronized java.lang.Throwable getCause();
     method public java.lang.String getLocalizedMessage();
     method public java.lang.String getMessage();
     method public java.lang.StackTraceElement[] getStackTrace();
-    method public final java.lang.Throwable[] getSuppressed();
-    method public java.lang.Throwable initCause(java.lang.Throwable);
+    method public final synchronized java.lang.Throwable[] getSuppressed();
+    method public synchronized java.lang.Throwable initCause(java.lang.Throwable);
     method public void printStackTrace();
     method public void printStackTrace(java.io.PrintStream);
     method public void printStackTrace(java.io.PrintWriter);
@@ -48160,15 +48328,16 @@
   public abstract class Reference {
     method public void clear();
     method public boolean enqueue();
+    method public final synchronized boolean enqueueInternal();
     method public T get();
     method public boolean isEnqueued();
   }
 
   public class ReferenceQueue {
     ctor public ReferenceQueue();
-    method public synchronized java.lang.ref.Reference<? extends T> poll();
+    method public java.lang.ref.Reference<? extends T> poll();
+    method public java.lang.ref.Reference<? extends T> remove(long) throws java.lang.IllegalArgumentException, java.lang.InterruptedException;
     method public java.lang.ref.Reference<? extends T> remove() throws java.lang.InterruptedException;
-    method public synchronized java.lang.ref.Reference<? extends T> remove(long) throws java.lang.InterruptedException;
   }
 
   public class SoftReference extends java.lang.ref.Reference {
@@ -48192,8 +48361,8 @@
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public boolean isAccessible();
     method public boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
-    method public void setAccessible(boolean);
-    method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean);
+    method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean) throws java.lang.SecurityException;
+    method public void setAccessible(boolean) throws java.lang.SecurityException;
   }
 
   public abstract interface AnnotatedElement {
@@ -48214,8 +48383,9 @@
     method public static int getLength(java.lang.Object);
     method public static long getLong(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
     method public static short getShort(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
-    method public static java.lang.Object newInstance(java.lang.Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException;
+    method public static java.lang.Object newArray(java.lang.Class<?>, int) throws java.lang.NegativeArraySizeException;
     method public static java.lang.Object newInstance(java.lang.Class<?>, int) throws java.lang.NegativeArraySizeException;
+    method public static java.lang.Object newInstance(java.lang.Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException;
     method public static void set(java.lang.Object, int, java.lang.Object) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
     method public static void setBoolean(java.lang.Object, int, boolean);
     method public static void setByte(java.lang.Object, int, byte) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
@@ -48230,7 +48400,6 @@
   public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
     method public boolean equals(java.lang.Object);
     method public A getAnnotation(java.lang.Class<A>);
-    method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public java.lang.Class<T> getDeclaringClass();
     method public java.lang.Class<?>[] getExceptionTypes();
@@ -48317,7 +48486,6 @@
   public final class Method extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
     method public boolean equals(java.lang.Object);
     method public A getAnnotation(java.lang.Class<A>);
-    method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public java.lang.Class<?> getDeclaringClass();
     method public java.lang.Object getDefaultValue();
@@ -48598,10 +48766,10 @@
     method protected final java.net.InetAddress getRequestingSite();
     method protected java.net.URL getRequestingURL();
     method protected java.net.Authenticator.RequestorType getRequestorType();
-    method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);
-    method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);
     method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String, java.net.URL, java.net.Authenticator.RequestorType);
-    method public static void setDefault(java.net.Authenticator);
+    method public static synchronized void setDefault(java.net.Authenticator);
   }
 
   public static final class Authenticator.RequestorType extends java.lang.Enum {
@@ -48612,8 +48780,9 @@
   }
 
   public class BindException extends java.net.SocketException {
-    ctor public BindException();
     ctor public BindException(java.lang.String);
+    ctor public BindException();
+    ctor public BindException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract class CacheRequest {
@@ -48629,8 +48798,9 @@
   }
 
   public class ConnectException extends java.net.SocketException {
-    ctor public ConnectException();
     ctor public ConnectException(java.lang.String);
+    ctor public ConnectException();
+    ctor public ConnectException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract class ContentHandler {
@@ -48646,9 +48816,9 @@
   public abstract class CookieHandler {
     ctor public CookieHandler();
     method public abstract java.util.Map<java.lang.String, java.util.List<java.lang.String>> get(java.net.URI, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException;
-    method public static java.net.CookieHandler getDefault();
+    method public static synchronized java.net.CookieHandler getDefault();
     method public abstract void put(java.net.URI, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException;
-    method public static void setDefault(java.net.CookieHandler);
+    method public static synchronized void setDefault(java.net.CookieHandler);
   }
 
   public class CookieManager extends java.net.CookieHandler {
@@ -48677,12 +48847,12 @@
   }
 
   public final class DatagramPacket {
-    ctor public DatagramPacket(byte[], int);
     ctor public DatagramPacket(byte[], int, int);
+    ctor public DatagramPacket(byte[], int);
     ctor public DatagramPacket(byte[], int, int, java.net.InetAddress, int);
+    ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress) throws java.net.SocketException;
     ctor public DatagramPacket(byte[], int, java.net.InetAddress, int);
     ctor public DatagramPacket(byte[], int, java.net.SocketAddress) throws java.net.SocketException;
-    ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress) throws java.net.SocketException;
     method public synchronized java.net.InetAddress getAddress();
     method public synchronized byte[] getData();
     method public synchronized int getLength();
@@ -48699,17 +48869,18 @@
 
   public class DatagramSocket implements java.io.Closeable {
     ctor public DatagramSocket() throws java.net.SocketException;
-    ctor public DatagramSocket(int) throws java.net.SocketException;
-    ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException;
     ctor protected DatagramSocket(java.net.DatagramSocketImpl);
     ctor public DatagramSocket(java.net.SocketAddress) throws java.net.SocketException;
-    method public void bind(java.net.SocketAddress) throws java.net.SocketException;
+    ctor public DatagramSocket(int) throws java.net.SocketException;
+    ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException;
+    method public synchronized void bind(java.net.SocketAddress) throws java.net.SocketException;
     method public void close();
-    method public void connect(java.net.SocketAddress) throws java.net.SocketException;
     method public void connect(java.net.InetAddress, int);
+    method public void connect(java.net.SocketAddress) throws java.net.SocketException;
     method public void disconnect();
-    method public boolean getBroadcast() throws java.net.SocketException;
+    method public synchronized boolean getBroadcast() throws java.net.SocketException;
     method public java.nio.channels.DatagramChannel getChannel();
+    method public final java.io.FileDescriptor getFileDescriptor$();
     method public java.net.InetAddress getInetAddress();
     method public java.net.InetAddress getLocalAddress();
     method public int getLocalPort();
@@ -48717,22 +48888,22 @@
     method public int getPort();
     method public synchronized int getReceiveBufferSize() throws java.net.SocketException;
     method public java.net.SocketAddress getRemoteSocketAddress();
-    method public boolean getReuseAddress() throws java.net.SocketException;
+    method public synchronized boolean getReuseAddress() throws java.net.SocketException;
     method public synchronized int getSendBufferSize() throws java.net.SocketException;
     method public synchronized int getSoTimeout() throws java.net.SocketException;
-    method public int getTrafficClass() throws java.net.SocketException;
+    method public synchronized int getTrafficClass() throws java.net.SocketException;
     method public boolean isBound();
     method public boolean isClosed();
     method public boolean isConnected();
     method public synchronized void receive(java.net.DatagramPacket) throws java.io.IOException;
     method public void send(java.net.DatagramPacket) throws java.io.IOException;
-    method public void setBroadcast(boolean) throws java.net.SocketException;
+    method public synchronized void setBroadcast(boolean) throws java.net.SocketException;
     method public static synchronized void setDatagramSocketImplFactory(java.net.DatagramSocketImplFactory) throws java.io.IOException;
     method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException;
-    method public void setReuseAddress(boolean) throws java.net.SocketException;
+    method public synchronized void setReuseAddress(boolean) throws java.net.SocketException;
     method public synchronized void setSendBufferSize(int) throws java.net.SocketException;
     method public synchronized void setSoTimeout(int) throws java.net.SocketException;
-    method public void setTrafficClass(int) throws java.net.SocketException;
+    method public synchronized void setTrafficClass(int) throws java.net.SocketException;
   }
 
   public abstract class DatagramSocketImpl implements java.net.SocketOptions {
@@ -48784,11 +48955,14 @@
     method public java.lang.String getValue();
     method public int getVersion();
     method public boolean hasExpired();
+    method public boolean isHttpOnly();
     method public static java.util.List<java.net.HttpCookie> parse(java.lang.String);
+    method public static java.util.List<java.net.HttpCookie> parse(java.lang.String, boolean);
     method public void setComment(java.lang.String);
     method public void setCommentURL(java.lang.String);
     method public void setDiscard(boolean);
     method public void setDomain(java.lang.String);
+    method public void setHttpOnly(boolean);
     method public void setMaxAge(long);
     method public void setPath(java.lang.String);
     method public void setPortlist(java.lang.String);
@@ -48815,8 +48989,8 @@
     method public int getResponseCode() throws java.io.IOException;
     method public java.lang.String getResponseMessage() throws java.io.IOException;
     method public void setChunkedStreamingMode(int);
-    method public void setFixedLengthStreamingMode(long);
     method public void setFixedLengthStreamingMode(int);
+    method public void setFixedLengthStreamingMode(long);
     method public static void setFollowRedirects(boolean);
     method public void setInstanceFollowRedirects(boolean);
     method public void setRequestMethod(java.lang.String) throws java.net.ProtocolException;
@@ -48876,21 +49050,27 @@
   }
 
   public final class Inet4Address extends java.net.InetAddress {
+    field public static final java.net.InetAddress ALL;
+    field public static final java.net.InetAddress ANY;
+    field public static final java.net.InetAddress LOOPBACK;
   }
 
   public final class Inet6Address extends java.net.InetAddress {
-    method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], int) throws java.net.UnknownHostException;
     method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], java.net.NetworkInterface) throws java.net.UnknownHostException;
+    method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], int) throws java.net.UnknownHostException;
     method public int getScopeId();
     method public java.net.NetworkInterface getScopedInterface();
     method public boolean isIPv4CompatibleAddress();
+    field public static final java.net.InetAddress ANY;
+    field public static final java.net.InetAddress LOOPBACK;
   }
 
   public class InetAddress implements java.io.Serializable {
     method public byte[] getAddress();
+    method public byte[] getAddressInternal();
     method public static java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException;
-    method public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException;
     method public static java.net.InetAddress getByAddress(java.lang.String, byte[]) throws java.net.UnknownHostException;
+    method public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException;
     method public static java.net.InetAddress getByName(java.lang.String) throws java.net.UnknownHostException;
     method public java.lang.String getCanonicalHostName();
     method public java.lang.String getHostAddress();
@@ -48997,8 +49177,8 @@
   }
 
   public class NoRouteToHostException extends java.net.SocketException {
-    ctor public NoRouteToHostException();
     ctor public NoRouteToHostException(java.lang.String);
+    ctor public NoRouteToHostException();
   }
 
   public final class PasswordAuthentication {
@@ -49008,13 +49188,19 @@
   }
 
   public class PortUnreachableException extends java.net.SocketException {
-    ctor public PortUnreachableException();
     ctor public PortUnreachableException(java.lang.String);
+    ctor public PortUnreachableException();
+    ctor public PortUnreachableException(java.lang.String, java.lang.Throwable);
   }
 
   public class ProtocolException extends java.io.IOException {
-    ctor public ProtocolException();
     ctor public ProtocolException(java.lang.String);
+    ctor public ProtocolException();
+    ctor public ProtocolException(java.lang.String, java.lang.Throwable);
+  }
+
+  public abstract interface ProtocolFamily {
+    method public abstract java.lang.String name();
   }
 
   public class Proxy {
@@ -49045,9 +49231,9 @@
   public abstract class ResponseCache {
     ctor public ResponseCache();
     method public abstract java.net.CacheResponse get(java.net.URI, java.lang.String, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException;
-    method public static java.net.ResponseCache getDefault();
+    method public static synchronized java.net.ResponseCache getDefault();
     method public abstract java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException;
-    method public static void setDefault(java.net.ResponseCache);
+    method public static synchronized void setDefault(java.net.ResponseCache);
   }
 
   public abstract class SecureCacheResponse extends java.net.CacheResponse {
@@ -49072,14 +49258,14 @@
     method public java.net.InetAddress getInetAddress();
     method public int getLocalPort();
     method public java.net.SocketAddress getLocalSocketAddress();
-    method public int getReceiveBufferSize() throws java.net.SocketException;
+    method public synchronized int getReceiveBufferSize() throws java.net.SocketException;
     method public boolean getReuseAddress() throws java.net.SocketException;
     method public synchronized int getSoTimeout() throws java.io.IOException;
     method protected final void implAccept(java.net.Socket) throws java.io.IOException;
     method public boolean isBound();
     method public boolean isClosed();
     method public void setPerformancePreferences(int, int, int);
-    method public void setReceiveBufferSize(int) throws java.net.SocketException;
+    method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException;
     method public void setReuseAddress(boolean) throws java.net.SocketException;
     method public synchronized void setSoTimeout(int) throws java.net.SocketException;
     method public static synchronized void setSocketFactory(java.net.SocketImplFactory) throws java.io.IOException;
@@ -49088,13 +49274,13 @@
   public class Socket implements java.io.Closeable {
     ctor public Socket();
     ctor public Socket(java.net.Proxy);
-    ctor public Socket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException;
-    ctor public Socket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException;
-    ctor public deprecated Socket(java.lang.String, int, boolean) throws java.io.IOException;
-    ctor public Socket(java.net.InetAddress, int) throws java.io.IOException;
-    ctor public Socket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
-    ctor public deprecated Socket(java.net.InetAddress, int, boolean) throws java.io.IOException;
     ctor protected Socket(java.net.SocketImpl) throws java.net.SocketException;
+    ctor public Socket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException;
+    ctor public Socket(java.net.InetAddress, int) throws java.io.IOException;
+    ctor public Socket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException;
+    ctor public Socket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    ctor public deprecated Socket(java.lang.String, int, boolean) throws java.io.IOException;
+    ctor public deprecated Socket(java.net.InetAddress, int, boolean) throws java.io.IOException;
     method public void bind(java.net.SocketAddress) throws java.io.IOException;
     method public synchronized void close() throws java.io.IOException;
     method public void connect(java.net.SocketAddress) throws java.io.IOException;
@@ -49143,8 +49329,10 @@
   }
 
   public class SocketException extends java.io.IOException {
-    ctor public SocketException();
     ctor public SocketException(java.lang.String);
+    ctor public SocketException();
+    ctor public SocketException(java.lang.Throwable);
+    ctor public SocketException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract class SocketImpl implements java.net.SocketOptions {
@@ -49157,7 +49345,7 @@
     method protected abstract void connect(java.net.InetAddress, int) throws java.io.IOException;
     method protected abstract void connect(java.net.SocketAddress, int) throws java.io.IOException;
     method protected abstract void create(boolean) throws java.io.IOException;
-    method protected java.io.FileDescriptor getFileDescriptor();
+    method public java.io.FileDescriptor getFileDescriptor();
     method protected java.net.InetAddress getInetAddress();
     method protected abstract java.io.InputStream getInputStream() throws java.io.IOException;
     method protected int getLocalPort();
@@ -49179,6 +49367,11 @@
     method public abstract java.net.SocketImpl createSocketImpl();
   }
 
+  public abstract interface SocketOption {
+    method public abstract java.lang.String name();
+    method public abstract java.lang.Class<T> type();
+  }
+
   public abstract interface SocketOptions {
     method public abstract java.lang.Object getOption(int) throws java.net.SocketException;
     method public abstract void setOption(int, java.lang.Object) throws java.net.SocketException;
@@ -49200,21 +49393,46 @@
 
   public final class SocketPermission extends java.security.Permission implements java.io.Serializable {
     ctor public SocketPermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
   public class SocketTimeoutException extends java.io.InterruptedIOException {
-    ctor public SocketTimeoutException();
     ctor public SocketTimeoutException(java.lang.String);
+    ctor public SocketTimeoutException();
+    ctor public SocketTimeoutException(java.lang.Throwable);
+    ctor public SocketTimeoutException(java.lang.String, java.lang.Throwable);
+  }
+
+  public final class StandardProtocolFamily extends java.lang.Enum implements java.net.ProtocolFamily {
+    method public static java.net.StandardProtocolFamily valueOf(java.lang.String);
+    method public static final java.net.StandardProtocolFamily[] values();
+    enum_constant public static final java.net.StandardProtocolFamily INET;
+    enum_constant public static final java.net.StandardProtocolFamily INET6;
+  }
+
+  public final class StandardSocketOptions {
+    field public static final java.net.SocketOption<java.net.NetworkInterface> IP_MULTICAST_IF;
+    field public static final java.net.SocketOption<java.lang.Boolean> IP_MULTICAST_LOOP;
+    field public static final java.net.SocketOption<java.lang.Integer> IP_MULTICAST_TTL;
+    field public static final java.net.SocketOption<java.lang.Integer> IP_TOS;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_BROADCAST;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_KEEPALIVE;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_LINGER;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_RCVBUF;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_REUSEADDR;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_SNDBUF;
+    field public static final java.net.SocketOption<java.lang.Boolean> TCP_NODELAY;
   }
 
   public final class URI implements java.lang.Comparable java.io.Serializable {
     ctor public URI(java.lang.String) throws java.net.URISyntaxException;
-    ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
     ctor public URI(java.lang.String, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
-    ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
     ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
+    ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
+    ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
     method public int compareTo(java.net.URI);
     method public static java.net.URI create(java.lang.String);
     method public java.lang.String getAuthority();
@@ -49252,12 +49470,12 @@
   }
 
   public final class URL implements java.io.Serializable {
+    ctor public URL(java.lang.String, java.lang.String, int, java.lang.String) throws java.net.MalformedURLException;
+    ctor public URL(java.lang.String, java.lang.String, java.lang.String) throws java.net.MalformedURLException;
+    ctor public URL(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
     ctor public URL(java.lang.String) throws java.net.MalformedURLException;
     ctor public URL(java.net.URL, java.lang.String) throws java.net.MalformedURLException;
     ctor public URL(java.net.URL, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
-    ctor public URL(java.lang.String, java.lang.String, java.lang.String) throws java.net.MalformedURLException;
-    ctor public URL(java.lang.String, java.lang.String, int, java.lang.String) throws java.net.MalformedURLException;
-    ctor public URL(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
     method public java.lang.String getAuthority();
     method public final java.lang.Object getContent() throws java.io.IOException;
     method public final java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException;
@@ -49276,22 +49494,24 @@
     method public boolean sameFile(java.net.URL);
     method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String);
     method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
-    method public static synchronized void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory);
+    method public static void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory);
     method public java.lang.String toExternalForm();
     method public java.net.URI toURI() throws java.net.URISyntaxException;
+    method public java.net.URI toURILenient() throws java.net.URISyntaxException;
   }
 
-  public class URLClassLoader extends java.security.SecureClassLoader {
-    ctor public URLClassLoader(java.net.URL[]);
+  public class URLClassLoader extends java.security.SecureClassLoader implements java.io.Closeable {
     ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader);
+    ctor public URLClassLoader(java.net.URL[]);
     ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader, java.net.URLStreamHandlerFactory);
     method protected void addURL(java.net.URL);
+    method public void close() throws java.io.IOException;
     method protected java.lang.Package definePackage(java.lang.String, java.util.jar.Manifest, java.net.URL) throws java.lang.IllegalArgumentException;
     method public java.net.URL findResource(java.lang.String);
     method public java.util.Enumeration<java.net.URL> findResources(java.lang.String) throws java.io.IOException;
     method public java.net.URL[] getURLs();
-    method public static java.net.URLClassLoader newInstance(java.net.URL[]);
     method public static java.net.URLClassLoader newInstance(java.net.URL[], java.lang.ClassLoader);
+    method public static java.net.URLClassLoader newInstance(java.net.URL[]);
   }
 
   public abstract class URLConnection {
@@ -49304,6 +49524,7 @@
     method public java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException;
     method public java.lang.String getContentEncoding();
     method public int getContentLength();
+    method public long getContentLengthLong();
     method public java.lang.String getContentType();
     method public long getDate();
     method public static boolean getDefaultAllowUserInteraction();
@@ -49312,12 +49533,13 @@
     method public boolean getDoInput();
     method public boolean getDoOutput();
     method public long getExpiration();
-    method public static java.net.FileNameMap getFileNameMap();
-    method public java.lang.String getHeaderField(int);
+    method public static synchronized java.net.FileNameMap getFileNameMap();
     method public java.lang.String getHeaderField(java.lang.String);
+    method public java.lang.String getHeaderField(int);
     method public long getHeaderFieldDate(java.lang.String, long);
     method public int getHeaderFieldInt(java.lang.String, int);
     method public java.lang.String getHeaderFieldKey(int);
+    method public long getHeaderFieldLong(java.lang.String, long);
     method public java.util.Map<java.lang.String, java.util.List<java.lang.String>> getHeaderFields();
     method public long getIfModifiedSince();
     method public java.io.InputStream getInputStream() throws java.io.IOException;
@@ -49368,15 +49590,15 @@
     ctor public URLStreamHandler();
     method protected boolean equals(java.net.URL, java.net.URL);
     method protected int getDefaultPort();
-    method protected java.net.InetAddress getHostAddress(java.net.URL);
+    method protected synchronized java.net.InetAddress getHostAddress(java.net.URL);
     method protected int hashCode(java.net.URL);
     method protected boolean hostsEqual(java.net.URL, java.net.URL);
     method protected abstract java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException;
     method protected java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException;
     method protected void parseURL(java.net.URL, java.lang.String, int, int);
     method protected boolean sameFile(java.net.URL, java.net.URL);
-    method protected deprecated void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String);
     method protected void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
+    method protected deprecated void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String);
     method protected java.lang.String toExternalForm(java.net.URL);
   }
 
@@ -49385,8 +49607,8 @@
   }
 
   public class UnknownHostException extends java.io.IOException {
-    ctor public UnknownHostException();
     ctor public UnknownHostException(java.lang.String);
+    ctor public UnknownHostException();
   }
 
   public class UnknownServiceException extends java.io.IOException {
@@ -49442,9 +49664,9 @@
     method public int compareTo(java.nio.ByteBuffer);
     method public abstract java.nio.ByteBuffer duplicate();
     method public abstract byte get();
-    method public java.nio.ByteBuffer get(byte[]);
-    method public java.nio.ByteBuffer get(byte[], int, int);
     method public abstract byte get(int);
+    method public java.nio.ByteBuffer get(byte[], int, int);
+    method public java.nio.ByteBuffer get(byte[]);
     method public abstract char getChar();
     method public abstract char getChar(int);
     method public abstract double getDouble();
@@ -49462,10 +49684,10 @@
     method public final java.nio.ByteOrder order();
     method public final java.nio.ByteBuffer order(java.nio.ByteOrder);
     method public abstract java.nio.ByteBuffer put(byte);
-    method public final java.nio.ByteBuffer put(byte[]);
-    method public java.nio.ByteBuffer put(byte[], int, int);
-    method public java.nio.ByteBuffer put(java.nio.ByteBuffer);
     method public abstract java.nio.ByteBuffer put(int, byte);
+    method public java.nio.ByteBuffer put(java.nio.ByteBuffer);
+    method public java.nio.ByteBuffer put(byte[], int, int);
+    method public final java.nio.ByteBuffer put(byte[]);
     method public abstract java.nio.ByteBuffer putChar(char);
     method public abstract java.nio.ByteBuffer putChar(int, char);
     method public abstract java.nio.ByteBuffer putDouble(double);
@@ -49479,8 +49701,8 @@
     method public abstract java.nio.ByteBuffer putShort(short);
     method public abstract java.nio.ByteBuffer putShort(int, short);
     method public abstract java.nio.ByteBuffer slice();
-    method public static java.nio.ByteBuffer wrap(byte[]);
     method public static java.nio.ByteBuffer wrap(byte[], int, int);
+    method public static java.nio.ByteBuffer wrap(byte[]);
   }
 
   public final class ByteOrder {
@@ -49491,9 +49713,9 @@
 
   public abstract class CharBuffer extends java.nio.Buffer implements java.lang.Appendable java.lang.CharSequence java.lang.Comparable java.lang.Readable {
     method public static java.nio.CharBuffer allocate(int);
-    method public java.nio.CharBuffer append(char);
     method public java.nio.CharBuffer append(java.lang.CharSequence);
     method public java.nio.CharBuffer append(java.lang.CharSequence, int, int);
+    method public java.nio.CharBuffer append(char);
     method public final char[] array();
     method public final int arrayOffset();
     method public abstract java.nio.CharBuffer asReadOnlyBuffer();
@@ -49502,27 +49724,27 @@
     method public int compareTo(java.nio.CharBuffer);
     method public abstract java.nio.CharBuffer duplicate();
     method public abstract char get();
-    method public java.nio.CharBuffer get(char[]);
-    method public java.nio.CharBuffer get(char[], int, int);
     method public abstract char get(int);
+    method public java.nio.CharBuffer get(char[], int, int);
+    method public java.nio.CharBuffer get(char[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public final int length();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.CharBuffer put(char);
-    method public final java.nio.CharBuffer put(char[]);
-    method public java.nio.CharBuffer put(char[], int, int);
-    method public java.nio.CharBuffer put(java.nio.CharBuffer);
     method public abstract java.nio.CharBuffer put(int, char);
-    method public final java.nio.CharBuffer put(java.lang.String);
+    method public java.nio.CharBuffer put(java.nio.CharBuffer);
+    method public java.nio.CharBuffer put(char[], int, int);
+    method public final java.nio.CharBuffer put(char[]);
     method public java.nio.CharBuffer put(java.lang.String, int, int);
+    method public final java.nio.CharBuffer put(java.lang.String);
     method public int read(java.nio.CharBuffer) throws java.io.IOException;
     method public abstract java.nio.CharBuffer slice();
     method public abstract java.nio.CharBuffer subSequence(int, int);
-    method public static java.nio.CharBuffer wrap(char[]);
     method public static java.nio.CharBuffer wrap(char[], int, int);
-    method public static java.nio.CharBuffer wrap(java.lang.CharSequence);
+    method public static java.nio.CharBuffer wrap(char[]);
     method public static java.nio.CharBuffer wrap(java.lang.CharSequence, int, int);
+    method public static java.nio.CharBuffer wrap(java.lang.CharSequence);
   }
 
   public abstract class DoubleBuffer extends java.nio.Buffer implements java.lang.Comparable {
@@ -49534,20 +49756,20 @@
     method public int compareTo(java.nio.DoubleBuffer);
     method public abstract java.nio.DoubleBuffer duplicate();
     method public abstract double get();
-    method public java.nio.DoubleBuffer get(double[]);
-    method public java.nio.DoubleBuffer get(double[], int, int);
     method public abstract double get(int);
+    method public java.nio.DoubleBuffer get(double[], int, int);
+    method public java.nio.DoubleBuffer get(double[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.DoubleBuffer put(double);
-    method public final java.nio.DoubleBuffer put(double[]);
-    method public java.nio.DoubleBuffer put(double[], int, int);
-    method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer);
     method public abstract java.nio.DoubleBuffer put(int, double);
+    method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer);
+    method public java.nio.DoubleBuffer put(double[], int, int);
+    method public final java.nio.DoubleBuffer put(double[]);
     method public abstract java.nio.DoubleBuffer slice();
-    method public static java.nio.DoubleBuffer wrap(double[]);
     method public static java.nio.DoubleBuffer wrap(double[], int, int);
+    method public static java.nio.DoubleBuffer wrap(double[]);
   }
 
   public abstract class FloatBuffer extends java.nio.Buffer implements java.lang.Comparable {
@@ -49559,20 +49781,20 @@
     method public int compareTo(java.nio.FloatBuffer);
     method public abstract java.nio.FloatBuffer duplicate();
     method public abstract float get();
-    method public java.nio.FloatBuffer get(float[]);
-    method public java.nio.FloatBuffer get(float[], int, int);
     method public abstract float get(int);
+    method public java.nio.FloatBuffer get(float[], int, int);
+    method public java.nio.FloatBuffer get(float[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.FloatBuffer put(float);
-    method public final java.nio.FloatBuffer put(float[]);
-    method public java.nio.FloatBuffer put(float[], int, int);
-    method public java.nio.FloatBuffer put(java.nio.FloatBuffer);
     method public abstract java.nio.FloatBuffer put(int, float);
+    method public java.nio.FloatBuffer put(java.nio.FloatBuffer);
+    method public java.nio.FloatBuffer put(float[], int, int);
+    method public final java.nio.FloatBuffer put(float[]);
     method public abstract java.nio.FloatBuffer slice();
-    method public static java.nio.FloatBuffer wrap(float[]);
     method public static java.nio.FloatBuffer wrap(float[], int, int);
+    method public static java.nio.FloatBuffer wrap(float[]);
   }
 
   public abstract class IntBuffer extends java.nio.Buffer implements java.lang.Comparable {
@@ -49584,20 +49806,20 @@
     method public int compareTo(java.nio.IntBuffer);
     method public abstract java.nio.IntBuffer duplicate();
     method public abstract int get();
-    method public java.nio.IntBuffer get(int[]);
-    method public java.nio.IntBuffer get(int[], int, int);
     method public abstract int get(int);
+    method public java.nio.IntBuffer get(int[], int, int);
+    method public java.nio.IntBuffer get(int[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.IntBuffer put(int);
-    method public final java.nio.IntBuffer put(int[]);
-    method public java.nio.IntBuffer put(int[], int, int);
-    method public java.nio.IntBuffer put(java.nio.IntBuffer);
     method public abstract java.nio.IntBuffer put(int, int);
+    method public java.nio.IntBuffer put(java.nio.IntBuffer);
+    method public java.nio.IntBuffer put(int[], int, int);
+    method public final java.nio.IntBuffer put(int[]);
     method public abstract java.nio.IntBuffer slice();
-    method public static java.nio.IntBuffer wrap(int[]);
     method public static java.nio.IntBuffer wrap(int[], int, int);
+    method public static java.nio.IntBuffer wrap(int[]);
   }
 
   public class InvalidMarkException extends java.lang.IllegalStateException {
@@ -49613,20 +49835,20 @@
     method public int compareTo(java.nio.LongBuffer);
     method public abstract java.nio.LongBuffer duplicate();
     method public abstract long get();
-    method public java.nio.LongBuffer get(long[]);
-    method public java.nio.LongBuffer get(long[], int, int);
     method public abstract long get(int);
+    method public java.nio.LongBuffer get(long[], int, int);
+    method public java.nio.LongBuffer get(long[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.LongBuffer put(long);
-    method public final java.nio.LongBuffer put(long[]);
-    method public java.nio.LongBuffer put(long[], int, int);
-    method public java.nio.LongBuffer put(java.nio.LongBuffer);
     method public abstract java.nio.LongBuffer put(int, long);
+    method public java.nio.LongBuffer put(java.nio.LongBuffer);
+    method public java.nio.LongBuffer put(long[], int, int);
+    method public final java.nio.LongBuffer put(long[]);
     method public abstract java.nio.LongBuffer slice();
-    method public static java.nio.LongBuffer wrap(long[]);
     method public static java.nio.LongBuffer wrap(long[], int, int);
+    method public static java.nio.LongBuffer wrap(long[]);
   }
 
   public abstract class MappedByteBuffer extends java.nio.ByteBuffer {
@@ -49648,34 +49870,119 @@
     method public int compareTo(java.nio.ShortBuffer);
     method public abstract java.nio.ShortBuffer duplicate();
     method public abstract short get();
-    method public java.nio.ShortBuffer get(short[]);
-    method public java.nio.ShortBuffer get(short[], int, int);
     method public abstract short get(int);
+    method public java.nio.ShortBuffer get(short[], int, int);
+    method public java.nio.ShortBuffer get(short[]);
     method public final boolean hasArray();
     method public abstract boolean isDirect();
     method public abstract java.nio.ByteOrder order();
     method public abstract java.nio.ShortBuffer put(short);
-    method public final java.nio.ShortBuffer put(short[]);
-    method public java.nio.ShortBuffer put(short[], int, int);
-    method public java.nio.ShortBuffer put(java.nio.ShortBuffer);
     method public abstract java.nio.ShortBuffer put(int, short);
+    method public java.nio.ShortBuffer put(java.nio.ShortBuffer);
+    method public java.nio.ShortBuffer put(short[], int, int);
+    method public final java.nio.ShortBuffer put(short[]);
     method public abstract java.nio.ShortBuffer slice();
-    method public static java.nio.ShortBuffer wrap(short[]);
     method public static java.nio.ShortBuffer wrap(short[], int, int);
+    method public static java.nio.ShortBuffer wrap(short[]);
   }
 
 }
 
 package java.nio.channels {
 
+  public class AcceptPendingException extends java.lang.IllegalStateException {
+    ctor public AcceptPendingException();
+  }
+
+  public class AlreadyBoundException extends java.lang.IllegalStateException {
+    ctor public AlreadyBoundException();
+  }
+
   public class AlreadyConnectedException extends java.lang.IllegalStateException {
     ctor public AlreadyConnectedException();
   }
 
+  public abstract interface AsynchronousByteChannel implements java.nio.channels.AsynchronousChannel {
+    method public abstract void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
+    method public abstract void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
+  }
+
+  public abstract interface AsynchronousChannel implements java.nio.channels.Channel {
+    method public abstract void close() throws java.io.IOException;
+  }
+
+  public abstract class AsynchronousChannelGroup {
+    ctor protected AsynchronousChannelGroup(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public abstract boolean isShutdown();
+    method public abstract boolean isTerminated();
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract void shutdown();
+    method public abstract void shutdownNow() throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withCachedThreadPool(java.util.concurrent.ExecutorService, int) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withFixedThreadPool(int, java.util.concurrent.ThreadFactory) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withThreadPool(java.util.concurrent.ExecutorService) throws java.io.IOException;
+  }
+
   public class AsynchronousCloseException extends java.nio.channels.ClosedChannelException {
     ctor public AsynchronousCloseException();
   }
 
+  public abstract class AsynchronousFileChannel implements java.nio.channels.AsynchronousChannel {
+    ctor protected AsynchronousFileChannel();
+    method public abstract void force(boolean) throws java.io.IOException;
+    method public abstract void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+    method public final void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+    method public abstract java.util.concurrent.Future<java.nio.channels.FileLock> lock(long, long, boolean);
+    method public final java.util.concurrent.Future<java.nio.channels.FileLock> lock();
+    method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer, long);
+    method public abstract long size() throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousFileChannel truncate(long) throws java.io.IOException;
+    method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
+    method public abstract void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer, long);
+  }
+
+  public abstract class AsynchronousServerSocketChannel implements java.nio.channels.AsynchronousChannel java.nio.channels.NetworkChannel {
+    ctor protected AsynchronousServerSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel, ? super A>);
+    method public abstract java.util.concurrent.Future<java.nio.channels.AsynchronousSocketChannel> accept();
+    method public final java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousServerSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousServerSocketChannel open() throws java.io.IOException;
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+  }
+
+  public abstract class AsynchronousSocketChannel implements java.nio.channels.AsynchronousByteChannel java.nio.channels.NetworkChannel {
+    ctor protected AsynchronousSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract java.nio.channels.AsynchronousSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Void> connect(java.net.SocketAddress);
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousSocketChannel open() throws java.io.IOException;
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public final void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
+    method public abstract void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+    method public abstract java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel shutdownInput() throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel shutdownOutput() throws java.io.IOException;
+    method public abstract void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public final void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
+    method public abstract void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+  }
+
   public abstract interface ByteChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel {
   }
 
@@ -49692,7 +49999,9 @@
     method public static java.nio.channels.ReadableByteChannel newChannel(java.io.InputStream);
     method public static java.nio.channels.WritableByteChannel newChannel(java.io.OutputStream);
     method public static java.io.InputStream newInputStream(java.nio.channels.ReadableByteChannel);
+    method public static java.io.InputStream newInputStream(java.nio.channels.AsynchronousByteChannel);
     method public static java.io.OutputStream newOutputStream(java.nio.channels.WritableByteChannel);
+    method public static java.io.OutputStream newOutputStream(java.nio.channels.AsynchronousByteChannel);
     method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.nio.charset.CharsetDecoder, int);
     method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.lang.String);
     method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, java.nio.charset.CharsetEncoder, int);
@@ -49711,50 +50020,61 @@
     ctor public ClosedSelectorException();
   }
 
+  public abstract interface CompletionHandler {
+    method public abstract void completed(V, A);
+    method public abstract void failed(java.lang.Throwable, A);
+  }
+
   public class ConnectionPendingException extends java.lang.IllegalStateException {
     ctor public ConnectionPendingException();
   }
 
-  public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel {
+  public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.MulticastChannel java.nio.channels.ScatteringByteChannel {
     ctor protected DatagramChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.DatagramChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.nio.channels.DatagramChannel connect(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.nio.channels.DatagramChannel disconnect() throws java.io.IOException;
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
     method public abstract boolean isConnected();
     method public static java.nio.channels.DatagramChannel open() throws java.io.IOException;
+    method public static java.nio.channels.DatagramChannel open(java.net.ProtocolFamily) throws java.io.IOException;
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
-    method public final synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract java.net.SocketAddress receive(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract int send(java.nio.ByteBuffer, java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.DatagramSocket socket();
     method public final int validOps();
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
-    method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
   }
 
-  public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel {
+  public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel java.nio.channels.SeekableByteChannel {
     ctor protected FileChannel();
     method public abstract void force(boolean) throws java.io.IOException;
-    method public final java.nio.channels.FileLock lock() throws java.io.IOException;
     method public abstract java.nio.channels.FileLock lock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock lock() throws java.io.IOException;
     method public abstract java.nio.MappedByteBuffer map(java.nio.channels.FileChannel.MapMode, long, long) throws java.io.IOException;
+    method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
     method public abstract long position() throws java.io.IOException;
     method public abstract java.nio.channels.FileChannel position(long) throws java.io.IOException;
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
-    method public abstract int read(java.nio.ByteBuffer, long) throws java.io.IOException;
-    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract int read(java.nio.ByteBuffer, long) throws java.io.IOException;
     method public abstract long size() throws java.io.IOException;
     method public abstract long transferFrom(java.nio.channels.ReadableByteChannel, long, long) throws java.io.IOException;
     method public abstract long transferTo(long, long, java.nio.channels.WritableByteChannel) throws java.io.IOException;
     method public abstract java.nio.channels.FileChannel truncate(long) throws java.io.IOException;
-    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
     method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
-    method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException;
-    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException;
   }
 
   public static class FileChannel.MapMode {
@@ -49765,6 +50085,8 @@
 
   public abstract class FileLock implements java.lang.AutoCloseable {
     ctor protected FileLock(java.nio.channels.FileChannel, long, long, boolean);
+    ctor protected FileLock(java.nio.channels.AsynchronousFileChannel, long, long, boolean);
+    method public java.nio.channels.Channel acquiredBy();
     method public final java.nio.channels.FileChannel channel();
     method public final void close() throws java.io.IOException;
     method public final boolean isShared();
@@ -49781,22 +50103,56 @@
   }
 
   public abstract interface GatheringByteChannel implements java.nio.channels.WritableByteChannel {
-    method public abstract long write(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public abstract long write(java.nio.ByteBuffer[]) throws java.io.IOException;
   }
 
   public class IllegalBlockingModeException extends java.lang.IllegalStateException {
     ctor public IllegalBlockingModeException();
   }
 
+  public class IllegalChannelGroupException extends java.lang.IllegalArgumentException {
+    ctor public IllegalChannelGroupException();
+  }
+
   public class IllegalSelectorException extends java.lang.IllegalArgumentException {
     ctor public IllegalSelectorException();
   }
 
+  public class InterruptedByTimeoutException extends java.io.IOException {
+    ctor public InterruptedByTimeoutException();
+  }
+
   public abstract interface InterruptibleChannel implements java.nio.channels.Channel {
     method public abstract void close() throws java.io.IOException;
   }
 
+  public abstract class MembershipKey {
+    ctor protected MembershipKey();
+    method public abstract java.nio.channels.MembershipKey block(java.net.InetAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.MulticastChannel channel();
+    method public abstract void drop();
+    method public abstract java.net.InetAddress group();
+    method public abstract boolean isValid();
+    method public abstract java.net.NetworkInterface networkInterface();
+    method public abstract java.net.InetAddress sourceAddress();
+    method public abstract java.nio.channels.MembershipKey unblock(java.net.InetAddress);
+  }
+
+  public abstract interface MulticastChannel implements java.nio.channels.NetworkChannel {
+    method public abstract void close() throws java.io.IOException;
+    method public abstract java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method public abstract java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface, java.net.InetAddress) throws java.io.IOException;
+  }
+
+  public abstract interface NetworkChannel implements java.nio.channels.Channel {
+    method public abstract java.nio.channels.NetworkChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.net.SocketAddress getLocalAddress() throws java.io.IOException;
+    method public abstract T getOption(java.net.SocketOption<T>) throws java.io.IOException;
+    method public abstract java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.util.Set<java.net.SocketOption<?>> supportedOptions();
+  }
+
   public class NoConnectionPendingException extends java.lang.IllegalStateException {
     ctor public NoConnectionPendingException();
   }
@@ -49838,13 +50194,26 @@
     method public final int validOps();
   }
 
+  public class ReadPendingException extends java.lang.IllegalStateException {
+    ctor public ReadPendingException();
+  }
+
   public abstract interface ReadableByteChannel implements java.nio.channels.Channel {
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
   }
 
   public abstract interface ScatteringByteChannel implements java.nio.channels.ReadableByteChannel {
-    method public abstract long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public abstract long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public abstract interface SeekableByteChannel implements java.nio.channels.ByteChannel {
+    method public abstract long position() throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel position(long) throws java.io.IOException;
+    method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
+    method public abstract long size() throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel truncate(long) throws java.io.IOException;
+    method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
   }
 
   public abstract class SelectableChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.Channel {
@@ -49855,8 +50224,8 @@
     method public abstract boolean isRegistered();
     method public abstract java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
     method public abstract java.nio.channels.spi.SelectorProvider provider();
-    method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException;
     method public abstract java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException;
+    method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException;
     method public abstract int validOps();
   }
 
@@ -49888,37 +50257,49 @@
     method public abstract java.util.Set<java.nio.channels.SelectionKey> keys();
     method public static java.nio.channels.Selector open() throws java.io.IOException;
     method public abstract java.nio.channels.spi.SelectorProvider provider();
-    method public abstract int select() throws java.io.IOException;
     method public abstract int select(long) throws java.io.IOException;
+    method public abstract int select() throws java.io.IOException;
     method public abstract int selectNow() throws java.io.IOException;
     method public abstract java.util.Set<java.nio.channels.SelectionKey> selectedKeys();
     method public abstract java.nio.channels.Selector wakeup();
   }
 
-  public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel {
+  public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.NetworkChannel {
     ctor protected ServerSocketChannel(java.nio.channels.spi.SelectorProvider);
     method public abstract java.nio.channels.SocketChannel accept() throws java.io.IOException;
+    method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
     method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException;
+    method public abstract java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.ServerSocket socket();
     method public final int validOps();
   }
 
-  public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel {
+  public class ShutdownChannelGroupException extends java.lang.IllegalStateException {
+    ctor public ShutdownChannelGroupException();
+  }
+
+  public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.NetworkChannel java.nio.channels.ScatteringByteChannel {
     ctor protected SocketChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.SocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract boolean connect(java.net.SocketAddress) throws java.io.IOException;
     method public abstract boolean finishConnect() throws java.io.IOException;
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
     method public abstract boolean isConnected();
     method public abstract boolean isConnectionPending();
     method public static java.nio.channels.SocketChannel open() throws java.io.IOException;
     method public static java.nio.channels.SocketChannel open(java.net.SocketAddress) throws java.io.IOException;
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
-    method public final synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel shutdownInput() throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel shutdownOutput() throws java.io.IOException;
     method public abstract java.net.Socket socket();
     method public final int validOps();
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
-    method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
   }
 
   public class UnresolvedAddressException extends java.lang.IllegalArgumentException {
@@ -49933,6 +50314,10 @@
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
   }
 
+  public class WritePendingException extends java.lang.IllegalStateException {
+    ctor public WritePendingException();
+  }
+
 }
 
 package java.nio.channels.spi {
@@ -49943,19 +50328,19 @@
     method public final void close() throws java.io.IOException;
     method protected final void end(boolean) throws java.nio.channels.AsynchronousCloseException;
     method protected abstract void implCloseChannel() throws java.io.IOException;
-    method public final synchronized boolean isOpen();
+    method public final boolean isOpen();
   }
 
   public abstract class AbstractSelectableChannel extends java.nio.channels.SelectableChannel {
     ctor protected AbstractSelectableChannel(java.nio.channels.spi.SelectorProvider);
     method public final java.lang.Object blockingLock();
     method public final java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException;
-    method protected final synchronized void implCloseChannel() throws java.io.IOException;
+    method protected final void implCloseChannel() throws java.io.IOException;
     method protected abstract void implCloseSelectableChannel() throws java.io.IOException;
     method protected abstract void implConfigureBlocking(boolean) throws java.io.IOException;
     method public final boolean isBlocking();
-    method public final synchronized boolean isRegistered();
-    method public final synchronized java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
+    method public final boolean isRegistered();
+    method public final java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
     method public final java.nio.channels.spi.SelectorProvider provider();
     method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException;
   }
@@ -49979,15 +50364,25 @@
     method protected abstract java.nio.channels.SelectionKey register(java.nio.channels.spi.AbstractSelectableChannel, int, java.lang.Object);
   }
 
+  public abstract class AsynchronousChannelProvider {
+    ctor protected AsynchronousChannelProvider();
+    method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(int, java.util.concurrent.ThreadFactory) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(java.util.concurrent.ExecutorService, int) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel openAsynchronousSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.spi.AsynchronousChannelProvider provider();
+  }
+
   public abstract class SelectorProvider {
     ctor protected SelectorProvider();
     method public java.nio.channels.Channel inheritedChannel() throws java.io.IOException;
     method public abstract java.nio.channels.DatagramChannel openDatagramChannel() throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel openDatagramChannel(java.net.ProtocolFamily) throws java.io.IOException;
     method public abstract java.nio.channels.Pipe openPipe() throws java.io.IOException;
     method public abstract java.nio.channels.spi.AbstractSelector openSelector() throws java.io.IOException;
     method public abstract java.nio.channels.ServerSocketChannel openServerSocketChannel() throws java.io.IOException;
     method public abstract java.nio.channels.SocketChannel openSocketChannel() throws java.io.IOException;
-    method public static synchronized java.nio.channels.spi.SelectorProvider provider();
+    method public static java.nio.channels.spi.SelectorProvider provider();
   }
 
 }
@@ -50026,8 +50421,8 @@
     ctor protected CharsetDecoder(java.nio.charset.Charset, float, float);
     method public final float averageCharsPerByte();
     method public final java.nio.charset.Charset charset();
-    method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException;
     method public final java.nio.charset.CoderResult decode(java.nio.ByteBuffer, java.nio.CharBuffer, boolean);
+    method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException;
     method protected abstract java.nio.charset.CoderResult decodeLoop(java.nio.ByteBuffer, java.nio.CharBuffer);
     method public java.nio.charset.Charset detectedCharset();
     method public final java.nio.charset.CoderResult flush(java.nio.CharBuffer);
@@ -50049,14 +50444,14 @@
   }
 
   public abstract class CharsetEncoder {
-    ctor protected CharsetEncoder(java.nio.charset.Charset, float, float);
     ctor protected CharsetEncoder(java.nio.charset.Charset, float, float, byte[]);
+    ctor protected CharsetEncoder(java.nio.charset.Charset, float, float);
     method public final float averageBytesPerChar();
     method public boolean canEncode(char);
     method public boolean canEncode(java.lang.CharSequence);
     method public final java.nio.charset.Charset charset();
-    method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException;
     method public final java.nio.charset.CoderResult encode(java.nio.CharBuffer, java.nio.ByteBuffer, boolean);
+    method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException;
     method protected abstract java.nio.charset.CoderResult encodeLoop(java.nio.CharBuffer, java.nio.ByteBuffer);
     method public final java.nio.charset.CoderResult flush(java.nio.ByteBuffer);
     method protected java.nio.charset.CoderResult implFlush(java.nio.ByteBuffer);
@@ -50085,10 +50480,10 @@
     method public boolean isOverflow();
     method public boolean isUnderflow();
     method public boolean isUnmappable();
-    method public int length() throws java.lang.UnsupportedOperationException;
-    method public static synchronized java.nio.charset.CoderResult malformedForLength(int) throws java.lang.IllegalArgumentException;
-    method public void throwException() throws java.nio.BufferOverflowException, java.nio.BufferUnderflowException, java.nio.charset.CharacterCodingException, java.nio.charset.MalformedInputException, java.nio.charset.UnmappableCharacterException;
-    method public static synchronized java.nio.charset.CoderResult unmappableForLength(int) throws java.lang.IllegalArgumentException;
+    method public int length();
+    method public static java.nio.charset.CoderResult malformedForLength(int);
+    method public void throwException() throws java.nio.charset.CharacterCodingException;
+    method public static java.nio.charset.CoderResult unmappableForLength(int);
     field public static final java.nio.charset.CoderResult OVERFLOW;
     field public static final java.nio.charset.CoderResult UNDERFLOW;
   }
@@ -50140,11 +50535,597 @@
 
 }
 
+package java.nio.file {
+
+  public class AccessDeniedException extends java.nio.file.FileSystemException {
+    ctor public AccessDeniedException(java.lang.String);
+    ctor public AccessDeniedException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public final class AccessMode extends java.lang.Enum {
+    method public static java.nio.file.AccessMode valueOf(java.lang.String);
+    method public static final java.nio.file.AccessMode[] values();
+    enum_constant public static final java.nio.file.AccessMode EXECUTE;
+    enum_constant public static final java.nio.file.AccessMode READ;
+    enum_constant public static final java.nio.file.AccessMode WRITE;
+  }
+
+  public class AtomicMoveNotSupportedException extends java.nio.file.FileSystemException {
+    ctor public AtomicMoveNotSupportedException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public class ClosedDirectoryStreamException extends java.lang.IllegalStateException {
+    ctor public ClosedDirectoryStreamException();
+  }
+
+  public class ClosedFileSystemException extends java.lang.IllegalStateException {
+    ctor public ClosedFileSystemException();
+  }
+
+  public class ClosedWatchServiceException extends java.lang.IllegalStateException {
+    ctor public ClosedWatchServiceException();
+  }
+
+  public abstract interface CopyOption {
+  }
+
+  public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
+    ctor public DirectoryIteratorException(java.io.IOException);
+  }
+
+  public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
+    ctor public DirectoryNotEmptyException(java.lang.String);
+  }
+
+  public abstract interface DirectoryStream implements java.io.Closeable java.lang.Iterable {
+    method public abstract java.util.Iterator<T> iterator();
+  }
+
+  public static abstract interface DirectoryStream.Filter {
+    method public abstract boolean accept(T) throws java.io.IOException;
+  }
+
+  public class FileAlreadyExistsException extends java.nio.file.FileSystemException {
+    ctor public FileAlreadyExistsException(java.lang.String);
+    ctor public FileAlreadyExistsException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public abstract class FileStore {
+    ctor protected FileStore();
+    method public abstract java.lang.Object getAttribute(java.lang.String) throws java.io.IOException;
+    method public abstract V getFileStoreAttributeView(java.lang.Class<V>);
+    method public abstract long getTotalSpace() throws java.io.IOException;
+    method public abstract long getUnallocatedSpace() throws java.io.IOException;
+    method public abstract long getUsableSpace() throws java.io.IOException;
+    method public abstract boolean isReadOnly();
+    method public abstract java.lang.String name();
+    method public abstract boolean supportsFileAttributeView(java.lang.Class<? extends java.nio.file.attribute.FileAttributeView>);
+    method public abstract boolean supportsFileAttributeView(java.lang.String);
+    method public abstract java.lang.String type();
+  }
+
+  public abstract class FileSystem implements java.io.Closeable {
+    ctor protected FileSystem();
+    method public abstract void close() throws java.io.IOException;
+    method public abstract java.lang.Iterable<java.nio.file.FileStore> getFileStores();
+    method public abstract java.nio.file.Path getPath(java.lang.String, java.lang.String...);
+    method public abstract java.nio.file.PathMatcher getPathMatcher(java.lang.String);
+    method public abstract java.lang.Iterable<java.nio.file.Path> getRootDirectories();
+    method public abstract java.lang.String getSeparator();
+    method public abstract java.nio.file.attribute.UserPrincipalLookupService getUserPrincipalLookupService();
+    method public abstract boolean isOpen();
+    method public abstract boolean isReadOnly();
+    method public abstract java.nio.file.WatchService newWatchService() throws java.io.IOException;
+    method public abstract java.nio.file.spi.FileSystemProvider provider();
+    method public abstract java.util.Set<java.lang.String> supportedFileAttributeViews();
+  }
+
+  public class FileSystemAlreadyExistsException extends java.lang.RuntimeException {
+    ctor public FileSystemAlreadyExistsException();
+    ctor public FileSystemAlreadyExistsException(java.lang.String);
+  }
+
+  public class FileSystemException extends java.io.IOException {
+    ctor public FileSystemException(java.lang.String);
+    ctor public FileSystemException(java.lang.String, java.lang.String, java.lang.String);
+    method public java.lang.String getFile();
+    method public java.lang.String getOtherFile();
+    method public java.lang.String getReason();
+  }
+
+  public class FileSystemLoopException extends java.nio.file.FileSystemException {
+    ctor public FileSystemLoopException(java.lang.String);
+  }
+
+  public class FileSystemNotFoundException extends java.lang.RuntimeException {
+    ctor public FileSystemNotFoundException();
+    ctor public FileSystemNotFoundException(java.lang.String);
+  }
+
+  public final class FileSystems {
+    method public static java.nio.file.FileSystem getDefault();
+    method public static java.nio.file.FileSystem getFileSystem(java.net.URI);
+    method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>) throws java.io.IOException;
+    method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>, java.lang.ClassLoader) throws java.io.IOException;
+    method public static java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.lang.ClassLoader) throws java.io.IOException;
+  }
+
+  public final class FileVisitOption extends java.lang.Enum {
+    method public static java.nio.file.FileVisitOption valueOf(java.lang.String);
+    method public static final java.nio.file.FileVisitOption[] values();
+    enum_constant public static final java.nio.file.FileVisitOption FOLLOW_LINKS;
+  }
+
+  public final class FileVisitResult extends java.lang.Enum {
+    method public static java.nio.file.FileVisitResult valueOf(java.lang.String);
+    method public static final java.nio.file.FileVisitResult[] values();
+    enum_constant public static final java.nio.file.FileVisitResult CONTINUE;
+    enum_constant public static final java.nio.file.FileVisitResult SKIP_SIBLINGS;
+    enum_constant public static final java.nio.file.FileVisitResult SKIP_SUBTREE;
+    enum_constant public static final java.nio.file.FileVisitResult TERMINATE;
+  }
+
+  public abstract interface FileVisitor {
+    method public abstract java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
+    method public abstract java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public abstract java.nio.file.FileVisitResult visitFile(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public abstract java.nio.file.FileVisitResult visitFileFailed(T, java.io.IOException) throws java.io.IOException;
+  }
+
+  public final class Files {
+    method public static java.nio.file.Path copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static long copy(java.io.InputStream, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static long copy(java.nio.file.Path, java.io.OutputStream) throws java.io.IOException;
+    method public static java.nio.file.Path createDirectories(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createFile(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempDirectory(java.nio.file.Path, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempDirectory(java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempFile(java.nio.file.Path, java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempFile(java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static void delete(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean exists(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static java.lang.Object getAttribute(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+    method public static java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.attribute.UserPrincipal getOwner(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> getPosixFilePermissions(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static boolean isDirectory(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static boolean isExecutable(java.nio.file.Path);
+    method public static boolean isHidden(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean isReadable(java.nio.file.Path);
+    method public static boolean isRegularFile(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public static boolean isSymbolicLink(java.nio.file.Path);
+    method public static boolean isWritable(java.nio.file.Path);
+    method public static java.nio.file.Path move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static java.io.BufferedReader newBufferedReader(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.lang.String) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static boolean notExists(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static java.lang.String probeContentType(java.nio.file.Path) throws java.io.IOException;
+    method public static byte[] readAllBytes(java.nio.file.Path) throws java.io.IOException;
+    method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.Path setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime) throws java.io.IOException;
+    method public static java.nio.file.Path setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal) throws java.io.IOException;
+    method public static java.nio.file.Path setPosixFilePermissions(java.nio.file.Path, java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException;
+    method public static long size(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.util.Set<java.nio.file.FileVisitOption>, int, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, byte[], java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, java.lang.Iterable<? extends java.lang.CharSequence>, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException;
+  }
+
+  public class InvalidPathException extends java.lang.IllegalArgumentException {
+    ctor public InvalidPathException(java.lang.String, java.lang.String, int);
+    ctor public InvalidPathException(java.lang.String, java.lang.String);
+    method public int getIndex();
+    method public java.lang.String getInput();
+    method public java.lang.String getReason();
+  }
+
+  public final class LinkOption extends java.lang.Enum implements java.nio.file.CopyOption java.nio.file.OpenOption {
+    method public static java.nio.file.LinkOption valueOf(java.lang.String);
+    method public static final java.nio.file.LinkOption[] values();
+    enum_constant public static final java.nio.file.LinkOption NOFOLLOW_LINKS;
+  }
+
+  public final class LinkPermission extends java.security.BasicPermission {
+    ctor public LinkPermission(java.lang.String);
+    ctor public LinkPermission(java.lang.String, java.lang.String);
+  }
+
+  public class NoSuchFileException extends java.nio.file.FileSystemException {
+    ctor public NoSuchFileException(java.lang.String);
+    ctor public NoSuchFileException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public class NotDirectoryException extends java.nio.file.FileSystemException {
+    ctor public NotDirectoryException(java.lang.String);
+  }
+
+  public class NotLinkException extends java.nio.file.FileSystemException {
+    ctor public NotLinkException(java.lang.String);
+    ctor public NotLinkException(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public abstract interface OpenOption {
+  }
+
+  public abstract interface Path implements java.lang.Comparable java.lang.Iterable java.nio.file.Watchable {
+    method public abstract int compareTo(java.nio.file.Path);
+    method public abstract boolean endsWith(java.nio.file.Path);
+    method public abstract boolean endsWith(java.lang.String);
+    method public abstract boolean equals(java.lang.Object);
+    method public abstract java.nio.file.Path getFileName();
+    method public abstract java.nio.file.FileSystem getFileSystem();
+    method public abstract java.nio.file.Path getName(int);
+    method public abstract int getNameCount();
+    method public abstract java.nio.file.Path getParent();
+    method public abstract java.nio.file.Path getRoot();
+    method public abstract int hashCode();
+    method public abstract boolean isAbsolute();
+    method public abstract java.util.Iterator<java.nio.file.Path> iterator();
+    method public abstract java.nio.file.Path normalize();
+    method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException;
+    method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.Path relativize(java.nio.file.Path);
+    method public abstract java.nio.file.Path resolve(java.nio.file.Path);
+    method public abstract java.nio.file.Path resolve(java.lang.String);
+    method public abstract java.nio.file.Path resolveSibling(java.nio.file.Path);
+    method public abstract java.nio.file.Path resolveSibling(java.lang.String);
+    method public abstract boolean startsWith(java.nio.file.Path);
+    method public abstract boolean startsWith(java.lang.String);
+    method public abstract java.nio.file.Path subpath(int, int);
+    method public abstract java.nio.file.Path toAbsolutePath();
+    method public abstract java.io.File toFile();
+    method public abstract java.nio.file.Path toRealPath(java.nio.file.LinkOption...) throws java.io.IOException;
+    method public abstract java.lang.String toString();
+    method public abstract java.net.URI toUri();
+  }
+
+  public abstract interface PathMatcher {
+    method public abstract boolean matches(java.nio.file.Path);
+  }
+
+  public final class Paths {
+    method public static java.nio.file.Path get(java.lang.String, java.lang.String...);
+    method public static java.nio.file.Path get(java.net.URI);
+  }
+
+  public class ProviderMismatchException extends java.lang.IllegalArgumentException {
+    ctor public ProviderMismatchException();
+    ctor public ProviderMismatchException(java.lang.String);
+  }
+
+  public class ProviderNotFoundException extends java.lang.RuntimeException {
+    ctor public ProviderNotFoundException();
+    ctor public ProviderNotFoundException(java.lang.String);
+  }
+
+  public class ReadOnlyFileSystemException extends java.lang.UnsupportedOperationException {
+    ctor public ReadOnlyFileSystemException();
+  }
+
+  public abstract interface SecureDirectoryStream implements java.nio.file.DirectoryStream {
+    method public abstract void deleteDirectory(T) throws java.io.IOException;
+    method public abstract void deleteFile(T) throws java.io.IOException;
+    method public abstract V getFileAttributeView(java.lang.Class<V>);
+    method public abstract V getFileAttributeView(T, java.lang.Class<V>, java.nio.file.LinkOption...);
+    method public abstract void move(T, java.nio.file.SecureDirectoryStream<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel newByteChannel(T, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.SecureDirectoryStream<T> newDirectoryStream(T, java.nio.file.LinkOption...) throws java.io.IOException;
+  }
+
+  public final class StandardCopyOption extends java.lang.Enum implements java.nio.file.CopyOption {
+    method public static java.nio.file.StandardCopyOption valueOf(java.lang.String);
+    method public static final java.nio.file.StandardCopyOption[] values();
+    enum_constant public static final java.nio.file.StandardCopyOption ATOMIC_MOVE;
+    enum_constant public static final java.nio.file.StandardCopyOption COPY_ATTRIBUTES;
+    enum_constant public static final java.nio.file.StandardCopyOption REPLACE_EXISTING;
+  }
+
+  public final class StandardOpenOption extends java.lang.Enum implements java.nio.file.OpenOption {
+    method public static java.nio.file.StandardOpenOption valueOf(java.lang.String);
+    method public static final java.nio.file.StandardOpenOption[] values();
+    enum_constant public static final java.nio.file.StandardOpenOption APPEND;
+    enum_constant public static final java.nio.file.StandardOpenOption CREATE;
+    enum_constant public static final java.nio.file.StandardOpenOption CREATE_NEW;
+    enum_constant public static final java.nio.file.StandardOpenOption DELETE_ON_CLOSE;
+    enum_constant public static final java.nio.file.StandardOpenOption DSYNC;
+    enum_constant public static final java.nio.file.StandardOpenOption READ;
+    enum_constant public static final java.nio.file.StandardOpenOption SPARSE;
+    enum_constant public static final java.nio.file.StandardOpenOption SYNC;
+    enum_constant public static final java.nio.file.StandardOpenOption TRUNCATE_EXISTING;
+    enum_constant public static final java.nio.file.StandardOpenOption WRITE;
+  }
+
+  public final class StandardWatchEventKinds {
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_CREATE;
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_DELETE;
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_MODIFY;
+    field public static final java.nio.file.WatchEvent.Kind<java.lang.Object> OVERFLOW;
+  }
+
+  public abstract interface WatchEvent {
+    method public abstract T context();
+    method public abstract int count();
+    method public abstract java.nio.file.WatchEvent.Kind<T> kind();
+  }
+
+  public static abstract interface WatchEvent.Kind {
+    method public abstract java.lang.String name();
+    method public abstract java.lang.Class<T> type();
+  }
+
+  public static abstract interface WatchEvent.Modifier {
+    method public abstract java.lang.String name();
+  }
+
+  public abstract interface WatchKey {
+    method public abstract void cancel();
+    method public abstract boolean isValid();
+    method public abstract java.util.List<java.nio.file.WatchEvent<?>> pollEvents();
+    method public abstract boolean reset();
+    method public abstract java.nio.file.Watchable watchable();
+  }
+
+  public abstract interface WatchService implements java.io.Closeable {
+    method public abstract void close() throws java.io.IOException;
+    method public abstract java.nio.file.WatchKey poll();
+    method public abstract java.nio.file.WatchKey poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public abstract java.nio.file.WatchKey take() throws java.lang.InterruptedException;
+  }
+
+  public abstract interface Watchable {
+    method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException;
+    method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException;
+  }
+
+}
+
+package java.nio.file.attribute {
+
+  public final class AclEntry {
+    method public java.util.Set<java.nio.file.attribute.AclEntryFlag> flags();
+    method public static java.nio.file.attribute.AclEntry.Builder newBuilder();
+    method public static java.nio.file.attribute.AclEntry.Builder newBuilder(java.nio.file.attribute.AclEntry);
+    method public java.util.Set<java.nio.file.attribute.AclEntryPermission> permissions();
+    method public java.nio.file.attribute.UserPrincipal principal();
+    method public java.nio.file.attribute.AclEntryType type();
+  }
+
+  public static final class AclEntry.Builder {
+    method public java.nio.file.attribute.AclEntry build();
+    method public java.nio.file.attribute.AclEntry.Builder setFlags(java.util.Set<java.nio.file.attribute.AclEntryFlag>);
+    method public java.nio.file.attribute.AclEntry.Builder setFlags(java.nio.file.attribute.AclEntryFlag...);
+    method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.util.Set<java.nio.file.attribute.AclEntryPermission>);
+    method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.nio.file.attribute.AclEntryPermission...);
+    method public java.nio.file.attribute.AclEntry.Builder setPrincipal(java.nio.file.attribute.UserPrincipal);
+    method public java.nio.file.attribute.AclEntry.Builder setType(java.nio.file.attribute.AclEntryType);
+  }
+
+  public final class AclEntryFlag extends java.lang.Enum {
+    method public static java.nio.file.attribute.AclEntryFlag valueOf(java.lang.String);
+    method public static final java.nio.file.attribute.AclEntryFlag[] values();
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag DIRECTORY_INHERIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag FILE_INHERIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag INHERIT_ONLY;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag NO_PROPAGATE_INHERIT;
+  }
+
+  public final class AclEntryPermission extends java.lang.Enum {
+    method public static java.nio.file.attribute.AclEntryPermission valueOf(java.lang.String);
+    method public static final java.nio.file.attribute.AclEntryPermission[] values();
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission APPEND_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE_CHILD;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission EXECUTE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ACL;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ATTRIBUTES;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_NAMED_ATTRS;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission SYNCHRONIZE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ACL;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ATTRIBUTES;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_NAMED_ATTRS;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_OWNER;
+    field public static final java.nio.file.attribute.AclEntryPermission ADD_FILE;
+    field public static final java.nio.file.attribute.AclEntryPermission ADD_SUBDIRECTORY;
+    field public static final java.nio.file.attribute.AclEntryPermission LIST_DIRECTORY;
+  }
+
+  public final class AclEntryType extends java.lang.Enum {
+    method public static java.nio.file.attribute.AclEntryType valueOf(java.lang.String);
+    method public static final java.nio.file.attribute.AclEntryType[] values();
+    enum_constant public static final java.nio.file.attribute.AclEntryType ALARM;
+    enum_constant public static final java.nio.file.attribute.AclEntryType ALLOW;
+    enum_constant public static final java.nio.file.attribute.AclEntryType AUDIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryType DENY;
+  }
+
+  public abstract interface AclFileAttributeView implements java.nio.file.attribute.FileOwnerAttributeView {
+    method public abstract java.util.List<java.nio.file.attribute.AclEntry> getAcl() throws java.io.IOException;
+    method public abstract java.lang.String name();
+    method public abstract void setAcl(java.util.List<java.nio.file.attribute.AclEntry>) throws java.io.IOException;
+  }
+
+  public abstract interface AttributeView {
+    method public abstract java.lang.String name();
+  }
+
+  public abstract interface BasicFileAttributeView implements java.nio.file.attribute.FileAttributeView {
+    method public abstract java.lang.String name();
+    method public abstract java.nio.file.attribute.BasicFileAttributes readAttributes() throws java.io.IOException;
+    method public abstract void setTimes(java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime) throws java.io.IOException;
+  }
+
+  public abstract interface BasicFileAttributes {
+    method public abstract java.nio.file.attribute.FileTime creationTime();
+    method public abstract java.lang.Object fileKey();
+    method public abstract boolean isDirectory();
+    method public abstract boolean isOther();
+    method public abstract boolean isRegularFile();
+    method public abstract boolean isSymbolicLink();
+    method public abstract java.nio.file.attribute.FileTime lastAccessTime();
+    method public abstract java.nio.file.attribute.FileTime lastModifiedTime();
+    method public abstract long size();
+  }
+
+  public abstract interface DosFileAttributeView implements java.nio.file.attribute.BasicFileAttributeView {
+    method public abstract java.lang.String name();
+    method public abstract java.nio.file.attribute.DosFileAttributes readAttributes() throws java.io.IOException;
+    method public abstract void setArchive(boolean) throws java.io.IOException;
+    method public abstract void setHidden(boolean) throws java.io.IOException;
+    method public abstract void setReadOnly(boolean) throws java.io.IOException;
+    method public abstract void setSystem(boolean) throws java.io.IOException;
+  }
+
+  public abstract interface DosFileAttributes implements java.nio.file.attribute.BasicFileAttributes {
+    method public abstract boolean isArchive();
+    method public abstract boolean isHidden();
+    method public abstract boolean isReadOnly();
+    method public abstract boolean isSystem();
+  }
+
+  public abstract interface FileAttribute {
+    method public abstract java.lang.String name();
+    method public abstract T value();
+  }
+
+  public abstract interface FileAttributeView implements java.nio.file.attribute.AttributeView {
+  }
+
+  public abstract interface FileOwnerAttributeView implements java.nio.file.attribute.FileAttributeView {
+    method public abstract java.nio.file.attribute.UserPrincipal getOwner() throws java.io.IOException;
+    method public abstract java.lang.String name();
+    method public abstract void setOwner(java.nio.file.attribute.UserPrincipal) throws java.io.IOException;
+  }
+
+  public abstract interface FileStoreAttributeView implements java.nio.file.attribute.AttributeView {
+  }
+
+  public final class FileTime implements java.lang.Comparable {
+    method public int compareTo(java.nio.file.attribute.FileTime);
+    method public static java.nio.file.attribute.FileTime from(long, java.util.concurrent.TimeUnit);
+    method public static java.nio.file.attribute.FileTime fromMillis(long);
+    method public long to(java.util.concurrent.TimeUnit);
+    method public long toMillis();
+  }
+
+  public abstract interface GroupPrincipal implements java.nio.file.attribute.UserPrincipal {
+  }
+
+  public abstract interface PosixFileAttributeView implements java.nio.file.attribute.BasicFileAttributeView java.nio.file.attribute.FileOwnerAttributeView {
+    method public abstract java.lang.String name();
+    method public abstract java.nio.file.attribute.PosixFileAttributes readAttributes() throws java.io.IOException;
+    method public abstract void setGroup(java.nio.file.attribute.GroupPrincipal) throws java.io.IOException;
+    method public abstract void setPermissions(java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException;
+  }
+
+  public abstract interface PosixFileAttributes implements java.nio.file.attribute.BasicFileAttributes {
+    method public abstract java.nio.file.attribute.GroupPrincipal group();
+    method public abstract java.nio.file.attribute.UserPrincipal owner();
+    method public abstract java.util.Set<java.nio.file.attribute.PosixFilePermission> permissions();
+  }
+
+  public final class PosixFilePermission extends java.lang.Enum {
+    method public static java.nio.file.attribute.PosixFilePermission valueOf(java.lang.String);
+    method public static final java.nio.file.attribute.PosixFilePermission[] values();
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_WRITE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_WRITE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_WRITE;
+  }
+
+  public final class PosixFilePermissions {
+    method public static java.nio.file.attribute.FileAttribute<java.util.Set<java.nio.file.attribute.PosixFilePermission>> asFileAttribute(java.util.Set<java.nio.file.attribute.PosixFilePermission>);
+    method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> fromString(java.lang.String);
+    method public static java.lang.String toString(java.util.Set<java.nio.file.attribute.PosixFilePermission>);
+  }
+
+  public abstract interface UserPrincipal implements java.security.Principal {
+  }
+
+  public abstract class UserPrincipalLookupService {
+    ctor protected UserPrincipalLookupService();
+    method public abstract java.nio.file.attribute.GroupPrincipal lookupPrincipalByGroupName(java.lang.String) throws java.io.IOException;
+    method public abstract java.nio.file.attribute.UserPrincipal lookupPrincipalByName(java.lang.String) throws java.io.IOException;
+  }
+
+  public class UserPrincipalNotFoundException extends java.io.IOException {
+    ctor public UserPrincipalNotFoundException(java.lang.String);
+    method public java.lang.String getName();
+  }
+
+}
+
+package java.nio.file.spi {
+
+  public abstract class FileSystemProvider {
+    ctor protected FileSystemProvider();
+    method public abstract void checkAccess(java.nio.file.Path, java.nio.file.AccessMode...) throws java.io.IOException;
+    method public abstract void copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public abstract void createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public void createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public void createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract void delete(java.nio.file.Path) throws java.io.IOException;
+    method public boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
+    method public abstract V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+    method public abstract java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
+    method public abstract java.nio.file.FileSystem getFileSystem(java.net.URI);
+    method public abstract java.nio.file.Path getPath(java.net.URI);
+    method public abstract java.lang.String getScheme();
+    method public static java.util.List<java.nio.file.spi.FileSystemProvider> installedProviders();
+    method public abstract boolean isHidden(java.nio.file.Path) throws java.io.IOException;
+    method public abstract boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public abstract void move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public java.nio.channels.AsynchronousFileChannel newAsynchronousFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException;
+    method public java.nio.channels.FileChannel newFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>) throws java.io.IOException;
+    method public java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.util.Map<java.lang.String, ?>) throws java.io.IOException;
+    method public java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public abstract java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
+    method public abstract void setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
+  }
+
+  public abstract class FileTypeDetector {
+    ctor protected FileTypeDetector();
+    method public abstract java.lang.String probeContentType(java.nio.file.Path) throws java.io.IOException;
+  }
+
+}
+
 package java.security {
 
   public final class AccessControlContext {
-    ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner);
     ctor public AccessControlContext(java.security.ProtectionDomain[]);
+    ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner);
     method public void checkPermission(java.security.Permission) throws java.security.AccessControlException;
     method public java.security.DomainCombiner getDomainCombiner();
   }
@@ -50166,6 +51147,12 @@
     method public static java.security.AccessControlContext getContext();
   }
 
+  public abstract interface AlgorithmConstraints {
+    method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.lang.String, java.security.AlgorithmParameters);
+    method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.security.Key);
+    method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.lang.String, java.security.Key, java.security.AlgorithmParameters);
+  }
+
   public class AlgorithmParameterGenerator {
     ctor protected AlgorithmParameterGenerator(java.security.AlgorithmParameterGeneratorSpi, java.security.Provider, java.lang.String);
     method public final java.security.AlgorithmParameters generateParameters();
@@ -50215,9 +51202,11 @@
   }
 
   public final class AllPermission extends java.security.Permission {
-    ctor public AllPermission(java.lang.String, java.lang.String);
     ctor public AllPermission();
+    ctor public AllPermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
@@ -50231,7 +51220,9 @@
   public abstract class BasicPermission extends java.security.Permission implements java.io.Serializable {
     ctor public BasicPermission(java.lang.String);
     ctor public BasicPermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
@@ -50260,9 +51251,24 @@
     method public boolean implies(java.security.CodeSource);
   }
 
+  public final class CryptoPrimitive extends java.lang.Enum {
+    method public static java.security.CryptoPrimitive valueOf(java.lang.String);
+    method public static final java.security.CryptoPrimitive[] values();
+    enum_constant public static final java.security.CryptoPrimitive BLOCK_CIPHER;
+    enum_constant public static final java.security.CryptoPrimitive KEY_AGREEMENT;
+    enum_constant public static final java.security.CryptoPrimitive KEY_ENCAPSULATION;
+    enum_constant public static final java.security.CryptoPrimitive KEY_WRAP;
+    enum_constant public static final java.security.CryptoPrimitive MAC;
+    enum_constant public static final java.security.CryptoPrimitive MESSAGE_DIGEST;
+    enum_constant public static final java.security.CryptoPrimitive PUBLIC_KEY_ENCRYPTION;
+    enum_constant public static final java.security.CryptoPrimitive SECURE_RANDOM;
+    enum_constant public static final java.security.CryptoPrimitive SIGNATURE;
+    enum_constant public static final java.security.CryptoPrimitive STREAM_CIPHER;
+  }
+
   public class DigestException extends java.security.GeneralSecurityException {
-    ctor public DigestException(java.lang.String);
     ctor public DigestException();
+    ctor public DigestException(java.lang.String);
     ctor public DigestException(java.lang.String, java.lang.Throwable);
     ctor public DigestException(java.lang.Throwable);
   }
@@ -50288,8 +51294,8 @@
   }
 
   public class GeneralSecurityException extends java.lang.Exception {
-    ctor public GeneralSecurityException(java.lang.String);
     ctor public GeneralSecurityException();
+    ctor public GeneralSecurityException(java.lang.String);
     ctor public GeneralSecurityException(java.lang.String, java.lang.Throwable);
     ctor public GeneralSecurityException(java.lang.Throwable);
   }
@@ -50305,8 +51311,8 @@
 
   public abstract deprecated class Identity implements java.security.Principal java.io.Serializable {
     ctor protected Identity();
-    ctor public Identity(java.lang.String);
     ctor public Identity(java.lang.String, java.security.IdentityScope) throws java.security.KeyManagementException;
+    ctor public Identity(java.lang.String);
     method public void addCertificate(java.security.Certificate) throws java.security.KeyManagementException;
     method public java.security.Certificate[] certificates();
     method public final boolean equals(java.lang.Object);
@@ -50337,22 +51343,22 @@
   }
 
   public class InvalidAlgorithmParameterException extends java.security.GeneralSecurityException {
-    ctor public InvalidAlgorithmParameterException(java.lang.String);
     ctor public InvalidAlgorithmParameterException();
+    ctor public InvalidAlgorithmParameterException(java.lang.String);
     ctor public InvalidAlgorithmParameterException(java.lang.String, java.lang.Throwable);
     ctor public InvalidAlgorithmParameterException(java.lang.Throwable);
   }
 
   public class InvalidKeyException extends java.security.KeyException {
-    ctor public InvalidKeyException(java.lang.String);
     ctor public InvalidKeyException();
+    ctor public InvalidKeyException(java.lang.String);
     ctor public InvalidKeyException(java.lang.String, java.lang.Throwable);
     ctor public InvalidKeyException(java.lang.Throwable);
   }
 
   public class InvalidParameterException extends java.lang.IllegalArgumentException {
-    ctor public InvalidParameterException(java.lang.String);
     ctor public InvalidParameterException();
+    ctor public InvalidParameterException(java.lang.String);
   }
 
   public abstract interface Key implements java.io.Serializable {
@@ -50363,8 +51369,8 @@
   }
 
   public class KeyException extends java.security.GeneralSecurityException {
-    ctor public KeyException(java.lang.String);
     ctor public KeyException();
+    ctor public KeyException(java.lang.String);
     ctor public KeyException(java.lang.String, java.lang.Throwable);
     ctor public KeyException(java.lang.Throwable);
   }
@@ -50391,8 +51397,8 @@
   }
 
   public class KeyManagementException extends java.security.KeyException {
-    ctor public KeyManagementException(java.lang.String);
     ctor public KeyManagementException();
+    ctor public KeyManagementException(java.lang.String);
     ctor public KeyManagementException(java.lang.String, java.lang.Throwable);
     ctor public KeyManagementException(java.lang.Throwable);
   }
@@ -50413,8 +51419,8 @@
     method public static java.security.KeyPairGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
     method public final java.security.Provider getProvider();
     method public void initialize(int);
-    method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
     method public void initialize(int, java.security.SecureRandom);
+    method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
   }
 
   public abstract class KeyPairGeneratorSpi {
@@ -50517,8 +51523,8 @@
   }
 
   public class KeyStoreException extends java.security.GeneralSecurityException {
-    ctor public KeyStoreException(java.lang.String);
     ctor public KeyStoreException();
+    ctor public KeyStoreException(java.lang.String);
     ctor public KeyStoreException(java.lang.String, java.lang.Throwable);
     ctor public KeyStoreException(java.lang.Throwable);
   }
@@ -50580,22 +51586,24 @@
   }
 
   public class NoSuchAlgorithmException extends java.security.GeneralSecurityException {
-    ctor public NoSuchAlgorithmException(java.lang.String);
     ctor public NoSuchAlgorithmException();
+    ctor public NoSuchAlgorithmException(java.lang.String);
     ctor public NoSuchAlgorithmException(java.lang.String, java.lang.Throwable);
     ctor public NoSuchAlgorithmException(java.lang.Throwable);
   }
 
   public class NoSuchProviderException extends java.security.GeneralSecurityException {
-    ctor public NoSuchProviderException(java.lang.String);
     ctor public NoSuchProviderException();
+    ctor public NoSuchProviderException(java.lang.String);
   }
 
   public abstract class Permission implements java.security.Guard java.io.Serializable {
     ctor public Permission(java.lang.String);
     method public void checkGuard(java.lang.Object) throws java.lang.SecurityException;
+    method public abstract boolean equals(java.lang.Object);
     method public abstract java.lang.String getActions();
     method public final java.lang.String getName();
+    method public abstract int hashCode();
     method public abstract boolean implies(java.security.Permission);
     method public java.security.PermissionCollection newPermissionCollection();
   }
@@ -50703,8 +51711,8 @@
   }
 
   public class ProviderException extends java.lang.RuntimeException {
-    ctor public ProviderException(java.lang.String);
     ctor public ProviderException();
+    ctor public ProviderException(java.lang.String);
     ctor public ProviderException(java.lang.String, java.lang.Throwable);
     ctor public ProviderException(java.lang.Throwable);
   }
@@ -50714,8 +51722,8 @@
   }
 
   public class SecureClassLoader extends java.lang.ClassLoader {
-    ctor protected SecureClassLoader();
     ctor protected SecureClassLoader(java.lang.ClassLoader);
+    ctor protected SecureClassLoader();
     method protected final java.lang.Class<?> defineClass(java.lang.String, byte[], int, int, java.security.CodeSource);
     method protected final java.lang.Class<?> defineClass(java.lang.String, java.nio.ByteBuffer, java.security.CodeSource);
     method protected java.security.PermissionCollection getPermissions(java.security.CodeSource);
@@ -50748,10 +51756,10 @@
     method public static deprecated java.lang.String getAlgorithmProperty(java.lang.String, java.lang.String);
     method public static java.util.Set<java.lang.String> getAlgorithms(java.lang.String);
     method public static java.lang.String getProperty(java.lang.String);
-    method public static synchronized java.security.Provider getProvider(java.lang.String);
-    method public static synchronized java.security.Provider[] getProviders();
+    method public static java.security.Provider getProvider(java.lang.String);
+    method public static java.security.Provider[] getProviders();
     method public static java.security.Provider[] getProviders(java.lang.String);
-    method public static synchronized java.security.Provider[] getProviders(java.util.Map<java.lang.String, java.lang.String>);
+    method public static java.security.Provider[] getProviders(java.util.Map<java.lang.String, java.lang.String>);
     method public static synchronized int insertProviderAt(java.security.Provider, int);
     method public static synchronized void removeProvider(java.lang.String);
     method public static void setProperty(java.lang.String, java.lang.String);
@@ -50765,6 +51773,7 @@
   public abstract class Signature extends java.security.SignatureSpi {
     ctor protected Signature(java.lang.String);
     method public final java.lang.String getAlgorithm();
+    method public java.security.SignatureSpi getCurrentSpi();
     method public static java.security.Signature getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static java.security.Signature getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static java.security.Signature getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
@@ -50792,8 +51801,8 @@
   }
 
   public class SignatureException extends java.security.GeneralSecurityException {
-    ctor public SignatureException(java.lang.String);
     ctor public SignatureException();
+    ctor public SignatureException(java.lang.String);
     ctor public SignatureException(java.lang.String, java.lang.Throwable);
     ctor public SignatureException(java.lang.Throwable);
   }
@@ -50846,17 +51855,19 @@
   }
 
   public class UnrecoverableKeyException extends java.security.UnrecoverableEntryException {
-    ctor public UnrecoverableKeyException(java.lang.String);
     ctor public UnrecoverableKeyException();
+    ctor public UnrecoverableKeyException(java.lang.String);
   }
 
   public final class UnresolvedPermission extends java.security.Permission implements java.io.Serializable {
     ctor public UnresolvedPermission(java.lang.String, java.lang.String, java.lang.String, java.security.cert.Certificate[]);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
     method public java.lang.String getUnresolvedActions();
     method public java.security.cert.Certificate[] getUnresolvedCerts();
     method public java.lang.String getUnresolvedName();
     method public java.lang.String getUnresolvedType();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
@@ -50930,12 +51941,28 @@
   }
 
   public class CRLException extends java.security.GeneralSecurityException {
-    ctor public CRLException(java.lang.String);
     ctor public CRLException();
+    ctor public CRLException(java.lang.String);
     ctor public CRLException(java.lang.String, java.lang.Throwable);
     ctor public CRLException(java.lang.Throwable);
   }
 
+  public final class CRLReason extends java.lang.Enum {
+    method public static java.security.cert.CRLReason valueOf(java.lang.String);
+    method public static final java.security.cert.CRLReason[] values();
+    enum_constant public static final java.security.cert.CRLReason AA_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason AFFILIATION_CHANGED;
+    enum_constant public static final java.security.cert.CRLReason CA_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason CERTIFICATE_HOLD;
+    enum_constant public static final java.security.cert.CRLReason CESSATION_OF_OPERATION;
+    enum_constant public static final java.security.cert.CRLReason KEY_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason PRIVILEGE_WITHDRAWN;
+    enum_constant public static final java.security.cert.CRLReason REMOVE_FROM_CRL;
+    enum_constant public static final java.security.cert.CRLReason SUPERSEDED;
+    enum_constant public static final java.security.cert.CRLReason UNSPECIFIED;
+    enum_constant public static final java.security.cert.CRLReason UNUSED;
+  }
+
   public abstract interface CRLSelector implements java.lang.Cloneable {
     method public abstract java.lang.Object clone();
     method public abstract boolean match(java.security.cert.CRL);
@@ -50968,10 +51995,10 @@
   }
 
   public class CertPathBuilderException extends java.security.GeneralSecurityException {
-    ctor public CertPathBuilderException(java.lang.String, java.lang.Throwable);
-    ctor public CertPathBuilderException(java.lang.Throwable);
-    ctor public CertPathBuilderException(java.lang.String);
     ctor public CertPathBuilderException();
+    ctor public CertPathBuilderException(java.lang.String);
+    ctor public CertPathBuilderException(java.lang.Throwable);
+    ctor public CertPathBuilderException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract interface CertPathBuilderResult implements java.lang.Cloneable {
@@ -51000,13 +52027,30 @@
   }
 
   public class CertPathValidatorException extends java.security.GeneralSecurityException {
-    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int);
-    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable);
-    ctor public CertPathValidatorException(java.lang.Throwable);
-    ctor public CertPathValidatorException(java.lang.String);
     ctor public CertPathValidatorException();
+    ctor public CertPathValidatorException(java.lang.String);
+    ctor public CertPathValidatorException(java.lang.Throwable);
+    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable);
+    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int);
+    ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int, java.security.cert.CertPathValidatorException.Reason);
     method public java.security.cert.CertPath getCertPath();
     method public int getIndex();
+    method public java.security.cert.CertPathValidatorException.Reason getReason();
+  }
+
+  public static final class CertPathValidatorException.BasicReason extends java.lang.Enum implements java.security.cert.CertPathValidatorException.Reason {
+    method public static java.security.cert.CertPathValidatorException.BasicReason valueOf(java.lang.String);
+    method public static final java.security.cert.CertPathValidatorException.BasicReason[] values();
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason ALGORITHM_CONSTRAINED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason EXPIRED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason INVALID_SIGNATURE;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason NOT_YET_VALID;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason REVOKED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNDETERMINED_REVOCATION_STATUS;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNSPECIFIED;
+  }
+
+  public static abstract interface CertPathValidatorException.Reason implements java.io.Serializable {
   }
 
   public abstract interface CertPathValidatorResult implements java.lang.Cloneable {
@@ -51037,10 +52081,10 @@
   }
 
   public class CertStoreException extends java.security.GeneralSecurityException {
-    ctor public CertStoreException(java.lang.String, java.lang.Throwable);
-    ctor public CertStoreException(java.lang.Throwable);
-    ctor public CertStoreException(java.lang.String);
     ctor public CertStoreException();
+    ctor public CertStoreException(java.lang.String);
+    ctor public CertStoreException(java.lang.Throwable);
+    ctor public CertStoreException(java.lang.String, java.lang.Throwable);
   }
 
   public abstract interface CertStoreParameters implements java.lang.Cloneable {
@@ -51070,22 +52114,22 @@
   }
 
   public class CertificateEncodingException extends java.security.cert.CertificateException {
-    ctor public CertificateEncodingException(java.lang.String);
     ctor public CertificateEncodingException();
+    ctor public CertificateEncodingException(java.lang.String);
     ctor public CertificateEncodingException(java.lang.String, java.lang.Throwable);
     ctor public CertificateEncodingException(java.lang.Throwable);
   }
 
   public class CertificateException extends java.security.GeneralSecurityException {
-    ctor public CertificateException(java.lang.String);
     ctor public CertificateException();
+    ctor public CertificateException(java.lang.String);
     ctor public CertificateException(java.lang.String, java.lang.Throwable);
     ctor public CertificateException(java.lang.Throwable);
   }
 
   public class CertificateExpiredException extends java.security.cert.CertificateException {
-    ctor public CertificateExpiredException(java.lang.String);
     ctor public CertificateExpiredException();
+    ctor public CertificateExpiredException(java.lang.String);
   }
 
   public class CertificateFactory {
@@ -51118,28 +52162,44 @@
   }
 
   public class CertificateNotYetValidException extends java.security.cert.CertificateException {
-    ctor public CertificateNotYetValidException(java.lang.String);
     ctor public CertificateNotYetValidException();
+    ctor public CertificateNotYetValidException(java.lang.String);
   }
 
   public class CertificateParsingException extends java.security.cert.CertificateException {
-    ctor public CertificateParsingException(java.lang.String);
     ctor public CertificateParsingException();
+    ctor public CertificateParsingException(java.lang.String);
     ctor public CertificateParsingException(java.lang.String, java.lang.Throwable);
     ctor public CertificateParsingException(java.lang.Throwable);
   }
 
+  public class CertificateRevokedException extends java.security.cert.CertificateException {
+    ctor public CertificateRevokedException(java.util.Date, java.security.cert.CRLReason, javax.security.auth.x500.X500Principal, java.util.Map<java.lang.String, java.security.cert.Extension>);
+    method public javax.security.auth.x500.X500Principal getAuthorityName();
+    method public java.util.Map<java.lang.String, java.security.cert.Extension> getExtensions();
+    method public java.util.Date getInvalidityDate();
+    method public java.util.Date getRevocationDate();
+    method public java.security.cert.CRLReason getRevocationReason();
+  }
+
   public class CollectionCertStoreParameters implements java.security.cert.CertStoreParameters {
-    ctor public CollectionCertStoreParameters();
     ctor public CollectionCertStoreParameters(java.util.Collection<?>);
+    ctor public CollectionCertStoreParameters();
     method public java.lang.Object clone();
     method public java.util.Collection<?> getCollection();
   }
 
+  public abstract interface Extension {
+    method public abstract void encode(java.io.OutputStream) throws java.io.IOException;
+    method public abstract java.lang.String getId();
+    method public abstract byte[] getValue();
+    method public abstract boolean isCritical();
+  }
+
   public class LDAPCertStoreParameters implements java.security.cert.CertStoreParameters {
     ctor public LDAPCertStoreParameters(java.lang.String, int);
-    ctor public LDAPCertStoreParameters();
     ctor public LDAPCertStoreParameters(java.lang.String);
+    ctor public LDAPCertStoreParameters();
     method public java.lang.Object clone();
     method public int getPort();
     method public java.lang.String getServerName();
@@ -51206,6 +52266,19 @@
     method public void setTrustAnchors(java.util.Set<java.security.cert.TrustAnchor>) throws java.security.InvalidAlgorithmParameterException;
   }
 
+  public final class PKIXReason extends java.lang.Enum implements java.security.cert.CertPathValidatorException.Reason {
+    method public static java.security.cert.PKIXReason valueOf(java.lang.String);
+    method public static final java.security.cert.PKIXReason[] values();
+    enum_constant public static final java.security.cert.PKIXReason INVALID_KEY_USAGE;
+    enum_constant public static final java.security.cert.PKIXReason INVALID_NAME;
+    enum_constant public static final java.security.cert.PKIXReason INVALID_POLICY;
+    enum_constant public static final java.security.cert.PKIXReason NAME_CHAINING;
+    enum_constant public static final java.security.cert.PKIXReason NOT_CA_CERT;
+    enum_constant public static final java.security.cert.PKIXReason NO_TRUST_ANCHOR;
+    enum_constant public static final java.security.cert.PKIXReason PATH_TOO_LONG;
+    enum_constant public static final java.security.cert.PKIXReason UNRECOGNIZED_CRIT_EXT;
+  }
+
   public abstract interface PolicyNode {
     method public abstract java.util.Iterator<? extends java.security.cert.PolicyNode> getChildren();
     method public abstract int getDepth();
@@ -51225,8 +52298,8 @@
 
   public class TrustAnchor {
     ctor public TrustAnchor(java.security.cert.X509Certificate, byte[]);
-    ctor public TrustAnchor(java.lang.String, java.security.PublicKey, byte[]);
     ctor public TrustAnchor(javax.security.auth.x500.X500Principal, java.security.PublicKey, byte[]);
+    ctor public TrustAnchor(java.lang.String, java.security.PublicKey, byte[]);
     method public final javax.security.auth.x500.X500Principal getCA();
     method public final java.lang.String getCAName();
     method public final java.security.PublicKey getCAPublicKey();
@@ -51259,6 +52332,7 @@
     method public javax.security.auth.x500.X500Principal getCertificateIssuer();
     method public abstract byte[] getEncoded() throws java.security.cert.CRLException;
     method public abstract java.util.Date getRevocationDate();
+    method public java.security.cert.CRLReason getRevocationReason();
     method public abstract java.math.BigInteger getSerialNumber();
     method public abstract boolean hasExtensions();
     method public abstract java.lang.String toString();
@@ -51534,8 +52608,8 @@
   }
 
   public class EllipticCurve {
-    ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]);
     ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger);
+    ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]);
     method public java.math.BigInteger getA();
     method public java.math.BigInteger getB();
     method public java.security.spec.ECField getField();
@@ -51549,15 +52623,15 @@
   }
 
   public class InvalidKeySpecException extends java.security.GeneralSecurityException {
-    ctor public InvalidKeySpecException(java.lang.String);
     ctor public InvalidKeySpecException();
+    ctor public InvalidKeySpecException(java.lang.String);
     ctor public InvalidKeySpecException(java.lang.String, java.lang.Throwable);
     ctor public InvalidKeySpecException(java.lang.Throwable);
   }
 
   public class InvalidParameterSpecException extends java.security.GeneralSecurityException {
-    ctor public InvalidParameterSpecException(java.lang.String);
     ctor public InvalidParameterSpecException();
+    ctor public InvalidParameterSpecException(java.lang.String);
   }
 
   public abstract interface KeySpec {
@@ -51578,8 +52652,8 @@
   }
 
   public class PSSParameterSpec implements java.security.spec.AlgorithmParameterSpec {
-    ctor public PSSParameterSpec(int);
     ctor public PSSParameterSpec(java.lang.String, java.lang.String, java.security.spec.AlgorithmParameterSpec, int, int);
+    ctor public PSSParameterSpec(int);
     method public java.lang.String getDigestAlgorithm();
     method public java.lang.String getMGFAlgorithm();
     method public java.security.spec.AlgorithmParameterSpec getMGFParameters();
@@ -51648,28 +52722,28 @@
   public abstract interface Array {
     method public abstract void free() throws java.sql.SQLException;
     method public abstract java.lang.Object getArray() throws java.sql.SQLException;
+    method public abstract java.lang.Object getArray(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.lang.Object getArray(long, int) throws java.sql.SQLException;
     method public abstract java.lang.Object getArray(long, int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
-    method public abstract java.lang.Object getArray(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract int getBaseType() throws java.sql.SQLException;
     method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException;
     method public abstract java.sql.ResultSet getResultSet() throws java.sql.SQLException;
+    method public abstract java.sql.ResultSet getResultSet(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.sql.ResultSet getResultSet(long, int) throws java.sql.SQLException;
     method public abstract java.sql.ResultSet getResultSet(long, int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
-    method public abstract java.sql.ResultSet getResultSet(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
   }
 
-  public class BatchUpdateException extends java.sql.SQLException implements java.io.Serializable {
+  public class BatchUpdateException extends java.sql.SQLException {
+    ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[]);
+    ctor public BatchUpdateException(java.lang.String, java.lang.String, int[]);
+    ctor public BatchUpdateException(java.lang.String, int[]);
+    ctor public BatchUpdateException(int[]);
     ctor public BatchUpdateException();
     ctor public BatchUpdateException(java.lang.Throwable);
     ctor public BatchUpdateException(int[], java.lang.Throwable);
     ctor public BatchUpdateException(java.lang.String, int[], java.lang.Throwable);
     ctor public BatchUpdateException(java.lang.String, java.lang.String, int[], java.lang.Throwable);
     ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[], java.lang.Throwable);
-    ctor public BatchUpdateException(int[]);
-    ctor public BatchUpdateException(java.lang.String, int[]);
-    ctor public BatchUpdateException(java.lang.String, java.lang.String, int[]);
-    ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[]);
     method public int[] getUpdateCounts();
   }
 
@@ -51679,8 +52753,8 @@
     method public abstract java.io.InputStream getBinaryStream(long, long) throws java.sql.SQLException;
     method public abstract byte[] getBytes(long, int) throws java.sql.SQLException;
     method public abstract long length() throws java.sql.SQLException;
-    method public abstract long position(java.sql.Blob, long) throws java.sql.SQLException;
     method public abstract long position(byte[], long) throws java.sql.SQLException;
+    method public abstract long position(java.sql.Blob, long) throws java.sql.SQLException;
     method public abstract java.io.OutputStream setBinaryStream(long) throws java.sql.SQLException;
     method public abstract int setBytes(long, byte[]) throws java.sql.SQLException;
     method public abstract int setBytes(long, byte[], int, int) throws java.sql.SQLException;
@@ -51690,8 +52764,8 @@
   public abstract interface CallableStatement implements java.sql.PreparedStatement {
     method public abstract java.sql.Array getArray(int) throws java.sql.SQLException;
     method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException;
-    method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
     method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException;
+    method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
     method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException;
     method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException;
     method public abstract java.sql.Blob getBlob(java.lang.String) throws java.sql.SQLException;
@@ -51786,9 +52860,9 @@
     method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException;
     method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException;
-    method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
-    method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
     method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException;
+    method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
     method public abstract void setRowId(java.lang.String, java.sql.RowId) throws java.sql.SQLException;
     method public abstract void setSQLXML(java.lang.String, java.sql.SQLXML) throws java.sql.SQLException;
     method public abstract void setShort(java.lang.String, short) throws java.sql.SQLException;
@@ -51817,8 +52891,8 @@
     method public abstract java.io.Reader getCharacterStream(long, long) throws java.sql.SQLException;
     method public abstract java.lang.String getSubString(long, int) throws java.sql.SQLException;
     method public abstract long length() throws java.sql.SQLException;
-    method public abstract long position(java.sql.Clob, long) throws java.sql.SQLException;
     method public abstract long position(java.lang.String, long) throws java.sql.SQLException;
+    method public abstract long position(java.sql.Clob, long) throws java.sql.SQLException;
     method public abstract java.io.OutputStream setAsciiStream(long) throws java.sql.SQLException;
     method public abstract java.io.Writer setCharacterStream(long) throws java.sql.SQLException;
     method public abstract int setString(long, java.lang.String) throws java.sql.SQLException;
@@ -51856,10 +52930,10 @@
     method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int) throws java.sql.SQLException;
     method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int, int) throws java.sql.SQLException;
     method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String) throws java.sql.SQLException;
-    method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int) throws java.sql.SQLException;
-    method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int[]) throws java.sql.SQLException;
     method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int) throws java.sql.SQLException;
     method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int, int) throws java.sql.SQLException;
+    method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int) throws java.sql.SQLException;
+    method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int[]) throws java.sql.SQLException;
     method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, java.lang.String[]) throws java.sql.SQLException;
     method public abstract void releaseSavepoint(java.sql.Savepoint) throws java.sql.SQLException;
     method public abstract void rollback() throws java.sql.SQLException;
@@ -51881,7 +52955,7 @@
     field public static final int TRANSACTION_SERIALIZABLE = 8; // 0x8
   }
 
-  public class DataTruncation extends java.sql.SQLWarning implements java.io.Serializable {
+  public class DataTruncation extends java.sql.SQLWarning {
     ctor public DataTruncation(int, boolean, boolean, int, int);
     ctor public DataTruncation(int, boolean, boolean, int, int, java.lang.Throwable);
     method public int getDataSize();
@@ -52143,17 +53217,17 @@
   }
 
   public class DriverManager {
-    method public static void deregisterDriver(java.sql.Driver) throws java.sql.SQLException;
-    method public static java.sql.Connection getConnection(java.lang.String) throws java.sql.SQLException;
+    method public static synchronized void deregisterDriver(java.sql.Driver) throws java.sql.SQLException;
     method public static java.sql.Connection getConnection(java.lang.String, java.util.Properties) throws java.sql.SQLException;
     method public static java.sql.Connection getConnection(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException;
+    method public static java.sql.Connection getConnection(java.lang.String) throws java.sql.SQLException;
     method public static java.sql.Driver getDriver(java.lang.String) throws java.sql.SQLException;
     method public static java.util.Enumeration<java.sql.Driver> getDrivers();
     method public static deprecated java.io.PrintStream getLogStream();
     method public static java.io.PrintWriter getLogWriter();
     method public static int getLoginTimeout();
     method public static void println(java.lang.String);
-    method public static void registerDriver(java.sql.Driver) throws java.sql.SQLException;
+    method public static synchronized void registerDriver(java.sql.Driver) throws java.sql.SQLException;
     method public static deprecated void setLogStream(java.io.PrintStream);
     method public static void setLogWriter(java.io.PrintWriter);
     method public static void setLoginTimeout(int);
@@ -52232,8 +53306,8 @@
     method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(int, int) throws java.sql.SQLException;
     method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException;
-    method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException;
     method public abstract void setRef(int, java.sql.Ref) throws java.sql.SQLException;
     method public abstract void setRowId(int, java.sql.RowId) throws java.sql.SQLException;
@@ -52250,8 +53324,8 @@
 
   public abstract interface Ref {
     method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException;
-    method public abstract java.lang.Object getObject() throws java.sql.SQLException;
     method public abstract java.lang.Object getObject(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
+    method public abstract java.lang.Object getObject() throws java.sql.SQLException;
     method public abstract void setObject(java.lang.Object) throws java.sql.SQLException;
   }
 
@@ -52269,10 +53343,10 @@
     method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException;
     method public abstract java.io.InputStream getAsciiStream(int) throws java.sql.SQLException;
     method public abstract java.io.InputStream getAsciiStream(java.lang.String) throws java.sql.SQLException;
-    method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
     method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException;
-    method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException;
     method public abstract deprecated java.math.BigDecimal getBigDecimal(java.lang.String, int) throws java.sql.SQLException;
+    method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
+    method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException;
     method public abstract java.io.InputStream getBinaryStream(int) throws java.sql.SQLException;
     method public abstract java.io.InputStream getBinaryStream(java.lang.String) throws java.sql.SQLException;
     method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException;
@@ -52290,8 +53364,8 @@
     method public abstract int getConcurrency() throws java.sql.SQLException;
     method public abstract java.lang.String getCursorName() throws java.sql.SQLException;
     method public abstract java.sql.Date getDate(int) throws java.sql.SQLException;
-    method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Date getDate(java.lang.String) throws java.sql.SQLException;
+    method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Date getDate(java.lang.String, java.util.Calendar) throws java.sql.SQLException;
     method public abstract double getDouble(int) throws java.sql.SQLException;
     method public abstract double getDouble(java.lang.String) throws java.sql.SQLException;
@@ -52312,8 +53386,8 @@
     method public abstract java.lang.String getNString(int) throws java.sql.SQLException;
     method public abstract java.lang.String getNString(java.lang.String) throws java.sql.SQLException;
     method public abstract java.lang.Object getObject(int) throws java.sql.SQLException;
-    method public abstract java.lang.Object getObject(int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.lang.Object getObject(java.lang.String) throws java.sql.SQLException;
+    method public abstract java.lang.Object getObject(int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.lang.Object getObject(java.lang.String, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException;
     method public abstract java.sql.Ref getRef(int) throws java.sql.SQLException;
     method public abstract java.sql.Ref getRef(java.lang.String) throws java.sql.SQLException;
@@ -52328,12 +53402,12 @@
     method public abstract java.lang.String getString(int) throws java.sql.SQLException;
     method public abstract java.lang.String getString(java.lang.String) throws java.sql.SQLException;
     method public abstract java.sql.Time getTime(int) throws java.sql.SQLException;
-    method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Time getTime(java.lang.String) throws java.sql.SQLException;
+    method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Time getTime(java.lang.String, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException;
-    method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Timestamp getTimestamp(java.lang.String) throws java.sql.SQLException;
+    method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException;
     method public abstract java.sql.Timestamp getTimestamp(java.lang.String, java.util.Calendar) throws java.sql.SQLException;
     method public abstract int getType() throws java.sql.SQLException;
     method public abstract java.net.URL getURL(int) throws java.sql.SQLException;
@@ -52423,10 +53497,10 @@
     method public abstract void updateNString(java.lang.String, java.lang.String) throws java.sql.SQLException;
     method public abstract void updateNull(int) throws java.sql.SQLException;
     method public abstract void updateNull(java.lang.String) throws java.sql.SQLException;
-    method public abstract void updateObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void updateObject(int, java.lang.Object, int) throws java.sql.SQLException;
-    method public abstract void updateObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
+    method public abstract void updateObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void updateObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void updateObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
     method public abstract void updateRef(int, java.sql.Ref) throws java.sql.SQLException;
     method public abstract void updateRef(java.lang.String, java.sql.Ref) throws java.sql.SQLException;
     method public abstract void updateRow() throws java.sql.SQLException;
@@ -52505,10 +53579,10 @@
     ctor public SQLClientInfoException(java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
     ctor public SQLClientInfoException(java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>);
     ctor public SQLClientInfoException(java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
-    ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>);
-    ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
     ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>);
     ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
+    ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable);
     method public java.util.Map<java.lang.String, java.sql.ClientInfoStatus> getFailedProperties();
   }
 
@@ -52529,11 +53603,11 @@
     ctor public SQLDataException(java.lang.String, java.lang.String, int, java.lang.Throwable);
   }
 
-  public class SQLException extends java.lang.Exception implements java.lang.Iterable java.io.Serializable {
-    ctor public SQLException();
-    ctor public SQLException(java.lang.String);
-    ctor public SQLException(java.lang.String, java.lang.String);
+  public class SQLException extends java.lang.Exception implements java.lang.Iterable {
     ctor public SQLException(java.lang.String, java.lang.String, int);
+    ctor public SQLException(java.lang.String, java.lang.String);
+    ctor public SQLException(java.lang.String);
+    ctor public SQLException();
     ctor public SQLException(java.lang.Throwable);
     ctor public SQLException(java.lang.String, java.lang.Throwable);
     ctor public SQLException(java.lang.String, java.lang.String, java.lang.Throwable);
@@ -52660,7 +53734,7 @@
     method public abstract void writeURL(java.net.URL) throws java.sql.SQLException;
   }
 
-  public final class SQLPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable {
+  public final class SQLPermission extends java.security.BasicPermission {
     ctor public SQLPermission(java.lang.String);
     ctor public SQLPermission(java.lang.String, java.lang.String);
   }
@@ -52731,11 +53805,11 @@
     ctor public SQLTransientException(java.lang.String, java.lang.String, int, java.lang.Throwable);
   }
 
-  public class SQLWarning extends java.sql.SQLException implements java.io.Serializable {
-    ctor public SQLWarning();
-    ctor public SQLWarning(java.lang.String);
-    ctor public SQLWarning(java.lang.String, java.lang.String);
+  public class SQLWarning extends java.sql.SQLException {
     ctor public SQLWarning(java.lang.String, java.lang.String, int);
+    ctor public SQLWarning(java.lang.String, java.lang.String);
+    ctor public SQLWarning(java.lang.String);
+    ctor public SQLWarning();
     ctor public SQLWarning(java.lang.Throwable);
     ctor public SQLWarning(java.lang.String, java.lang.Throwable);
     ctor public SQLWarning(java.lang.String, java.lang.String, java.lang.Throwable);
@@ -52824,15 +53898,15 @@
   }
 
   public class Timestamp extends java.util.Date {
-    ctor public deprecated Timestamp(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
+    ctor public deprecated Timestamp(int, int, int, int, int, int, int);
     ctor public Timestamp(long);
     method public boolean after(java.sql.Timestamp);
     method public boolean before(java.sql.Timestamp);
     method public int compareTo(java.sql.Timestamp);
     method public boolean equals(java.sql.Timestamp);
     method public int getNanos();
-    method public void setNanos(int) throws java.lang.IllegalArgumentException;
-    method public static java.sql.Timestamp valueOf(java.lang.String) throws java.lang.IllegalArgumentException;
+    method public void setNanos(int);
+    method public static java.sql.Timestamp valueOf(java.lang.String);
   }
 
   public class Types {
@@ -52912,11 +53986,11 @@
   }
 
   public class AttributedString {
+    ctor public AttributedString(java.lang.String);
+    ctor public AttributedString(java.lang.String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>);
     ctor public AttributedString(java.text.AttributedCharacterIterator);
     ctor public AttributedString(java.text.AttributedCharacterIterator, int, int);
     ctor public AttributedString(java.text.AttributedCharacterIterator, int, int, java.text.AttributedCharacterIterator.Attribute[]);
-    ctor public AttributedString(java.lang.String);
-    ctor public AttributedString(java.lang.String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>);
     method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object);
     method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object, int, int);
     method public void addAttributes(java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>, int, int);
@@ -52926,9 +54000,9 @@
   }
 
   public final class Bidi {
+    ctor public Bidi(java.lang.String, int);
     ctor public Bidi(java.text.AttributedCharacterIterator);
     ctor public Bidi(char[], int, byte[], int, int, int);
-    ctor public Bidi(java.lang.String, int);
     method public boolean baseIsLeftToRight();
     method public java.text.Bidi createLineBidi(int, int);
     method public int getBaseLevel();
@@ -52955,7 +54029,7 @@
     method public abstract int current();
     method public abstract int first();
     method public abstract int following(int);
-    method public static java.util.Locale[] getAvailableLocales();
+    method public static synchronized java.util.Locale[] getAvailableLocales();
     method public static java.text.BreakIterator getCharacterInstance();
     method public static java.text.BreakIterator getCharacterInstance(java.util.Locale);
     method public static java.text.BreakIterator getLineInstance();
@@ -52967,8 +54041,8 @@
     method public static java.text.BreakIterator getWordInstance(java.util.Locale);
     method public boolean isBoundary(int);
     method public abstract int last();
-    method public abstract int next();
     method public abstract int next(int);
+    method public abstract int next();
     method public int preceding(int);
     method public abstract int previous();
     method public void setText(java.lang.String);
@@ -52991,11 +54065,11 @@
   }
 
   public class ChoiceFormat extends java.text.NumberFormat {
-    ctor public ChoiceFormat(double[], java.lang.String[]);
     ctor public ChoiceFormat(java.lang.String);
+    ctor public ChoiceFormat(double[], java.lang.String[]);
     method public void applyPattern(java.lang.String);
-    method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
+    method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.Object[] getFormats();
     method public double[] getLimits();
     method public static final double nextDouble(double);
@@ -53015,8 +54089,8 @@
     method public void reset();
     method public static final short secondaryOrder(int);
     method public void setOffset(int);
-    method public void setText(java.text.CharacterIterator);
     method public void setText(java.lang.String);
+    method public void setText(java.text.CharacterIterator);
     method public static final short tertiaryOrder(int);
     field public static final int NULLORDER = -1; // 0xffffffff
   }
@@ -53031,18 +54105,18 @@
   public abstract class Collator implements java.lang.Cloneable java.util.Comparator {
     ctor protected Collator();
     method public java.lang.Object clone();
-    method public int compare(java.lang.Object, java.lang.Object);
     method public abstract int compare(java.lang.String, java.lang.String);
+    method public int compare(java.lang.Object, java.lang.Object);
     method public boolean equals(java.lang.String, java.lang.String);
-    method public static java.util.Locale[] getAvailableLocales();
+    method public static synchronized java.util.Locale[] getAvailableLocales();
     method public abstract java.text.CollationKey getCollationKey(java.lang.String);
-    method public int getDecomposition();
-    method public static java.text.Collator getInstance();
-    method public static java.text.Collator getInstance(java.util.Locale);
-    method public int getStrength();
+    method public synchronized int getDecomposition();
+    method public static synchronized java.text.Collator getInstance();
+    method public static synchronized java.text.Collator getInstance(java.util.Locale);
+    method public synchronized int getStrength();
     method public abstract int hashCode();
-    method public void setDecomposition(int);
-    method public void setStrength(int);
+    method public synchronized void setDecomposition(int);
+    method public synchronized void setStrength(int);
     field public static final int CANONICAL_DECOMPOSITION = 1; // 0x1
     field public static final int FULL_DECOMPOSITION = 2; // 0x2
     field public static final int IDENTICAL = 3; // 0x3
@@ -53055,8 +54129,8 @@
   public abstract class DateFormat extends java.text.Format {
     ctor protected DateFormat();
     method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
-    method public final java.lang.String format(java.util.Date);
     method public abstract java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition);
+    method public final java.lang.String format(java.util.Date);
     method public static java.util.Locale[] getAvailableLocales();
     method public java.util.Calendar getCalendar();
     method public static final java.text.DateFormat getDateInstance();
@@ -53161,9 +54235,9 @@
     ctor public DecimalFormat(java.lang.String, java.text.DecimalFormatSymbols);
     method public void applyLocalizedPattern(java.lang.String);
     method public void applyPattern(java.lang.String);
+    method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
-    method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.text.DecimalFormatSymbols getDecimalFormatSymbols();
     method public int getGroupingSize();
     method public int getMultiplier();
@@ -53199,15 +54273,17 @@
     method public java.lang.String getExponentSeparator();
     method public char getGroupingSeparator();
     method public java.lang.String getInfinity();
-    method public static java.text.DecimalFormatSymbols getInstance();
-    method public static java.text.DecimalFormatSymbols getInstance(java.util.Locale);
+    method public static final java.text.DecimalFormatSymbols getInstance();
+    method public static final java.text.DecimalFormatSymbols getInstance(java.util.Locale);
     method public java.lang.String getInternationalCurrencySymbol();
     method public char getMinusSign();
+    method public java.lang.String getMinusSignString();
     method public char getMonetaryDecimalSeparator();
     method public java.lang.String getNaN();
     method public char getPatternSeparator();
     method public char getPerMill();
     method public char getPercent();
+    method public java.lang.String getPercentString();
     method public char getZeroDigit();
     method public void setCurrency(java.util.Currency);
     method public void setCurrencySymbol(java.lang.String);
@@ -53244,8 +54320,8 @@
     method public final java.lang.String format(java.lang.Object);
     method public abstract java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object);
-    method public java.lang.Object parseObject(java.lang.String) throws java.text.ParseException;
     method public abstract java.lang.Object parseObject(java.lang.String, java.text.ParsePosition);
+    method public java.lang.Object parseObject(java.lang.String) throws java.text.ParseException;
   }
 
   public static class Format.Field extends java.text.AttributedCharacterIterator.Attribute {
@@ -53253,17 +54329,17 @@
   }
 
   public class MessageFormat extends java.text.Format {
-    ctor public MessageFormat(java.lang.String, java.util.Locale);
     ctor public MessageFormat(java.lang.String);
+    ctor public MessageFormat(java.lang.String, java.util.Locale);
     method public void applyPattern(java.lang.String);
     method public final java.lang.StringBuffer format(java.lang.Object[], java.lang.StringBuffer, java.text.FieldPosition);
-    method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public static java.lang.String format(java.lang.String, java.lang.Object...);
+    method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.text.Format[] getFormats();
     method public java.text.Format[] getFormatsByArgumentIndex();
     method public java.util.Locale getLocale();
-    method public java.lang.Object[] parse(java.lang.String) throws java.text.ParseException;
     method public java.lang.Object[] parse(java.lang.String, java.text.ParsePosition);
+    method public java.lang.Object[] parse(java.lang.String) throws java.text.ParseException;
     method public java.lang.Object parseObject(java.lang.String, java.text.ParsePosition);
     method public void setFormat(int, java.text.Format);
     method public void setFormatByArgumentIndex(int, java.text.Format);
@@ -53294,11 +54370,11 @@
 
   public abstract class NumberFormat extends java.text.Format {
     ctor protected NumberFormat();
-    method public final java.lang.String format(double);
-    method public abstract java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
-    method public final java.lang.String format(long);
-    method public abstract java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
+    method public final java.lang.String format(double);
+    method public final java.lang.String format(long);
+    method public abstract java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
+    method public abstract java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
     method public static java.util.Locale[] getAvailableLocales();
     method public java.util.Currency getCurrency();
     method public static final java.text.NumberFormat getCurrencyInstance();
@@ -53318,8 +54394,8 @@
     method public java.math.RoundingMode getRoundingMode();
     method public boolean isGroupingUsed();
     method public boolean isParseIntegerOnly();
-    method public java.lang.Number parse(java.lang.String) throws java.text.ParseException;
     method public abstract java.lang.Number parse(java.lang.String, java.text.ParsePosition);
+    method public java.lang.Number parse(java.lang.String) throws java.text.ParseException;
     method public final java.lang.Object parseObject(java.lang.String, java.text.ParsePosition);
     method public void setCurrency(java.util.Currency);
     method public void setGroupingUsed(boolean);
@@ -53363,10 +54439,10 @@
 
   public class RuleBasedCollator extends java.text.Collator {
     ctor public RuleBasedCollator(java.lang.String) throws java.text.ParseException;
-    method public int compare(java.lang.String, java.lang.String);
-    method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
+    method public synchronized int compare(java.lang.String, java.lang.String);
     method public java.text.CollationElementIterator getCollationElementIterator(java.lang.String);
-    method public java.text.CollationKey getCollationKey(java.lang.String);
+    method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
+    method public synchronized java.text.CollationKey getCollationKey(java.lang.String);
     method public java.lang.String getRules();
     method public int hashCode();
   }
@@ -53374,8 +54450,8 @@
   public class SimpleDateFormat extends java.text.DateFormat {
     ctor public SimpleDateFormat();
     ctor public SimpleDateFormat(java.lang.String);
-    ctor public SimpleDateFormat(java.lang.String, java.text.DateFormatSymbols);
     ctor public SimpleDateFormat(java.lang.String, java.util.Locale);
+    ctor public SimpleDateFormat(java.lang.String, java.text.DateFormatSymbols);
     method public void applyLocalizedPattern(java.lang.String);
     method public void applyPattern(java.lang.String);
     method public java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition);
@@ -53522,7 +54598,7 @@
     method public int size();
   }
 
-  public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.RandomAccess java.io.Serializable {
+  public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public ArrayList(int);
     ctor public ArrayList();
     ctor public ArrayList(java.util.Collection<? extends E>);
@@ -53535,109 +54611,109 @@
 
   public class Arrays {
     method public static java.util.List<T> asList(T...);
-    method public static int binarySearch(byte[], byte);
-    method public static int binarySearch(byte[], int, int, byte);
+    method public static int binarySearch(long[], long);
+    method public static int binarySearch(long[], int, int, long);
+    method public static int binarySearch(int[], int);
+    method public static int binarySearch(int[], int, int, int);
+    method public static int binarySearch(short[], short);
+    method public static int binarySearch(short[], int, int, short);
     method public static int binarySearch(char[], char);
     method public static int binarySearch(char[], int, int, char);
+    method public static int binarySearch(byte[], byte);
+    method public static int binarySearch(byte[], int, int, byte);
     method public static int binarySearch(double[], double);
     method public static int binarySearch(double[], int, int, double);
     method public static int binarySearch(float[], float);
     method public static int binarySearch(float[], int, int, float);
-    method public static int binarySearch(int[], int);
-    method public static int binarySearch(int[], int, int, int);
-    method public static int binarySearch(long[], long);
-    method public static int binarySearch(long[], int, int, long);
     method public static int binarySearch(java.lang.Object[], java.lang.Object);
     method public static int binarySearch(java.lang.Object[], int, int, java.lang.Object);
     method public static int binarySearch(T[], T, java.util.Comparator<? super T>);
     method public static int binarySearch(T[], int, int, T, java.util.Comparator<? super T>);
-    method public static int binarySearch(short[], short);
-    method public static int binarySearch(short[], int, int, short);
-    method public static boolean[] copyOf(boolean[], int);
-    method public static byte[] copyOf(byte[], int);
-    method public static char[] copyOf(char[], int);
-    method public static double[] copyOf(double[], int);
-    method public static float[] copyOf(float[], int);
-    method public static int[] copyOf(int[], int);
-    method public static long[] copyOf(long[], int);
-    method public static short[] copyOf(short[], int);
     method public static T[] copyOf(T[], int);
     method public static T[] copyOf(U[], int, java.lang.Class<? extends T[]>);
-    method public static boolean[] copyOfRange(boolean[], int, int);
-    method public static byte[] copyOfRange(byte[], int, int);
-    method public static char[] copyOfRange(char[], int, int);
-    method public static double[] copyOfRange(double[], int, int);
-    method public static float[] copyOfRange(float[], int, int);
-    method public static int[] copyOfRange(int[], int, int);
-    method public static long[] copyOfRange(long[], int, int);
-    method public static short[] copyOfRange(short[], int, int);
+    method public static byte[] copyOf(byte[], int);
+    method public static short[] copyOf(short[], int);
+    method public static int[] copyOf(int[], int);
+    method public static long[] copyOf(long[], int);
+    method public static char[] copyOf(char[], int);
+    method public static float[] copyOf(float[], int);
+    method public static double[] copyOf(double[], int);
+    method public static boolean[] copyOf(boolean[], int);
     method public static T[] copyOfRange(T[], int, int);
     method public static T[] copyOfRange(U[], int, int, java.lang.Class<? extends T[]>);
+    method public static byte[] copyOfRange(byte[], int, int);
+    method public static short[] copyOfRange(short[], int, int);
+    method public static int[] copyOfRange(int[], int, int);
+    method public static long[] copyOfRange(long[], int, int);
+    method public static char[] copyOfRange(char[], int, int);
+    method public static float[] copyOfRange(float[], int, int);
+    method public static double[] copyOfRange(double[], int, int);
+    method public static boolean[] copyOfRange(boolean[], int, int);
     method public static boolean deepEquals(java.lang.Object[], java.lang.Object[]);
     method public static int deepHashCode(java.lang.Object[]);
     method public static java.lang.String deepToString(java.lang.Object[]);
-    method public static boolean equals(byte[], byte[]);
+    method public static boolean equals(long[], long[]);
+    method public static boolean equals(int[], int[]);
     method public static boolean equals(short[], short[]);
     method public static boolean equals(char[], char[]);
-    method public static boolean equals(int[], int[]);
-    method public static boolean equals(long[], long[]);
-    method public static boolean equals(float[], float[]);
-    method public static boolean equals(double[], double[]);
+    method public static boolean equals(byte[], byte[]);
     method public static boolean equals(boolean[], boolean[]);
+    method public static boolean equals(double[], double[]);
+    method public static boolean equals(float[], float[]);
     method public static boolean equals(java.lang.Object[], java.lang.Object[]);
-    method public static void fill(byte[], byte);
-    method public static void fill(byte[], int, int, byte);
+    method public static void fill(long[], long);
+    method public static void fill(long[], int, int, long);
+    method public static void fill(int[], int);
+    method public static void fill(int[], int, int, int);
     method public static void fill(short[], short);
     method public static void fill(short[], int, int, short);
     method public static void fill(char[], char);
     method public static void fill(char[], int, int, char);
-    method public static void fill(int[], int);
-    method public static void fill(int[], int, int, int);
-    method public static void fill(long[], long);
-    method public static void fill(long[], int, int, long);
-    method public static void fill(float[], float);
-    method public static void fill(float[], int, int, float);
-    method public static void fill(double[], double);
-    method public static void fill(double[], int, int, double);
+    method public static void fill(byte[], byte);
+    method public static void fill(byte[], int, int, byte);
     method public static void fill(boolean[], boolean);
     method public static void fill(boolean[], int, int, boolean);
+    method public static void fill(double[], double);
+    method public static void fill(double[], int, int, double);
+    method public static void fill(float[], float);
+    method public static void fill(float[], int, int, float);
     method public static void fill(java.lang.Object[], java.lang.Object);
     method public static void fill(java.lang.Object[], int, int, java.lang.Object);
-    method public static int hashCode(boolean[]);
+    method public static int hashCode(long[]);
     method public static int hashCode(int[]);
     method public static int hashCode(short[]);
     method public static int hashCode(char[]);
     method public static int hashCode(byte[]);
-    method public static int hashCode(long[]);
+    method public static int hashCode(boolean[]);
     method public static int hashCode(float[]);
     method public static int hashCode(double[]);
     method public static int hashCode(java.lang.Object[]);
-    method public static void sort(byte[]);
-    method public static void sort(byte[], int, int);
-    method public static void sort(char[]);
-    method public static void sort(char[], int, int);
-    method public static void sort(double[]);
-    method public static void sort(double[], int, int);
-    method public static void sort(float[]);
-    method public static void sort(float[], int, int);
     method public static void sort(int[]);
     method public static void sort(int[], int, int);
     method public static void sort(long[]);
     method public static void sort(long[], int, int);
     method public static void sort(short[]);
     method public static void sort(short[], int, int);
+    method public static void sort(char[]);
+    method public static void sort(char[], int, int);
+    method public static void sort(byte[]);
+    method public static void sort(byte[], int, int);
+    method public static void sort(float[]);
+    method public static void sort(float[], int, int);
+    method public static void sort(double[]);
+    method public static void sort(double[], int, int);
     method public static void sort(java.lang.Object[]);
     method public static void sort(java.lang.Object[], int, int);
-    method public static void sort(T[], int, int, java.util.Comparator<? super T>);
     method public static void sort(T[], java.util.Comparator<? super T>);
-    method public static java.lang.String toString(boolean[]);
-    method public static java.lang.String toString(byte[]);
-    method public static java.lang.String toString(char[]);
-    method public static java.lang.String toString(double[]);
-    method public static java.lang.String toString(float[]);
-    method public static java.lang.String toString(int[]);
+    method public static void sort(T[], int, int, java.util.Comparator<? super T>);
     method public static java.lang.String toString(long[]);
+    method public static java.lang.String toString(int[]);
     method public static java.lang.String toString(short[]);
+    method public static java.lang.String toString(char[]);
+    method public static java.lang.String toString(byte[]);
+    method public static java.lang.String toString(boolean[]);
+    method public static java.lang.String toString(float[]);
+    method public static java.lang.String toString(double[]);
     method public static java.lang.String toString(java.lang.Object[]);
   }
 
@@ -53648,8 +54724,8 @@
     method public void andNot(java.util.BitSet);
     method public int cardinality();
     method public void clear(int);
-    method public void clear();
     method public void clear(int, int);
+    method public void clear();
     method public java.lang.Object clone();
     method public void flip(int);
     method public void flip(int, int);
@@ -53665,8 +54741,8 @@
     method public int previousSetBit(int);
     method public void set(int);
     method public void set(int, boolean);
-    method public void set(int, int, boolean);
     method public void set(int, int);
+    method public void set(int, int, boolean);
     method public int size();
     method public byte[] toByteArray();
     method public long[] toLongArray();
@@ -53698,10 +54774,10 @@
     method public java.util.Map<java.lang.String, java.lang.Integer> getDisplayNames(int, int, java.util.Locale);
     method public int getFirstDayOfWeek();
     method public abstract int getGreatestMinimum(int);
-    method public static synchronized java.util.Calendar getInstance();
-    method public static synchronized java.util.Calendar getInstance(java.util.Locale);
-    method public static synchronized java.util.Calendar getInstance(java.util.TimeZone);
-    method public static synchronized java.util.Calendar getInstance(java.util.TimeZone, java.util.Locale);
+    method public static java.util.Calendar getInstance();
+    method public static java.util.Calendar getInstance(java.util.TimeZone);
+    method public static java.util.Calendar getInstance(java.util.Locale);
+    method public static java.util.Calendar getInstance(java.util.TimeZone, java.util.Locale);
     method public abstract int getLeastMaximum(int);
     method public abstract int getMaximum(int);
     method public int getMinimalDaysInFirstWeek();
@@ -53709,11 +54785,14 @@
     method public final java.util.Date getTime();
     method public long getTimeInMillis();
     method public java.util.TimeZone getTimeZone();
+    method public int getWeekYear();
+    method public int getWeeksInWeekYear();
     method protected final int internalGet(int);
     method public boolean isLenient();
     method public final boolean isSet(int);
-    method public void roll(int, int);
+    method public boolean isWeekDateSupported();
     method public abstract void roll(int, boolean);
+    method public void roll(int, int);
     method public void set(int, int);
     method public final void set(int, int, int);
     method public final void set(int, int, int, int, int);
@@ -53724,6 +54803,7 @@
     method public final void setTime(java.util.Date);
     method public void setTimeInMillis(long);
     method public void setTimeZone(java.util.TimeZone);
+    method public void setWeekDate(int, int, int);
     field public static final int ALL_STYLES = 0; // 0x0
     field public static final int AM = 0; // 0x0
     field public static final int AM_PM = 9; // 0x9
@@ -53840,15 +54920,15 @@
     method public static java.util.Collection<T> synchronizedCollection(java.util.Collection<T>);
     method public static java.util.List<T> synchronizedList(java.util.List<T>);
     method public static java.util.Map<K, V> synchronizedMap(java.util.Map<K, V>);
-    method public static java.util.Set<E> synchronizedSet(java.util.Set<E>);
+    method public static java.util.Set<T> synchronizedSet(java.util.Set<T>);
     method public static java.util.SortedMap<K, V> synchronizedSortedMap(java.util.SortedMap<K, V>);
-    method public static java.util.SortedSet<E> synchronizedSortedSet(java.util.SortedSet<E>);
-    method public static java.util.Collection<E> unmodifiableCollection(java.util.Collection<? extends E>);
-    method public static java.util.List<E> unmodifiableList(java.util.List<? extends E>);
+    method public static java.util.SortedSet<T> synchronizedSortedSet(java.util.SortedSet<T>);
+    method public static java.util.Collection<T> unmodifiableCollection(java.util.Collection<? extends T>);
+    method public static java.util.List<T> unmodifiableList(java.util.List<? extends T>);
     method public static java.util.Map<K, V> unmodifiableMap(java.util.Map<? extends K, ? extends V>);
-    method public static java.util.Set<E> unmodifiableSet(java.util.Set<? extends E>);
+    method public static java.util.Set<T> unmodifiableSet(java.util.Set<? extends T>);
     method public static java.util.SortedMap<K, V> unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>);
-    method public static java.util.SortedSet<E> unmodifiableSortedSet(java.util.SortedSet<E>);
+    method public static java.util.SortedSet<T> unmodifiableSortedSet(java.util.SortedSet<T>);
     field public static final java.util.List EMPTY_LIST;
     field public static final java.util.Map EMPTY_MAP;
     field public static final java.util.Set EMPTY_SET;
@@ -53862,8 +54942,8 @@
   public class ConcurrentModificationException extends java.lang.RuntimeException {
     ctor public ConcurrentModificationException();
     ctor public ConcurrentModificationException(java.lang.String);
-    ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable);
     ctor public ConcurrentModificationException(java.lang.Throwable);
+    ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable);
   }
 
   public final class Currency implements java.io.Serializable {
@@ -53874,16 +54954,17 @@
     method public java.lang.String getDisplayName(java.util.Locale);
     method public static java.util.Currency getInstance(java.lang.String);
     method public static java.util.Currency getInstance(java.util.Locale);
+    method public int getNumericCode();
     method public java.lang.String getSymbol();
     method public java.lang.String getSymbol(java.util.Locale);
   }
 
   public class Date implements java.lang.Cloneable java.lang.Comparable java.io.Serializable {
     ctor public Date();
+    ctor public Date(long);
     ctor public deprecated Date(int, int, int);
     ctor public deprecated Date(int, int, int, int, int);
     ctor public deprecated Date(int, int, int, int, int, int);
-    ctor public Date(long);
     ctor public deprecated Date(java.lang.String);
     method public static deprecated long UTC(int, int, int, int, int, int);
     method public boolean after(java.util.Date);
@@ -53961,7 +55042,7 @@
     ctor public EmptyStackException();
   }
 
-  public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
     ctor public EnumMap(java.lang.Class<K>);
     ctor public EnumMap(java.util.EnumMap<K, ? extends V>);
     ctor public EnumMap(java.util.Map<K, ? extends V>);
@@ -53994,8 +55075,8 @@
   }
 
   public abstract class EventListenerProxy implements java.util.EventListener {
-    ctor public EventListenerProxy(java.util.EventListener);
-    method public java.util.EventListener getListener();
+    ctor public EventListenerProxy(T);
+    method public T getListener();
   }
 
   public class EventObject implements java.io.Serializable {
@@ -54004,14 +55085,14 @@
     field protected transient java.lang.Object source;
   }
 
-  public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException implements java.io.Serializable {
+  public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException {
     ctor public FormatFlagsConversionMismatchException(java.lang.String, char);
     method public char getConversion();
     method public java.lang.String getFlags();
   }
 
   public abstract interface Formattable {
-    method public abstract void formatTo(java.util.Formatter, int, int, int) throws java.util.IllegalFormatException;
+    method public abstract void formatTo(java.util.Formatter, int, int, int);
   }
 
   public class FormattableFlags {
@@ -54031,10 +55112,10 @@
     ctor public Formatter(java.io.File) throws java.io.FileNotFoundException;
     ctor public Formatter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     ctor public Formatter(java.io.File, java.lang.String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.PrintStream);
     ctor public Formatter(java.io.OutputStream);
     ctor public Formatter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException;
     ctor public Formatter(java.io.OutputStream, java.lang.String, java.util.Locale) throws java.io.UnsupportedEncodingException;
-    ctor public Formatter(java.io.PrintStream);
     method public void close();
     method public void flush();
     method public java.util.Formatter format(java.lang.String, java.lang.Object...);
@@ -54051,18 +55132,18 @@
     enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC;
   }
 
-  public class FormatterClosedException extends java.lang.IllegalStateException implements java.io.Serializable {
+  public class FormatterClosedException extends java.lang.IllegalStateException {
     ctor public FormatterClosedException();
   }
 
   public class GregorianCalendar extends java.util.Calendar {
     ctor public GregorianCalendar();
+    ctor public GregorianCalendar(java.util.TimeZone);
+    ctor public GregorianCalendar(java.util.Locale);
+    ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale);
     ctor public GregorianCalendar(int, int, int);
     ctor public GregorianCalendar(int, int, int, int, int);
     ctor public GregorianCalendar(int, int, int, int, int, int);
-    ctor public GregorianCalendar(java.util.Locale);
-    ctor public GregorianCalendar(java.util.TimeZone);
-    ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale);
     method public void add(int, int);
     method protected void computeFields();
     method protected void computeTime();
@@ -54072,16 +55153,17 @@
     method public int getMaximum(int);
     method public int getMinimum(int);
     method public boolean isLeapYear(int);
+    method public final boolean isWeekDateSupported();
     method public void roll(int, boolean);
     method public void setGregorianChange(java.util.Date);
     field public static final int AD = 1; // 0x1
     field public static final int BC = 0; // 0x0
   }
 
-  public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
-    ctor public HashMap();
-    ctor public HashMap(int);
+  public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public HashMap(int, float);
+    ctor public HashMap(int);
+    ctor public HashMap();
     ctor public HashMap(java.util.Map<? extends K, ? extends V>);
     method public java.lang.Object clone();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
@@ -54089,36 +55171,36 @@
 
   public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
     ctor public HashSet();
-    ctor public HashSet(int);
-    ctor public HashSet(int, float);
     ctor public HashSet(java.util.Collection<? extends E>);
+    ctor public HashSet(int, float);
+    ctor public HashSet(int);
     method public java.lang.Object clone();
     method public java.util.Iterator<E> iterator();
     method public int size();
   }
 
   public class Hashtable extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
-    ctor public Hashtable();
-    ctor public Hashtable(int);
     ctor public Hashtable(int, float);
+    ctor public Hashtable(int);
+    ctor public Hashtable();
     ctor public Hashtable(java.util.Map<? extends K, ? extends V>);
     method public synchronized void clear();
     method public synchronized java.lang.Object clone();
-    method public boolean contains(java.lang.Object);
+    method public synchronized boolean contains(java.lang.Object);
     method public synchronized boolean containsKey(java.lang.Object);
-    method public synchronized boolean containsValue(java.lang.Object);
+    method public boolean containsValue(java.lang.Object);
     method public synchronized java.util.Enumeration<V> elements();
-    method public synchronized java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+    method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public synchronized V get(java.lang.Object);
     method public synchronized boolean isEmpty();
-    method public synchronized java.util.Set<K> keySet();
+    method public java.util.Set<K> keySet();
     method public synchronized java.util.Enumeration<K> keys();
     method public synchronized V put(K, V);
     method public synchronized void putAll(java.util.Map<? extends K, ? extends V>);
     method protected void rehash();
     method public synchronized V remove(java.lang.Object);
     method public synchronized int size();
-    method public synchronized java.util.Collection<V> values();
+    method public java.util.Collection<V> values();
   }
 
   public class IdentityHashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
@@ -54129,21 +55211,21 @@
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
   }
 
-  public class IllegalFormatCodePointException extends java.util.IllegalFormatException implements java.io.Serializable {
+  public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
     ctor public IllegalFormatCodePointException(int);
     method public int getCodePoint();
   }
 
-  public class IllegalFormatConversionException extends java.util.IllegalFormatException implements java.io.Serializable {
+  public class IllegalFormatConversionException extends java.util.IllegalFormatException {
     ctor public IllegalFormatConversionException(char, java.lang.Class<?>);
     method public java.lang.Class<?> getArgumentClass();
     method public char getConversion();
   }
 
-  public class IllegalFormatException extends java.lang.IllegalArgumentException implements java.io.Serializable {
+  public class IllegalFormatException extends java.lang.IllegalArgumentException {
   }
 
-  public class IllegalFormatFlagsException extends java.util.IllegalFormatException implements java.io.Serializable {
+  public class IllegalFormatFlagsException extends java.util.IllegalFormatException {
     ctor public IllegalFormatFlagsException(java.lang.String);
     method public java.lang.String getFlags();
   }
@@ -54165,14 +55247,14 @@
     method public int getErrorIndex();
   }
 
-  public class InputMismatchException extends java.util.NoSuchElementException implements java.io.Serializable {
+  public class InputMismatchException extends java.util.NoSuchElementException {
     ctor public InputMismatchException();
     ctor public InputMismatchException(java.lang.String);
   }
 
   public class InvalidPropertiesFormatException extends java.io.IOException {
-    ctor public InvalidPropertiesFormatException(java.lang.String);
     ctor public InvalidPropertiesFormatException(java.lang.Throwable);
+    ctor public InvalidPropertiesFormatException(java.lang.String);
   }
 
   public abstract interface Iterator {
@@ -54181,23 +55263,23 @@
     method public abstract void remove();
   }
 
-  public class LinkedHashMap extends java.util.HashMap {
-    ctor public LinkedHashMap();
-    ctor public LinkedHashMap(int);
+  public class LinkedHashMap extends java.util.HashMap implements java.util.Map {
     ctor public LinkedHashMap(int, float);
-    ctor public LinkedHashMap(int, float, boolean);
+    ctor public LinkedHashMap(int);
+    ctor public LinkedHashMap();
     ctor public LinkedHashMap(java.util.Map<? extends K, ? extends V>);
+    ctor public LinkedHashMap(int, float, boolean);
     method protected boolean removeEldestEntry(java.util.Map.Entry<K, V>);
   }
 
   public class LinkedHashSet extends java.util.HashSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
-    ctor public LinkedHashSet();
-    ctor public LinkedHashSet(int);
     ctor public LinkedHashSet(int, float);
+    ctor public LinkedHashSet(int);
+    ctor public LinkedHashSet();
     ctor public LinkedHashSet(java.util.Collection<? extends E>);
   }
 
-  public class LinkedList extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.util.Queue java.io.Serializable {
+  public class LinkedList extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.io.Serializable {
     ctor public LinkedList();
     ctor public LinkedList(java.util.Collection<? extends E>);
     method public void addFirst(E);
@@ -54228,10 +55310,10 @@
   }
 
   public abstract interface List implements java.util.Collection {
-    method public abstract void add(int, E);
     method public abstract boolean add(E);
-    method public abstract boolean addAll(int, java.util.Collection<? extends E>);
+    method public abstract void add(int, E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
+    method public abstract boolean addAll(int, java.util.Collection<? extends E>);
     method public abstract void clear();
     method public abstract boolean contains(java.lang.Object);
     method public abstract boolean containsAll(java.util.Collection<?>);
@@ -54244,8 +55326,8 @@
     method public abstract int lastIndexOf(java.lang.Object);
     method public abstract java.util.ListIterator<E> listIterator();
     method public abstract java.util.ListIterator<E> listIterator(int);
-    method public abstract E remove(int);
     method public abstract boolean remove(java.lang.Object);
+    method public abstract E remove(int);
     method public abstract boolean removeAll(java.util.Collection<?>);
     method public abstract boolean retainAll(java.util.Collection<?>);
     method public abstract E set(int, E);
@@ -54275,14 +55357,15 @@
   }
 
   public final class Locale implements java.lang.Cloneable java.io.Serializable {
-    ctor public Locale(java.lang.String);
-    ctor public Locale(java.lang.String, java.lang.String);
     ctor public Locale(java.lang.String, java.lang.String, java.lang.String);
+    ctor public Locale(java.lang.String, java.lang.String);
+    ctor public Locale(java.lang.String);
     method public java.lang.Object clone();
     method public static java.util.Locale forLanguageTag(java.lang.String);
     method public static java.util.Locale[] getAvailableLocales();
     method public java.lang.String getCountry();
     method public static java.util.Locale getDefault();
+    method public static java.util.Locale getDefault(java.util.Locale.Category);
     method public final java.lang.String getDisplayCountry();
     method public java.lang.String getDisplayCountry(java.util.Locale);
     method public final java.lang.String getDisplayLanguage();
@@ -54295,8 +55378,8 @@
     method public java.lang.String getDisplayVariant(java.util.Locale);
     method public java.lang.String getExtension(char);
     method public java.util.Set<java.lang.Character> getExtensionKeys();
-    method public java.lang.String getISO3Country();
-    method public java.lang.String getISO3Language();
+    method public java.lang.String getISO3Country() throws java.util.MissingResourceException;
+    method public java.lang.String getISO3Language() throws java.util.MissingResourceException;
     method public static java.lang.String[] getISOCountries();
     method public static java.lang.String[] getISOLanguages();
     method public java.lang.String getLanguage();
@@ -54306,6 +55389,7 @@
     method public java.lang.String getUnicodeLocaleType(java.lang.String);
     method public java.lang.String getVariant();
     method public static synchronized void setDefault(java.util.Locale);
+    method public static synchronized void setDefault(java.util.Locale.Category, java.util.Locale);
     method public java.lang.String toLanguageTag();
     method public final java.lang.String toString();
     field public static final java.util.Locale CANADA;
@@ -54351,6 +55435,13 @@
     method public java.util.Locale.Builder setVariant(java.lang.String);
   }
 
+  public static final class Locale.Category extends java.lang.Enum {
+    method public static java.util.Locale.Category valueOf(java.lang.String);
+    method public static final java.util.Locale.Category[] values();
+    enum_constant public static final java.util.Locale.Category DISPLAY;
+    enum_constant public static final java.util.Locale.Category FORMAT;
+  }
+
   public abstract interface Map {
     method public abstract void clear();
     method public abstract boolean containsKey(java.lang.Object);
@@ -54453,15 +55544,15 @@
 
   public class Observable {
     ctor public Observable();
-    method public void addObserver(java.util.Observer);
-    method protected void clearChanged();
-    method public int countObservers();
+    method public synchronized void addObserver(java.util.Observer);
+    method protected synchronized void clearChanged();
+    method public synchronized int countObservers();
     method public synchronized void deleteObserver(java.util.Observer);
     method public synchronized void deleteObservers();
-    method public boolean hasChanged();
+    method public synchronized boolean hasChanged();
     method public void notifyObservers();
     method public void notifyObservers(java.lang.Object);
-    method protected void setChanged();
+    method protected synchronized void setChanged();
   }
 
   public abstract interface Observer {
@@ -54490,16 +55581,16 @@
     method public java.lang.String getProperty(java.lang.String, java.lang.String);
     method public void list(java.io.PrintStream);
     method public void list(java.io.PrintWriter);
-    method public synchronized void load(java.io.InputStream) throws java.io.IOException;
     method public synchronized void load(java.io.Reader) throws java.io.IOException;
+    method public synchronized void load(java.io.InputStream) throws java.io.IOException;
     method public synchronized void loadFromXML(java.io.InputStream) throws java.io.IOException, java.util.InvalidPropertiesFormatException;
     method public java.util.Enumeration<?> propertyNames();
     method public deprecated void save(java.io.OutputStream, java.lang.String);
-    method public java.lang.Object setProperty(java.lang.String, java.lang.String);
-    method public synchronized void store(java.io.OutputStream, java.lang.String) throws java.io.IOException;
-    method public synchronized void store(java.io.Writer, java.lang.String) throws java.io.IOException;
+    method public synchronized java.lang.Object setProperty(java.lang.String, java.lang.String);
+    method public void store(java.io.Writer, java.lang.String) throws java.io.IOException;
+    method public void store(java.io.OutputStream, java.lang.String) throws java.io.IOException;
     method public void storeToXML(java.io.OutputStream, java.lang.String) throws java.io.IOException;
-    method public synchronized void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException;
+    method public void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException;
     method public java.util.Set<java.lang.String> stringPropertyNames();
     field protected java.util.Properties defaults;
   }
@@ -54527,7 +55618,7 @@
   public class Random implements java.io.Serializable {
     ctor public Random();
     ctor public Random(long);
-    method protected synchronized int next(int);
+    method protected int next(int);
     method public boolean nextBoolean();
     method public void nextBytes(byte[]);
     method public double nextDouble();
@@ -54544,14 +55635,14 @@
 
   public abstract class ResourceBundle {
     ctor public ResourceBundle();
-    method public static void clearCache();
-    method public static void clearCache(java.lang.ClassLoader);
+    method public static final void clearCache();
+    method public static final void clearCache(java.lang.ClassLoader);
     method public boolean containsKey(java.lang.String);
-    method public static java.util.ResourceBundle getBundle(java.lang.String) throws java.util.MissingResourceException;
-    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale);
-    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader) throws java.util.MissingResourceException;
-    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control);
-    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle.Control);
+    method public static final java.util.ResourceBundle getBundle(java.lang.String);
+    method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control);
+    method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale);
+    method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle.Control);
+    method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader);
     method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader, java.util.ResourceBundle.Control);
     method public abstract java.util.Enumeration<java.lang.String> getKeys();
     method public java.util.Locale getLocale();
@@ -54568,10 +55659,10 @@
   public static class ResourceBundle.Control {
     ctor protected ResourceBundle.Control();
     method public java.util.List<java.util.Locale> getCandidateLocales(java.lang.String, java.util.Locale);
-    method public static java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>);
+    method public static final java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>);
     method public java.util.Locale getFallbackLocale(java.lang.String, java.util.Locale);
     method public java.util.List<java.lang.String> getFormats(java.lang.String);
-    method public static java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>);
+    method public static final java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>);
     method public long getTimeToLive(java.lang.String, java.util.Locale);
     method public boolean needsReload(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, java.util.ResourceBundle, long);
     method public java.util.ResourceBundle newBundle(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, boolean) throws java.io.IOException, java.lang.IllegalAccessException, java.lang.InstantiationException;
@@ -54585,23 +55676,25 @@
   }
 
   public final class Scanner implements java.io.Closeable java.util.Iterator {
-    ctor public Scanner(java.io.File) throws java.io.FileNotFoundException;
-    ctor public Scanner(java.io.File, java.lang.String) throws java.io.FileNotFoundException;
-    ctor public Scanner(java.lang.String);
+    ctor public Scanner(java.lang.Readable);
     ctor public Scanner(java.io.InputStream);
     ctor public Scanner(java.io.InputStream, java.lang.String);
-    ctor public Scanner(java.lang.Readable);
+    ctor public Scanner(java.io.File) throws java.io.FileNotFoundException;
+    ctor public Scanner(java.io.File, java.lang.String) throws java.io.FileNotFoundException;
+    ctor public Scanner(java.nio.file.Path) throws java.io.IOException;
+    ctor public Scanner(java.nio.file.Path, java.lang.String) throws java.io.IOException;
+    ctor public Scanner(java.lang.String);
     ctor public Scanner(java.nio.channels.ReadableByteChannel);
     ctor public Scanner(java.nio.channels.ReadableByteChannel, java.lang.String);
     method public void close();
     method public java.util.regex.Pattern delimiter();
-    method public java.lang.String findInLine(java.util.regex.Pattern);
     method public java.lang.String findInLine(java.lang.String);
-    method public java.lang.String findWithinHorizon(java.util.regex.Pattern, int);
+    method public java.lang.String findInLine(java.util.regex.Pattern);
     method public java.lang.String findWithinHorizon(java.lang.String, int);
+    method public java.lang.String findWithinHorizon(java.util.regex.Pattern, int);
     method public boolean hasNext();
-    method public boolean hasNext(java.util.regex.Pattern);
     method public boolean hasNext(java.lang.String);
+    method public boolean hasNext(java.util.regex.Pattern);
     method public boolean hasNextBigDecimal();
     method public boolean hasNextBigInteger();
     method public boolean hasNextBigInteger(int);
@@ -54621,8 +55714,8 @@
     method public java.util.Locale locale();
     method public java.util.regex.MatchResult match();
     method public java.lang.String next();
-    method public java.lang.String next(java.util.regex.Pattern);
     method public java.lang.String next(java.lang.String);
+    method public java.lang.String next(java.util.regex.Pattern);
     method public java.math.BigDecimal nextBigDecimal();
     method public java.math.BigInteger nextBigInteger();
     method public java.math.BigInteger nextBigInteger(int);
@@ -54689,12 +55782,12 @@
     method public int getRawOffset();
     method public boolean inDaylightTime(java.util.Date);
     method public void setDSTSavings(int);
-    method public void setEndRule(int, int, int);
     method public void setEndRule(int, int, int, int);
+    method public void setEndRule(int, int, int);
     method public void setEndRule(int, int, int, int, boolean);
     method public void setRawOffset(int);
-    method public void setStartRule(int, int, int);
     method public void setStartRule(int, int, int, int);
+    method public void setStartRule(int, int, int);
     method public void setStartRule(int, int, int, int, boolean);
     method public void setStartYear(int);
     method public boolean useDaylightTime();
@@ -54705,11 +55798,14 @@
 
   public abstract interface SortedMap implements java.util.Map {
     method public abstract java.util.Comparator<? super K> comparator();
+    method public abstract java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public abstract K firstKey();
     method public abstract java.util.SortedMap<K, V> headMap(K);
+    method public abstract java.util.Set<K> keySet();
     method public abstract K lastKey();
     method public abstract java.util.SortedMap<K, V> subMap(K, K);
     method public abstract java.util.SortedMap<K, V> tailMap(K);
+    method public abstract java.util.Collection<V> values();
   }
 
   public abstract interface SortedSet implements java.util.Set {
@@ -54731,9 +55827,9 @@
   }
 
   public class StringTokenizer implements java.util.Enumeration {
-    ctor public StringTokenizer(java.lang.String);
-    ctor public StringTokenizer(java.lang.String, java.lang.String);
     ctor public StringTokenizer(java.lang.String, java.lang.String, boolean);
+    ctor public StringTokenizer(java.lang.String, java.lang.String);
+    ctor public StringTokenizer(java.lang.String);
     method public int countTokens();
     method public boolean hasMoreElements();
     method public boolean hasMoreTokens();
@@ -54745,21 +55841,22 @@
   public abstract class TimeZone implements java.lang.Cloneable java.io.Serializable {
     ctor public TimeZone();
     method public java.lang.Object clone();
-    method public static synchronized java.lang.String[] getAvailableIDs();
     method public static synchronized java.lang.String[] getAvailableIDs(int);
+    method public static synchronized java.lang.String[] getAvailableIDs();
     method public int getDSTSavings();
-    method public static synchronized java.util.TimeZone getDefault();
+    method public static java.util.TimeZone getDefault();
     method public final java.lang.String getDisplayName();
     method public final java.lang.String getDisplayName(java.util.Locale);
     method public final java.lang.String getDisplayName(boolean, int);
     method public java.lang.String getDisplayName(boolean, int, java.util.Locale);
     method public java.lang.String getID();
-    method public int getOffset(long);
     method public abstract int getOffset(int, int, int, int, int, int);
+    method public int getOffset(long);
     method public abstract int getRawOffset();
     method public static synchronized java.util.TimeZone getTimeZone(java.lang.String);
     method public boolean hasSameRules(java.util.TimeZone);
     method public abstract boolean inDaylightTime(java.util.Date);
+    method public boolean observesDaylightTime();
     method public static synchronized void setDefault(java.util.TimeZone);
     method public void setID(java.lang.String);
     method public abstract void setRawOffset(int);
@@ -54769,14 +55866,14 @@
   }
 
   public class Timer {
-    ctor public Timer(java.lang.String, boolean);
-    ctor public Timer(java.lang.String);
-    ctor public Timer(boolean);
     ctor public Timer();
+    ctor public Timer(boolean);
+    ctor public Timer(java.lang.String);
+    ctor public Timer(java.lang.String, boolean);
     method public void cancel();
     method public int purge();
-    method public void schedule(java.util.TimerTask, java.util.Date);
     method public void schedule(java.util.TimerTask, long);
+    method public void schedule(java.util.TimerTask, java.util.Date);
     method public void schedule(java.util.TimerTask, long, long);
     method public void schedule(java.util.TimerTask, java.util.Date, long);
     method public void scheduleAtFixedRate(java.util.TimerTask, long, long);
@@ -54795,10 +55892,10 @@
     ctor public TooManyListenersException(java.lang.String);
   }
 
-  public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable java.util.SortedMap {
+  public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable {
     ctor public TreeMap();
-    ctor public TreeMap(java.util.Map<? extends K, ? extends V>);
     ctor public TreeMap(java.util.Comparator<? super K>);
+    ctor public TreeMap(java.util.Map<? extends K, ? extends V>);
     ctor public TreeMap(java.util.SortedMap<K, ? extends V>);
     method public java.util.Map.Entry<K, V> ceilingEntry(K);
     method public K ceilingKey(K);
@@ -54830,8 +55927,8 @@
 
   public class TreeSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
     ctor public TreeSet();
-    ctor public TreeSet(java.util.Collection<? extends E>);
     ctor public TreeSet(java.util.Comparator<? super E>);
+    ctor public TreeSet(java.util.Collection<? extends E>);
     ctor public TreeSet(java.util.SortedSet<E>);
     method public E ceiling(E);
     method public java.lang.Object clone();
@@ -54881,9 +55978,9 @@
   }
 
   public class Vector extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
-    ctor public Vector();
-    ctor public Vector(int);
     ctor public Vector(int, int);
+    ctor public Vector(int);
+    ctor public Vector();
     ctor public Vector(java.util.Collection<? extends E>);
     method public synchronized void addElement(E);
     method public synchronized int capacity();
@@ -54893,7 +55990,7 @@
     method public java.util.Enumeration<E> elements();
     method public synchronized void ensureCapacity(int);
     method public synchronized E firstElement();
-    method public E get(int);
+    method public synchronized E get(int);
     method public synchronized int indexOf(java.lang.Object, int);
     method public synchronized void insertElementAt(E, int);
     method public synchronized E lastElement();
@@ -54911,9 +56008,9 @@
   }
 
   public class WeakHashMap extends java.util.AbstractMap implements java.util.Map {
-    ctor public WeakHashMap();
-    ctor public WeakHashMap(int);
     ctor public WeakHashMap(int, float);
+    ctor public WeakHashMap(int);
+    ctor public WeakHashMap();
     ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>);
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
   }
@@ -56151,16 +57248,16 @@
 
   public class Attributes implements java.lang.Cloneable java.util.Map {
     ctor public Attributes();
-    ctor public Attributes(java.util.jar.Attributes);
     ctor public Attributes(int);
+    ctor public Attributes(java.util.jar.Attributes);
     method public void clear();
     method public java.lang.Object clone();
     method public boolean containsKey(java.lang.Object);
     method public boolean containsValue(java.lang.Object);
     method public java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet();
     method public java.lang.Object get(java.lang.Object);
-    method public java.lang.String getValue(java.util.jar.Attributes.Name);
     method public java.lang.String getValue(java.lang.String);
+    method public java.lang.String getValue(java.util.jar.Attributes.Name);
     method public boolean isEmpty();
     method public java.util.Set<java.lang.Object> keySet();
     method public java.lang.Object put(java.lang.Object, java.lang.Object);
@@ -56208,19 +57305,20 @@
   }
 
   public class JarFile extends java.util.zip.ZipFile {
+    ctor public JarFile(java.lang.String) throws java.io.IOException;
+    ctor public JarFile(java.lang.String, boolean) throws java.io.IOException;
     ctor public JarFile(java.io.File) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
-    ctor public JarFile(java.lang.String) throws java.io.IOException;
-    ctor public JarFile(java.lang.String, boolean) throws java.io.IOException;
     method public java.util.jar.JarEntry getJarEntry(java.lang.String);
     method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+    method public boolean hasClassPathAttribute() throws java.io.IOException;
     field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF";
   }
 
   public class JarInputStream extends java.util.zip.ZipInputStream {
-    ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException;
     ctor public JarInputStream(java.io.InputStream) throws java.io.IOException;
+    ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException;
     method public java.util.jar.Manifest getManifest();
     method public java.util.jar.JarEntry getNextJarEntry() throws java.io.IOException;
   }
@@ -56244,7 +57342,7 @@
   }
 
   public abstract class Pack200 {
-    method public static java.util.jar.Pack200.Packer newPacker();
+    method public static synchronized java.util.jar.Pack200.Packer newPacker();
     method public static java.util.jar.Pack200.Unpacker newUnpacker();
   }
 
@@ -56298,7 +57396,7 @@
 
   public class ErrorManager {
     ctor public ErrorManager();
-    method public void error(java.lang.String, java.lang.Exception, int);
+    method public synchronized void error(java.lang.String, java.lang.Exception, int);
     field public static final int CLOSE_FAILURE = 3; // 0x3
     field public static final int FLUSH_FAILURE = 2; // 0x2
     field public static final int FORMAT_FAILURE = 5; // 0x5
@@ -56308,11 +57406,11 @@
   }
 
   public class FileHandler extends java.util.logging.StreamHandler {
-    ctor public FileHandler() throws java.io.IOException;
-    ctor public FileHandler(java.lang.String) throws java.io.IOException;
-    ctor public FileHandler(java.lang.String, boolean) throws java.io.IOException;
-    ctor public FileHandler(java.lang.String, int, int) throws java.io.IOException;
-    ctor public FileHandler(java.lang.String, int, int, boolean) throws java.io.IOException;
+    ctor public FileHandler() throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(java.lang.String) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(java.lang.String, boolean) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(java.lang.String, int, int) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(java.lang.String, int, int, boolean) throws java.io.IOException, java.lang.SecurityException;
   }
 
   public abstract interface Filter {
@@ -56322,28 +57420,28 @@
   public abstract class Formatter {
     ctor protected Formatter();
     method public abstract java.lang.String format(java.util.logging.LogRecord);
-    method public java.lang.String formatMessage(java.util.logging.LogRecord);
+    method public synchronized java.lang.String formatMessage(java.util.logging.LogRecord);
     method public java.lang.String getHead(java.util.logging.Handler);
     method public java.lang.String getTail(java.util.logging.Handler);
   }
 
   public abstract class Handler {
     ctor protected Handler();
-    method public abstract void close();
+    method public abstract void close() throws java.lang.SecurityException;
     method public abstract void flush();
     method public java.lang.String getEncoding();
     method public java.util.logging.ErrorManager getErrorManager();
     method public java.util.logging.Filter getFilter();
     method public java.util.logging.Formatter getFormatter();
-    method public java.util.logging.Level getLevel();
+    method public synchronized java.util.logging.Level getLevel();
     method public boolean isLoggable(java.util.logging.LogRecord);
     method public abstract void publish(java.util.logging.LogRecord);
     method protected void reportError(java.lang.String, java.lang.Exception, int);
-    method public void setEncoding(java.lang.String) throws java.io.UnsupportedEncodingException;
+    method public void setEncoding(java.lang.String) throws java.lang.SecurityException, java.io.UnsupportedEncodingException;
     method public void setErrorManager(java.util.logging.ErrorManager);
-    method public void setFilter(java.util.logging.Filter);
-    method public void setFormatter(java.util.logging.Formatter);
-    method public void setLevel(java.util.logging.Level);
+    method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException;
+    method public void setFormatter(java.util.logging.Formatter) throws java.lang.SecurityException;
+    method public synchronized void setLevel(java.util.logging.Level) throws java.lang.SecurityException;
   }
 
   public class Level implements java.io.Serializable {
@@ -56353,7 +57451,7 @@
     method public java.lang.String getName();
     method public java.lang.String getResourceBundleName();
     method public final int intValue();
-    method public static java.util.logging.Level parse(java.lang.String) throws java.lang.IllegalArgumentException;
+    method public static synchronized java.util.logging.Level parse(java.lang.String) throws java.lang.IllegalArgumentException;
     method public final java.lang.String toString();
     field public static final java.util.logging.Level ALL;
     field public static final java.util.logging.Level CONFIG;
@@ -56368,18 +57466,18 @@
 
   public class LogManager {
     ctor protected LogManager();
-    method public synchronized boolean addLogger(java.util.logging.Logger);
-    method public void addPropertyChangeListener(java.beans.PropertyChangeListener);
-    method public void checkAccess();
+    method public boolean addLogger(java.util.logging.Logger);
+    method public void addPropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException;
+    method public void checkAccess() throws java.lang.SecurityException;
     method public static java.util.logging.LogManager getLogManager();
-    method public synchronized java.util.logging.Logger getLogger(java.lang.String);
-    method public synchronized java.util.Enumeration<java.lang.String> getLoggerNames();
-    method public static java.util.logging.LoggingMXBean getLoggingMXBean();
+    method public java.util.logging.Logger getLogger(java.lang.String);
+    method public java.util.Enumeration<java.lang.String> getLoggerNames();
+    method public static synchronized java.util.logging.LoggingMXBean getLoggingMXBean();
     method public java.lang.String getProperty(java.lang.String);
-    method public void readConfiguration() throws java.io.IOException;
-    method public void readConfiguration(java.io.InputStream) throws java.io.IOException;
-    method public void removePropertyChangeListener(java.beans.PropertyChangeListener);
-    method public synchronized void reset();
+    method public void readConfiguration() throws java.io.IOException, java.lang.SecurityException;
+    method public void readConfiguration(java.io.InputStream) throws java.io.IOException, java.lang.SecurityException;
+    method public void removePropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException;
+    method public void reset() throws java.lang.SecurityException;
     field public static final java.lang.String LOGGING_MXBEAN_NAME = "java.util.logging:type=Logging";
   }
 
@@ -56413,7 +57511,7 @@
 
   public class Logger {
     ctor protected Logger(java.lang.String, java.lang.String);
-    method public void addHandler(java.util.logging.Handler);
+    method public void addHandler(java.util.logging.Handler) throws java.lang.SecurityException;
     method public void config(java.lang.String);
     method public void entering(java.lang.String, java.lang.String);
     method public void entering(java.lang.String, java.lang.String, java.lang.Object);
@@ -56426,7 +57524,7 @@
     method public static java.util.logging.Logger getAnonymousLogger();
     method public static java.util.logging.Logger getAnonymousLogger(java.lang.String);
     method public java.util.logging.Filter getFilter();
-    method public static java.util.logging.Logger getGlobal();
+    method public static final java.util.logging.Logger getGlobal();
     method public java.util.logging.Handler[] getHandlers();
     method public java.util.logging.Level getLevel();
     method public static java.util.logging.Logger getLogger(java.lang.String);
@@ -56438,11 +57536,11 @@
     method public boolean getUseParentHandlers();
     method public void info(java.lang.String);
     method public boolean isLoggable(java.util.logging.Level);
+    method public void log(java.util.logging.LogRecord);
     method public void log(java.util.logging.Level, java.lang.String);
     method public void log(java.util.logging.Level, java.lang.String, java.lang.Object);
     method public void log(java.util.logging.Level, java.lang.String, java.lang.Object[]);
     method public void log(java.util.logging.Level, java.lang.String, java.lang.Throwable);
-    method public void log(java.util.logging.LogRecord);
     method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String);
     method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object);
     method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]);
@@ -56451,9 +57549,9 @@
     method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object);
     method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]);
     method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable);
-    method public void removeHandler(java.util.logging.Handler);
-    method public void setFilter(java.util.logging.Filter);
-    method public void setLevel(java.util.logging.Level);
+    method public void removeHandler(java.util.logging.Handler) throws java.lang.SecurityException;
+    method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException;
+    method public void setLevel(java.util.logging.Level) throws java.lang.SecurityException;
     method public void setParent(java.util.logging.Logger);
     method public void setUseParentHandlers(boolean);
     method public void severe(java.lang.String);
@@ -56470,24 +57568,24 @@
     method public abstract void setLoggerLevel(java.lang.String, java.lang.String);
   }
 
-  public final class LoggingPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable {
-    ctor public LoggingPermission(java.lang.String, java.lang.String);
+  public final class LoggingPermission extends java.security.BasicPermission {
+    ctor public LoggingPermission(java.lang.String, java.lang.String) throws java.lang.IllegalArgumentException;
   }
 
   public class MemoryHandler extends java.util.logging.Handler {
     ctor public MemoryHandler();
     ctor public MemoryHandler(java.util.logging.Handler, int, java.util.logging.Level);
-    method public void close();
+    method public void close() throws java.lang.SecurityException;
     method public void flush();
-    method public java.util.logging.Level getPushLevel();
+    method public synchronized java.util.logging.Level getPushLevel();
     method public synchronized void publish(java.util.logging.LogRecord);
-    method public void push();
-    method public void setPushLevel(java.util.logging.Level);
+    method public synchronized void push();
+    method public void setPushLevel(java.util.logging.Level) throws java.lang.SecurityException;
   }
 
   public class SimpleFormatter extends java.util.logging.Formatter {
     ctor public SimpleFormatter();
-    method public java.lang.String format(java.util.logging.LogRecord);
+    method public synchronized java.lang.String format(java.util.logging.LogRecord);
   }
 
   public class SocketHandler extends java.util.logging.StreamHandler {
@@ -56498,10 +57596,10 @@
   public class StreamHandler extends java.util.logging.Handler {
     ctor public StreamHandler();
     ctor public StreamHandler(java.io.OutputStream, java.util.logging.Formatter);
-    method public void close();
-    method public void flush();
+    method public synchronized void close() throws java.lang.SecurityException;
+    method public synchronized void flush();
     method public synchronized void publish(java.util.logging.LogRecord);
-    method protected void setOutputStream(java.io.OutputStream);
+    method protected synchronized void setOutputStream(java.io.OutputStream) throws java.lang.SecurityException;
   }
 
   public class XMLFormatter extends java.util.logging.Formatter {
@@ -56571,12 +57669,12 @@
   }
 
   public class InvalidPreferencesFormatException extends java.lang.Exception {
+    ctor public InvalidPreferencesFormatException(java.lang.Throwable);
     ctor public InvalidPreferencesFormatException(java.lang.String);
     ctor public InvalidPreferencesFormatException(java.lang.String, java.lang.Throwable);
-    ctor public InvalidPreferencesFormatException(java.lang.Throwable);
   }
 
-  public class NodeChangeEvent extends java.util.EventObject implements java.io.Serializable {
+  public class NodeChangeEvent extends java.util.EventObject {
     ctor public NodeChangeEvent(java.util.prefs.Preferences, java.util.prefs.Preferences);
     method public java.util.prefs.Preferences getChild();
     method public java.util.prefs.Preferences getParent();
@@ -56587,7 +57685,7 @@
     method public abstract void childRemoved(java.util.prefs.NodeChangeEvent);
   }
 
-  public class PreferenceChangeEvent extends java.util.EventObject implements java.io.Serializable {
+  public class PreferenceChangeEvent extends java.util.EventObject {
     ctor public PreferenceChangeEvent(java.util.prefs.Preferences, java.lang.String, java.lang.String);
     method public java.lang.String getKey();
     method public java.lang.String getNewValue();
@@ -56732,8 +57830,8 @@
     method public long getValue();
     method public void reset();
     method public void update(int);
-    method public void update(byte[]);
     method public void update(byte[], int, int);
+    method public void update(byte[]);
   }
 
   public class CRC32 implements java.util.zip.Checksum {
@@ -56741,8 +57839,8 @@
     method public long getValue();
     method public void reset();
     method public void update(int);
-    method public void update(byte[]);
     method public void update(byte[], int, int);
+    method public void update(byte[]);
   }
 
   public class CheckedInputStream extends java.io.FilterInputStream {
@@ -56758,8 +57856,8 @@
   public abstract interface Checksum {
     method public abstract long getValue();
     method public abstract void reset();
-    method public abstract void update(byte[], int, int);
     method public abstract void update(int);
+    method public abstract void update(byte[], int, int);
   }
 
   public class DataFormatException extends java.lang.Exception {
@@ -56768,28 +57866,28 @@
   }
 
   public class Deflater {
-    ctor public Deflater();
-    ctor public Deflater(int);
     ctor public Deflater(int, boolean);
+    ctor public Deflater(int);
+    ctor public Deflater();
+    method public int deflate(byte[], int, int);
     method public int deflate(byte[]);
-    method public synchronized int deflate(byte[], int, int);
-    method public synchronized int deflate(byte[], int, int, int);
-    method public synchronized void end();
-    method public synchronized void finish();
-    method public synchronized boolean finished();
-    method public synchronized int getAdler();
-    method public synchronized long getBytesRead();
-    method public synchronized long getBytesWritten();
-    method public synchronized int getTotalIn();
-    method public synchronized int getTotalOut();
-    method public synchronized boolean needsInput();
-    method public synchronized void reset();
+    method public int deflate(byte[], int, int, int);
+    method public void end();
+    method public void finish();
+    method public boolean finished();
+    method public int getAdler();
+    method public long getBytesRead();
+    method public long getBytesWritten();
+    method public int getTotalIn();
+    method public int getTotalOut();
+    method public boolean needsInput();
+    method public void reset();
+    method public void setDictionary(byte[], int, int);
     method public void setDictionary(byte[]);
-    method public synchronized void setDictionary(byte[], int, int);
+    method public void setInput(byte[], int, int);
     method public void setInput(byte[]);
-    method public synchronized void setInput(byte[], int, int);
-    method public synchronized void setLevel(int);
-    method public synchronized void setStrategy(int);
+    method public void setLevel(int);
+    method public void setStrategy(int);
     field public static final int BEST_COMPRESSION = 9; // 0x9
     field public static final int BEST_SPEED = 1; // 0x1
     field public static final int DEFAULT_COMPRESSION = -1; // 0xffffffff
@@ -56812,12 +57910,12 @@
   }
 
   public class DeflaterOutputStream extends java.io.FilterOutputStream {
-    ctor public DeflaterOutputStream(java.io.OutputStream);
-    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater);
-    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int);
-    ctor public DeflaterOutputStream(java.io.OutputStream, boolean);
-    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean);
     ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater);
+    ctor public DeflaterOutputStream(java.io.OutputStream, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream);
     method protected void deflate() throws java.io.IOException;
     method public void finish() throws java.io.IOException;
     field protected byte[] buf;
@@ -56825,49 +57923,50 @@
   }
 
   public class GZIPInputStream extends java.util.zip.InflaterInputStream {
-    ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException;
     ctor public GZIPInputStream(java.io.InputStream, int) throws java.io.IOException;
+    ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException;
     field public static final int GZIP_MAGIC = 35615; // 0x8b1f
     field protected java.util.zip.CRC32 crc;
     field protected boolean eos;
   }
 
   public class GZIPOutputStream extends java.util.zip.DeflaterOutputStream {
-    ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
-    ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream, int) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
     field protected java.util.zip.CRC32 crc;
   }
 
   public class Inflater {
-    ctor public Inflater();
     ctor public Inflater(boolean);
-    method public synchronized void end();
-    method public synchronized boolean finished();
-    method public synchronized int getAdler();
-    method public synchronized long getBytesRead();
-    method public synchronized long getBytesWritten();
-    method public synchronized int getRemaining();
-    method public synchronized int getTotalIn();
-    method public synchronized int getTotalOut();
+    ctor public Inflater();
+    method public void end();
+    method public boolean finished();
+    method public int getAdler();
+    method public long getBytesRead();
+    method public long getBytesWritten();
+    method public int getRemaining();
+    method public int getTotalIn();
+    method public int getTotalOut();
+    method public int inflate(byte[], int, int) throws java.util.zip.DataFormatException;
     method public int inflate(byte[]) throws java.util.zip.DataFormatException;
-    method public synchronized int inflate(byte[], int, int) throws java.util.zip.DataFormatException;
-    method public synchronized boolean needsDictionary();
-    method public synchronized boolean needsInput();
-    method public synchronized void reset();
-    method public synchronized void setDictionary(byte[]);
-    method public synchronized void setDictionary(byte[], int, int);
-    method public synchronized void setInput(byte[]);
-    method public synchronized void setInput(byte[], int, int);
+    method public boolean needsDictionary();
+    method public boolean needsInput();
+    method public void reset();
+    method public void setDictionary(byte[], int, int);
+    method public void setDictionary(byte[]);
+    method public void setInput(byte[], int, int);
+    method public void setInput(byte[]);
   }
 
   public class InflaterInputStream extends java.io.FilterInputStream {
-    ctor public InflaterInputStream(java.io.InputStream);
-    ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater);
     ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater, int);
+    ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater);
+    ctor public InflaterInputStream(java.io.InputStream);
     method protected void fill() throws java.io.IOException;
     field protected byte[] buf;
+    field protected boolean closed;
     field protected java.util.zip.Inflater inf;
     field protected int len;
   }
@@ -56955,9 +58054,12 @@
   }
 
   public class ZipFile implements java.io.Closeable {
-    ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException;
     ctor public ZipFile(java.lang.String) throws java.io.IOException;
     ctor public ZipFile(java.io.File, int) throws java.io.IOException;
+    ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException;
+    ctor public ZipFile(java.io.File, int, java.nio.charset.Charset) throws java.io.IOException;
+    ctor public ZipFile(java.lang.String, java.nio.charset.Charset) throws java.io.IOException;
+    ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
     method public void close() throws java.io.IOException;
     method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
     method public java.lang.String getComment();
@@ -57011,6 +58113,7 @@
 
   public class ZipInputStream extends java.util.zip.InflaterInputStream {
     ctor public ZipInputStream(java.io.InputStream);
+    ctor public ZipInputStream(java.io.InputStream, java.nio.charset.Charset);
     method public void closeEntry() throws java.io.IOException;
     method protected java.util.zip.ZipEntry createZipEntry(java.lang.String);
     method public java.util.zip.ZipEntry getNextEntry() throws java.io.IOException;
@@ -57058,6 +58161,7 @@
 
   public class ZipOutputStream extends java.util.zip.DeflaterOutputStream {
     ctor public ZipOutputStream(java.io.OutputStream);
+    ctor public ZipOutputStream(java.io.OutputStream, java.nio.charset.Charset);
     method public void closeEntry() throws java.io.IOException;
     method public void putNextEntry(java.util.zip.ZipEntry) throws java.io.IOException;
     method public void setComment(java.lang.String);
@@ -57117,8 +58221,8 @@
   }
 
   public class BadPaddingException extends java.security.GeneralSecurityException {
-    ctor public BadPaddingException(java.lang.String);
     ctor public BadPaddingException();
+    ctor public BadPaddingException(java.lang.String);
   }
 
   public class Cipher {
@@ -57229,14 +58333,14 @@
     method public final int getOutputSize(int) throws java.lang.IllegalStateException;
     method public final java.security.Provider getProvider();
     method public final void init(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException;
-    method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method public final boolean isCryptoAllowed(java.security.Key) throws javax.crypto.ExemptionMechanismException;
   }
 
   public class ExemptionMechanismException extends java.security.GeneralSecurityException {
-    ctor public ExemptionMechanismException(java.lang.String);
     ctor public ExemptionMechanismException();
+    ctor public ExemptionMechanismException(java.lang.String);
   }
 
   public abstract class ExemptionMechanismSpi {
@@ -57245,13 +58349,13 @@
     method protected abstract int engineGenExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, javax.crypto.ShortBufferException;
     method protected abstract int engineGetOutputSize(int);
     method protected abstract void engineInit(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException;
-    method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
   }
 
   public class IllegalBlockSizeException extends java.security.GeneralSecurityException {
-    ctor public IllegalBlockSizeException(java.lang.String);
     ctor public IllegalBlockSizeException();
+    ctor public IllegalBlockSizeException(java.lang.String);
   }
 
   public class KeyAgreement {
@@ -57289,19 +58393,19 @@
     method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
     method public final java.security.Provider getProvider();
+    method public final void init(java.security.SecureRandom);
     method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
     method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
     method public final void init(int);
     method public final void init(int, java.security.SecureRandom);
-    method public final void init(java.security.SecureRandom);
   }
 
   public abstract class KeyGeneratorSpi {
     ctor public KeyGeneratorSpi();
     method protected abstract javax.crypto.SecretKey engineGenerateKey();
+    method protected abstract void engineInit(java.security.SecureRandom);
     method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
     method protected abstract void engineInit(int, java.security.SecureRandom);
-    method protected abstract void engineInit(java.security.SecureRandom);
   }
 
   public class Mac implements java.lang.Cloneable {
@@ -57316,12 +58420,12 @@
     method public static final javax.crypto.Mac getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
     method public final int getMacLength();
     method public final java.security.Provider getProvider();
-    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method public final void init(java.security.Key) throws java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
     method public final void reset();
     method public final void update(byte) throws java.lang.IllegalStateException;
-    method public final void update(byte[], int, int) throws java.lang.IllegalStateException;
     method public final void update(byte[]) throws java.lang.IllegalStateException;
+    method public final void update(byte[], int, int) throws java.lang.IllegalStateException;
     method public final void update(java.nio.ByteBuffer);
   }
 
@@ -57338,8 +58442,8 @@
   }
 
   public class NoSuchPaddingException extends java.security.GeneralSecurityException {
-    ctor public NoSuchPaddingException(java.lang.String);
     ctor public NoSuchPaddingException();
+    ctor public NoSuchPaddingException(java.lang.String);
   }
 
   public class NullCipher extends javax.crypto.Cipher {
@@ -57380,8 +58484,8 @@
   }
 
   public class ShortBufferException extends java.security.GeneralSecurityException {
-    ctor public ShortBufferException(java.lang.String);
     ctor public ShortBufferException();
+    ctor public ShortBufferException(java.lang.String);
   }
 
 }
@@ -57526,7 +58630,7 @@
     method public int getWordSize();
   }
 
-  public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey java.io.Serializable {
+  public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey {
     ctor public SecretKeySpec(byte[], java.lang.String);
     ctor public SecretKeySpec(byte[], int, int, java.lang.String);
     method public java.lang.String getAlgorithm();
@@ -58421,7 +59525,7 @@
     method public abstract java.net.ServerSocket createServerSocket(int) throws java.io.IOException;
     method public abstract java.net.ServerSocket createServerSocket(int, int) throws java.io.IOException;
     method public abstract java.net.ServerSocket createServerSocket(int, int, java.net.InetAddress) throws java.io.IOException;
-    method public static synchronized javax.net.ServerSocketFactory getDefault();
+    method public static javax.net.ServerSocketFactory getDefault();
   }
 
   public abstract class SocketFactory {
@@ -58431,7 +59535,7 @@
     method public abstract java.net.Socket createSocket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException;
     method public abstract java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException;
     method public abstract java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
-    method public static synchronized javax.net.SocketFactory getDefault();
+    method public static javax.net.SocketFactory getDefault();
   }
 
 }
@@ -58443,6 +59547,12 @@
     method public java.security.cert.CertPathParameters getParameters();
   }
 
+  public abstract class ExtendedSSLSession implements javax.net.ssl.SSLSession {
+    ctor public ExtendedSSLSession();
+    method public abstract java.lang.String[] getLocalSupportedSignatureAlgorithms();
+    method public abstract java.lang.String[] getPeerSupportedSignatureAlgorithms();
+  }
+
   public class HandshakeCompletedEvent extends java.util.EventObject {
     ctor public HandshakeCompletedEvent(javax.net.ssl.SSLSocket, javax.net.ssl.SSLSession);
     method public java.lang.String getCipherSuite();
@@ -58518,7 +59628,7 @@
     method public final javax.net.ssl.SSLEngine createSSLEngine();
     method public final javax.net.ssl.SSLEngine createSSLEngine(java.lang.String, int);
     method public final javax.net.ssl.SSLSessionContext getClientSessionContext();
-    method public static javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException;
+    method public static synchronized javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException;
     method public final javax.net.ssl.SSLParameters getDefaultSSLParameters();
     method public static javax.net.ssl.SSLContext getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static javax.net.ssl.SSLContext getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
@@ -58530,13 +59640,13 @@
     method public final javax.net.ssl.SSLSocketFactory getSocketFactory();
     method public final javax.net.ssl.SSLParameters getSupportedSSLParameters();
     method public final void init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException;
-    method public static void setDefault(javax.net.ssl.SSLContext);
+    method public static synchronized void setDefault(javax.net.ssl.SSLContext);
   }
 
   public abstract class SSLContextSpi {
     ctor public SSLContextSpi();
-    method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(java.lang.String, int);
     method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine();
+    method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(java.lang.String, int);
     method protected abstract javax.net.ssl.SSLSessionContext engineGetClientSessionContext();
     method protected javax.net.ssl.SSLParameters engineGetDefaultSSLParameters();
     method protected abstract javax.net.ssl.SSLSessionContext engineGetServerSessionContext();
@@ -58556,6 +59666,7 @@
     method public abstract boolean getEnableSessionCreation();
     method public abstract java.lang.String[] getEnabledCipherSuites();
     method public abstract java.lang.String[] getEnabledProtocols();
+    method public javax.net.ssl.SSLSession getHandshakeSession();
     method public abstract javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus();
     method public abstract boolean getNeedClientAuth();
     method public java.lang.String getPeerHost();
@@ -58575,12 +59686,12 @@
     method public void setSSLParameters(javax.net.ssl.SSLParameters);
     method public abstract void setUseClientMode(boolean);
     method public abstract void setWantClientAuth(boolean);
-    method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException;
     method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
     method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[]) throws javax.net.ssl.SSLException;
-    method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
-    method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException;
     method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
   }
 
   public class SSLEngineResult {
@@ -58628,11 +59739,15 @@
     ctor public SSLParameters();
     ctor public SSLParameters(java.lang.String[]);
     ctor public SSLParameters(java.lang.String[], java.lang.String[]);
+    method public java.security.AlgorithmConstraints getAlgorithmConstraints();
     method public java.lang.String[] getCipherSuites();
+    method public java.lang.String getEndpointIdentificationAlgorithm();
     method public boolean getNeedClientAuth();
     method public java.lang.String[] getProtocols();
     method public boolean getWantClientAuth();
+    method public void setAlgorithmConstraints(java.security.AlgorithmConstraints);
     method public void setCipherSuites(java.lang.String[]);
+    method public void setEndpointIdentificationAlgorithm(java.lang.String);
     method public void setNeedClientAuth(boolean);
     method public void setProtocols(java.lang.String[]);
     method public void setWantClientAuth(boolean);
@@ -58660,6 +59775,7 @@
     method public abstract java.lang.String[] getEnabledCipherSuites();
     method public abstract java.lang.String[] getEnabledProtocols();
     method public abstract boolean getNeedClientAuth();
+    method public javax.net.ssl.SSLParameters getSSLParameters();
     method public abstract java.lang.String[] getSupportedCipherSuites();
     method public abstract java.lang.String[] getSupportedProtocols();
     method public abstract boolean getUseClientMode();
@@ -58668,6 +59784,7 @@
     method public abstract void setEnabledCipherSuites(java.lang.String[]);
     method public abstract void setEnabledProtocols(java.lang.String[]);
     method public abstract void setNeedClientAuth(boolean);
+    method public void setSSLParameters(javax.net.ssl.SSLParameters);
     method public abstract void setUseClientMode(boolean);
     method public abstract void setWantClientAuth(boolean);
   }
@@ -58733,6 +59850,7 @@
     method public abstract boolean getEnableSessionCreation();
     method public abstract java.lang.String[] getEnabledCipherSuites();
     method public abstract java.lang.String[] getEnabledProtocols();
+    method public javax.net.ssl.SSLSession getHandshakeSession();
     method public abstract boolean getNeedClientAuth();
     method public javax.net.ssl.SSLParameters getSSLParameters();
     method public abstract javax.net.ssl.SSLSession getSession();
@@ -58788,6 +59906,14 @@
     method public java.lang.String chooseEngineServerAlias(java.lang.String, java.security.Principal[], javax.net.ssl.SSLEngine);
   }
 
+  public abstract class X509ExtendedTrustManager implements javax.net.ssl.X509TrustManager {
+    ctor public X509ExtendedTrustManager();
+    method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+    method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+  }
+
   public abstract interface X509KeyManager implements javax.net.ssl.KeyManager {
     method public abstract java.lang.String chooseClientAlias(java.lang.String[], java.security.Principal[], java.net.Socket);
     method public abstract java.lang.String chooseServerAlias(java.lang.String, java.security.Principal[], java.net.Socket);
@@ -58822,11 +59948,21 @@
     method public abstract boolean isDestroyed();
   }
 
+  public abstract deprecated class Policy {
+    ctor protected Policy();
+    method public abstract java.security.PermissionCollection getPermissions(javax.security.auth.Subject, java.security.CodeSource);
+    method public static javax.security.auth.Policy getPolicy();
+    method public abstract void refresh();
+    method public static void setPolicy(javax.security.auth.Policy);
+  }
+
   public final class PrivateCredentialPermission extends java.security.Permission {
     ctor public PrivateCredentialPermission(java.lang.String, java.lang.String);
+    method public boolean equals(java.lang.Object);
     method public java.lang.String getActions();
     method public java.lang.String getCredentialClass();
     method public java.lang.String[][] getPrincipals();
+    method public int hashCode();
     method public boolean implies(java.security.Permission);
   }
 
@@ -58884,6 +60020,43 @@
 
 package javax.security.auth.login {
 
+  public class AppConfigurationEntry {
+    ctor public AppConfigurationEntry(java.lang.String, javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag, java.util.Map<java.lang.String, ?>);
+    method public javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag getControlFlag();
+    method public java.lang.String getLoginModuleName();
+    method public java.util.Map<java.lang.String, ?> getOptions();
+  }
+
+  public static class AppConfigurationEntry.LoginModuleControlFlag {
+    field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag OPTIONAL;
+    field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag REQUIRED;
+    field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag REQUISITE;
+    field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag SUFFICIENT;
+  }
+
+  public abstract class Configuration {
+    ctor protected Configuration();
+    method public abstract javax.security.auth.login.AppConfigurationEntry[] getAppConfigurationEntry(java.lang.String);
+    method public static javax.security.auth.login.Configuration getConfiguration();
+    method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters) throws java.security.NoSuchAlgorithmException;
+    method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public javax.security.auth.login.Configuration.Parameters getParameters();
+    method public java.security.Provider getProvider();
+    method public java.lang.String getType();
+    method public void refresh();
+    method public static void setConfiguration(javax.security.auth.login.Configuration);
+  }
+
+  public static abstract interface Configuration.Parameters {
+  }
+
+  public abstract class ConfigurationSpi {
+    ctor public ConfigurationSpi();
+    method protected abstract javax.security.auth.login.AppConfigurationEntry[] engineGetAppConfigurationEntry(java.lang.String);
+    method protected void engineRefresh();
+  }
+
   public class LoginException extends java.security.GeneralSecurityException {
     ctor public LoginException();
     ctor public LoginException(java.lang.String);
@@ -58894,10 +60067,10 @@
 package javax.security.auth.x500 {
 
   public final class X500Principal implements java.security.Principal java.io.Serializable {
-    ctor public X500Principal(byte[]);
-    ctor public X500Principal(java.io.InputStream);
     ctor public X500Principal(java.lang.String);
     ctor public X500Principal(java.lang.String, java.util.Map<java.lang.String, java.lang.String>);
+    ctor public X500Principal(byte[]);
+    ctor public X500Principal(java.io.InputStream);
     method public byte[] getEncoded();
     method public java.lang.String getName();
     method public java.lang.String getName(java.lang.String);
@@ -58921,28 +60094,28 @@
   }
 
   public class CertificateEncodingException extends javax.security.cert.CertificateException {
-    ctor public CertificateEncodingException(java.lang.String);
     ctor public CertificateEncodingException();
+    ctor public CertificateEncodingException(java.lang.String);
   }
 
   public class CertificateException extends java.lang.Exception {
-    ctor public CertificateException(java.lang.String);
     ctor public CertificateException();
+    ctor public CertificateException(java.lang.String);
   }
 
   public class CertificateExpiredException extends javax.security.cert.CertificateException {
-    ctor public CertificateExpiredException(java.lang.String);
     ctor public CertificateExpiredException();
+    ctor public CertificateExpiredException(java.lang.String);
   }
 
   public class CertificateNotYetValidException extends javax.security.cert.CertificateException {
-    ctor public CertificateNotYetValidException(java.lang.String);
     ctor public CertificateNotYetValidException();
+    ctor public CertificateNotYetValidException(java.lang.String);
   }
 
   public class CertificateParsingException extends javax.security.cert.CertificateException {
-    ctor public CertificateParsingException(java.lang.String);
     ctor public CertificateParsingException();
+    ctor public CertificateParsingException(java.lang.String);
   }
 
   public abstract class X509Certificate extends javax.security.cert.Certificate {
@@ -58969,11 +60142,12 @@
   public abstract interface CommonDataSource {
     method public abstract java.io.PrintWriter getLogWriter() throws java.sql.SQLException;
     method public abstract int getLoginTimeout() throws java.sql.SQLException;
+    method public abstract java.util.logging.Logger getParentLogger() throws java.sql.SQLFeatureNotSupportedException;
     method public abstract void setLogWriter(java.io.PrintWriter) throws java.sql.SQLException;
     method public abstract void setLoginTimeout(int) throws java.sql.SQLException;
   }
 
-  public class ConnectionEvent extends java.util.EventObject implements java.io.Serializable {
+  public class ConnectionEvent extends java.util.EventObject {
     ctor public ConnectionEvent(javax.sql.PooledConnection);
     ctor public ConnectionEvent(javax.sql.PooledConnection, java.sql.SQLException);
     method public java.sql.SQLException getSQLException();
@@ -59022,21 +60196,21 @@
     method public abstract void removeRowSetListener(javax.sql.RowSetListener);
     method public abstract void setArray(int, java.sql.Array) throws java.sql.SQLException;
     method public abstract void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException;
     method public abstract void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setAsciiStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException;
-    method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException;
     method public abstract void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException;
     method public abstract void setBigDecimal(java.lang.String, java.math.BigDecimal) throws java.sql.SQLException;
     method public abstract void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException;
     method public abstract void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setBinaryStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException;
-    method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException;
     method public abstract void setBlob(int, java.sql.Blob) throws java.sql.SQLException;
-    method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException;
-    method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException;
+    method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setBlob(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException;
     method public abstract void setBlob(java.lang.String, java.sql.Blob) throws java.sql.SQLException;
+    method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException;
     method public abstract void setBoolean(int, boolean) throws java.sql.SQLException;
     method public abstract void setBoolean(java.lang.String, boolean) throws java.sql.SQLException;
     method public abstract void setByte(int, byte) throws java.sql.SQLException;
@@ -59044,15 +60218,15 @@
     method public abstract void setBytes(int, byte[]) throws java.sql.SQLException;
     method public abstract void setBytes(java.lang.String, byte[]) throws java.sql.SQLException;
     method public abstract void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException;
+    method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException;
     method public abstract void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
     method public abstract void setCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException;
-    method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException;
     method public abstract void setClob(int, java.sql.Clob) throws java.sql.SQLException;
-    method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException;
     method public abstract void setClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
     method public abstract void setClob(java.lang.String, java.sql.Clob) throws java.sql.SQLException;
     method public abstract void setClob(java.lang.String, java.io.Reader) throws java.sql.SQLException;
-    method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
     method public abstract void setCommand(java.lang.String) throws java.sql.SQLException;
     method public abstract void setConcurrency(int) throws java.sql.SQLException;
     method public abstract void setDataSourceName(java.lang.String) throws java.sql.SQLException;
@@ -59073,26 +60247,26 @@
     method public abstract void setMaxRows(int) throws java.sql.SQLException;
     method public abstract void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
     method public abstract void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
-    method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException;
     method public abstract void setNCharacterStream(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
+    method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException;
+    method public abstract void setNClob(java.lang.String, java.sql.NClob) throws java.sql.SQLException;
+    method public abstract void setNClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
+    method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException;
+    method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException;
     method public abstract void setNClob(int, java.sql.NClob) throws java.sql.SQLException;
     method public abstract void setNClob(int, java.io.Reader) throws java.sql.SQLException;
-    method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException;
-    method public abstract void setNClob(java.lang.String, java.sql.NClob) throws java.sql.SQLException;
-    method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException;
-    method public abstract void setNClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException;
     method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(int, int) throws java.sql.SQLException;
-    method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException;
+    method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException;
     method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException;
-    method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException;
-    method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException;
     method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException;
-    method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
-    method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
     method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException;
+    method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException;
+    method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException;
+    method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException;
     method public abstract void setPassword(java.lang.String) throws java.sql.SQLException;
     method public abstract void setQueryTimeout(int) throws java.sql.SQLException;
     method public abstract void setReadOnly(boolean) throws java.sql.SQLException;
@@ -59110,8 +60284,8 @@
     method public abstract void setTime(java.lang.String, java.sql.Time) throws java.sql.SQLException;
     method public abstract void setTime(java.lang.String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
     method public abstract void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException;
-    method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
     method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp) throws java.sql.SQLException;
+    method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
     method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
     method public abstract void setTransactionIsolation(int) throws java.sql.SQLException;
     method public abstract void setType(int) throws java.sql.SQLException;
@@ -59121,7 +60295,7 @@
     method public abstract void setUsername(java.lang.String) throws java.sql.SQLException;
   }
 
-  public class RowSetEvent extends java.util.EventObject implements java.io.Serializable {
+  public class RowSetEvent extends java.util.EventObject {
     ctor public RowSetEvent(javax.sql.RowSet);
   }
 
@@ -59168,8 +60342,8 @@
   }
 
   public class StatementEvent extends java.util.EventObject {
-    ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException);
     ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement);
+    ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException);
     method public java.sql.SQLException getSQLException();
     method public java.sql.PreparedStatement getStatement();
   }
diff --git a/core/java/android/accounts/AbstractAccountAuthenticator.java b/core/java/android/accounts/AbstractAccountAuthenticator.java
index 185ceb4..041f591 100644
--- a/core/java/android/accounts/AbstractAccountAuthenticator.java
+++ b/core/java/android/accounts/AbstractAccountAuthenticator.java
@@ -119,21 +119,26 @@
     /**
      * Bundle key used for the {@link String} account type in session bundle.
      * This is used in the default implementation of
-     * {@link #startAddAccountSession}. TODO: and startUpdateCredentialsSession.
+     * {@link #startAddAccountSession} and {@link startUpdateCredentialsSession}.
      */
     private static final String KEY_AUTH_TOKEN_TYPE = "android.accounts.KEY_AUTH_TOKEN_TYPE";
     /**
      * Bundle key used for the {@link String} array of required features in
      * session bundle. This is used in the default implementation of
-     * {@link #startAddAccountSession}. TODO: and startUpdateCredentialsSession.
+     * {@link #startAddAccountSession} and {@link startUpdateCredentialsSession}.
      */
     private static final String KEY_REQUIRED_FEATURES = "android.accounts.AbstractAccountAuthenticator.KEY_REQUIRED_FEATURES";
     /**
      * Bundle key used for the {@link Bundle} options in session bundle. This is
-     * used in default implementation of {@link #startAddAccountSession}. TODO:
-     * and startUpdateCredentialsSession.
+     * used in default implementation of {@link #startAddAccountSession} and
+     * {@link startUpdateCredentialsSession}.
      */
     private static final String KEY_OPTIONS = "android.accounts.AbstractAccountAuthenticator.KEY_OPTIONS";
+    /**
+     * Bundle key used for the {@link Account} account in session bundle. This is used
+     * used in default implementation of {@link startUpdateCredentialsSession}.
+     */
+    private static final String KEY_ACCOUNT = "android.accounts.AbstractAccountAuthenticator.KEY_ACCOUNT";
 
     private final Context mContext;
 
@@ -385,6 +390,43 @@
                 handleException(response, "startAddAccountSession", accountType, e);
             }
         }
+
+        @Override
+        public void startUpdateCredentialsSession(
+                IAccountAuthenticatorResponse response,
+                Account account,
+                String authTokenType,
+                Bundle loginOptions) throws RemoteException {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "startUpdateCredentialsSession: "
+                        + account
+                        + ", authTokenType "
+                        + authTokenType);
+            }
+            checkBinderPermission();
+            try {
+                final Bundle result = AbstractAccountAuthenticator.this
+                        .startUpdateCredentialsSession(
+                                new AccountAuthenticatorResponse(response),
+                                account,
+                                authTokenType,
+                                loginOptions);
+                if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                    // Result may be null.
+                    if (result != null) {
+                        result.keySet(); // force it to be unparcelled
+                    }
+                    Log.v(TAG, "startUpdateCredentialsSession: result "
+                            + AccountManager.sanitizeResult(result));
+                }
+                if (result != null) {
+                    response.onResult(result);
+                }
+            } catch (Exception e) {
+                handleException(response, "startUpdateCredentialsSession",
+                        account.toString() + "," + authTokenType, e);
+            }
+        }
     }
 
     private void handleException(IAccountAuthenticatorResponse response, String method,
@@ -700,4 +742,49 @@
         }).start();
         return null;
     }
+
+    /**
+     * Asks user to re-authenticate for an account but defers updating the locally stored
+     * credentials.
+     *
+     * @param response to send the result back to the AccountManager, will never
+     *            be null
+     * @param account the account whose credentials are to be updated, will
+     *            never be null
+     * @param authTokenType the type of auth token to retrieve after updating
+     *            the credentials, may be null (TODO)
+     * @param options a Bundle of authenticator-specific options, may be null
+     * @return a Bundle result or null if the result is to be returned via the
+     *         response. The result will contain either:
+     *         <ul>
+     *         <li>{@link AccountManager#KEY_INTENT}, or
+     *         <li>{@link AccountManager#KEY_ACCOUNT_SESSION_BUNDLE} for updating the
+     *         locally stored credentials later, and if account is
+     *         re-authenticated, {@link AccountManager#KEY_PASSWORD} and
+     *         {@link AccountManager#KEY_ACCOUNT_STATUS_TOKEN} for checking the
+     *         status of the account later, or
+     *         <li>{@link AccountManager#KEY_ERROR_CODE} and
+     *         {@link AccountManager#KEY_ERROR_MESSAGE} to indicate an error
+     *         </ul>
+     * @throws NetworkErrorException if the authenticator could not honor the
+     *             request due to a network error
+     */
+    public Bundle startUpdateCredentialsSession(final AccountAuthenticatorResponse response,
+            final Account account, final String authTokenType, final Bundle options)
+                    throws NetworkErrorException {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                Bundle sessionBundle = new Bundle();
+                sessionBundle.putString(KEY_AUTH_TOKEN_TYPE, authTokenType);
+                sessionBundle.putParcelable(KEY_ACCOUNT, account);
+                sessionBundle.putBundle(KEY_OPTIONS, options);
+                Bundle result = new Bundle();
+                result.putBundle(AccountManager.KEY_ACCOUNT_SESSION_BUNDLE, sessionBundle);
+                response.onResult(result);
+            }
+
+        }).start();
+        return null;
+    }
 }
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index 42e5e2a..5557905 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -2666,9 +2666,14 @@
      *         trouble
      *         </ul>
      */
-    public AccountManagerFuture<Bundle> startAddAccountSession(final String accountType,
-            final String authTokenType, final String[] requiredFeatures, final Bundle options,
-            final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler) {
+    public AccountManagerFuture<Bundle> startAddAccountSession(
+            final String accountType,
+            final String authTokenType,
+            final String[] requiredFeatures,
+            final Bundle options,
+            final Activity activity,
+            AccountManagerCallback<Bundle> callback,
+            Handler handler) {
         if (accountType == null) throw new IllegalArgumentException("accountType is null");
         final Bundle optionsIn = new Bundle();
         if (options != null) {
@@ -2679,8 +2684,89 @@
         return new AmsTask(activity, handler, callback) {
             @Override
             public void doWork() throws RemoteException {
-                mService.startAddAccountSession(mResponse, accountType, authTokenType,
-                        requiredFeatures, activity != null, optionsIn);
+                mService.startAddAccountSession(
+                        mResponse,
+                        accountType,
+                        authTokenType,
+                        requiredFeatures,
+                        activity != null,
+                        optionsIn);
+            }
+        }.start();
+    }
+
+    /**
+     * Asks the user to enter a new password for an account but not updating the
+     * saved credentials for the account until finishSession is
+     * called.
+     * <p>
+     * This method may be called from any thread, but the returned
+     * {@link AccountManagerFuture} must not be used on the main thread.
+     * <p>
+     * <b>NOTE:</b> The saved credentials for the account alone will not be
+     * updated by calling this API alone .
+     *
+     * @param account The account to update credentials for
+     * @param authTokenType The credentials entered must allow an auth token of
+     *            this type to be created (but no actual auth token is
+     *            returned); may be null
+     * @param options Authenticator-specific options for the request; may be
+     *            null or empty
+     * @param activity The {@link Activity} context to use for launching a new
+     *            authenticator-defined sub-Activity to prompt the user to enter
+     *            a password; used only to call startActivity(); if null, the
+     *            prompt will not be launched directly, but the necessary
+     *            {@link Intent} will be returned to the caller instead
+     * @param callback Callback to invoke when the request completes, null for
+     *            no callback
+     * @param handler {@link Handler} identifying the callback thread, null for
+     *            the main thread
+     * @return An {@link AccountManagerFuture} which resolves to a Bundle with
+     *         these fields if an activity was supplied and user was
+     *         successfully re-authenticated to the account (TODO: default impl
+     *         only returns escorw?):
+     *         <ul>
+     *         <li>{@link #KEY_ACCOUNT_SESSION_BUNDLE} - encrypted Bundle for
+     *         updating the local credentials on device later.
+     *         <li>{@link #KEY_PASSWORD} - optional, the password or password hash of the
+     *         account
+     *         <li>{@link #KEY_ACCOUNT_STATUS_TOKEN} - optional, token to check status of
+     *         the account
+     *         </ul>
+     *         If no activity was specified, the returned Bundle contains
+     *         {@link #KEY_INTENT} with the {@link Intent} needed to launch the
+     *         password prompt. If an error occurred,
+     *         {@link AccountManagerFuture#getResult()} throws:
+     *         <ul>
+     *         <li>{@link AuthenticatorException} if the authenticator failed to
+     *         respond
+     *         <li>{@link OperationCanceledException} if the operation was
+     *         canceled for any reason, including the user canceling the
+     *         password prompt
+     *         <li>{@link IOException} if the authenticator experienced an I/O
+     *         problem verifying the password, usually because of network
+     *         trouble
+     *         </ul>
+     */
+    public AccountManagerFuture<Bundle> startUpdateCredentialsSession(
+            final Account account,
+            final String authTokenType,
+            final Bundle options,
+            final Activity activity,
+            final AccountManagerCallback<Bundle> callback,
+            final Handler handler) {
+        if (account == null) {
+            throw new IllegalArgumentException("account is null");
+        }
+        return new AmsTask(activity, handler, callback) {
+            @Override
+            public void doWork() throws RemoteException {
+                mService.startUpdateCredentialsSession(
+                        mResponse,
+                        account,
+                        authTokenType,
+                        activity != null,
+                        options);
             }
         }.start();
     }
diff --git a/core/java/android/accounts/IAccountAuthenticator.aidl b/core/java/android/accounts/IAccountAuthenticator.aidl
index b326070..921fb19 100644
--- a/core/java/android/accounts/IAccountAuthenticator.aidl
+++ b/core/java/android/accounts/IAccountAuthenticator.aidl
@@ -90,4 +90,10 @@
      */
     void startAddAccountSession(in IAccountAuthenticatorResponse response, String accountType,
         String authTokenType, in String[] requiredFeatures, in Bundle options);
+
+    /**
+     * Prompts the user for a new password but does not write it to the IAccountManager.
+     */
+    void startUpdateCredentialsSession(in IAccountAuthenticatorResponse response, in Account account,
+        String authTokenType, in Bundle options);
 }
diff --git a/core/java/android/accounts/IAccountManager.aidl b/core/java/android/accounts/IAccountManager.aidl
index 5de311e..8489e47 100644
--- a/core/java/android/accounts/IAccountManager.aidl
+++ b/core/java/android/accounts/IAccountManager.aidl
@@ -88,4 +88,7 @@
         String authTokenType, in String[] requiredFeatures, boolean expectActivityLaunch,
         in Bundle options);
 
+    /* Update credentials in two steps. */
+    void startUpdateCredentialsSession(in IAccountManagerResponse response, in Account account,
+        String authTokenType, boolean expectActivityLaunch, in Bundle options);
 }
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 84ddd9f..c1d5b19 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -47,11 +47,11 @@
     void setNotificationsEnabledForPackage(String pkg, int uid, boolean enabled);
     boolean areNotificationsEnabledForPackage(String pkg, int uid);
 
-    void setPackagePriority(String pkg, int uid, int priority);
-    int getPackagePriority(String pkg, int uid);
-
-    void setPackageVisibilityOverride(String pkg, int uid, int visibility);
-    int getPackageVisibilityOverride(String pkg, int uid);
+    ParceledListSlice getTopics(String pkg, int uid);
+    void setTopicVisibilityOverride(String pkg, int uid, in Notification.Topic topic, int visibility);
+    int getTopicVisibilityOverride(String pkg, int uid, in Notification.Topic topic);
+    void setTopicPriority(String pkg, int uid, in Notification.Topic topic, int priority);
+    int getTopicPriority(String pkg, int uid, in Notification.Topic topic);
 
     // TODO: Remove this when callers have been migrated to the equivalent
     // INotificationListener method.
diff --git a/core/java/android/app/Notification.aidl b/core/java/android/app/Notification.aidl
index 9d8129c..3f1d113 100644
--- a/core/java/android/app/Notification.aidl
+++ b/core/java/android/app/Notification.aidl
@@ -17,3 +17,4 @@
 package android.app;
 
 parcelable Notification;
+parcelable Notification.Topic;
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 4e6548b..848b33f 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -21,6 +21,7 @@
 import android.annotation.IntDef;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.SystemApi;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -1433,6 +1434,9 @@
                 };
     }
 
+    @SystemApi
+    public static final String TOPIC_DEFAULT = "system_default_topic";
+
     private Topic topic;
 
     public Topic getTopic() {
@@ -3419,6 +3423,10 @@
                 mN.extras.putStringArray(EXTRA_PEOPLE,
                         mPersonList.toArray(new String[mPersonList.size()]));
             }
+            if (mN.topic == null) {
+                mN.topic = new Topic(TOPIC_DEFAULT, mContext.getString(
+                        R.string.default_notification_topic_label));
+            }
             return mN;
         }
 
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 94b434c..68f660f 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -41,6 +41,7 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.provider.ContactsContract.Directory;
 import android.security.Credentials;
 import android.service.restrictions.RestrictionsReceiver;
 import android.util.Log;
@@ -131,7 +132,12 @@
      * As of {@link android.os.Build.VERSION_CODES#M}, it should contain the extra
      * {@link #EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME} instead, although specifying only
      * {@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME} is still supported.
-     * This intent may also contain the extra {@link #EXTRA_PROVISIONING_LOGO_URI}.
+     *
+     * <p> The intent may also contain the following extras:
+     * <ul>
+     * <li> {@link #EXTRA_PROVISIONING_LOGO_URI}, optional </li>
+     * <li> {@link #EXTRA_PROVISIONING_MAIN_COLOR}, optional </li>
+     * </ul>
      *
      * <p> When managed provisioning has completed, broadcasts are sent to the application specified
      * in the provisioning intent. The
@@ -199,6 +205,7 @@
      * <li>{@link #EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED}, optional</li>
      * <li>{@link #EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE}, optional</li>
      * <li>{@link #EXTRA_PROVISIONING_LOGO_URI}, optional</li>
+     * <li>{@link #EXTRA_PROVISIONING_MAIN_COLOR}, optional</li>
      * </ul>
      *
      * <p> When device owner provisioning has completed, an intent of the type
@@ -358,6 +365,16 @@
         = "android.app.extra.PROVISIONING_EMAIL_ADDRESS";
 
     /**
+     * A integer extra indicating the predominant color to show during the provisioning.
+     * Refer to {@link android.graphics.Color} for how the color is represented.
+     *
+     * <p>Use with {@link #ACTION_PROVISION_MANAGED_PROFILE} or
+     * {@link #ACTION_PROVISION_MANAGED_DEVICE}.
+     */
+    public static final String EXTRA_PROVISIONING_MAIN_COLOR =
+             "android.app.extra.PROVISIONING_MAIN_COLOR";
+
+    /**
      * A Boolean extra that can be used by the mobile device management application to skip the
      * disabling of system apps during provisioning when set to {@code true}.
      *
@@ -2847,6 +2864,24 @@
     }
 
     /**
+     * Returns the device owner user id. Note this method will still return the device owner user id
+     * even if it's running on a different user. If there is no device owner this method return
+     * {@link UserHandle.USER_NULL}.
+     *
+     * @hide
+     */
+    public int getDeviceOwnerUserId() {
+        if (mService != null) {
+            try {
+                return mService.getDeviceOwnerUserId();
+            } catch (RemoteException re) {
+                Log.w(TAG, "Failed to get device owner user id");
+            }
+        }
+        return UserHandle.USER_NULL;
+    }
+
+    /**
      * @hide
      * @deprecated Do not use
      * @removed
@@ -3345,11 +3380,11 @@
      * @hide
      */
     public void startManagedQuickContact(String actualLookupKey, long actualContactId,
-            Intent originalIntent) {
+            long directoryId, Intent originalIntent) {
         if (mService != null) {
             try {
                 mService.startManagedQuickContact(
-                        actualLookupKey, actualContactId, originalIntent);
+                        actualLookupKey, actualContactId, directoryId, originalIntent);
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed talking with device policy service", e);
             }
@@ -3357,6 +3392,16 @@
     }
 
     /**
+     * Start Quick Contact on the managed profile for the current user, if the policy allows.
+     * @hide
+     */
+    public void startManagedQuickContact(String actualLookupKey, long actualContactId,
+            Intent originalIntent) {
+        startManagedQuickContact(actualLookupKey, actualContactId, Directory.DEFAULT,
+                originalIntent);
+    }
+
+    /**
      * Called by a profile owner of a managed profile to set whether bluetooth
      * devices can access enterprise contacts.
      * <p>
@@ -3616,6 +3661,48 @@
     }
 
     /**
+     * Called by a device owner to get the list of apps to keep around as APKs even if no user has
+     * currently installed it.
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+     *
+     * @return List of package names to keep cached.
+     * @hide
+     */
+    public List<String> getKeepUninstalledPackages(@NonNull ComponentName admin) {
+        if (mService != null) {
+            try {
+                return mService.getKeepUninstalledPackages(admin);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Called by a device owner to set a list of apps to keep around as APKs even if no user has
+     * currently installed it.
+     *
+     * <p>Please note that setting this policy does not imply that specified apps will be
+     * automatically pre-cached.</p>
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+     * @param packageNames List of package names to keep cached.
+     * @hide
+     */
+    public void setKeepUninstalledPackages(@NonNull ComponentName admin,
+            @NonNull List<String> packageNames) {
+        if (mService != null) {
+            try {
+                mService.setKeepUninstalledPackages(admin, packageNames);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+    }
+
+    /**
      * Called by a device owner to create a user with the specified name. The UserHandle returned
      * by this method should not be persisted as user handles are recycled as users are removed and
      * created. If you need to persist an identifier for this user, use
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 93a5503..ba34c3d 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -116,6 +116,7 @@
     boolean setDeviceOwner(in ComponentName who, String ownerName, int userId);
     ComponentName getDeviceOwner();
     String getDeviceOwnerName();
+    int getDeviceOwnerUserId();
     void clearDeviceOwner(String packageName);
 
     boolean setProfileOwner(in ComponentName who, String ownerName, int userHandle);
@@ -194,7 +195,7 @@
     void setCrossProfileCallerIdDisabled(in ComponentName who, boolean disabled);
     boolean getCrossProfileCallerIdDisabled(in ComponentName who);
     boolean getCrossProfileCallerIdDisabledForUser(int userId);
-    void startManagedQuickContact(String lookupKey, long contactId, in Intent originalIntent);
+    void startManagedQuickContact(String lookupKey, long contactId, long directoryId, in Intent originalIntent);
 
     void setBluetoothContactSharingDisabled(in ComponentName who, boolean disabled);
     boolean getBluetoothContactSharingDisabled(in ComponentName who);
@@ -231,4 +232,6 @@
             String permission, int grantState);
     int getPermissionGrantState(in ComponentName admin, String packageName, String permission);
     boolean isProvisioningAllowed(String action);
+    void setKeepUninstalledPackages(in ComponentName admin,in List<String> packageList);
+    List<String> getKeepUninstalledPackages(in ComponentName admin);
 }
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java
index bf70d6c..905ac5e 100644
--- a/core/java/android/content/pm/PackageManagerInternal.java
+++ b/core/java/android/content/pm/PackageManagerInternal.java
@@ -16,7 +16,7 @@
 
 package android.content.pm;
 
-import android.annotation.NonNull;
+import java.util.List;
 
 /**
  * Package manager local system service interface.
@@ -115,4 +115,11 @@
      */
     public abstract void grantDefaultPermissionsToDefaultSimCallManager(String packageName,
             int userId);
+
+    /**
+     * Sets a list of apps to keep in PM's internal data structures and as APKs even if no user has
+     * currently installed it. The apps are not preloaded.
+     * @param packageList List of package names to keep cached.
+     */
+    public abstract void setKeepUninstalledPackages(List<String> packageList);
 }
diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java
index 4535572..407ff08 100644
--- a/core/java/android/os/RecoverySystem.java
+++ b/core/java/android/os/RecoverySystem.java
@@ -44,11 +44,8 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
-import org.apache.harmony.security.asn1.BerInputStream;
-import org.apache.harmony.security.pkcs7.ContentInfo;
-import org.apache.harmony.security.pkcs7.SignedData;
-import org.apache.harmony.security.pkcs7.SignerInfo;
-import org.apache.harmony.security.x509.Certificate;
+import sun.security.pkcs.PKCS7;
+import sun.security.pkcs.SignerInfo;
 
 /**
  * RecoverySystem contains methods for interacting with the Android
@@ -150,14 +147,13 @@
                                      ProgressListener listener,
                                      File deviceCertsZipFile)
         throws IOException, GeneralSecurityException {
-        long fileLen = packageFile.length();
+        final long fileLen = packageFile.length();
 
-        RandomAccessFile raf = new RandomAccessFile(packageFile, "r");
+        final RandomAccessFile raf = new RandomAccessFile(packageFile, "r");
         try {
-            int lastPercent = 0;
-            long lastPublishTime = System.currentTimeMillis();
+            final long startTimeMillis = System.currentTimeMillis();
             if (listener != null) {
-                listener.onProgress(lastPercent);
+                listener.onProgress(0);
             }
 
             raf.seek(fileLen - 6);
@@ -168,8 +164,8 @@
                 throw new SignatureException("no signature in file (no footer)");
             }
 
-            int commentSize = (footer[4] & 0xff) | ((footer[5] & 0xff) << 8);
-            int signatureStart = (footer[0] & 0xff) | ((footer[1] & 0xff) << 8);
+            final int commentSize = (footer[4] & 0xff) | ((footer[5] & 0xff) << 8);
+            final int signatureStart = (footer[0] & 0xff) | ((footer[1] & 0xff) << 8);
 
             byte[] eocd = new byte[commentSize + 22];
             raf.seek(fileLen - (commentSize + 22));
@@ -189,51 +185,30 @@
                 }
             }
 
-            // The following code is largely copied from
-            // JarUtils.verifySignature().  We could just *call* that
-            // method here if that function didn't read the entire
-            // input (ie, the whole OTA package) into memory just to
-            // compute its message digest.
+            // Parse the signature
+            PKCS7 block =
+                new PKCS7(new ByteArrayInputStream(eocd, commentSize+22-signatureStart, signatureStart));
 
-            BerInputStream bis = new BerInputStream(
-                new ByteArrayInputStream(eocd, commentSize+22-signatureStart, signatureStart));
-            ContentInfo info = (ContentInfo)ContentInfo.ASN1.decode(bis);
-            SignedData signedData = info.getSignedData();
-            if (signedData == null) {
-                throw new IOException("signedData is null");
-            }
-            List<Certificate> encCerts = signedData.getCertificates();
-            if (encCerts.isEmpty()) {
-                throw new IOException("encCerts is empty");
-            }
             // Take the first certificate from the signature (packages
             // should contain only one).
-            Iterator<Certificate> it = encCerts.iterator();
-            X509Certificate cert = null;
-            if (it.hasNext()) {
-                CertificateFactory cf = CertificateFactory.getInstance("X.509");
-                InputStream is = new ByteArrayInputStream(it.next().getEncoded());
-                cert = (X509Certificate) cf.generateCertificate(is);
-            } else {
+            X509Certificate[] certificates = block.getCertificates();
+            if (certificates == null || certificates.length == 0) {
                 throw new SignatureException("signature contains no certificates");
             }
+            X509Certificate cert = certificates[0];
+            PublicKey signatureKey = cert.getPublicKey();
 
-            List<SignerInfo> sigInfos = signedData.getSignerInfos();
-            SignerInfo sigInfo;
-            if (!sigInfos.isEmpty()) {
-                sigInfo = (SignerInfo)sigInfos.get(0);
-            } else {
-                throw new IOException("no signer infos!");
+            SignerInfo[] signerInfos = block.getSignerInfos();
+            if (signerInfos == null || signerInfos.length == 0) {
+                throw new SignatureException("signature contains no signedData");
             }
+            SignerInfo signerInfo = signerInfos[0];
 
             // Check that the public key of the certificate contained
             // in the package equals one of our trusted public keys.
-
+            boolean verified = false;
             HashSet<X509Certificate> trusted = getTrustedCerts(
                 deviceCertsZipFile == null ? DEFAULT_KEYSTORE : deviceCertsZipFile);
-
-            PublicKey signatureKey = cert.getPublicKey();
-            boolean verified = false;
             for (X509Certificate c : trusted) {
                 if (c.getPublicKey().equals(signatureKey)) {
                     verified = true;
@@ -246,61 +221,54 @@
 
             // The signature cert matches a trusted key.  Now verify that
             // the digest in the cert matches the actual file data.
-
-            // The verifier in recovery only handles SHA1withRSA and
-            // SHA256withRSA signatures.  SignApk chooses which to use
-            // based on the signature algorithm of the cert:
-            //
-            //    "SHA256withRSA" cert -> "SHA256withRSA" signature
-            //    "SHA1withRSA" cert   -> "SHA1withRSA" signature
-            //    "MD5withRSA" cert    -> "SHA1withRSA" signature (for backwards compatibility)
-            //    any other cert       -> SignApk fails
-            //
-            // Here we ignore whatever the cert says, and instead use
-            // whatever algorithm is used by the signature.
-
-            String da = sigInfo.getDigestAlgorithm();
-            String dea = sigInfo.getDigestEncryptionAlgorithm();
-            String alg = null;
-            if (da == null || dea == null) {
-                // fall back to the cert algorithm if the sig one
-                // doesn't look right.
-                alg = cert.getSigAlgName();
-            } else {
-                alg = da + "with" + dea;
-            }
-            Signature sig = Signature.getInstance(alg);
-            sig.initVerify(cert);
-
-            // The signature covers all of the OTA package except the
-            // archive comment and its 2-byte length.
-            long toRead = fileLen - commentSize - 2;
-            long soFar = 0;
             raf.seek(0);
-            byte[] buffer = new byte[4096];
-            boolean interrupted = false;
-            while (soFar < toRead) {
-                interrupted = Thread.interrupted();
-                if (interrupted) break;
-                int size = buffer.length;
-                if (soFar + size > toRead) {
-                    size = (int)(toRead - soFar);
-                }
-                int read = raf.read(buffer, 0, size);
-                sig.update(buffer, 0, read);
-                soFar += read;
+            final ProgressListener listenerForInner = listener;
+            SignerInfo verifyResult = block.verify(signerInfo, new InputStream() {
+                // The signature covers all of the OTA package except the
+                // archive comment and its 2-byte length.
+                long toRead = fileLen - commentSize - 2;
+                long soFar = 0;
 
-                if (listener != null) {
-                    long now = System.currentTimeMillis();
-                    int p = (int)(soFar * 100 / toRead);
-                    if (p > lastPercent &&
-                        now - lastPublishTime > PUBLISH_PROGRESS_INTERVAL_MS) {
-                        lastPercent = p;
-                        lastPublishTime = now;
-                        listener.onProgress(lastPercent);
-                    }
+                int lastPercent = 0;
+                long lastPublishTime = startTimeMillis;
+
+                @Override
+                public int read() throws IOException {
+                    throw new UnsupportedOperationException();
                 }
-            }
+
+                @Override
+                public int read(byte[] b, int off, int len) throws IOException {
+                    if (soFar >= toRead) {
+                        return -1;
+                    }
+                    if (Thread.currentThread().isInterrupted()) {
+                        return -1;
+                    }
+
+                    int size = len;
+                    if (soFar + size > toRead) {
+                        size = (int)(toRead - soFar);
+                    }
+                    int read = raf.read(b, off, size);
+                    soFar += read;
+
+                    if (listenerForInner != null) {
+                        long now = System.currentTimeMillis();
+                        int p = (int)(soFar * 100 / toRead);
+                        if (p > lastPercent &&
+                            now - lastPublishTime > PUBLISH_PROGRESS_INTERVAL_MS) {
+                            lastPercent = p;
+                            lastPublishTime = now;
+                            listenerForInner.onProgress(lastPercent);
+                        }
+                    }
+
+                    return read;
+                }
+            });
+
+            final boolean interrupted = Thread.interrupted();
             if (listener != null) {
                 listener.onProgress(100);
             }
@@ -309,7 +277,7 @@
                 throw new SignatureException("verification was interrupted");
             }
 
-            if (!sig.verify(sigInfo.getEncryptedDigest())) {
+            if (verifyResult == null) {
                 throw new SignatureException("signature digest verification failed");
             }
         } finally {
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index b860bfb..94a2bea 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -8360,10 +8360,15 @@
          * @hide
          */
         public static Intent rebuildManagedQuickContactsIntent(String lookupKey, long contactId,
-                Intent originalIntent) {
+                long directoryId, Intent originalIntent) {
             final Intent intent = new Intent(ACTION_QUICK_CONTACT);
             // Rebuild the URI from a lookup key and a contact ID.
-            intent.setData(Contacts.getLookupUri(contactId, lookupKey));
+            Uri uri = Contacts.getLookupUri(contactId, lookupKey);
+            if (uri != null && directoryId != Directory.DEFAULT) {
+                uri = uri.buildUpon().appendQueryParameter(
+                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
+            }
+            intent.setData(uri);
 
             // Copy flags and always set NEW_TASK because it won't have a parent activity.
             intent.setFlags(originalIntent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
diff --git a/core/java/android/provider/ContactsInternal.java b/core/java/android/provider/ContactsInternal.java
index 059a603..36ef52d 100644
--- a/core/java/android/provider/ContactsInternal.java
+++ b/core/java/android/provider/ContactsInternal.java
@@ -91,6 +91,10 @@
         final List<String> pathSegments = uri.getPathSegments();
         final long contactId = ContentUris.parseId(uri);
         final String lookupKey = pathSegments.get(2);
+        final String directoryIdStr = uri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
+        final long directoryId = (directoryIdStr == null)
+                ? ContactsContract.Directory.ENTERPRISE_DIRECTORY_ID_BASE
+                : Long.parseLong(directoryIdStr);
 
         // See if it has a corp lookupkey.
         if (TextUtils.isEmpty(lookupKey)
@@ -99,14 +103,24 @@
             return false; // It's not a corp lookup key.
         }
 
+        if (!ContactsContract.Contacts.isEnterpriseContactId(contactId)) {
+            throw new IllegalArgumentException("Invalid enterprise contact id: " + contactId);
+        }
+        if (!ContactsContract.Directory.isEnterpriseDirectoryId(directoryId)) {
+            throw new IllegalArgumentException("Invalid enterprise directory id: " + directoryId);
+        }
+
         // Launch Quick Contact on the managed profile, if the policy allows.
         final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
         final String actualLookupKey = lookupKey.substring(
                 ContactsContract.Contacts.ENTERPRISE_CONTACT_LOOKUP_PREFIX.length());
         final long actualContactId =
                 (contactId - ContactsContract.Contacts.ENTERPRISE_CONTACT_ID_BASE);
+        final long actualDirectoryId = (directoryId
+                - ContactsContract.Directory.ENTERPRISE_DIRECTORY_ID_BASE);
 
-        dpm.startManagedQuickContact(actualLookupKey, actualContactId, originalIntent);
+        dpm.startManagedQuickContact(actualLookupKey, actualContactId, actualDirectoryId,
+                originalIntent);
         return true;
     }
 }
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 9034cc9..f560f8a 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -7758,6 +7758,7 @@
             AUTO_TIME_ZONE,
             POWER_SOUNDS_ENABLED,
             DOCK_SOUNDS_ENABLED,
+            CHARGING_SOUNDS_ENABLED,
             USB_MASS_STORAGE_ENABLED,
             ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED,
             WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
diff --git a/core/java/android/speech/tts/FileSynthesisCallback.java b/core/java/android/speech/tts/FileSynthesisCallback.java
index a88eead..2b882d3 100644
--- a/core/java/android/speech/tts/FileSynthesisCallback.java
+++ b/core/java/android/speech/tts/FileSynthesisCallback.java
@@ -107,6 +107,14 @@
             Log.d(TAG, "FileSynthesisRequest.start(" + sampleRateInHz + "," + audioFormat
                     + "," + channelCount + ")");
         }
+        if (audioFormat != AudioFormat.ENCODING_PCM_8BIT ||
+            audioFormat != AudioFormat.ENCODING_PCM_16BIT ||
+            audioFormat != AudioFormat.ENCODING_PCM_FLOAT) {
+            Log.e(TAG, "Audio format encoding " + audioFormat + " not supported. Please use one " +
+                       "of AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT or " +
+                       "AudioFormat.ENCODING_PCM_FLOAT");
+        }
+
         FileChannel fileChannel = null;
         synchronized (mStateLock) {
             if (mStatusCode == TextToSpeech.STOPPED) {
diff --git a/core/java/android/speech/tts/PlaybackSynthesisCallback.java b/core/java/android/speech/tts/PlaybackSynthesisCallback.java
index f850f10..a6fb543 100644
--- a/core/java/android/speech/tts/PlaybackSynthesisCallback.java
+++ b/core/java/android/speech/tts/PlaybackSynthesisCallback.java
@@ -15,6 +15,7 @@
  */
 package android.speech.tts;
 
+import android.media.AudioFormat;
 import android.speech.tts.TextToSpeechService.AudioOutputParams;
 import android.speech.tts.TextToSpeechService.UtteranceProgressDispatcher;
 import android.util.Log;
@@ -122,6 +123,13 @@
     public int start(int sampleRateInHz, int audioFormat, int channelCount) {
         if (DBG) Log.d(TAG, "start(" + sampleRateInHz + "," + audioFormat + "," + channelCount
                 + ")");
+        if (audioFormat != AudioFormat.ENCODING_PCM_8BIT ||
+            audioFormat != AudioFormat.ENCODING_PCM_16BIT ||
+            audioFormat != AudioFormat.ENCODING_PCM_FLOAT) {
+            Log.w(TAG, "Audio format encoding " + audioFormat + " not supported. Please use one " +
+                       "of AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT or " +
+                       "AudioFormat.ENCODING_PCM_FLOAT");
+        }
 
         int channelConfig = BlockingAudioTrack.getChannelConfig(channelCount);
 
diff --git a/core/java/android/speech/tts/SynthesisCallback.java b/core/java/android/speech/tts/SynthesisCallback.java
index e32438b..6c7a217 100644
--- a/core/java/android/speech/tts/SynthesisCallback.java
+++ b/core/java/android/speech/tts/SynthesisCallback.java
@@ -15,6 +15,14 @@
  */
 package android.speech.tts;
 
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+import android.media.AudioFormat;
+import android.speech.tts.TextToSpeech;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * A callback to return speech data synthesized by a text to speech engine.
  *
@@ -31,6 +39,13 @@
  * All methods can be only called on the synthesis thread.
  */
 public interface SynthesisCallback {
+
+     /** @hide */
+     @Retention(RetentionPolicy.SOURCE)
+     @IntDef({AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT,
+              AudioFormat.ENCODING_PCM_FLOAT})
+     public @interface SupportedAudioFormat {};
+
     /**
      * @return the maximum number of bytes that the TTS engine can pass in a single call of
      *         {@link #audioAvailable}. Calls to {@link #audioAvailable} with data lengths
@@ -38,6 +53,7 @@
      */
     public int getMaxBufferSize();
 
+    // TODO: Replace reference to Android N to an API level when the API level for N is decided.
     /**
      * The service should call this when it starts to synthesize audio for this
      * request.
@@ -47,12 +63,16 @@
      *
      * @param sampleRateInHz Sample rate in HZ of the generated audio.
      * @param audioFormat Audio format of the generated audio. Must be one of
-     *         the ENCODING_ constants defined in {@link android.media.AudioFormat}.
+     *         {@link AudioFormat#ENCODING_PCM_8BIT} or
+     *         {@link AudioFormat#ENCODING_PCM_16BIT}. Can also be
+     *         {@link AudioFormat#ENCODING_PCM_FLOAT} when targetting Android N and
+     *         above.
      * @param channelCount The number of channels. Must be {@code 1} or {@code 2}.
      * @return {@link TextToSpeech#SUCCESS}, {@link TextToSpeech#ERROR} or
      *          {@link TextToSpeech#STOPPED}.
      */
-    public int start(int sampleRateInHz, int audioFormat, int channelCount);
+    public int start(int sampleRateInHz, @SupportedAudioFormat int audioFormat,
+                     @IntRange(from=1,to=2) int channelCount);
 
     /**
      * The service should call this method when synthesized audio is ready for consumption.
@@ -102,7 +122,7 @@
      * @param errorCode Error code to pass to the client. One of the ERROR_ values from
      *      {@link TextToSpeech}
      */
-    public void error(int errorCode);
+    public void error(@TextToSpeech.Error int errorCode);
 
     /**
      * Check if {@link #start} was called or not.
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index eae4329..61c33ff 100644
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -15,6 +15,7 @@
  */
 package android.speech.tts;
 
+import android.annotation.IntDef;
 import android.annotation.RawRes;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
@@ -38,6 +39,8 @@
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -75,6 +78,12 @@
      */
     public static final int STOPPED = -2;
 
+    /** @hide */
+    @IntDef({ERROR_SYNTHESIS, ERROR_SERVICE, ERROR_OUTPUT, ERROR_NETWORK, ERROR_NETWORK_TIMEOUT,
+             ERROR_INVALID_REQUEST, ERROR_NOT_INSTALLED_YET})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Error {}
+
     /**
      * Denotes a failure of a TTS engine to synthesize the given input.
      */
diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl
index 3fc70cc..b3cd8c11 100644
--- a/core/java/android/view/IWindowSession.aidl
+++ b/core/java/android/view/IWindowSession.aidl
@@ -186,6 +186,11 @@
 	void reportDropResult(IWindow window, boolean consumed);
 
     /**
+     * Cancel the current drag operation.
+     */
+    void cancelDragAndDrop(IBinder dragToken);
+
+    /**
      * Tell the OS that we've just dragged into a View that is willing to accept the drop
      */
     void dragRecipientEntered(IWindow window);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 227d8f2..66381f9 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -3696,7 +3696,7 @@
 
     /**
      * Flag indicating that a drag can cross window boundaries.  When
-     * {@link #startDrag(ClipData, DragShadowBuilder, Object, int)} is called
+     * {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, int)} is called
      * with this flag set, all visible applications will be able to participate
      * in the drag operation and receive the dragged content.
      *
@@ -3741,7 +3741,7 @@
 
     /**
      * Flag indicating that the drag shadow will be opaque.  When
-     * {@link #startDrag(ClipData, DragShadowBuilder, Object, int)} is called
+     * {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, int)} is called
      * with this flag set, the drag shadow will be opaque, otherwise, it will be semitransparent.
      */
     public static final int DRAG_FLAG_OPAQUE = 1 << 9;
@@ -19910,6 +19910,15 @@
     }
 
     /**
+     * @deprecated Use {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, int)
+     * startDragAndDrop()} for newer platform versions.
+     */
+    public final boolean startDrag(ClipData data, DragShadowBuilder shadowBuilder,
+                                   Object myLocalState, int flags) {
+        return startDragAndDrop(data, shadowBuilder, myLocalState, flags);
+    }
+
+    /**
      * Starts a drag and drop operation. When your application calls this method, it passes a
      * {@link android.view.View.DragShadowBuilder} object to the system. The
      * system calls this object's {@link DragShadowBuilder#onProvideShadowMetrics(Point, Point)}
@@ -19926,9 +19935,10 @@
      *  {@link android.view.DragEvent#ACTION_DRAG_STARTED}.
      * </p>
      * <p>
-     * Your application can invoke startDrag() on any attached View object. The View object does not
-     * need to be the one used in {@link android.view.View.DragShadowBuilder}, nor does it need to
-     * be related to the View the user selected for dragging.
+     * Your application can invoke {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object,
+     * int) startDragAndDrop()} on any attached View object. The View object does not need to be
+     * the one used in {@link android.view.View.DragShadowBuilder}, nor does it need to be related
+     * to the View the user selected for dragging.
      * </p>
      * @param data A {@link android.content.ClipData} object pointing to the data to be
      * transferred by the drag and drop operation.
@@ -19948,10 +19958,10 @@
      * {@code false} if it fails anywhere. Returning {@code false} means the system was unable to
      * do a drag, and so no drag operation is in progress.
      */
-    public final boolean startDrag(ClipData data, DragShadowBuilder shadowBuilder,
+    public final boolean startDragAndDrop(ClipData data, DragShadowBuilder shadowBuilder,
             Object myLocalState, int flags) {
         if (ViewDebug.DEBUG_DRAG) {
-            Log.d(VIEW_LOG_TAG, "startDrag: data=" + data + " flags=" + flags);
+            Log.d(VIEW_LOG_TAG, "startDragAndDrop: data=" + data + " flags=" + flags);
         }
         boolean okay = false;
 
@@ -19970,11 +19980,11 @@
         }
         Surface surface = new Surface();
         try {
-            IBinder token = mAttachInfo.mSession.prepareDrag(mAttachInfo.mWindow,
+            mAttachInfo.mDragToken = mAttachInfo.mSession.prepareDrag(mAttachInfo.mWindow,
                     flags, shadowSize.x, shadowSize.y, surface);
-            if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "prepareDrag returned token=" + token
-                    + " surface=" + surface);
-            if (token != null) {
+            if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "prepareDrag returned token="
+                    + mAttachInfo.mDragToken + " surface=" + surface);
+            if (mAttachInfo.mDragToken != null) {
                 Canvas canvas = surface.lockCanvas(null);
                 try {
                     canvas.drawColor(0, PorterDuff.Mode.CLEAR);
@@ -19991,7 +20001,7 @@
                 // repurpose 'shadowSize' for the last touch point
                 root.getLastTouchPoint(shadowSize);
 
-                okay = mAttachInfo.mSession.performDrag(mAttachInfo.mWindow, token,
+                okay = mAttachInfo.mSession.performDrag(mAttachInfo.mWindow, mAttachInfo.mDragToken,
                         shadowSize.x, shadowSize.y,
                         shadowTouchPoint.x, shadowTouchPoint.y, data);
                 if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "performDrag returned " + okay);
@@ -20009,6 +20019,39 @@
     }
 
     /**
+     * Cancels an ongoing drag and drop operation.
+     * <p>
+     * A {@link android.view.DragEvent} object with
+     * {@link android.view.DragEvent#getAction()} value of
+     * {@link android.view.DragEvent#ACTION_DRAG_ENDED} and
+     * {@link android.view.DragEvent#getResult()} value of {@code false}
+     * will be sent to every
+     * View that received {@link android.view.DragEvent#ACTION_DRAG_STARTED}
+     * even if they are not currently visible.
+     * </p>
+     * <p>
+     * This method can be called on any View in the same window as the View on which
+     * {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, int) startDragAndDrop}
+     * was called.
+     * </p>
+     */
+    public final void cancelDragAndDrop() {
+        if (ViewDebug.DEBUG_DRAG) {
+            Log.d(VIEW_LOG_TAG, "cancelDragAndDrop");
+        }
+        if (mAttachInfo.mDragToken != null) {
+            try {
+                mAttachInfo.mSession.cancelDragAndDrop(mAttachInfo.mDragToken);
+            } catch (Exception e) {
+                Log.e(VIEW_LOG_TAG, "Unable to cancel drag", e);
+            }
+            mAttachInfo.mDragToken = null;
+        } else {
+            Log.e(VIEW_LOG_TAG, "No active drag to cancel");
+        }
+    }
+
+    /**
      * Starts a move from {startX, startY}, the amount of the movement will be the offset
      * between {startX, startY} and the new cursor positon.
      * @param startX horizontal coordinate where the move started.
@@ -20030,7 +20073,8 @@
 
     /**
      * Handles drag events sent by the system following a call to
-     * {@link android.view.View#startDrag(ClipData,DragShadowBuilder,Object,int) startDrag()}.
+     * {@link android.view.View#startDragAndDrop(ClipData,DragShadowBuilder,Object,int)
+     * startDragAndDrop()}.
      *<p>
      * When the system calls this method, it passes a
      * {@link android.view.DragEvent} object. A call to
@@ -22293,6 +22337,11 @@
         final List<View> mPartialLayoutViews = new ArrayList<View>();
 
         /**
+         * Used to track the identity of the current drag operation.
+         */
+        IBinder mDragToken;
+
+        /**
          * Creates a new set of attachment information with the specified
          * events handler and thread.
          *
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 6812fd1..11df9a3 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -224,7 +224,7 @@
      * NOTE: If you change the flags below make sure to reflect the changes
      *       the DisplayList class
      */
-    
+
     // When set, ViewGroup invalidates only the child's rectangle
     // Set by default
     static final int FLAG_CLIP_CHILDREN = 0x1;
@@ -269,7 +269,7 @@
     /**
      * When set, the drawing method will call {@link #getChildDrawingOrder(int, int)}
      * to get the index of the child to draw for that iteration.
-     * 
+     *
      * @hide
      */
     protected static final int FLAG_USE_CHILD_DRAWING_ORDER = 0x400;
@@ -1327,7 +1327,7 @@
             children[i].dispatchConfigurationChanged(newConfig);
         }
     }
-    
+
     /**
      * {@inheritDoc}
      */
@@ -2214,7 +2214,7 @@
                         final float y = ev.getY(actionIndex);
                         // Find a child that can receive the event.
                         // Scan children from front to back.
-                        final ArrayList<View> preorderedList = buildOrderedChildList();
+                        final ArrayList<View> preorderedList = buildTouchDispatchChildList();
                         final boolean customOrder = preorderedList == null
                                 && isChildrenDrawingOrderEnabled();
                         final View[] children = mChildren;
@@ -2347,6 +2347,18 @@
     }
 
     /**
+     * Provide custom ordering of views in which the touch will be dispatched.
+     *
+     * This is called within a tight loop, so you are not allowed to allocate objects, including
+     * the return array. Instead, you should return a pre-allocated list that will be cleared
+     * after the dispatch is finished.
+     * @hide
+     */
+    public ArrayList<View> buildTouchDispatchChildList() {
+        return buildOrderedChildList();
+    }
+
+    /**
      * Finds the child which has accessibility focus.
      *
      * @return The child that has focus.
@@ -2787,7 +2799,7 @@
      * @see #FOCUS_BEFORE_DESCENDANTS
      * @see #FOCUS_AFTER_DESCENDANTS
      * @see #FOCUS_BLOCK_DESCENDANTS
-     * @see #onRequestFocusInDescendants(int, android.graphics.Rect) 
+     * @see #onRequestFocusInDescendants(int, android.graphics.Rect)
      */
     @Override
     public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
@@ -4104,7 +4116,7 @@
     /**
      * <p>Adds a child view. If no layout parameters are already set on the child, the
      * default parameters for this ViewGroup are set on the child.</p>
-     * 
+     *
      * <p><strong>Note:</strong> do not invoke this method from
      * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)},
      * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p>
@@ -4120,7 +4132,7 @@
     /**
      * Adds a child view. If no layout parameters are already set on the child, the
      * default parameters for this ViewGroup are set on the child.
-     * 
+     *
      * <p><strong>Note:</strong> do not invoke this method from
      * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)},
      * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p>
@@ -4560,7 +4572,7 @@
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * <p><strong>Note:</strong> do not invoke this method from
      * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)},
      * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p>
@@ -4579,7 +4591,7 @@
      * <p><strong>Note:</strong> do not invoke this method from
      * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)},
      * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p>
-     * 
+     *
      * @param view the view to remove from the group
      */
     public void removeViewInLayout(View view) {
@@ -4607,7 +4619,7 @@
      * <p><strong>Note:</strong> do not invoke this method from
      * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)},
      * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p>
-     * 
+     *
      * @param index the position in the group of the view to remove
      */
     public void removeViewAt(int index) {
@@ -4796,7 +4808,7 @@
     /**
      * Call this method to remove all child views from the
      * ViewGroup.
-     * 
+     *
      * <p><strong>Note:</strong> do not invoke this method from
      * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)},
      * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p>
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 5bbfc3f..2c0cd7a 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -5372,10 +5372,10 @@
                     }
                 }
 
-                // When the drag operation ends, release any local state object
-                // that may have been in use
+                // When the drag operation ends, reset drag-related state
                 if (what == DragEvent.ACTION_DRAG_ENDED) {
                     setLocalDragState(null);
+                    mAttachInfo.mDragToken = null;
                 }
             }
         }
diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java
index 47df4e8..41f1ce7 100644
--- a/core/java/android/widget/ActionMenuPresenter.java
+++ b/core/java/android/widget/ActionMenuPresenter.java
@@ -937,10 +937,11 @@
         }
 
         @Override
-        public void onDismiss() {
-            super.onDismiss();
+        protected void onDismiss() {
             mMenu.close();
             mOverflowPopup = null;
+
+            super.onDismiss();
         }
     }
 
@@ -959,10 +960,11 @@
         }
 
         @Override
-        public void onDismiss() {
-            super.onDismiss();
+        protected void onDismiss() {
             mActionButtonPopup = null;
             mOpenSubMenuId = 0;
+
+            super.onDismiss();
         }
     }
 
diff --git a/core/java/android/widget/PopupMenu.java b/core/java/android/widget/PopupMenu.java
index a53df88..027f874 100644
--- a/core/java/android/widget/PopupMenu.java
+++ b/core/java/android/widget/PopupMenu.java
@@ -19,7 +19,6 @@
 import com.android.internal.R;
 import com.android.internal.view.menu.MenuBuilder;
 import com.android.internal.view.menu.MenuPopupHelper;
-import com.android.internal.view.menu.MenuPresenter;
 import com.android.internal.view.menu.ShowableListMenu;
 
 import android.annotation.MenuRes;
@@ -45,7 +44,7 @@
     private final MenuPopupHelper mPopup;
 
     private OnMenuItemClickListener mMenuItemClickListener;
-    private OnDismissListener mDismissListener;
+    private OnDismissListener mOnDismissListener;
     private OnTouchListener mDragListener;
 
     /**
@@ -114,20 +113,13 @@
 
         mPopup = new MenuPopupHelper(context, mMenu, anchor, false, popupStyleAttr, popupStyleRes);
         mPopup.setGravity(gravity);
-        mPopup.setCallback(new MenuPresenter.Callback() {
+        mPopup.setOnDismissListener(new PopupWindow.OnDismissListener() {
             @Override
-            public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
-                if (mDismissListener != null) {
-                    mDismissListener.onDismiss(PopupMenu.this);
+            public void onDismiss() {
+                if (mOnDismissListener != null) {
+                    mOnDismissListener.onDismiss(PopupMenu.this);
                 }
             }
-
-            @Override
-            public boolean onOpenSubMenu(MenuBuilder subMenu) {
-                // The menu presenter will handle opening the submenu itself.
-                // Nothing to do here.
-                return false;
-            }
         });
     }
 
@@ -259,7 +251,7 @@
      * @param listener the listener to notify
      */
     public void setOnDismissListener(OnDismissListener listener) {
-        mDismissListener = listener;
+        mOnDismissListener = listener;
     }
 
     /**
diff --git a/core/java/com/android/internal/logging/MetricsLogger.java b/core/java/com/android/internal/logging/MetricsLogger.java
index 08c7935..c992c70 100644
--- a/core/java/com/android/internal/logging/MetricsLogger.java
+++ b/core/java/com/android/internal/logging/MetricsLogger.java
@@ -33,6 +33,7 @@
     public static final int NOTIFICATION_ZEN_MODE_VISUAL_INTERRUPTIONS = 260;
     public static final int ACTION_ZEN_ALLOW_PEEK = 261;
     public static final int ACTION_ZEN_ALLOW_LIGHTS = 262;
+    public static final int NOTIFICATION_TOPIC_NOTIFICATION = 263;
 
     public static void visible(Context context, int category) throws IllegalArgumentException {
         if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) {
diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
index e674ecc..59d5f94 100644
--- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java
+++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
@@ -18,82 +18,104 @@
 
 import com.android.internal.view.menu.MenuPresenter.Callback;
 
+import android.annotation.AttrRes;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.StyleRes;
 import android.content.Context;
 import android.view.Gravity;
 import android.view.View;
-import android.widget.PopupWindow;
+import android.widget.PopupWindow.OnDismissListener;
 
 /**
  * Presents a menu as a small, simple popup anchored to another view.
- *
- * @hide
  */
-public class MenuPopupHelper implements PopupWindow.OnDismissListener {
+public class MenuPopupHelper {
     private final Context mContext;
+
+    // Immutable cached popup menu properties.
     private final MenuBuilder mMenu;
     private final boolean mOverflowOnly;
     private final int mPopupStyleAttr;
     private final int mPopupStyleRes;
 
+    // Mutable cached popup menu properties.
     private View mAnchorView;
-    private MenuPopup mPopup;
-
-    private int mDropDownGravity = Gravity.NO_GRAVITY;
+    private int mDropDownGravity = Gravity.START;
     private boolean mForceShowIcon;
-    private boolean mShowTitle;
     private Callback mPresenterCallback;
-    private int mInitXOffset;
-    private int mInitYOffset;
 
-    public MenuPopupHelper(Context context, MenuBuilder menu) {
+    private MenuPopup mPopup;
+    private OnDismissListener mOnDismissListener;
+
+    public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu) {
         this(context, menu, null, false, com.android.internal.R.attr.popupMenuStyle, 0);
     }
 
-    public MenuPopupHelper(Context context, MenuBuilder menu, View anchorView) {
+    public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu,
+            @NonNull View anchorView) {
         this(context, menu, anchorView, false, com.android.internal.R.attr.popupMenuStyle, 0);
     }
 
-    public MenuPopupHelper(Context context, MenuBuilder menu, View anchorView,
-            boolean overflowOnly, int popupStyleAttr) {
+    public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu,
+            @NonNull View anchorView,
+            boolean overflowOnly, @AttrRes int popupStyleAttr) {
         this(context, menu, anchorView, overflowOnly, popupStyleAttr, 0);
     }
 
-    public MenuPopupHelper(Context context, MenuBuilder menu, View anchorView,
-            boolean overflowOnly, int popupStyleAttr, int popupStyleRes) {
+    public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu,
+            @NonNull View anchorView, boolean overflowOnly, @AttrRes int popupStyleAttr,
+            @StyleRes int popupStyleRes) {
         mContext = context;
         mMenu = menu;
+        mAnchorView = anchorView;
         mOverflowOnly = overflowOnly;
         mPopupStyleAttr = popupStyleAttr;
         mPopupStyleRes = popupStyleRes;
-        mAnchorView = anchorView;
-        mPopup = createMenuPopup();
     }
 
-    private MenuPopup createMenuPopup() {
-        if (mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_enableCascadingSubmenus)) {
-            return new CascadingMenuPopup(mContext, mAnchorView, mPopupStyleAttr, mPopupStyleRes,
-                    mOverflowOnly);
-        }
-        return new StandardMenuPopup(
-                mContext, mMenu, mAnchorView, mPopupStyleAttr, mPopupStyleRes, mOverflowOnly);
+    public void setOnDismissListener(@Nullable OnDismissListener listener) {
+        mOnDismissListener = listener;
     }
 
-    public void setAnchorView(View anchor) {
+    /**
+      * Sets the view to which the popup window is anchored.
+      * <p>
+      * Changes take effect on the next call to show().
+      *
+      * @param anchor the view to which the popup window should be anchored
+      */
+    public void setAnchorView(@NonNull View anchor) {
         mAnchorView = anchor;
-        mPopup.setAnchorView(anchor);
     }
 
-    public void setForceShowIcon(boolean forceShow) {
-        mForceShowIcon = forceShow;
-        mPopup.setForceShowIcon(forceShow);
+    /**
+     * Sets whether the popup menu's adapter is forced to show icons in the
+     * menu item views.
+     * <p>
+     * Changes take effect on the next call to show().
+     *
+     * @param forceShowIcon {@code true} to force icons to be shown, or
+     *                  {@code false} for icons to be optionally shown
+     */
+    public void setForceShowIcon(boolean forceShowIcon) {
+        mForceShowIcon = forceShowIcon;
     }
 
+    /**
+      * Sets the alignment of the popup window relative to the anchor view.
+      * <p>
+      * Changes take effect on the next call to show().
+      *
+      * @param gravity alignment of the popup relative to the anchor
+      */
     public void setGravity(int gravity) {
         mDropDownGravity = gravity;
-        mPopup.setGravity(gravity);
     }
 
+    /**
+     * @return alignment of the popup relative to the anchor
+     */
     public int getGravity() {
         return mDropDownGravity;
     }
@@ -110,7 +132,11 @@
         }
     }
 
-    public ShowableListMenu getPopup() {
+    @NonNull
+    public MenuPopup getPopup() {
+        if (mPopup == null) {
+            mPopup = createPopup();
+        }
         return mPopup;
     }
 
@@ -129,14 +155,28 @@
             return false;
         }
 
-        mInitXOffset = 0;
-        mInitYOffset = 0;
-        mShowTitle = false;
-
-        showPopup();
+        showPopup(0, 0, false, false);
         return true;
     }
 
+    /**
+     * Shows the popup menu and makes a best-effort to anchor it to the
+     * specified (x,y) coordinate relative to the anchor view.
+     * <p>
+     * If the popup's resolved gravity is {@link Gravity#LEFT}, this will
+     * display the popup with its top-left corner at (x,y) relative to the
+     * anchor view. If the resolved gravity is {@link Gravity#RIGHT}, the
+     * popup's top-right corner will be at (x,y).
+     * <p>
+     * If the popup cannot be displayed fully on-screen, this method will
+     * attempt to scroll the anchor view's ancestors and/or offset the popup
+     * such that it may be displayed fully on-screen.
+     *
+     * @param x x coordinate relative to the anchor view
+     * @param y y coordinate relative to the anchor view
+     * @return {@code true} if the popup was shown or was already showing prior
+     *         to calling this method, {@code false} otherwise
+     */
     public boolean tryShow(int x, int y) {
         if (isShowing()) {
             return true;
@@ -146,51 +186,104 @@
             return false;
         }
 
-        mInitXOffset = x;
-        mInitYOffset = y;
-        mShowTitle = true;
-
-        showPopup();
+        showPopup(x, y, true, true);
         return true;
     }
 
-    private void showPopup() {
-        mPopup = createMenuPopup();
-        mPopup.setAnchorView(mAnchorView);
-        mPopup.setCallback(mPresenterCallback);
-        mPopup.setForceShowIcon(mForceShowIcon);
-        mPopup.setGravity(mDropDownGravity);
-        mPopup.setHorizontalOffset(mInitXOffset);
-        mPopup.setShowTitle(mShowTitle);
-        mPopup.setVerticalOffset(mInitYOffset);
+    /**
+     * Creates the popup and assigns cached properties.
+     *
+     * @return an initialized popup
+     */
+    @NonNull
+    private MenuPopup createPopup() {
+        final boolean enableCascadingSubmenus = mContext.getResources().getBoolean(
+                com.android.internal.R.bool.config_enableCascadingSubmenus);
 
-        // In order for subclasses of MenuPopupHelper to satisfy the OnDismissedListener interface,
-        // we must set the listener to this outer Helper rather than to the inner MenuPopup.
-        // Not to worry -- the inner MenuPopup will call our own #onDismiss method after it's done
-        // its own handling.
-        mPopup.setOnDismissListener(this);
+        final MenuPopup popup;
+        if (enableCascadingSubmenus) {
+            popup = new CascadingMenuPopup(mContext, mAnchorView, mPopupStyleAttr,
+                    mPopupStyleRes, mOverflowOnly);
+        } else {
+            popup = new StandardMenuPopup(mContext, mMenu, mAnchorView, mPopupStyleAttr,
+                    mPopupStyleRes, mOverflowOnly);
+        }
 
-        mPopup.addMenu(mMenu);
-        mPopup.show();
+        // Assign immutable properties.
+        popup.addMenu(mMenu);
+        popup.setOnDismissListener(mInternalOnDismissListener);
+
+        // Assign mutable properties. These may be reassigned later.
+        popup.setAnchorView(mAnchorView);
+        popup.setCallback(mPresenterCallback);
+        popup.setForceShowIcon(mForceShowIcon);
+        popup.setGravity(mDropDownGravity);
+
+        return popup;
     }
 
+    private void showPopup(int xOffset, int yOffset, boolean resolveOffsets, boolean showTitle) {
+        if (resolveOffsets) {
+            // If the resolved drop-down gravity is RIGHT, the popup's right
+            // edge will be aligned with the anchor view. Adjust by the anchor
+            // width such that the top-right corner is at the X offset.
+            final int hgrav = Gravity.getAbsoluteGravity(mDropDownGravity,
+                    mAnchorView.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;
+            if (hgrav == Gravity.RIGHT) {
+                xOffset -= mAnchorView.getWidth();
+            }
+        }
+
+        final MenuPopup popup = getPopup();
+        popup.setHorizontalOffset(xOffset);
+        popup.setVerticalOffset(yOffset);
+        popup.setShowTitle(showTitle);
+        popup.show();
+    }
+
+    /**
+     * Dismisses the popup, if showing.
+     */
     public void dismiss() {
         if (isShowing()) {
             mPopup.dismiss();
         }
     }
 
-    @Override
-    public void onDismiss() {
+    /**
+     * Called after the popup has been dismissed.
+     * <p>
+     * <strong>Note:</strong> Subclasses should call the super implementation
+     * last to ensure that any necessary tear down has occurred before the
+     * listener specified by {@link #setOnDismissListener(OnDismissListener)}
+     * is called.
+     */
+    protected void onDismiss() {
         mPopup = null;
+
+        if (mOnDismissListener != null) {
+            mOnDismissListener.onDismiss();
+        }
     }
 
     public boolean isShowing() {
         return mPopup != null && mPopup.isShowing();
     }
 
-    public void setCallback(MenuPresenter.Callback cb) {
+    public void setCallback(@Nullable MenuPresenter.Callback cb) {
         mPresenterCallback = cb;
-        mPopup.setCallback(cb);
+        if (mPopup != null) {
+            mPopup.setCallback(cb);
+        }
     }
+
+    /**
+     * Listener used to proxy dismiss callbacks to the helper's owner.
+     */
+    private final OnDismissListener mInternalOnDismissListener = new OnDismissListener() {
+        @Override
+        public void onDismiss() {
+            MenuPopupHelper.this.onDismiss();
+        }
+    };
 }
diff --git a/core/java/com/android/internal/widget/ButtonBarLayout.java b/core/java/com/android/internal/widget/ButtonBarLayout.java
index 3b7bce4..a694aca 100644
--- a/core/java/com/android/internal/widget/ButtonBarLayout.java
+++ b/core/java/com/android/internal/widget/ButtonBarLayout.java
@@ -30,6 +30,10 @@
  * orientation when it can't fit its child views horizontally.
  */
 public class ButtonBarLayout extends LinearLayout {
+    // Whether to allow vertically stacked button bars. This is disabled for
+    // configurations with a small (e.g. less than 320dp) screen height. -->
+    private static final int ALLOW_STACKING_MIN_HEIGHT_DP = 320;
+
     /** Whether the current configuration allows stacking. */
     private boolean mAllowStacking;
 
@@ -38,8 +42,12 @@
     public ButtonBarLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
 
+        final boolean allowStackingDefault =
+                context.getResources().getConfiguration().screenHeightDp
+                        >= ALLOW_STACKING_MIN_HEIGHT_DP;
         final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ButtonBarLayout);
-        mAllowStacking = ta.getBoolean(R.styleable.ButtonBarLayout_allowStacking, false);
+        mAllowStacking = ta.getBoolean(R.styleable.ButtonBarLayout_allowStacking,
+                allowStackingDefault);
         ta.recycle();
     }
 
diff --git a/core/java/com/android/internal/widget/DecorCaptionView.java b/core/java/com/android/internal/widget/DecorCaptionView.java
index 16e8296..d747686 100644
--- a/core/java/com/android/internal/widget/DecorCaptionView.java
+++ b/core/java/com/android/internal/widget/DecorCaptionView.java
@@ -19,18 +19,24 @@
 import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID;
 
 import android.content.Context;
+import android.graphics.Color;
+import android.graphics.Rect;
 import android.os.RemoteException;
 import android.util.AttributeSet;
+import android.util.Log;
+import android.view.GestureDetector;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.ViewOutlineProvider;
 import android.view.Window;
-import android.util.Log;
 
 import com.android.internal.R;
 import com.android.internal.policy.PhoneWindow;
 
+import java.util.ArrayList;
+
 /**
  * This class represents the special screen elements to control a window on freeform
  * environment.
@@ -38,8 +44,8 @@
  * <ul>
  * <li>The caption, containing the system buttons like maximize, close and such as well as
  * allowing the user to drag the window around.</li>
- * After creating the view, the function
- * {@link #setPhoneWindow} needs to be called to make
+ * </ul>
+ * After creating the view, the function {@link #setPhoneWindow} needs to be called to make
  * the connection to it's owning PhoneWindow.
  * Note: At this time the application can change various attributes of the DecorView which
  * will break things (in settle/unexpected ways):
@@ -48,9 +54,29 @@
  * <li>setSurfaceFormat</li>
  * <li>..</li>
  * </ul>
+ *
+ * Although this ViewGroup has only two direct sub-Views, its behavior is more complex due to
+ * overlaying caption on the content and drawing.
+ *
+ * First, no matter where the content View gets added, it will always be the first child and the
+ * caption will be the second. This way the caption will always be drawn on top of the content when
+ * overlaying is enabled.
+ *
+ * Second, the touch dispatch is customized to handle overlaying. This is what happens when touch
+ * is dispatched on the caption area while overlaying it on content:
+ * <ul>
+ * <li>DecorCaptionView.onInterceptTouchEvent() will try intercepting the touch events if the
+ * down action is performed on top close or maximize buttons; the reason for that is we want these
+ * buttons to always work.</li>
+ * <li>The content View will receive the touch event. Mind that content is actually underneath the
+ * caption, so we need to introduce our own dispatch ordering. We achieve this by overriding
+ * {@link #buildTouchDispatchChildList()}.</li>
+ * <li>If the touch event is not consumed by the content View, it will go to the caption View
+ * and the dragging logic will be executed.</li>
+ * </ul>
  */
-public class DecorCaptionView extends ViewGroup
-        implements View.OnClickListener, View.OnTouchListener {
+public class DecorCaptionView extends ViewGroup implements View.OnTouchListener,
+        GestureDetector.OnGestureListener {
     private final static String TAG = "DecorCaptionView";
     private PhoneWindow mOwner = null;
     private boolean mShow = false;
@@ -65,17 +91,42 @@
 
     private View mCaption;
     private View mContent;
+    private View mMaximize;
+    private View mClose;
+
+    // Fields for detecting drag events.
+    private int mTouchDownX;
+    private int mTouchDownY;
+    private boolean mCheckForDragging;
+    private int mDragSlop;
+
+    // Fields for detecting and intercepting click events on close/maximize.
+    private ArrayList<View> mTouchDispatchList = new ArrayList<>(2);
+    // We use the gesture detector to detect clicks on close/maximize buttons and to be consistent
+    // with existing click detection.
+    private GestureDetector mGestureDetector;
+    private final Rect mCloseRect = new Rect();
+    private final Rect mMaximizeRect = new Rect();
+    private View mClickTarget;
 
     public DecorCaptionView(Context context) {
         super(context);
+        init(context);
     }
 
     public DecorCaptionView(Context context, AttributeSet attrs) {
         super(context, attrs);
+        init(context);
     }
 
     public DecorCaptionView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
+        init(context);
+    }
+
+    private void init(Context context) {
+        mDragSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+        mGestureDetector = new GestureDetector(context, this);
     }
 
     @Override
@@ -88,13 +139,47 @@
         mOwner = owner;
         mShow = show;
         mOverlayWithAppContent = owner.getOverlayDecorCaption();
+        if (mOverlayWithAppContent) {
+            // The caption is covering the content, so we make its background transparent to make
+            // the content visible.
+            mCaption.setBackgroundColor(Color.TRANSPARENT);
+        }
         updateCaptionVisibility();
         // By changing the outline provider to BOUNDS, the window can remove its
         // background without removing the shadow.
         mOwner.getDecorView().setOutlineProvider(ViewOutlineProvider.BOUNDS);
+        mMaximize = findViewById(R.id.maximize_window);
+        mClose = findViewById(R.id.close_window);
+    }
 
-        findViewById(R.id.maximize_window).setOnClickListener(this);
-        findViewById(R.id.close_window).setOnClickListener(this);
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        // If the user starts touch on the maximize/close buttons, we immediately intercept, so
+        // that these buttons are always clickable.
+        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+            final int x = (int) ev.getX();
+            final int y = (int) ev.getY();
+            if (mMaximizeRect.contains(x, y)) {
+                mClickTarget = mMaximize;
+            }
+            if (mCloseRect.contains(x, y)) {
+                mClickTarget = mClose;
+            }
+        }
+        return mClickTarget != null;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (mClickTarget != null) {
+            mGestureDetector.onTouchEvent(event);
+            final int action = event.getAction();
+            if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
+                mClickTarget = null;
+            }
+            return true;
+        }
+        return false;
     }
 
     @Override
@@ -102,25 +187,31 @@
         // Note: There are no mixed events. When a new device gets used (e.g. 1. Mouse, 2. touch)
         // the old input device events get cancelled first. So no need to remember the kind of
         // input device we are listening to.
+        final int x = (int) e.getX();
+        final int y = (int) e.getY();
         switch (e.getActionMasked()) {
             case MotionEvent.ACTION_DOWN:
                 if (!mShow) {
                     // When there is no caption we should not react to anything.
                     return false;
                 }
-                // A drag action is started if we aren't dragging already and the starting event is
-                // either a left mouse button or any other input device.
-                if (!mDragging &&
-                        (e.getToolType(e.getActionIndex()) != MotionEvent.TOOL_TYPE_MOUSE ||
-                                (e.getButtonState() & MotionEvent.BUTTON_PRIMARY) != 0)) {
-                    mDragging = true;
-                    mLeftMouseButtonReleased = false;
-                    startMovingTask(e.getRawX(), e.getRawY());
+                // Checking for a drag action is started if we aren't dragging already and the
+                // starting event is either a left mouse button or any other input device.
+                if (((e.getToolType(e.getActionIndex()) != MotionEvent.TOOL_TYPE_MOUSE ||
+                        (e.getButtonState() & MotionEvent.BUTTON_PRIMARY) != 0))) {
+                    mCheckForDragging = true;
+                    mTouchDownX = x;
+                    mTouchDownY = y;
                 }
                 break;
 
             case MotionEvent.ACTION_MOVE:
-                if (mDragging && !mLeftMouseButtonReleased) {
+                if (!mDragging && mCheckForDragging && passedSlop(x, y)) {
+                    mCheckForDragging = false;
+                    mDragging = true;
+                    mLeftMouseButtonReleased = false;
+                    startMovingTask(e.getRawX(), e.getRawY());
+                } else if (mDragging && !mLeftMouseButtonReleased) {
                     if (e.getToolType(e.getActionIndex()) == MotionEvent.TOOL_TYPE_MOUSE &&
                             (e.getButtonState() & MotionEvent.BUTTON_PRIMARY) == 0) {
                         // There is no separate mouse button up call and if the user mixes mouse
@@ -138,9 +229,25 @@
                 }
                 // Abort the ongoing dragging.
                 mDragging = false;
-                return true;
+                return !mCheckForDragging;
         }
-        return mDragging;
+        return mDragging || mCheckForDragging;
+    }
+
+    @Override
+    public ArrayList<View> buildTouchDispatchChildList() {
+        mTouchDispatchList.ensureCapacity(3);
+        if (mCaption != null) {
+            mTouchDispatchList.add(mCaption);
+        }
+        if (mContent != null) {
+            mTouchDispatchList.add(mContent);
+        }
+        return mTouchDispatchList;
+    }
+
+    private boolean passedSlop(int x, int y) {
+        return Math.abs(x - mTouchDownX) > mDragSlop || Math.abs(y - mTouchDownY) > mDragSlop;
     }
 
     /**
@@ -153,15 +260,6 @@
     }
 
     @Override
-    public void onClick(View view) {
-        if (view.getId() == R.id.maximize_window) {
-            maximizeWindow();
-        } else if (view.getId() == R.id.close_window) {
-            mOwner.dispatchOnWindowDismissed(true /*finishTask*/);
-        }
-    }
-
-    @Override
     public void addView(View child, int index, ViewGroup.LayoutParams params) {
         if (!(params instanceof MarginLayoutParams)) {
             throw new IllegalArgumentException(
@@ -205,8 +303,12 @@
         if (mCaption.getVisibility() != View.GONE) {
             mCaption.layout(0, 0, mCaption.getMeasuredWidth(), mCaption.getMeasuredHeight());
             captionHeight = mCaption.getBottom() - mCaption.getTop();
+            mMaximize.getHitRect(mMaximizeRect);
+            mClose.getHitRect(mCloseRect);
         } else {
             captionHeight = 0;
+            mMaximizeRect.setEmpty();
+            mCloseRect.setEmpty();
         }
 
         if (mContent != null) {
@@ -291,4 +393,39 @@
     protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
         return p instanceof MarginLayoutParams;
     }
+
+    @Override
+    public boolean onDown(MotionEvent e) {
+        return false;
+    }
+
+    @Override
+    public void onShowPress(MotionEvent e) {
+
+    }
+
+    @Override
+    public boolean onSingleTapUp(MotionEvent e) {
+        if (mClickTarget == mMaximize) {
+            maximizeWindow();
+        } else if (mClickTarget == mClose) {
+            mOwner.dispatchOnWindowDismissed(true /*finishTask*/);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
+        return false;
+    }
+
+    @Override
+    public void onLongPress(MotionEvent e) {
+
+    }
+
+    @Override
+    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
+        return false;
+    }
 }
diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp
index 3d96fab..e4e73a4 100644
--- a/core/jni/android_graphics_Canvas.cpp
+++ b/core/jni/android_graphics_Canvas.cpp
@@ -544,39 +544,6 @@
     float totalAdvance;
 };
 
-// Same values used by Skia
-#define kStdStrikeThru_Offset   (-6.0f / 21.0f)
-#define kStdUnderline_Offset    (1.0f / 9.0f)
-#define kStdUnderline_Thickness (1.0f / 18.0f)
-
-void drawTextDecorations(Canvas* canvas, float x, float y, float length, const SkPaint& paint) {
-    uint32_t flags;
-    SkDrawFilter* drawFilter = canvas->getDrawFilter();
-    if (drawFilter) {
-        SkPaint paintCopy(paint);
-        drawFilter->filter(&paintCopy, SkDrawFilter::kText_Type);
-        flags = paintCopy.getFlags();
-    } else {
-        flags = paint.getFlags();
-    }
-    if (flags & (SkPaint::kUnderlineText_Flag | SkPaint::kStrikeThruText_Flag)) {
-        SkScalar left = x;
-        SkScalar right = x + length;
-        float textSize = paint.getTextSize();
-        float strokeWidth = fmax(textSize * kStdUnderline_Thickness, 1.0f);
-        if (flags & SkPaint::kUnderlineText_Flag) {
-            SkScalar top = y + textSize * kStdUnderline_Offset - 0.5f * strokeWidth;
-            SkScalar bottom = y + textSize * kStdUnderline_Offset + 0.5f * strokeWidth;
-            canvas->drawRect(left, top, right, bottom, paint);
-        }
-        if (flags & SkPaint::kStrikeThruText_Flag) {
-            SkScalar top = y + textSize * kStdStrikeThru_Offset - 0.5f * strokeWidth;
-            SkScalar bottom = y + textSize * kStdStrikeThru_Offset + 0.5f * strokeWidth;
-            canvas->drawRect(left, top, right, bottom, paint);
-        }
-    }
-}
-
 void drawText(Canvas* canvas, const uint16_t* text, int start, int count, int contextCount,
              float x, float y, int bidiFlags, const Paint& origPaint, TypefaceImpl* typeface) {
     // minikin may modify the original paint
@@ -586,8 +553,8 @@
     MinikinUtils::doLayout(&layout, &paint, bidiFlags, typeface, text, start, count, contextCount);
 
     size_t nGlyphs = layout.nGlyphs();
-    uint16_t* glyphs = new uint16_t[nGlyphs];
-    float* pos = new float[nGlyphs * 2];
+    std::unique_ptr<uint16_t[]> glyphs(new uint16_t[nGlyphs]);
+    std::unique_ptr<float[]> pos(new float[nGlyphs * 2]);
 
     x += MinikinUtils::xOffsetForTextAlign(&paint, layout);
 
@@ -597,13 +564,9 @@
         bounds.offset(x, y);
     }
 
-    DrawTextFunctor f(layout, canvas, glyphs, pos, paint, x, y, bounds, layout.getAdvance());
+    DrawTextFunctor f(layout, canvas, glyphs.get(), pos.get(),
+            paint, x, y, bounds, layout.getAdvance());
     MinikinUtils::forFontRun(layout, &paint, f);
-
-    drawTextDecorations(canvas, x, y, layout.getAdvance(), paint);
-
-    delete[] glyphs;
-    delete[] pos;
 }
 
 static void drawTextChars(JNIEnv* env, jobject, jlong canvasHandle, jcharArray text,
diff --git a/core/res/res/layout/alert_dialog_button_bar_material.xml b/core/res/res/layout/alert_dialog_button_bar_material.xml
index 6e102f3..f7974a5 100644
--- a/core/res/res/layout/alert_dialog_button_bar_material.xml
+++ b/core/res/res/layout/alert_dialog_button_bar_material.xml
@@ -27,7 +27,6 @@
     android:paddingTop="4dp"
     android:paddingBottom="4dp"
     android:gravity="bottom"
-    android:allowStacking="@bool/allow_stacked_button_bar"
     style="?attr/buttonBarStyle">
 
     <Button
diff --git a/core/res/res/values-h320dp/bools.xml b/core/res/res/values-h320dp/bools.xml
deleted file mode 100644
index 3bbfe96..0000000
--- a/core/res/res/values-h320dp/bools.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<resources>
-    <bool name="allow_stacked_button_bar">true</bool>
-</resources>
diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml
index 7c63950..457131a 100644
--- a/core/res/res/values/bools.xml
+++ b/core/res/res/values/bools.xml
@@ -25,8 +25,4 @@
     <bool name="show_ongoing_ime_switcher">true</bool>
     <bool name="action_bar_expanded_action_views_exclusive">true</bool>
     <bool name="target_honeycomb_needs_options_menu">true</bool>
-
-    <!-- Whether to allow vertically stacked button bars. This is disabled for
-         configurations with a small (e.g. less than 320dp) screen height. -->
-    <bool name="allow_stacked_button_bar">false</bool>
 </resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 057790a..539baa5 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -1946,9 +1946,9 @@
      See {@link com.android.server.notification.NotificationSignalExtractor} -->
     <string-array name="config_notificationSignalExtractors">
         <item>com.android.server.notification.ValidateNotificationPeople</item>
-        <item>com.android.server.notification.PackagePriorityExtractor</item>
+        <item>com.android.server.notification.TopicPriorityExtractor</item>
         <item>com.android.server.notification.NotificationIntrusivenessExtractor</item>
-        <item>com.android.server.notification.PackageVisibilityExtractor</item>
+        <item>com.android.server.notification.TopicVisibilityExtractor</item>
     </string-array>
 
     <!-- Flag indicating that this device does not rotate and will always remain in its default
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 00c0fe8..1964bec 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -4072,4 +4072,6 @@
         <item quantity="one"><xliff:g id="count" example="1">%1$d</xliff:g> selected</item>
         <item quantity="other"><xliff:g id="count" example="3">%1$d</xliff:g> selected</item>
     </plurals>
+
+    <string name="default_notification_topic_label">Miscellaneous</string>
 </resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 1e325b1..edd3555 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2321,7 +2321,6 @@
 
   <java-symbol type="string" name="lockscreen_access_pattern_area" />
 
-  <java-symbol type="bool" name="allow_stacked_button_bar" />
   <java-symbol type="bool" name="config_eap_sim_based_auth_supported" />
 
   <java-symbol type="array" name="config_cell_retries_per_error_code" />
@@ -2337,4 +2336,5 @@
   <java-symbol type="string" name="config_iccHotswapPromptForRestartDialogComponent" />
 
   <java-symbol type="string" name="config_packagedKeyboardName" />
+  <java-symbol type="string" name="default_notification_topic_label" />
 </resources>
diff --git a/data/keyboards/qwerty.kl b/data/keyboards/qwerty.kl
index 58bf654..4186007 100644
--- a/data/keyboards/qwerty.kl
+++ b/data/keyboards/qwerty.kl
@@ -81,7 +81,7 @@
 key 39    SEMICOLON
 key 40    APOSTROPHE
 key 14    DEL
-        
+
 key 44    Z
 key 45    X
 key 46    C
@@ -93,7 +93,7 @@
 key 52    PERIOD
 key 53    SLASH
 key 28    ENTER
-        
+
 key 56    ALT_LEFT
 key 100   ALT_RIGHT
 key 42    SHIFT_LEFT
@@ -101,7 +101,7 @@
 key 15    TAB
 key 57    SPACE
 key 150   EXPLORER
-key 155   ENVELOPE        
+key 155   ENVELOPE
 
 key 12    MINUS
 key 13    EQUALS
@@ -110,3 +110,16 @@
 # On an AT keyboard: ESC, F10
 key 1     BACK
 key 68    MENU
+
+# App switch = Overview key
+key 580   APP_SWITCH
+
+# Media control keys
+key 160   MEDIA_CLOSE
+key 161   MEDIA_EJECT
+key 163   MEDIA_NEXT
+key 164   MEDIA_PLAY_PAUSE
+key 165   MEDIA_PREVIOUS
+key 166   MEDIA_STOP
+key 167   MEDIA_RECORD
+key 168   MEDIA_REWIND
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 0a57d50..cc68fb2 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -37,6 +37,7 @@
     AnimatorManager.cpp \
     AssetAtlas.cpp \
     Caches.cpp \
+    Canvas.cpp \
     CanvasState.cpp \
     ClipArea.cpp \
     DamageAccumulator.cpp \
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp
index d2d3285..d13d7ef 100644
--- a/libs/hwui/BakedOpRenderer.cpp
+++ b/libs/hwui/BakedOpRenderer.cpp
@@ -24,6 +24,9 @@
 #include "utils/GLUtils.h"
 #include "VertexBuffer.h"
 
+#include <algorithm>
+#include <math.h>
+
 namespace android {
 namespace uirenderer {
 
@@ -183,6 +186,10 @@
     renderer.renderGlop(state, glop);
 }
 
+void BakedOpDispatcher::onLinesOp(BakedOpRenderer& renderer, const LinesOp& op, const BakedOpState& state) {
+    LOG_ALWAYS_FATAL("todo");
+}
+
 void BakedOpDispatcher::onRectOp(BakedOpRenderer& renderer, const RectOp& op, const BakedOpState& state) {
     Glop glop;
     GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
@@ -270,6 +277,91 @@
     renderer.renderGlop(state, glop);
 }
 
+static void renderTextShadow(BakedOpRenderer& renderer, FontRenderer& fontRenderer,
+        const TextOp& op, const BakedOpState& state) {
+    renderer.caches().textureState().activateTexture(0);
+
+    PaintUtils::TextShadow textShadow;
+    if (!PaintUtils::getTextShadow(op.paint, &textShadow)) {
+        LOG_ALWAYS_FATAL("failed to query shadow attributes");
+    }
+
+    renderer.caches().dropShadowCache.setFontRenderer(fontRenderer);
+    ShadowTexture* texture = renderer.caches().dropShadowCache.get(
+            op.paint, (const char*) op.glyphs,
+            op.glyphCount, textShadow.radius, op.positions);
+    // If the drop shadow exceeds the max texture size or couldn't be
+    // allocated, skip drawing
+    if (!texture) return;
+    const AutoTexture autoCleanup(texture);
+
+    const float sx = op.x - texture->left + textShadow.dx;
+    const float sy = op.y - texture->top + textShadow.dy;
+
+    Glop glop;
+    GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
+            .setRoundRectClipState(state.roundRectClipState)
+            .setMeshTexturedUnitQuad(nullptr)
+            .setFillShadowTexturePaint(*texture, textShadow.color, *op.paint, state.alpha)
+            .setTransform(state.computedState.transform, TransformFlags::None)
+            .setModelViewMapUnitToRect(Rect(sx, sy, sx + texture->width, sy + texture->height))
+            .build();
+    renderer.renderGlop(state, glop);
+}
+
+void BakedOpDispatcher::onTextOp(BakedOpRenderer& renderer, const TextOp& op, const BakedOpState& state) {
+    FontRenderer& fontRenderer = renderer.caches().fontRenderer.getFontRenderer();
+
+    if (CC_UNLIKELY(PaintUtils::hasTextShadow(op.paint))) {
+        fontRenderer.setFont(op.paint, SkMatrix::I());
+        renderTextShadow(renderer, fontRenderer, op, state);
+    }
+
+    float x = op.x;
+    float y = op.y;
+    const Matrix4& transform = state.computedState.transform;
+    const bool pureTranslate = transform.isPureTranslate();
+    if (CC_LIKELY(pureTranslate)) {
+        x = floorf(x + transform.getTranslateX() + 0.5f);
+        y = floorf(y + transform.getTranslateY() + 0.5f);
+        fontRenderer.setFont(op.paint, SkMatrix::I());
+        fontRenderer.setTextureFiltering(false);
+    } else if (CC_UNLIKELY(transform.isPerspective())) {
+        fontRenderer.setFont(op.paint, SkMatrix::I());
+        fontRenderer.setTextureFiltering(true);
+    } else {
+        // We only pass a partial transform to the font renderer. That partial
+        // matrix defines how glyphs are rasterized. Typically we want glyphs
+        // to be rasterized at their final size on screen, which means the partial
+        // matrix needs to take the scale factor into account.
+        // When a partial matrix is used to transform glyphs during rasterization,
+        // the mesh is generated with the inverse transform (in the case of scale,
+        // the mesh is generated at 1.0 / scale for instance.) This allows us to
+        // apply the full transform matrix at draw time in the vertex shader.
+        // Applying the full matrix in the shader is the easiest way to handle
+        // rotation and perspective and allows us to always generated quads in the
+        // font renderer which greatly simplifies the code, clipping in particular.
+        float sx, sy;
+        transform.decomposeScale(sx, sy);
+        fontRenderer.setFont(op.paint, SkMatrix::MakeScale(
+                roundf(std::max(1.0f, sx)),
+                roundf(std::max(1.0f, sy))));
+        fontRenderer.setTextureFiltering(true);
+    }
+
+    // TODO: Implement better clipping for scaled/rotated text
+    const Rect* clip = !pureTranslate ? nullptr : &state.computedState.clipRect;
+    Rect layerBounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
+
+    int alpha = PaintUtils::getAlphaDirect(op.paint) * state.alpha;
+    SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(op.paint);
+    TextDrawFunctor functor(&renderer, &state, x, y, pureTranslate, alpha, mode, op.paint);
+
+    bool hasActiveLayer = false; // TODO
+    fontRenderer.renderPosText(op.paint, clip, (const char*) op.glyphs, op.glyphCount, x, y,
+            op.positions, hasActiveLayer ? &layerBounds : nullptr, &functor, true); // TODO: merging
+}
+
 void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op, const BakedOpState& state) {
     OffscreenBuffer* buffer = *op.layerHandle;
 
diff --git a/libs/hwui/Canvas.cpp b/libs/hwui/Canvas.cpp
new file mode 100644
index 0000000..bc88c81
--- /dev/null
+++ b/libs/hwui/Canvas.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Canvas.h"
+
+#include <SkDrawFilter.h>
+
+namespace android {
+
+void Canvas::drawTextDecorations(float x, float y, float length, const SkPaint& paint) {
+    uint32_t flags;
+    SkDrawFilter* drawFilter = getDrawFilter();
+    if (drawFilter) {
+        SkPaint paintCopy(paint);
+        drawFilter->filter(&paintCopy, SkDrawFilter::kText_Type);
+        flags = paintCopy.getFlags();
+    } else {
+        flags = paint.getFlags();
+    }
+    if (flags & (SkPaint::kUnderlineText_Flag | SkPaint::kStrikeThruText_Flag)) {
+        // Same values used by Skia
+        const float kStdStrikeThru_Offset   = (-6.0f / 21.0f);
+        const float kStdUnderline_Offset    = (1.0f / 9.0f);
+        const float kStdUnderline_Thickness = (1.0f / 18.0f);
+
+        SkScalar left = x;
+        SkScalar right = x + length;
+        float textSize = paint.getTextSize();
+        float strokeWidth = fmax(textSize * kStdUnderline_Thickness, 1.0f);
+        if (flags & SkPaint::kUnderlineText_Flag) {
+            SkScalar top = y + textSize * kStdUnderline_Offset - 0.5f * strokeWidth;
+            SkScalar bottom = y + textSize * kStdUnderline_Offset + 0.5f * strokeWidth;
+            drawRect(left, top, right, bottom, paint);
+        }
+        if (flags & SkPaint::kStrikeThruText_Flag) {
+            SkScalar top = y + textSize * kStdStrikeThru_Offset - 0.5f * strokeWidth;
+            SkScalar bottom = y + textSize * kStdStrikeThru_Offset + 0.5f * strokeWidth;
+            drawRect(left, top, right, bottom, paint);
+        }
+    }
+}
+
+} // namespace android
diff --git a/libs/hwui/Canvas.h b/libs/hwui/Canvas.h
index 4bd4ac8..b585a27 100644
--- a/libs/hwui/Canvas.h
+++ b/libs/hwui/Canvas.h
@@ -149,16 +149,12 @@
     // Text
     /**
      * drawText: count is of glyphs
-     * totalAdvance is ignored in software renderering, used by hardware renderer for
-     * text decorations (underlines, strikethroughs).
+     * totalAdvance: used to define width of text decorations (underlines, strikethroughs).
      */
     virtual void drawText(const uint16_t* glyphs, const float* positions, int count,
             const SkPaint& paint, float x, float y,
             float boundsLeft, float boundsTop, float boundsRight, float boundsBottom,
             float totalAdvance) = 0;
-    /** drawPosText: count is of UTF16 characters, posCount is floats (2 * glyphs) */
-    virtual void drawPosText(const uint16_t* text, const float* positions, int count,
-            int posCount, const SkPaint& paint) = 0;
     /** drawTextOnPath: count is of glyphs */
     virtual void drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path,
             float hOffset, float vOffset, const SkPaint& paint) = 0;
@@ -171,6 +167,9 @@
      * to be added to each glyph's position to get its absolute position.
      */
     virtual bool drawTextAbsolutePos() const = 0;
+
+protected:
+    void drawTextDecorations(float x, float y, float length, const SkPaint& paint);
 };
 
 }; // namespace android
diff --git a/libs/hwui/DisplayListCanvas.cpp b/libs/hwui/DisplayListCanvas.cpp
index f5e5735..759c12a 100644
--- a/libs/hwui/DisplayListCanvas.cpp
+++ b/libs/hwui/DisplayListCanvas.cpp
@@ -423,18 +423,6 @@
     addDrawOp(op);
 }
 
-void DisplayListCanvas::drawPosText(const uint16_t* text, const float* positions,
-        int count, int posCount, const SkPaint& paint) {
-    if (!text || count <= 0) return;
-
-    int bytesCount = 2 * count;
-    positions = refBuffer<float>(positions, count * 2);
-
-    DrawOp* op = new (alloc()) DrawPosTextOp(refText((const char*) text, bytesCount),
-                                             bytesCount, count, positions, refPaint(&paint));
-    addDrawOp(op);
-}
-
 void DisplayListCanvas::drawText(const uint16_t* glyphs, const float* positions,
         int count, const SkPaint& paint, float x, float y,
         float boundsLeft, float boundsTop, float boundsRight, float boundsBottom,
@@ -450,6 +438,7 @@
     DrawOp* op = new (alloc()) DrawTextOp(text, bytesCount, count,
             x, y, positions, refPaint(&paint), totalAdvance, bounds);
     addDrawOp(op);
+    drawTextDecorations(x, y, totalAdvance, paint);
 }
 
 void DisplayListCanvas::drawRegion(const SkRegion& region, const SkPaint& paint) {
diff --git a/libs/hwui/DisplayListCanvas.h b/libs/hwui/DisplayListCanvas.h
index 609103b..bf98f79 100644
--- a/libs/hwui/DisplayListCanvas.h
+++ b/libs/hwui/DisplayListCanvas.h
@@ -212,8 +212,6 @@
     virtual void drawText(const uint16_t* glyphs, const float* positions, int count,
             const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop,
             float boundsRight, float boundsBottom, float totalAdvance) override;
-    virtual void drawPosText(const uint16_t* text, const float* positions, int count,
-            int posCount, const SkPaint& paint) override;
     virtual void drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path,
             float hOffset, float vOffset, const SkPaint& paint) override;
     virtual bool drawTextAbsolutePos() const override { return false; }
diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h
index 772aa72..977b53c 100644
--- a/libs/hwui/DisplayListOp.h
+++ b/libs/hwui/DisplayListOp.h
@@ -1278,24 +1278,6 @@
     float mVOffset;
 };
 
-class DrawPosTextOp : public DrawSomeTextOp {
-public:
-    DrawPosTextOp(const char* text, int bytesCount, int count,
-            const float* positions, const SkPaint* paint)
-            : DrawSomeTextOp(text, bytesCount, count, paint), mPositions(positions) {
-        /* TODO: inherit from DrawBounded and init mLocalBounds */
-    }
-
-    virtual void applyDraw(OpenGLRenderer& renderer, Rect& dirty) override {
-        renderer.drawPosText(mText, mBytesCount, mCount, mPositions, mPaint);
-    }
-
-    virtual const char* name() override { return "DrawPosText"; }
-
-private:
-    const float* mPositions;
-};
-
 class DrawTextOp : public DrawStrokableOp {
 public:
     DrawTextOp(const char* text, int bytesCount, int count, float x, float y,
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index ccf0b48..5f33cae 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -21,13 +21,20 @@
 #include "Extensions.h"
 #include "Glop.h"
 #include "GlopBuilder.h"
-#include "OpenGLRenderer.h"
 #include "PixelBuffer.h"
 #include "Rect.h"
 #include "renderstate/RenderState.h"
 #include "utils/Blur.h"
 #include "utils/Timing.h"
 
+
+#if HWUI_NEW_OPS
+#include "BakedOpState.h"
+#include "BakedOpRenderer.h"
+#else
+#include "OpenGLRenderer.h"
+#endif
+
 #include <algorithm>
 #include <cutils/properties.h>
 #include <SkGlyph.h>
@@ -59,14 +66,25 @@
     int transformFlags = pureTranslate
             ? TransformFlags::MeshIgnoresCanvasTransform : TransformFlags::None;
     Glop glop;
+#if HWUI_NEW_OPS
+    GlopBuilder(renderer->renderState(), renderer->caches(), &glop)
+            .setRoundRectClipState(bakedState->roundRectClipState)
+            .setMeshTexturedIndexedQuads(texture.mesh(), texture.meshElementCount())
+            .setFillTexturePaint(texture.getTexture(), textureFillFlags, paint, bakedState->alpha)
+            .setTransform(bakedState->computedState.transform, transformFlags)
+            .setModelViewOffsetRect(0, 0, Rect(0, 0, 0, 0))
+            .build();
+    renderer->renderGlop(*bakedState, glop);
+#else
     GlopBuilder(renderer->mRenderState, renderer->mCaches, &glop)
+            .setRoundRectClipState(renderer->currentSnapshot()->roundRectClipState)
             .setMeshTexturedIndexedQuads(texture.mesh(), texture.meshElementCount())
             .setFillTexturePaint(texture.getTexture(), textureFillFlags, paint, renderer->currentSnapshot()->alpha)
             .setTransform(*(renderer->currentSnapshot()), transformFlags)
             .setModelViewOffsetRect(0, 0, Rect(0, 0, 0, 0))
-            .setRoundRectClipState(renderer->currentSnapshot()->roundRectClipState)
             .build();
     renderer->renderGlop(glop);
+#endif
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -539,7 +557,7 @@
 }
 
 FontRenderer::DropShadow FontRenderer::renderDropShadow(const SkPaint* paint, const char *text,
-        uint32_t startIndex, uint32_t len, int numGlyphs, float radius, const float* positions) {
+        int numGlyphs, float radius, const float* positions) {
     checkInit();
 
     DropShadow image;
@@ -558,7 +576,7 @@
     mBounds = nullptr;
 
     Rect bounds;
-    mCurrentFont->measure(paint, text, startIndex, len, numGlyphs, &bounds, positions);
+    mCurrentFont->measure(paint, text, numGlyphs, &bounds, positions);
 
     uint32_t intRadius = Blur::convertRadiusToInt(radius);
     uint32_t paddedWidth = (uint32_t) (bounds.right - bounds.left) + 2 * intRadius;
@@ -590,7 +608,7 @@
         // text has non-whitespace, so draw and blur to create the shadow
         // NOTE: bounds.isEmpty() can't be used here, since vertical coordinates are inverted
         // TODO: don't draw pure whitespace in the first place, and avoid needing this check
-        mCurrentFont->render(paint, text, startIndex, len, numGlyphs, penX, penY,
+        mCurrentFont->render(paint, text, numGlyphs, penX, penY,
                 Font::BITMAP, dataBuffer, paddedWidth, paddedHeight, nullptr, positions);
 
         // Unbind any PBO we might have used
@@ -635,15 +653,15 @@
 }
 
 bool FontRenderer::renderPosText(const SkPaint* paint, const Rect* clip, const char *text,
-        uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y,
-        const float* positions, Rect* bounds, TextDrawFunctor* functor, bool forceFinish) {
+        int numGlyphs, int x, int y, const float* positions,
+        Rect* bounds, TextDrawFunctor* functor, bool forceFinish) {
     if (!mCurrentFont) {
         ALOGE("No font set");
         return false;
     }
 
     initRender(clip, bounds, functor);
-    mCurrentFont->render(paint, text, startIndex, len, numGlyphs, x, y, positions);
+    mCurrentFont->render(paint, text, numGlyphs, x, y, positions);
 
     if (forceFinish) {
         finishRender();
@@ -653,15 +671,15 @@
 }
 
 bool FontRenderer::renderTextOnPath(const SkPaint* paint, const Rect* clip, const char *text,
-        uint32_t startIndex, uint32_t len, int numGlyphs, const SkPath* path,
-        float hOffset, float vOffset, Rect* bounds, TextDrawFunctor* functor) {
+        int numGlyphs, const SkPath* path, float hOffset, float vOffset,
+        Rect* bounds, TextDrawFunctor* functor) {
     if (!mCurrentFont) {
         ALOGE("No font set");
         return false;
     }
 
     initRender(clip, bounds, functor);
-    mCurrentFont->render(paint, text, startIndex, len, numGlyphs, path, hOffset, vOffset);
+    mCurrentFont->render(paint, text, numGlyphs, path, hOffset, vOffset);
     finishRender();
 
     return mDrawn;
diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h
index 8172312..87cfe7f 100644
--- a/libs/hwui/FontRenderer.h
+++ b/libs/hwui/FontRenderer.h
@@ -44,13 +44,28 @@
 namespace android {
 namespace uirenderer {
 
+#if HWUI_NEW_OPS
+class BakedOpState;
+class BakedOpRenderer;
+#else
 class OpenGLRenderer;
+#endif
 
 class TextDrawFunctor {
 public:
-    TextDrawFunctor(OpenGLRenderer* renderer, float x, float y, bool pureTranslate,
+    TextDrawFunctor(
+#if HWUI_NEW_OPS
+            BakedOpRenderer* renderer,
+            const BakedOpState* bakedState,
+#else
+            OpenGLRenderer* renderer,
+#endif
+            float x, float y, bool pureTranslate,
             int alpha, SkXfermode::Mode mode, const SkPaint* paint)
         : renderer(renderer)
+#if HWUI_NEW_OPS
+        , bakedState(bakedState)
+#endif
         , x(x)
         , y(y)
         , pureTranslate(pureTranslate)
@@ -61,7 +76,12 @@
 
     void draw(CacheTexture& texture, bool linearFiltering);
 
+#if HWUI_NEW_OPS
+    BakedOpRenderer* renderer;
+    const BakedOpState* bakedState;
+#else
     OpenGLRenderer* renderer;
+#endif
     float x;
     float y;
     bool pureTranslate;
@@ -83,15 +103,13 @@
     void precache(const SkPaint* paint, const char* text, int numGlyphs, const SkMatrix& matrix);
     void endPrecaching();
 
-    // bounds is an out parameter
     bool renderPosText(const SkPaint* paint, const Rect* clip, const char *text,
-            uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y, const float* positions,
-            Rect* bounds, TextDrawFunctor* functor, bool forceFinish = true);
+            int numGlyphs, int x, int y, const float* positions,
+            Rect* outBounds, TextDrawFunctor* functor, bool forceFinish = true);
 
-    // bounds is an out parameter
     bool renderTextOnPath(const SkPaint* paint, const Rect* clip, const char *text,
-            uint32_t startIndex, uint32_t len, int numGlyphs, const SkPath* path,
-            float hOffset, float vOffset, Rect* bounds, TextDrawFunctor* functor);
+            int numGlyphs, const SkPath* path,
+            float hOffset, float vOffset, Rect* outBounds, TextDrawFunctor* functor);
 
     struct DropShadow {
         uint32_t width;
@@ -103,8 +121,8 @@
 
     // After renderDropShadow returns, the called owns the memory in DropShadow.image
     // and is responsible for releasing it when it's done with it
-    DropShadow renderDropShadow(const SkPaint* paint, const char *text, uint32_t startIndex,
-            uint32_t len, int numGlyphs, float radius, const float* positions);
+    DropShadow renderDropShadow(const SkPaint* paint, const char *text, int numGlyphs,
+            float radius, const float* positions);
 
     void setTextureFiltering(bool linearFiltering) {
         mLinearFiltering = linearFiltering;
diff --git a/libs/hwui/OpReorderer.cpp b/libs/hwui/OpReorderer.cpp
index 96cac7e..5e954ae 100644
--- a/libs/hwui/OpReorderer.cpp
+++ b/libs/hwui/OpReorderer.cpp
@@ -671,6 +671,13 @@
     currentLayer().deferMergeableOp(mAllocator, bakedStateOp, OpBatchType::Bitmap, mergeId);
 }
 
+void OpReorderer::onLinesOp(const LinesOp& op) {
+    BakedOpState* bakedStateOp = tryBakeOpState(op);
+    if (!bakedStateOp) return; // quick rejected
+    currentLayer().deferUnmergeableOp(mAllocator, bakedStateOp, OpBatchType::Vertices);
+
+}
+
 void OpReorderer::onRectOp(const RectOp& op) {
     BakedOpState* bakedStateOp = tryBakeOpState(op);
     if (!bakedStateOp) return; // quick rejected
@@ -683,6 +690,17 @@
     currentLayer().deferUnmergeableOp(mAllocator, bakedStateOp, OpBatchType::Vertices);
 }
 
+void OpReorderer::onTextOp(const TextOp& op) {
+    BakedOpState* bakedStateOp = tryBakeOpState(op);
+    if (!bakedStateOp) return; // quick rejected
+
+    // TODO: better handling of shader (since we won't care about color then)
+    batchid_t batchId = op.paint->getColor() == SK_ColorBLACK
+            ? OpBatchType::Text : OpBatchType::ColorText;
+    mergeid_t mergeId = reinterpret_cast<mergeid_t>(op.paint->getColor());
+    currentLayer().deferMergeableOp(mAllocator, bakedStateOp, batchId, mergeId);
+}
+
 void OpReorderer::saveForLayer(uint32_t layerWidth, uint32_t layerHeight,
         float contentTranslateX, float contentTranslateY,
         const Rect& repaintRect,
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 12c4607..e386b1c 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -1950,7 +1950,7 @@
 }
 
 void OpenGLRenderer::drawTextShadow(const SkPaint* paint, const char* text,
-        int bytesCount, int count, const float* positions,
+        int count, const float* positions,
         FontRenderer& fontRenderer, int alpha, float x, float y) {
     mCaches.textureState().activateTexture(0);
 
@@ -1963,7 +1963,7 @@
     //       if shader-based correction is enabled
     mCaches.dropShadowCache.setFontRenderer(fontRenderer);
     ShadowTexture* texture = mCaches.dropShadowCache.get(
-            paint, text, bytesCount, count, textShadow.radius, positions);
+            paint, text, count, textShadow.radius, positions);
     // If the drop shadow exceeds the max texture size or couldn't be
     // allocated, skip drawing
     if (!texture) return;
@@ -1991,57 +1991,6 @@
             && PaintUtils::getXfermode(paint->getXfermode()) == SkXfermode::kSrcOver_Mode;
 }
 
-void OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count,
-        const float* positions, const SkPaint* paint) {
-    if (text == nullptr || count == 0 || mState.currentlyIgnored() || canSkipText(paint)) {
-        return;
-    }
-
-    // NOTE: Skia does not support perspective transform on drawPosText yet
-    if (!currentTransform()->isSimple()) {
-        return;
-    }
-
-    mRenderState.scissor().setEnabled(true);
-
-    float x = 0.0f;
-    float y = 0.0f;
-    const bool pureTranslate = currentTransform()->isPureTranslate();
-    if (pureTranslate) {
-        x = floorf(x + currentTransform()->getTranslateX() + 0.5f);
-        y = floorf(y + currentTransform()->getTranslateY() + 0.5f);
-    }
-
-    FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer();
-    fontRenderer.setFont(paint, SkMatrix::I());
-
-    int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha;
-    SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint);
-
-    if (CC_UNLIKELY(PaintUtils::hasTextShadow(paint))) {
-        drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer,
-                alpha, 0.0f, 0.0f);
-    }
-
-    // Pick the appropriate texture filtering
-    bool linearFilter = currentTransform()->changesBounds();
-    if (pureTranslate && !linearFilter) {
-        linearFilter = fabs(y - (int) y) > 0.0f || fabs(x - (int) x) > 0.0f;
-    }
-    fontRenderer.setTextureFiltering(linearFilter);
-
-    const Rect& clip(pureTranslate ? writableSnapshot()->getRenderTargetClip() : writableSnapshot()->getLocalClip());
-    Rect bounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
-
-    TextDrawFunctor functor(this, x, y, pureTranslate, alpha, mode, paint);
-    if (fontRenderer.renderPosText(paint, &clip, text, 0, bytesCount, count, x, y,
-            positions, hasLayer() ? &bounds : nullptr, &functor)) {
-        dirtyLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, *currentTransform());
-        mDirty = true;
-    }
-
-}
-
 bool OpenGLRenderer::findBestFontTransform(const mat4& transform, SkMatrix* outMatrix) const {
     if (CC_LIKELY(transform.isPureTranslate())) {
         outMatrix->setIdentity();
@@ -2166,7 +2115,7 @@
 
     if (CC_UNLIKELY(PaintUtils::hasTextShadow(paint))) {
         fontRenderer.setFont(paint, SkMatrix::I());
-        drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer,
+        drawTextShadow(paint, text, count, positions, fontRenderer,
                 alpha, oldX, oldY);
     }
 
@@ -2195,17 +2144,22 @@
     Rect layerBounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
 
     bool status;
+#if HWUI_NEW_OPS
+    LOG_ALWAYS_FATAL("unsupported");
+    TextDrawFunctor functor(nullptr, nullptr, x, y, pureTranslate, alpha, mode, paint);
+#else
     TextDrawFunctor functor(this, x, y, pureTranslate, alpha, mode, paint);
+#endif
 
     // don't call issuedrawcommand, do it at end of batch
     bool forceFinish = (drawOpMode != DrawOpMode::kDefer);
     if (CC_UNLIKELY(paint->getTextAlign() != SkPaint::kLeft_Align)) {
         SkPaint paintCopy(*paint);
         paintCopy.setTextAlign(SkPaint::kLeft_Align);
-        status = fontRenderer.renderPosText(&paintCopy, clip, text, 0, bytesCount, count, x, y,
+        status = fontRenderer.renderPosText(&paintCopy, clip, text, count, x, y,
                 positions, hasActiveLayer ? &layerBounds : nullptr, &functor, forceFinish);
     } else {
-        status = fontRenderer.renderPosText(paint, clip, text, 0, bytesCount, count, x, y,
+        status = fontRenderer.renderPosText(paint, clip, text, count, x, y,
                 positions, hasActiveLayer ? &layerBounds : nullptr, &functor, forceFinish);
     }
 
@@ -2216,8 +2170,6 @@
         dirtyLayerUnchecked(layerBounds, getRegion());
     }
 
-    drawTextDecorations(totalAdvance, oldX, oldY, paint);
-
     mDirty = true;
 }
 
@@ -2236,12 +2188,17 @@
 
     int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha;
     SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint);
+#if HWUI_NEW_OPS
+    LOG_ALWAYS_FATAL("unsupported");
+    TextDrawFunctor functor(nullptr, nullptr, 0.0f, 0.0f, false, alpha, mode, paint);
+#else
     TextDrawFunctor functor(this, 0.0f, 0.0f, false, alpha, mode, paint);
+#endif
 
     const Rect* clip = &writableSnapshot()->getLocalClip();
     Rect bounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
 
-    if (fontRenderer.renderTextOnPath(paint, clip, text, 0, bytesCount, count, path,
+    if (fontRenderer.renderTextOnPath(paint, clip, text, count, path,
             hOffset, vOffset, hasLayer() ? &bounds : nullptr, &functor)) {
         dirtyLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, *currentTransform());
         mDirty = true;
@@ -2375,56 +2332,6 @@
     renderGlop(glop);
 }
 
-// Same values used by Skia
-#define kStdStrikeThru_Offset   (-6.0f / 21.0f)
-#define kStdUnderline_Offset    (1.0f / 9.0f)
-#define kStdUnderline_Thickness (1.0f / 18.0f)
-
-void OpenGLRenderer::drawTextDecorations(float underlineWidth, float x, float y,
-        const SkPaint* paint) {
-    // Handle underline and strike-through
-    uint32_t flags = paint->getFlags();
-    if (flags & (SkPaint::kUnderlineText_Flag | SkPaint::kStrikeThruText_Flag)) {
-        SkPaint paintCopy(*paint);
-
-        if (CC_LIKELY(underlineWidth > 0.0f)) {
-            const float textSize = paintCopy.getTextSize();
-            const float strokeWidth = std::max(textSize * kStdUnderline_Thickness, 1.0f);
-
-            const float left = x;
-            float top = 0.0f;
-
-            int linesCount = 0;
-            if (flags & SkPaint::kUnderlineText_Flag) linesCount++;
-            if (flags & SkPaint::kStrikeThruText_Flag) linesCount++;
-
-            const int pointsCount = 4 * linesCount;
-            float points[pointsCount];
-            int currentPoint = 0;
-
-            if (flags & SkPaint::kUnderlineText_Flag) {
-                top = y + textSize * kStdUnderline_Offset;
-                points[currentPoint++] = left;
-                points[currentPoint++] = top;
-                points[currentPoint++] = left + underlineWidth;
-                points[currentPoint++] = top;
-            }
-
-            if (flags & SkPaint::kStrikeThruText_Flag) {
-                top = y + textSize * kStdStrikeThru_Offset;
-                points[currentPoint++] = left;
-                points[currentPoint++] = top;
-                points[currentPoint++] = left + underlineWidth;
-                points[currentPoint++] = top;
-            }
-
-            paintCopy.setStrokeWidth(strokeWidth);
-
-            drawLines(&points[0], pointsCount, &paintCopy);
-        }
-    }
-}
-
 void OpenGLRenderer::drawRects(const float* rects, int count, const SkPaint* paint) {
     if (mState.currentlyIgnored()) {
         return;
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 400c225..84bc9b0 100755
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -193,8 +193,6 @@
     void drawPoints(const float* points, int count, const SkPaint* paint);
     void drawTextOnPath(const char* text, int bytesCount, int count, const SkPath* path,
             float hOffset, float vOffset, const SkPaint* paint);
-    void drawPosText(const char* text, int bytesCount, int count,
-            const float* positions, const SkPaint* paint);
     void drawText(const char* text, int bytesCount, int count, float x, float y,
             const float* positions, const SkPaint* paint, float totalAdvance, const Rect& bounds,
             DrawOpMode drawOpMode = DrawOpMode::kImmediate);
@@ -637,24 +635,11 @@
      */
     void drawConvexPath(const SkPath& path, const SkPaint* paint);
 
-    /**
-     * Draws text underline and strike-through if needed.
-     *
-     * @param text The text to decor
-     * @param bytesCount The number of bytes in the text
-     * @param totalAdvance The total advance in pixels, defines underline/strikethrough length
-     * @param x The x coordinate where the text will be drawn
-     * @param y The y coordinate where the text will be drawn
-     * @param paint The paint to draw the text with
-     */
-    void drawTextDecorations(float totalAdvance, float x, float y, const SkPaint* paint);
-
    /**
      * Draws shadow layer on text (with optional positions).
      *
      * @param paint The paint to draw the shadow with
      * @param text The text to draw
-     * @param bytesCount The number of bytes in the text
      * @param count The number of glyphs in the text
      * @param positions The x, y positions of individual glyphs (or NULL)
      * @param fontRenderer The font renderer object
@@ -662,7 +647,7 @@
      * @param x The x coordinate where the shadow will be drawn
      * @param y The y coordinate where the shadow will be drawn
      */
-    void drawTextShadow(const SkPaint* paint, const char* text, int bytesCount, int count,
+    void drawTextShadow(const SkPaint* paint, const char* text, int count,
             const float* positions, FontRenderer& fontRenderer, int alpha,
             float x, float y);
 
diff --git a/libs/hwui/RecordedOp.h b/libs/hwui/RecordedOp.h
index ef05367..127dca5 100644
--- a/libs/hwui/RecordedOp.h
+++ b/libs/hwui/RecordedOp.h
@@ -17,6 +17,7 @@
 #ifndef ANDROID_HWUI_RECORDED_OP_H
 #define ANDROID_HWUI_RECORDED_OP_H
 
+#include "font/FontUtil.h"
 #include "Matrix.h"
 #include "Rect.h"
 #include "RenderNode.h"
@@ -42,10 +43,12 @@
  */
 #define MAP_OPS(OP_FN) \
         OP_FN(BitmapOp) \
+        OP_FN(LinesOp) \
         OP_FN(RectOp) \
         OP_FN(RenderNodeOp) \
         OP_FN(ShadowOp) \
         OP_FN(SimpleRectsOp) \
+        OP_FN(TextOp) \
         OP_FN(BeginLayerOp) \
         OP_FN(EndLayerOp) \
         OP_FN(LayerOp)
@@ -98,6 +101,10 @@
     bool skipInOrderDraw = false;
 };
 
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Standard Ops
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
 struct BitmapOp : RecordedOp {
     BitmapOp(BASE_PARAMS, const SkBitmap* bitmap)
             : SUPER(BitmapOp)
@@ -106,6 +113,15 @@
     // TODO: asset atlas/texture id lookup?
 };
 
+struct LinesOp : RecordedOp {
+    LinesOp(BASE_PARAMS, const float* points, const int floatCount)
+            : SUPER(LinesOp)
+            , points(points)
+            , floatCount(floatCount) {}
+    const float* points;
+    const int floatCount;
+};
+
 struct RectOp : RecordedOp {
     RectOp(BASE_PARAMS)
             : SUPER(RectOp) {}
@@ -148,6 +164,27 @@
     const size_t vertexCount;
 };
 
+struct TextOp : RecordedOp {
+    TextOp(BASE_PARAMS, const glyph_t* glyphs, const float* positions, int glyphCount,
+            float x, float y)
+            : SUPER(TextOp)
+            , glyphs(glyphs)
+            , positions(positions)
+            , glyphCount(glyphCount)
+            , x(x)
+            , y(y) {}
+    const glyph_t* glyphs;
+    const float* positions;
+    const int glyphCount;
+    const float x;
+    const float y;
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Layers
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
 /**
  * Stateful operation! denotes the creation of an off-screen layer,
  * and that commands following will render into it.
diff --git a/libs/hwui/RecordingCanvas.cpp b/libs/hwui/RecordingCanvas.cpp
index 6ab253c..61fa384 100644
--- a/libs/hwui/RecordingCanvas.cpp
+++ b/libs/hwui/RecordingCanvas.cpp
@@ -230,12 +230,9 @@
 
 void RecordingCanvas::drawPaint(const SkPaint& paint) {
     // TODO: more efficient recording?
-    Matrix4 identity;
-    identity.loadIdentity();
-
     addOp(new (alloc()) RectOp(
             mState.getRenderTargetClipBounds(),
-            identity,
+            Matrix4::identity(),
             mState.getRenderTargetClipBounds(),
             refPaint(&paint)));
 }
@@ -244,9 +241,30 @@
 void RecordingCanvas::drawPoints(const float* points, int count, const SkPaint& paint) {
     LOG_ALWAYS_FATAL("TODO!");
 }
-void RecordingCanvas::drawLines(const float* points, int count, const SkPaint& paint) {
-    LOG_ALWAYS_FATAL("TODO!");
+
+void RecordingCanvas::drawLines(const float* points, int floatCount, const SkPaint& paint) {
+    if (floatCount < 4) return;
+    floatCount &= ~0x3; // round down to nearest four
+
+    Rect unmappedBounds(points[0], points[1], points[0], points[1]);
+    for (int i = 2; i < floatCount; i += 2) {
+        unmappedBounds.left = std::min(unmappedBounds.left, points[i]);
+        unmappedBounds.right = std::max(unmappedBounds.right, points[i]);
+        unmappedBounds.top = std::min(unmappedBounds.top, points[i + 1]);
+        unmappedBounds.bottom = std::max(unmappedBounds.bottom, points[i + 1]);
+    }
+
+    // since anything AA stroke with less than 1.0 pixel width is drawn with an alpha-reduced
+    // 1.0 stroke, treat 1.0 as minimum.
+    unmappedBounds.outset(std::max(paint.getStrokeWidth(), 1.0f) * 0.5f);
+
+    addOp(new (alloc()) LinesOp(
+            unmappedBounds,
+            *mState.currentSnapshot()->transform,
+            mState.getRenderTargetClipBounds(),
+            refPaint(&paint), refBuffer<float>(points, floatCount), floatCount));
 }
+
 void RecordingCanvas::drawRect(float left, float top, float right, float bottom, const SkPaint& paint) {
     addOp(new (alloc()) RectOp(
             Rect(left, top, right, bottom),
@@ -388,17 +406,24 @@
 }
 
 // Text
-void RecordingCanvas::drawText(const uint16_t* glyphs, const float* positions, int count,
+void RecordingCanvas::drawText(const uint16_t* glyphs, const float* positions, int glyphCount,
             const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop,
             float boundsRight, float boundsBottom, float totalAdvance) {
-    LOG_ALWAYS_FATAL("TODO!");
+    if (!glyphs || !positions || glyphCount <= 0 || PaintUtils::paintWillNotDrawText(paint)) return;
+    glyphs = refBuffer<glyph_t>(glyphs, glyphCount);
+    positions = refBuffer<float>(positions, glyphCount * 2);
+
+    addOp(new (alloc()) TextOp(
+            Rect(boundsLeft, boundsTop, boundsRight, boundsBottom),
+            *(mState.currentSnapshot()->transform),
+            mState.getRenderTargetClipBounds(),
+            refPaint(&paint), glyphs, positions, glyphCount, x, y));
+    drawTextDecorations(x, y, totalAdvance, paint);
 }
-void RecordingCanvas::drawPosText(const uint16_t* text, const float* positions, int count,
-            int posCount, const SkPaint& paint) {
-    LOG_ALWAYS_FATAL("TODO!");
-}
+
 void RecordingCanvas::drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path,
             float hOffset, float vOffset, const SkPaint& paint) {
+    // NOTE: can't use refPaint() directly, since it forces left alignment
     LOG_ALWAYS_FATAL("TODO!");
 }
 
diff --git a/libs/hwui/RecordingCanvas.h b/libs/hwui/RecordingCanvas.h
index f26b0c8..736cc9e 100644
--- a/libs/hwui/RecordingCanvas.h
+++ b/libs/hwui/RecordingCanvas.h
@@ -178,8 +178,6 @@
     virtual void drawText(const uint16_t* glyphs, const float* positions, int count,
             const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop,
             float boundsRight, float boundsBottom, float totalAdvance) override;
-    virtual void drawPosText(const uint16_t* text, const float* positions, int count,
-            int posCount, const SkPaint& paint) override;
     virtual void drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path,
             float hOffset, float vOffset, const SkPaint& paint) override;
     virtual bool drawTextAbsolutePos() const override { return false; }
@@ -221,6 +219,15 @@
         return cachedPath;
     }
 
+    /**
+     * Returns a RenderThread-safe, const copy of the SkPaint parameter passed in (with deduping
+     * based on paint generation ID)
+     *
+     * Note that this forces Left_Align, since drawText glyph rendering expects left alignment,
+     * since alignment offsetting has been done at a higher level. This is done to essentially all
+     * copied paints, since the deduping can mean a paint is shared by drawText commands and other
+     * types (which wouldn't care about alignment).
+     */
     inline const SkPaint* refPaint(const SkPaint* paint) {
         if (!paint) return nullptr;
 
@@ -239,10 +246,11 @@
         // In the unlikely event that 2 unique paints have the same hash we do a
         // object equality check to ensure we don't erroneously dedup them.
         if (cachedPaint == nullptr || *cachedPaint != *paint) {
-            cachedPaint = new SkPaint(*paint);
-            std::unique_ptr<const SkPaint> copy(cachedPaint);
-            mDisplayList->paints.push_back(std::move(copy));
+            SkPaint* copy = new SkPaint(*paint);
+            copy->setTextAlign(SkPaint::kLeft_Align);
 
+            cachedPaint = copy;
+            mDisplayList->paints.emplace_back(copy);
             // replaceValueFor() performs an add if the entry doesn't exist
             mPaintMap.replaceValueFor(key, cachedPaint);
             refBitmapsInShader(cachedPaint->getShader());
diff --git a/libs/hwui/Rect.h b/libs/hwui/Rect.h
index 0736a10..472aad7 100644
--- a/libs/hwui/Rect.h
+++ b/libs/hwui/Rect.h
@@ -260,13 +260,6 @@
         bottom = std::max(bottom, y);
     }
 
-    void expandToCoverRect(float otherLeft, float otherTop, float otherRight, float otherBottom) {
-        left = std::min(left, otherLeft);
-        top = std::min(top, otherTop);
-        right = std::max(right, otherRight);
-        bottom = std::max(bottom, otherBottom);
-    }
-
     SkRect toSkRect() const {
         return SkRect::MakeLTRB(left, top, right, bottom);
     }
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 6d3dfac..96c1a7c 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -131,8 +131,6 @@
             const SkPaint& paint, float x, float y,
             float boundsLeft, float boundsTop, float boundsRight, float boundsBottom,
             float totalAdvance) override;
-    virtual void drawPosText(const uint16_t* text, const float* positions, int count,
-            int posCount, const SkPaint& paint) override;
     virtual void drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path,
             float hOffset, float vOffset, const SkPaint& paint) override;
 
@@ -152,7 +150,6 @@
 
     void drawPoints(const float* points, int count, const SkPaint& paint,
                     SkCanvas::PointMode mode);
-    void drawTextDecorations(float x, float y, float length, const SkPaint& paint);
 
     SkAutoTUnref<SkCanvas> mCanvas;
     std::unique_ptr<SkDeque> mSaveStack; // lazily allocated, tracks partial saves.
@@ -712,22 +709,7 @@
 
     static_assert(sizeof(SkPoint) == sizeof(float)*2, "SkPoint is no longer two floats");
     mCanvas->drawPosText(text, count << 1, reinterpret_cast<const SkPoint*>(positions), paintCopy);
-}
-
-void SkiaCanvas::drawPosText(const uint16_t* text, const float* positions, int count, int posCount,
-        const SkPaint& paint) {
-    SkPoint* posPtr = posCount > 0 ? new SkPoint[posCount] : NULL;
-    int indx;
-    for (indx = 0; indx < posCount; indx++) {
-        posPtr[indx].fX = positions[indx << 1];
-        posPtr[indx].fY = positions[(indx << 1) + 1];
-    }
-
-    SkPaint paintCopy(paint);
-    paintCopy.setTextEncoding(SkPaint::kUTF16_TextEncoding);
-    mCanvas->drawPosText(text, count, posPtr, paintCopy);
-
-    delete[] posPtr;
+    drawTextDecorations(x, y, totalAdvance, paint);
 }
 
 void SkiaCanvas::drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path,
diff --git a/libs/hwui/TextDropShadowCache.cpp b/libs/hwui/TextDropShadowCache.cpp
index b7a76ba..996ac8e 100644
--- a/libs/hwui/TextDropShadowCache.cpp
+++ b/libs/hwui/TextDropShadowCache.cpp
@@ -30,8 +30,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 hash_t ShadowText::hash() const {
-    uint32_t charCount = len / sizeof(char16_t);
-    uint32_t hash = JenkinsHashMix(0, len);
+    uint32_t hash = JenkinsHashMix(0, glyphCount);
     hash = JenkinsHashMix(hash, android::hash_type(radius));
     hash = JenkinsHashMix(hash, android::hash_type(textSize));
     hash = JenkinsHashMix(hash, android::hash_type(typeface));
@@ -40,10 +39,10 @@
     hash = JenkinsHashMix(hash, android::hash_type(scaleX));
     if (text) {
         hash = JenkinsHashMixShorts(
-            hash, reinterpret_cast<const uint16_t*>(text), charCount);
+            hash, reinterpret_cast<const uint16_t*>(text), glyphCount);
     }
     if (positions) {
-        for (uint32_t i = 0; i < charCount * 2; i++) {
+        for (uint32_t i = 0; i < glyphCount * 2; i++) {
             hash = JenkinsHashMix(hash, android::hash_type(positions[i]));
         }
     }
@@ -51,7 +50,7 @@
 }
 
 int ShadowText::compare(const ShadowText& lhs, const ShadowText& rhs) {
-    int deltaInt = int(lhs.len) - int(rhs.len);
+    int deltaInt = int(lhs.glyphCount) - int(rhs.glyphCount);
     if (deltaInt != 0) return deltaInt;
 
     deltaInt = lhs.flags - rhs.flags;
@@ -76,7 +75,7 @@
         if (!lhs.text) return -1;
         if (!rhs.text) return +1;
 
-        deltaInt = memcmp(lhs.text, rhs.text, lhs.len);
+        deltaInt = memcmp(lhs.text, rhs.text, lhs.glyphCount * sizeof(glyph_t));
         if (deltaInt != 0) return deltaInt;
     }
 
@@ -84,7 +83,7 @@
         if (!lhs.positions) return -1;
         if (!rhs.positions) return +1;
 
-        return memcmp(lhs.positions, rhs.positions, lhs.len << 2);
+        return memcmp(lhs.positions, rhs.positions, lhs.glyphCount << 1);
     }
 
     return 0;
@@ -168,16 +167,16 @@
     mCache.clear();
 }
 
-ShadowTexture* TextDropShadowCache::get(const SkPaint* paint, const char* text, uint32_t len,
-        int numGlyphs, float radius, const float* positions) {
-    ShadowText entry(paint, radius, len, text, positions);
+ShadowTexture* TextDropShadowCache::get(const SkPaint* paint, const char* glyphs, int numGlyphs,
+        float radius, const float* positions) {
+    ShadowText entry(paint, radius, numGlyphs * 2, glyphs, positions);
     ShadowTexture* texture = mCache.get(entry);
 
     if (!texture) {
         SkPaint paintCopy(*paint);
         paintCopy.setTextAlign(SkPaint::kLeft_Align);
-        FontRenderer::DropShadow shadow = mRenderer->renderDropShadow(&paintCopy, text, 0,
-                len, numGlyphs, radius, positions);
+        FontRenderer::DropShadow shadow = mRenderer->renderDropShadow(&paintCopy, glyphs, numGlyphs,
+                radius, positions);
 
         if (!shadow.image) {
             return nullptr;
diff --git a/libs/hwui/TextDropShadowCache.h b/libs/hwui/TextDropShadowCache.h
index caf089f..c4f3c5d 100644
--- a/libs/hwui/TextDropShadowCache.h
+++ b/libs/hwui/TextDropShadowCache.h
@@ -34,14 +34,14 @@
 class FontRenderer;
 
 struct ShadowText {
-    ShadowText(): len(0), radius(0.0f), textSize(0.0f), typeface(nullptr),
+    ShadowText(): glyphCount(0), radius(0.0f), textSize(0.0f), typeface(nullptr),
             flags(0), italicStyle(0.0f), scaleX(0), text(nullptr), positions(nullptr) {
     }
 
     // len is the number of bytes in text
-    ShadowText(const SkPaint* paint, float radius, uint32_t len, const char* srcText,
+    ShadowText(const SkPaint* paint, float radius, uint32_t glyphCount, const char* srcText,
             const float* positions):
-            len(len), radius(radius), positions(positions) {
+            glyphCount(glyphCount), radius(radius), positions(positions) {
         // TODO: Propagate this through the API, we should not cast here
         text = (const char16_t*) srcText;
 
@@ -73,17 +73,16 @@
     }
 
     void copyTextLocally() {
-        uint32_t charCount = len / sizeof(char16_t);
-        str.setTo((const char16_t*) text, charCount);
+        str.setTo((const char16_t*) text, glyphCount);
         text = str.string();
         if (positions != nullptr) {
             positionsCopy.clear();
-            positionsCopy.appendArray(positions, charCount * 2);
+            positionsCopy.appendArray(positions, glyphCount * 2);
             positions = positionsCopy.array();
         }
     }
 
-    uint32_t len;
+    uint32_t glyphCount;
     float radius;
     float textSize;
     SkTypeface* typeface;
@@ -136,7 +135,7 @@
      */
     void operator()(ShadowText& text, ShadowTexture*& texture) override;
 
-    ShadowTexture* get(const SkPaint* paint, const char* text, uint32_t len,
+    ShadowTexture* get(const SkPaint* paint, const char* text,
             int numGlyphs, float radius, const float* positions);
 
     /**
diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp
index d680f99..dc82041 100644
--- a/libs/hwui/font/Font.cpp
+++ b/libs/hwui/font/Font.cpp
@@ -291,20 +291,18 @@
     return cachedGlyph;
 }
 
-void Font::render(const SkPaint* paint, const char *text, uint32_t start, uint32_t len,
+void Font::render(const SkPaint* paint, const char *text,
             int numGlyphs, int x, int y, const float* positions) {
-    render(paint, text, start, len, numGlyphs, x, y, FRAMEBUFFER, nullptr,
+    render(paint, text, numGlyphs, x, y, FRAMEBUFFER, nullptr,
             0, 0, nullptr, positions);
 }
 
-void Font::render(const SkPaint* paint, const char *text, uint32_t start, uint32_t len,
-        int numGlyphs, const SkPath* path, float hOffset, float vOffset) {
-    if (numGlyphs == 0 || text == nullptr || len == 0) {
+void Font::render(const SkPaint* paint, const char *text, int numGlyphs,
+        const SkPath* path, float hOffset, float vOffset) {
+    if (numGlyphs == 0 || text == nullptr) {
         return;
     }
 
-    text += start;
-
     int glyphsCount = 0;
     SkFixed prevRsbDelta = 0;
 
@@ -317,7 +315,7 @@
     float pathLength = SkScalarToFloat(measure.getLength());
 
     if (paint->getTextAlign() != SkPaint::kLeft_Align) {
-        float textWidth = SkScalarToFloat(paint->measureText(text, len));
+        float textWidth = SkScalarToFloat(paint->measureText(text, numGlyphs * 2));
         float pathOffset = pathLength;
         if (paint->getTextAlign() == SkPaint::kCenter_Align) {
             textWidth *= 0.5f;
@@ -347,14 +345,14 @@
     }
 }
 
-void Font::measure(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+void Font::measure(const SkPaint* paint, const char* text,
         int numGlyphs, Rect *bounds, const float* positions) {
     if (bounds == nullptr) {
         ALOGE("No return rectangle provided to measure text");
         return;
     }
     bounds->set(1e6, -1e6, -1e6, 1e6);
-    render(paint, text, start, len, numGlyphs, 0, 0, MEASURE, nullptr, 0, 0, bounds, positions);
+    render(paint, text, numGlyphs, 0, 0, MEASURE, nullptr, 0, 0, bounds, positions);
 }
 
 void Font::precache(const SkPaint* paint, const char* text, int numGlyphs) {
@@ -378,10 +376,10 @@
     }
 }
 
-void Font::render(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+void Font::render(const SkPaint* paint, const char* text,
         int numGlyphs, int x, int y, RenderMode mode, uint8_t *bitmap,
         uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* positions) {
-    if (numGlyphs == 0 || text == nullptr || len == 0) {
+    if (numGlyphs == 0 || text == nullptr) {
         return;
     }
 
@@ -395,7 +393,6 @@
     };
     RenderGlyph render = gRenderGlyph[(mode << 1) + !mIdentityTransform];
 
-    text += start;
     int glyphsCount = 0;
 
     while (glyphsCount < numGlyphs) {
diff --git a/libs/hwui/font/Font.h b/libs/hwui/font/Font.h
index 3119d73..59518a1 100644
--- a/libs/hwui/font/Font.h
+++ b/libs/hwui/font/Font.h
@@ -82,10 +82,10 @@
 
     ~Font();
 
-    void render(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+    void render(const SkPaint* paint, const char* text,
             int numGlyphs, int x, int y, const float* positions);
 
-    void render(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+    void render(const SkPaint* paint, const char* text,
             int numGlyphs, const SkPath* path, float hOffset, float vOffset);
 
     const Font::FontDescription& getDescription() const {
@@ -113,11 +113,11 @@
 
     void precache(const SkPaint* paint, const char* text, int numGlyphs);
 
-    void render(const SkPaint* paint, const char *text, uint32_t start, uint32_t len,
+    void render(const SkPaint* paint, const char *text,
             int numGlyphs, int x, int y, RenderMode mode, uint8_t *bitmap,
             uint32_t bitmapW, uint32_t bitmapH, Rect *bounds, const float* positions);
 
-    void measure(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+    void measure(const SkPaint* paint, const char* text,
             int numGlyphs, Rect *bounds, const float* positions);
 
     void invalidateTextureCache(CacheTexture* cacheTexture = nullptr);
diff --git a/libs/hwui/unit_tests/OpReordererTests.cpp b/libs/hwui/unit_tests/OpReordererTests.cpp
index ec8048d..d76086c 100644
--- a/libs/hwui/unit_tests/OpReordererTests.cpp
+++ b/libs/hwui/unit_tests/OpReordererTests.cpp
@@ -136,14 +136,14 @@
 }
 
 TEST(OpReorderer, simpleBatching) {
-    static int SIMPLE_BATCHING_LOOPS = 5;
+    const int LOOPS = 5;
     class SimpleBatchingTestRenderer : public TestRendererBase {
     public:
         void onBitmapOp(const BitmapOp& op, const BakedOpState& state) override {
-            EXPECT_TRUE(mIndex++ >= SIMPLE_BATCHING_LOOPS);
+            EXPECT_TRUE(mIndex++ >= LOOPS) << "Bitmaps should be above all rects";
         }
         void onRectOp(const RectOp& op, const BakedOpState& state) override {
-            EXPECT_TRUE(mIndex++ < SIMPLE_BATCHING_LOOPS);
+            EXPECT_TRUE(mIndex++ < LOOPS) << "Rects should be below all bitmaps";
         }
     };
 
@@ -153,7 +153,7 @@
         // Alternate between drawing rects and bitmaps, with bitmaps overlapping rects.
         // Rects don't overlap bitmaps, so bitmaps should be brought to front as a group.
         canvas.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
-        for (int i = 0; i < SIMPLE_BATCHING_LOOPS; i++) {
+        for (int i = 0; i < LOOPS; i++) {
             canvas.translate(0, 10);
             canvas.drawRect(0, 0, 10, 10, SkPaint());
             canvas.drawBitmap(bitmap, 5, 0, nullptr);
@@ -164,7 +164,35 @@
     OpReorderer reorderer(200, 200, *dl, sLightCenter);
     SimpleBatchingTestRenderer renderer;
     reorderer.replayBakedOps<TestDispatcher>(renderer);
-    EXPECT_EQ(2 * SIMPLE_BATCHING_LOOPS, renderer.getIndex()); // 2 x loops ops, because no merging (TODO: force no merging)
+    EXPECT_EQ(2 * LOOPS, renderer.getIndex())
+            << "Expect number of ops = 2 * loop count"; // TODO: force no merging
+}
+
+TEST(OpReorderer, textStrikethroughBatching) {
+    const int LOOPS = 5;
+    class TextStrikethroughTestRenderer : public TestRendererBase {
+    public:
+        void onRectOp(const RectOp& op, const BakedOpState& state) override {
+            EXPECT_TRUE(mIndex++ >= LOOPS) << "Strikethrough rects should be above all text";
+        }
+        void onTextOp(const TextOp& op, const BakedOpState& state) override {
+            EXPECT_TRUE(mIndex++ < LOOPS) << "Text should be beneath all strikethrough rects";
+        }
+    };
+    auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 2000, [](RecordingCanvas& canvas) {
+        SkPaint textPaint;
+        textPaint.setAntiAlias(true);
+        textPaint.setTextSize(20);
+        textPaint.setStrikeThruText(true);
+        for (int i = 0; i < LOOPS; i++) {
+            TestUtils::drawTextToCanvas(&canvas, "test text", textPaint, 10, 100 * (i + 1));
+        }
+    });
+    OpReorderer reorderer(200, 2000, *dl, sLightCenter);
+    TextStrikethroughTestRenderer renderer;
+    reorderer.replayBakedOps<TestDispatcher>(renderer);
+    EXPECT_EQ(2 * LOOPS, renderer.getIndex())
+            << "Expect number of ops = 2 * loop count"; // TODO: force no merging
 }
 
 TEST(OpReorderer, renderNode) {
diff --git a/libs/hwui/unit_tests/RecordingCanvasTests.cpp b/libs/hwui/unit_tests/RecordingCanvasTests.cpp
index 22190f5..c23d47e 100644
--- a/libs/hwui/unit_tests/RecordingCanvasTests.cpp
+++ b/libs/hwui/unit_tests/RecordingCanvasTests.cpp
@@ -41,21 +41,110 @@
     playbackOps(*dl, [](const RecordedOp& op) { ADD_FAILURE(); });
 }
 
-TEST(RecordingCanvas, testSimpleRectRecord) {
+TEST(RecordingCanvas, drawLines) {
+    auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) {
+        SkPaint paint;
+        paint.setStrokeWidth(20);
+        float points[] = { 0, 0, 20, 10, 30, 40, 90 }; // NB: only 1 valid line
+        canvas.drawLines(&points[0], 7, paint);
+    });
+
+    ASSERT_EQ(1u, dl->getOps().size()) << "Must be exactly one op";
+    auto op = dl->getOps()[0];
+    ASSERT_EQ(RecordedOpId::LinesOp, op->opId);
+    EXPECT_EQ(4, ((LinesOp*)op)->floatCount)
+            << "float count must be rounded down to closest multiple of 4";
+    EXPECT_EQ(Rect(-10, -10, 30, 20), op->unmappedBounds)
+            << "unmapped bounds must be size of line, outset by 1/2 stroke width";
+}
+
+TEST(RecordingCanvas, drawRect) {
     auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) {
         canvas.drawRect(10, 20, 90, 180, SkPaint());
     });
 
+    ASSERT_EQ(1u, dl->getOps().size()) << "Must be exactly one op";
+    auto op = *(dl->getOps()[0]);
+    ASSERT_EQ(RecordedOpId::RectOp, op.opId);
+    EXPECT_EQ(Rect(0, 0, 100, 200), op.localClipRect);
+    EXPECT_EQ(Rect(10, 20, 90, 180), op.unmappedBounds);
+}
+
+TEST(RecordingCanvas, drawText) {
+    auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
+        SkPaint paint;
+        paint.setAntiAlias(true);
+        paint.setTextSize(20);
+        TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25);
+    });
+
     int count = 0;
     playbackOps(*dl, [&count](const RecordedOp& op) {
         count++;
-        ASSERT_EQ(RecordedOpId::RectOp, op.opId);
-        ASSERT_EQ(Rect(0, 0, 100, 200), op.localClipRect);
-        ASSERT_EQ(Rect(10, 20, 90, 180), op.unmappedBounds);
+        ASSERT_EQ(RecordedOpId::TextOp, op.opId);
+        EXPECT_EQ(Rect(0, 0, 200, 200), op.localClipRect);
+        EXPECT_TRUE(op.localMatrix.isIdentity());
+        EXPECT_TRUE(op.unmappedBounds.contains(25, 15, 50, 25))
+                << "Op expected to be 25+ pixels wide, 10+ pixels tall";
     });
     ASSERT_EQ(1, count);
 }
 
+TEST(RecordingCanvas, drawText_strikeThruAndUnderline) {
+    auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
+        SkPaint paint;
+        paint.setAntiAlias(true);
+        paint.setTextSize(20);
+        for (int i = 0; i < 2; i++) {
+            for (int j = 0; j < 2; j++) {
+                paint.setUnderlineText(i != 0);
+                paint.setStrikeThruText(j != 0);
+                TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25);
+            }
+        }
+    });
+
+    auto ops = dl->getOps();
+    ASSERT_EQ(8u, ops.size());
+
+    int index = 0;
+    EXPECT_EQ(RecordedOpId::TextOp, ops[index++]->opId); // no underline or strikethrough
+
+    EXPECT_EQ(RecordedOpId::TextOp, ops[index++]->opId);
+    EXPECT_EQ(RecordedOpId::RectOp, ops[index++]->opId); // strikethrough only
+
+    EXPECT_EQ(RecordedOpId::TextOp, ops[index++]->opId);
+    EXPECT_EQ(RecordedOpId::RectOp, ops[index++]->opId); // underline only
+
+    EXPECT_EQ(RecordedOpId::TextOp, ops[index++]->opId);
+    EXPECT_EQ(RecordedOpId::RectOp, ops[index++]->opId); // underline
+    EXPECT_EQ(RecordedOpId::RectOp, ops[index++]->opId); // strikethrough
+}
+
+TEST(RecordingCanvas, drawText_forceAlignLeft) {
+    auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
+        SkPaint paint;
+        paint.setAntiAlias(true);
+        paint.setTextSize(20);
+        paint.setTextAlign(SkPaint::kLeft_Align);
+        TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25);
+        paint.setTextAlign(SkPaint::kCenter_Align);
+        TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25);
+        paint.setTextAlign(SkPaint::kRight_Align);
+        TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25);
+    });
+
+    int count = 0;
+    playbackOps(*dl, [&count](const RecordedOp& op) {
+        count++;
+        ASSERT_EQ(RecordedOpId::TextOp, op.opId);
+        EXPECT_EQ(SkPaint::kLeft_Align, op.paint->getTextAlign())
+                << "recorded drawText commands must force kLeft_Align on their paint";
+        EXPECT_EQ(SkPaint::kGlyphID_TextEncoding, op.paint->getTextEncoding()); // verify TestUtils
+    });
+    ASSERT_EQ(3, count);
+}
+
 TEST(RecordingCanvas, backgroundAndImage) {
     auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) {
         SkBitmap bitmap;
@@ -109,7 +198,7 @@
     ASSERT_EQ(2, count);
 }
 
-TEST(RecordingCanvas, saveLayerSimple) {
+TEST(RecordingCanvas, saveLayer_simple) {
     auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
         canvas.saveLayerAlpha(10, 20, 190, 180, 128, SkCanvas::kARGB_ClipLayer_SaveFlag);
         canvas.drawRect(10, 20, 190, 180, SkPaint());
@@ -143,7 +232,7 @@
     EXPECT_EQ(3, count);
 }
 
-TEST(RecordingCanvas, saveLayerViewportCrop) {
+TEST(RecordingCanvas, saveLayer_viewportCrop) {
     auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
         // shouldn't matter, since saveLayer will clip to its bounds
         canvas.clipRect(-1000, -1000, 1000, 1000, SkRegion::kReplace_Op);
@@ -167,7 +256,7 @@
     EXPECT_EQ(3, count);
 }
 
-TEST(RecordingCanvas, saveLayerRotateUnclipped) {
+TEST(RecordingCanvas, saveLayer_rotateUnclipped) {
     auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
         canvas.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
         canvas.translate(100, 100);
@@ -193,7 +282,7 @@
     EXPECT_EQ(3, count);
 }
 
-TEST(RecordingCanvas, saveLayerRotateClipped) {
+TEST(RecordingCanvas, saveLayer_rotateClipped) {
     auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
         canvas.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
         canvas.translate(100, 100);
@@ -224,7 +313,7 @@
     EXPECT_EQ(3, count);
 }
 
-TEST(RecordingCanvas, testReorderBarrier) {
+TEST(RecordingCanvas, insertReorderBarrier) {
     auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
         canvas.drawRect(0, 0, 400, 400, SkPaint());
         canvas.insertReorderBarrier(true);
diff --git a/libs/hwui/utils/TestUtils.cpp b/libs/hwui/utils/TestUtils.cpp
index 84230a7..dd6fc36 100644
--- a/libs/hwui/utils/TestUtils.cpp
+++ b/libs/hwui/utils/TestUtils.cpp
@@ -36,5 +36,46 @@
             | (int)((startB + (int)(fraction * (endB - startB))));
 }
 
+void TestUtils::drawTextToCanvas(TestCanvas* canvas, const char* text,
+        const SkPaint& inPaint, float x, float y) {
+   // copy to force TextEncoding (which JNI layer would have done)
+   SkPaint paint(inPaint);
+   paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+
+   SkMatrix identity;
+   identity.setIdentity();
+   SkSurfaceProps surfaceProps(0, kUnknown_SkPixelGeometry);
+   SkAutoGlyphCacheNoGamma autoCache(paint, &surfaceProps, &identity);
+
+   float totalAdvance = 0;
+   std::vector<glyph_t> glyphs;
+   std::vector<float> positions;
+   Rect bounds;
+   while (*text != '\0') {
+       SkUnichar unichar = SkUTF8_NextUnichar(&text);
+       glyph_t glyph = autoCache.getCache()->unicharToGlyph(unichar);
+       autoCache.getCache()->unicharToGlyph(unichar);
+
+       // push glyph and its relative position
+       glyphs.push_back(glyph);
+       positions.push_back(totalAdvance);
+       positions.push_back(0);
+
+       // compute bounds
+       SkGlyph skGlyph = autoCache.getCache()->getUnicharMetrics(unichar);
+       Rect glyphBounds(skGlyph.fWidth, skGlyph.fHeight);
+       glyphBounds.translate(totalAdvance + skGlyph.fLeft, skGlyph.fTop);
+       bounds.unionWith(glyphBounds);
+
+       // advance next character
+       SkScalar skWidth;
+       paint.getTextWidths(&glyph, sizeof(glyph), &skWidth, NULL);
+       totalAdvance += skWidth;
+   }
+   bounds.translate(x, y);
+   canvas->drawText(glyphs.data(), positions.data(), glyphs.size(), paint, x, y,
+           bounds.left, bounds.top, bounds.right, bounds.bottom, totalAdvance);
+}
+
 } /* namespace uirenderer */
 } /* namespace android */
diff --git a/libs/hwui/utils/TestUtils.h b/libs/hwui/utils/TestUtils.h
index f7f4f2d..f9fa242 100644
--- a/libs/hwui/utils/TestUtils.h
+++ b/libs/hwui/utils/TestUtils.h
@@ -196,6 +196,9 @@
 
     static SkColor interpolateColor(float fraction, SkColor start, SkColor end);
 
+    static void drawTextToCanvas(TestCanvas* canvas, const char* text,
+            const SkPaint& inPaint, float x, float y);
+
 private:
     static void syncHierarchyPropertiesAndDisplayListImpl(RenderNode* node) {
         node->syncProperties();
diff --git a/packages/ExternalStorageProvider/res/values-af/strings.xml b/packages/ExternalStorageProvider/res/values-af/strings.xml
index 1de881d..b5a159d 100644
--- a/packages/ExternalStorageProvider/res/values-af/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-af/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Eksterne berging"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Interne berging"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumente"</string>
+    <string name="root_home" msgid="7931555396767513359">"Tuis"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-am/strings.xml b/packages/ExternalStorageProvider/res/values-am/strings.xml
index 230fb06..f4f296d 100644
--- a/packages/ExternalStorageProvider/res/values-am/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-am/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"ውጫዊ ማከማቻ"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"ውስጣዊ ማከማቻ"</string>
-    <string name="root_documents" msgid="4051252304075469250">"ሰነዶች"</string>
+    <string name="root_home" msgid="7931555396767513359">"መነሻ"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ar/strings.xml b/packages/ExternalStorageProvider/res/values-ar/strings.xml
index b20a056..4eee3e8 100644
--- a/packages/ExternalStorageProvider/res/values-ar/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ar/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"وحدة تخزين خارجية"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"وحدة تخزين داخلية"</string>
-    <string name="root_documents" msgid="4051252304075469250">"مستندات"</string>
+    <string name="root_home" msgid="7931555396767513359">"الرئيسية"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml b/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml
index cd5ba2f..f7e5f8b 100644
--- a/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Xarici Yaddaş"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Daxili yaddaş"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Sənədlər"</string>
+    <string name="root_home" msgid="7931555396767513359">"Əsas səhifə"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-bg/strings.xml b/packages/ExternalStorageProvider/res/values-bg/strings.xml
index f5dce31..1cdf77b 100644
--- a/packages/ExternalStorageProvider/res/values-bg/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-bg/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Външно хранилище"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Вътрешно хранилище"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Документи"</string>
+    <string name="root_home" msgid="7931555396767513359">"Начало"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml b/packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml
index 3668065..842aed4 100644
--- a/packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"বাহ্যিক সঞ্চয়স্থান"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"অভ্যন্তরীণ সঞ্চয়স্থান"</string>
-    <string name="root_documents" msgid="4051252304075469250">"দস্তাবেজগুলি"</string>
+    <string name="root_home" msgid="7931555396767513359">"হোম"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ca/strings.xml b/packages/ExternalStorageProvider/res/values-ca/strings.xml
index 15e9d46..b3fd9f7 100644
--- a/packages/ExternalStorageProvider/res/values-ca/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ca/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Emmagatzematge extern"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Emmagatzematge intern"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+    <string name="root_home" msgid="7931555396767513359">"Inici"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-cs/strings.xml b/packages/ExternalStorageProvider/res/values-cs/strings.xml
index b68a928..2eab596 100644
--- a/packages/ExternalStorageProvider/res/values-cs/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-cs/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Externí úložiště"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Interní úložiště"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumenty"</string>
+    <string name="root_home" msgid="7931555396767513359">"Výchozí adresář"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-da/strings.xml b/packages/ExternalStorageProvider/res/values-da/strings.xml
index dc565ae..d008f0e 100644
--- a/packages/ExternalStorageProvider/res/values-da/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-da/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Ekstern lagerplads"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Intern lagerplads"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumenter"</string>
+    <string name="root_home" msgid="7931555396767513359">"Hjem"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-de/strings.xml b/packages/ExternalStorageProvider/res/values-de/strings.xml
index 318634a..50fc680 100644
--- a/packages/ExternalStorageProvider/res/values-de/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-de/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Externer Speicher"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Interner Speicher"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumente"</string>
+    <string name="root_home" msgid="7931555396767513359">"Zuhause"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-el/strings.xml b/packages/ExternalStorageProvider/res/values-el/strings.xml
index b3aa792..9537afd 100644
--- a/packages/ExternalStorageProvider/res/values-el/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-el/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Εξωτερικός αποθηκευτικός χώρος"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Εσωτερικός αποθηκευτικός χώρος"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Έγγραφα"</string>
+    <string name="root_home" msgid="7931555396767513359">"Αρχική οθόνη"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml b/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml
index f88eb9e..be7aebc 100644
--- a/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+    <string name="root_home" msgid="7931555396767513359">"Home"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml b/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml
index f88eb9e..be7aebc 100644
--- a/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+    <string name="root_home" msgid="7931555396767513359">"Home"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml
index f88eb9e..be7aebc 100644
--- a/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+    <string name="root_home" msgid="7931555396767513359">"Home"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml b/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml
index e7e38b5..64a042d 100644
--- a/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Almacenamiento externo"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Almacenamiento interno"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+    <string name="root_home" msgid="7931555396767513359">"Casa"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-es/strings.xml b/packages/ExternalStorageProvider/res/values-es/strings.xml
index e7e38b5..d59755e 100644
--- a/packages/ExternalStorageProvider/res/values-es/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-es/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Almacenamiento externo"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Almacenamiento interno"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+    <string name="root_home" msgid="7931555396767513359">"Inicio"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml b/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml
index 6824e9d..7ea2caa 100644
--- a/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Väline talletusruum"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Sisemine salvestusruum"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumendid"</string>
+    <string name="root_home" msgid="7931555396767513359">"Kodu"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-eu-rES/strings.xml b/packages/ExternalStorageProvider/res/values-eu-rES/strings.xml
index 5881bf2..2f94acb 100644
--- a/packages/ExternalStorageProvider/res/values-eu-rES/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-eu-rES/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Kanpoko memoria"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Barneko memoria"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumentuak"</string>
+    <string name="root_home" msgid="7931555396767513359">"Etxea"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-fa/strings.xml b/packages/ExternalStorageProvider/res/values-fa/strings.xml
index 9ae8a47..c8c49a5 100644
--- a/packages/ExternalStorageProvider/res/values-fa/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-fa/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"حافظه خارجی"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"حافظهٔ داخلی"</string>
-    <string name="root_documents" msgid="4051252304075469250">"اسناد"</string>
+    <string name="root_home" msgid="7931555396767513359">"صفحه اصلی"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-fi/strings.xml b/packages/ExternalStorageProvider/res/values-fi/strings.xml
index 9d1fbaa..660228a 100644
--- a/packages/ExternalStorageProvider/res/values-fi/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-fi/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Ulkoinen tallennustila"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Sisäinen tallennustila"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumentit"</string>
+    <string name="root_home" msgid="7931555396767513359">"Koti"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml b/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml
index b3fdd48..b94682f 100644
--- a/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Stockage externe"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Mémoire de stockage interne"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+    <string name="root_home" msgid="7931555396767513359">"Accueil"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-fr/strings.xml b/packages/ExternalStorageProvider/res/values-fr/strings.xml
index b3fdd48..6a84bb4 100644
--- a/packages/ExternalStorageProvider/res/values-fr/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-fr/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Stockage externe"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Mémoire de stockage interne"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+    <string name="root_home" msgid="7931555396767513359">"Répertoire de base"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-gl-rES/strings.xml b/packages/ExternalStorageProvider/res/values-gl-rES/strings.xml
index 780213f..d51eae9 100644
--- a/packages/ExternalStorageProvider/res/values-gl-rES/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-gl-rES/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Almacenamento externo"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Almacenamento interno"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+    <string name="root_home" msgid="7931555396767513359">"Inicio"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml
index ec8a0bd..3bcc72d 100644
--- a/packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"બાહ્ય સંગ્રહ"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"આંતરિક સંગ્રહ"</string>
-    <string name="root_documents" msgid="4051252304075469250">"દસ્તાવેજો"</string>
+    <string name="root_home" msgid="7931555396767513359">"હોમ"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-hi/strings.xml b/packages/ExternalStorageProvider/res/values-hi/strings.xml
index 8538081..93cc712 100644
--- a/packages/ExternalStorageProvider/res/values-hi/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-hi/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"बाहरी मेमोरी"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"मोबाइल मेमोरी"</string>
-    <string name="root_documents" msgid="4051252304075469250">"दस्तावेज़"</string>
+    <string name="root_home" msgid="7931555396767513359">"होम"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-hr/strings.xml b/packages/ExternalStorageProvider/res/values-hr/strings.xml
index a74f8e8..c866351 100644
--- a/packages/ExternalStorageProvider/res/values-hr/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-hr/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Vanjska pohrana"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Unutarnja pohrana"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string>
+    <string name="root_home" msgid="7931555396767513359">"Početna"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-hu/strings.xml b/packages/ExternalStorageProvider/res/values-hu/strings.xml
index 3f72b41..db1c7db 100644
--- a/packages/ExternalStorageProvider/res/values-hu/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-hu/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Külső tárhely"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Belső tárhely"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumentumok"</string>
+    <string name="root_home" msgid="7931555396767513359">"Otthon"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml b/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml
index 5360124..0e1de49 100644
--- a/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Արտաքին պահոց"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Ներքին պահոց"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Փաստաթղթեր"</string>
+    <string name="root_home" msgid="7931555396767513359">"Գլխավոր էջ"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-in/strings.xml b/packages/ExternalStorageProvider/res/values-in/strings.xml
index 42acde7..ca7f823 100644
--- a/packages/ExternalStorageProvider/res/values-in/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-in/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Penyimpanan Eksternal"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Penyimpanan internal"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumen"</string>
+    <string name="root_home" msgid="7931555396767513359">"Rumah"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-is-rIS/strings.xml b/packages/ExternalStorageProvider/res/values-is-rIS/strings.xml
index 0306165..ad04002 100644
--- a/packages/ExternalStorageProvider/res/values-is-rIS/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-is-rIS/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Ytri geymsla"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Innbyggð geymsla"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Skjöl"</string>
+    <string name="root_home" msgid="7931555396767513359">"Heim"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-it/strings.xml b/packages/ExternalStorageProvider/res/values-it/strings.xml
index 957b5ff..686ee1a 100644
--- a/packages/ExternalStorageProvider/res/values-it/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-it/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Archivio esterno"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Memoria interna"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documenti"</string>
+    <string name="root_home" msgid="7931555396767513359">"Home"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-iw/strings.xml b/packages/ExternalStorageProvider/res/values-iw/strings.xml
index 775506a..b45fb5c 100644
--- a/packages/ExternalStorageProvider/res/values-iw/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-iw/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"אחסון חיצוני"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"אחסון פנימי"</string>
-    <string name="root_documents" msgid="4051252304075469250">"מסמכים"</string>
+    <string name="root_home" msgid="7931555396767513359">"דף הבית"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ja/strings.xml b/packages/ExternalStorageProvider/res/values-ja/strings.xml
index 188fca2..99baf16 100644
--- a/packages/ExternalStorageProvider/res/values-ja/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ja/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"外部ストレージ"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"内部ストレージ"</string>
-    <string name="root_documents" msgid="4051252304075469250">"ドキュメント"</string>
+    <string name="root_home" msgid="7931555396767513359">"自宅"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml b/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml
index cc04860..c1bc5c7 100644
--- a/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"გარე მეხსიერება"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"შიდა მეხსიერება"</string>
-    <string name="root_documents" msgid="4051252304075469250">"დოკუმენტები"</string>
+    <string name="root_home" msgid="7931555396767513359">"მთავარი"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml b/packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml
index ad49036..cf05782 100644
--- a/packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Сыртқы жад"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Ішкі жад"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Құжаттар"</string>
+    <string name="root_home" msgid="7931555396767513359">"Негізгі бет"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml b/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml
index 9cf76d4..a2e926f 100644
--- a/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"ឧបករណ៍​​ផ្ទុក​ខាងក្រៅ"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"ឧបករណ៍​ផ្ទុក​ខាង​ក្នុង"</string>
-    <string name="root_documents" msgid="4051252304075469250">"ឯកសារ"</string>
+    <string name="root_home" msgid="7931555396767513359">"ដើម"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml
index e32b1d3..1f0cfbf 100644
--- a/packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆ"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"ಆಂತರಿಕ ಸಂಗ್ರಹಣೆ"</string>
-    <string name="root_documents" msgid="4051252304075469250">"ಡಾಕ್ಯುಮೆಂಟ್‌ಗಳು"</string>
+    <string name="root_home" msgid="7931555396767513359">"ಮುಖಪುಟ"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ko/strings.xml b/packages/ExternalStorageProvider/res/values-ko/strings.xml
index 849d37e..365648d 100644
--- a/packages/ExternalStorageProvider/res/values-ko/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ko/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"외부 저장소"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"내부 저장소"</string>
-    <string name="root_documents" msgid="4051252304075469250">"문서"</string>
+    <string name="root_home" msgid="7931555396767513359">"홈"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml b/packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml
index d3ccf7f1..4a0f211 100644
--- a/packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Тышкы сактагыч"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Ички сактагыч"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Документтер"</string>
+    <string name="root_home" msgid="7931555396767513359">"Башкы бет"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml b/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml
index cecd9f5..9de6519 100644
--- a/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"ບ່ອນຈັດເກັບຂໍ້ມູນພາຍນອກ"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"ບ່ອນຈັດເກັບຂໍ້ມູນພາຍໃນ"</string>
-    <string name="root_documents" msgid="4051252304075469250">"ເອ​ກະ​ສານ"</string>
+    <string name="root_home" msgid="7931555396767513359">"​ໜ້າຫຼັກ"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-lt/strings.xml b/packages/ExternalStorageProvider/res/values-lt/strings.xml
index 240ea89..84ca2d4 100644
--- a/packages/ExternalStorageProvider/res/values-lt/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-lt/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Išorinė atmintinė"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Vidinė atmintinė"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumentai"</string>
+    <string name="root_home" msgid="7931555396767513359">"Pagrindinis katalogas"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-lv/strings.xml b/packages/ExternalStorageProvider/res/values-lv/strings.xml
index d308fe8..7eff0b9 100644
--- a/packages/ExternalStorageProvider/res/values-lv/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-lv/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Ārējā krātuve"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Iekšējā atmiņa"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string>
+    <string name="root_home" msgid="7931555396767513359">"Sākumdirektorijs"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml b/packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml
index 8943d23..fe6b753 100644
--- a/packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Надворешна меморија"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Внатрешна меморија"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Документи"</string>
+    <string name="root_home" msgid="7931555396767513359">"Почетна страница"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml
index 08e6dae..5369ec9 100644
--- a/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"ബാഹ്യ സ്റ്റോറേജ്"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"ആന്തരിക സ്റ്റോറേജ്"</string>
-    <string name="root_documents" msgid="4051252304075469250">"പ്രമാണങ്ങൾ"</string>
+    <string name="root_home" msgid="7931555396767513359">"വീട്"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml b/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml
index 3d7b7f7..4604f32 100644
--- a/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Гадаад сан"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Дотоод сан"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Документүүд"</string>
+    <string name="root_home" msgid="7931555396767513359">"Нүүр хуудас"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml
index a7e7fbb..1310b0e 100644
--- a/packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"बाह्य संचयन"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"अंतर्गत संचयन"</string>
-    <string name="root_documents" msgid="4051252304075469250">"दस्तऐवज"</string>
+    <string name="root_home" msgid="7931555396767513359">"निवास"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml b/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml
index cb4d736..007a1be 100644
--- a/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Storan Luaran"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Storan dalaman"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumen"</string>
+    <string name="root_home" msgid="7931555396767513359">"Rumah"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-my-rMM/strings.xml b/packages/ExternalStorageProvider/res/values-my-rMM/strings.xml
index dc9d684..2df9a33 100644
--- a/packages/ExternalStorageProvider/res/values-my-rMM/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-my-rMM/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"ပြင်ပသိုလှောင်ရာပစ္စည်း"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"စက်တွင်း သိုလှောင်ထားမှု"</string>
-    <string name="root_documents" msgid="4051252304075469250">"စာရွက်စာတန်းများ"</string>
+    <string name="root_home" msgid="7931555396767513359">"ပင်မ"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-nb/strings.xml b/packages/ExternalStorageProvider/res/values-nb/strings.xml
index a9ecb69..315d932 100644
--- a/packages/ExternalStorageProvider/res/values-nb/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-nb/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Ekstern lagring"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumenter"</string>
+    <string name="root_home" msgid="7931555396767513359">"Hjem"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml b/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml
index 5294043..4a9a8cd 100644
--- a/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"बाह्य भण्डारण"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"आन्तरिक भण्डारण"</string>
-    <string name="root_documents" msgid="4051252304075469250">"कागजातहरू"</string>
+    <string name="root_home" msgid="7931555396767513359">"गृह"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-nl/strings.xml b/packages/ExternalStorageProvider/res/values-nl/strings.xml
index bde6166..0ae88ce 100644
--- a/packages/ExternalStorageProvider/res/values-nl/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-nl/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Externe opslag"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Interne opslag"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documenten"</string>
+    <string name="root_home" msgid="7931555396767513359">"Startscherm"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml
index 0e91589..a805dd8 100644
--- a/packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"ਬਾਹਰੀ ਸਟੋਰੇਜ"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ"</string>
-    <string name="root_documents" msgid="4051252304075469250">"ਦਸਤਾਵੇਜ਼"</string>
+    <string name="root_home" msgid="7931555396767513359">"ਘਰ"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-pl/strings.xml b/packages/ExternalStorageProvider/res/values-pl/strings.xml
index 6c5e7d7..66d83c7 100644
--- a/packages/ExternalStorageProvider/res/values-pl/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-pl/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Pamięć zewnętrzna"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Pamięć wewnętrzna"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumenty"</string>
+    <string name="root_home" msgid="7931555396767513359">"Katalog domowy"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-pt-rBR/strings.xml b/packages/ExternalStorageProvider/res/values-pt-rBR/strings.xml
index 77c89b8..958eef4 100644
--- a/packages/ExternalStorageProvider/res/values-pt-rBR/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-pt-rBR/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Armazenamento externo"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Armazenamento interno"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+    <string name="root_home" msgid="7931555396767513359">"Página inicial"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml b/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml
index 77c89b8..c8865e1 100644
--- a/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Armazenamento externo"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Armazenamento interno"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+    <string name="root_home" msgid="7931555396767513359">"Casa"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-pt/strings.xml b/packages/ExternalStorageProvider/res/values-pt/strings.xml
index 77c89b8..958eef4 100644
--- a/packages/ExternalStorageProvider/res/values-pt/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-pt/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Armazenamento externo"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Armazenamento interno"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+    <string name="root_home" msgid="7931555396767513359">"Página inicial"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ro/strings.xml b/packages/ExternalStorageProvider/res/values-ro/strings.xml
index abd0b98..5bb4a7c 100644
--- a/packages/ExternalStorageProvider/res/values-ro/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ro/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Stocare externă"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Stocare internă"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Documente"</string>
+    <string name="root_home" msgid="7931555396767513359">"Director principal"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ru/strings.xml b/packages/ExternalStorageProvider/res/values-ru/strings.xml
index 740272f..c044a33 100644
--- a/packages/ExternalStorageProvider/res/values-ru/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ru/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Внешний накопитель"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Внутренний накопитель"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Документы"</string>
+    <string name="root_home" msgid="7931555396767513359">"Главная"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml b/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml
index 15334bb..5292403 100644
--- a/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"බාහිර ආචයනය"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"අභ්‍යන්තර ආචයනය"</string>
-    <string name="root_documents" msgid="4051252304075469250">"ලේඛන"</string>
+    <string name="root_home" msgid="7931555396767513359">"මුල් පිටුව"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-sk/strings.xml b/packages/ExternalStorageProvider/res/values-sk/strings.xml
index 9be7b79..5157888 100644
--- a/packages/ExternalStorageProvider/res/values-sk/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-sk/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Externý ukladací priestor"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Interné úložisko"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumenty"</string>
+    <string name="root_home" msgid="7931555396767513359">"Predvolený adresár"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-sl/strings.xml b/packages/ExternalStorageProvider/res/values-sl/strings.xml
index 6ffa698..dd2cc24 100644
--- a/packages/ExternalStorageProvider/res/values-sl/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-sl/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Zunanja shramba"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Notranja shramba"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string>
+    <string name="root_home" msgid="7931555396767513359">"Korenska mapa"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml b/packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml
index dc346ea..3aafd1c 100644
--- a/packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Hapësirë e jashtme ruajtjeje"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Hapësira e brendshme ruajtëse"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokumente"</string>
+    <string name="root_home" msgid="7931555396767513359">"Kreu"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-sr/strings.xml b/packages/ExternalStorageProvider/res/values-sr/strings.xml
index 54238a4..2d987ef 100644
--- a/packages/ExternalStorageProvider/res/values-sr/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-sr/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Спољна меморија"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Интерна меморија"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Документи"</string>
+    <string name="root_home" msgid="7931555396767513359">"Почетни"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-sv/strings.xml b/packages/ExternalStorageProvider/res/values-sv/strings.xml
index 6eac11e..bc4788a 100644
--- a/packages/ExternalStorageProvider/res/values-sv/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-sv/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Extern lagring"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokument"</string>
+    <string name="root_home" msgid="7931555396767513359">"Hem"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-sw/strings.xml b/packages/ExternalStorageProvider/res/values-sw/strings.xml
index 0d0e483..dcca92a 100644
--- a/packages/ExternalStorageProvider/res/values-sw/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-sw/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Hifadhi ya Nje"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Hifadhi ya ndani"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Hati"</string>
+    <string name="root_home" msgid="7931555396767513359">"Mwanzo"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml
index d7bafbc..b859e7a 100644
--- a/packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"வெளிப்புறச் சேமிப்பிடம்"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"அகச் சேமிப்பிடம்"</string>
-    <string name="root_documents" msgid="4051252304075469250">"ஆவணங்கள்"</string>
+    <string name="root_home" msgid="7931555396767513359">"முகப்பு"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-te-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-te-rIN/strings.xml
index 800d18e..934877e 100644
--- a/packages/ExternalStorageProvider/res/values-te-rIN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-te-rIN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"బాహ్య నిల్వ"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"అంతర్గత నిల్వ"</string>
-    <string name="root_documents" msgid="4051252304075469250">"పత్రాలు"</string>
+    <string name="root_home" msgid="7931555396767513359">"హోమ్"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-th/strings.xml b/packages/ExternalStorageProvider/res/values-th/strings.xml
index 796635e..957d6b7 100644
--- a/packages/ExternalStorageProvider/res/values-th/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-th/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"ที่จัดเก็บข้อมูลภายนอก"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"ที่จัดเก็บข้อมูลภายใน"</string>
-    <string name="root_documents" msgid="4051252304075469250">"เอกสาร"</string>
+    <string name="root_home" msgid="7931555396767513359">"Home"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-tl/strings.xml b/packages/ExternalStorageProvider/res/values-tl/strings.xml
index 529cdc2..be7aebc 100644
--- a/packages/ExternalStorageProvider/res/values-tl/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-tl/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Mga Dokumento"</string>
+    <string name="root_home" msgid="7931555396767513359">"Home"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-tr/strings.xml b/packages/ExternalStorageProvider/res/values-tr/strings.xml
index d6bd52a..2ce1411 100644
--- a/packages/ExternalStorageProvider/res/values-tr/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-tr/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Harici Depolama"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Dahili depolama"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Dokümanlar"</string>
+    <string name="root_home" msgid="7931555396767513359">"Ev"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-uk/strings.xml b/packages/ExternalStorageProvider/res/values-uk/strings.xml
index b8206e0..0033bca 100644
--- a/packages/ExternalStorageProvider/res/values-uk/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-uk/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Зовнішня пам’ять"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Внутрішня пам’ять"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Документи"</string>
+    <string name="root_home" msgid="7931555396767513359">"Головний екран"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml b/packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml
index 02454bc..df46fb0 100644
--- a/packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"بیرونی اسٹوریج"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"داخلی اسٹوریج"</string>
-    <string name="root_documents" msgid="4051252304075469250">"دستاویزات"</string>
+    <string name="root_home" msgid="7931555396767513359">"ہوم"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml b/packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml
index 07cc14c..d1a956bf 100644
--- a/packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Tashqi xotira"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Ichki xotira"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Hujjatlar"</string>
+    <string name="root_home" msgid="7931555396767513359">"Shaxsiy"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-vi/strings.xml b/packages/ExternalStorageProvider/res/values-vi/strings.xml
index b171c93..39e9c6c 100644
--- a/packages/ExternalStorageProvider/res/values-vi/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-vi/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Bộ nhớ ngoài"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Bộ nhớ trong"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Tài liệu"</string>
+    <string name="root_home" msgid="7931555396767513359">"Nhà riêng"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml b/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml
index 7df77dd..ea20dce 100644
--- a/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"外部存储设备"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"内部存储空间"</string>
-    <string name="root_documents" msgid="4051252304075469250">"文档"</string>
+    <string name="root_home" msgid="7931555396767513359">"主目录"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml b/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml
index 62d8afb..27f1f0a 100644
--- a/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"外部儲存空間"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"內部儲存空間"</string>
-    <string name="root_documents" msgid="4051252304075469250">"文件"</string>
+    <string name="root_home" msgid="7931555396767513359">"主目錄"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml b/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml
index 62d8afb..b2d764a 100644
--- a/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"外部儲存空間"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"內部儲存空間"</string>
-    <string name="root_documents" msgid="4051252304075469250">"文件"</string>
+    <string name="root_home" msgid="7931555396767513359">"主畫面"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-zu/strings.xml b/packages/ExternalStorageProvider/res/values-zu/strings.xml
index 4a0a845..8a7c7df 100644
--- a/packages/ExternalStorageProvider/res/values-zu/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-zu/strings.xml
@@ -18,5 +18,5 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Isitoreji sangaphandle"</string>
     <string name="root_internal_storage" msgid="827844243068584127">"Isitoreji sangaphakathi"</string>
-    <string name="root_documents" msgid="4051252304075469250">"Amadokhumenti"</string>
+    <string name="root_home" msgid="7931555396767513359">"Ekhaya"</string>
 </resources>
diff --git a/packages/PrintSpooler/res/values-ne-rNP/strings.xml b/packages/PrintSpooler/res/values-ne-rNP/strings.xml
index 34c1dd4f..45bcc95 100644
--- a/packages/PrintSpooler/res/values-ne-rNP/strings.xml
+++ b/packages/PrintSpooler/res/values-ne-rNP/strings.xml
@@ -27,8 +27,7 @@
     <string name="label_duplex" msgid="5370037254347072243">"दुई-पक्षीय"</string>
     <string name="label_orientation" msgid="2853142581990496477">"अभिमुखिकरण"</string>
     <string name="label_pages" msgid="7768589729282182230">"पृष्ठहरू"</string>
-    <!-- no translation found for destination_default_text (5422708056807065710) -->
-    <skip />
+    <string name="destination_default_text" msgid="5422708056807065710">"कुनै मुद्रक चयन गर्नुहोस्"</string>
     <string name="template_all_pages" msgid="3322235982020148762">"सबै <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
     <string name="template_page_range" msgid="428638530038286328">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g> को सीमा"</string>
     <string name="pages_range_example" msgid="8558694453556945172">"उदाहरण १-५,८,११-१३"</string>
diff --git a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml
index 9d615fb..59dcca9 100644
--- a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml
+++ b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml
@@ -27,7 +27,7 @@
     <string name="label_duplex" msgid="5370037254347072243">"Ikki tomonlama"</string>
     <string name="label_orientation" msgid="2853142581990496477">"Joylashuv"</string>
     <string name="label_pages" msgid="7768589729282182230">"Sahifalar"</string>
-    <string name="destination_default_text" msgid="5422708056807065710">"Printer tanlash"</string>
+    <string name="destination_default_text" msgid="5422708056807065710">"Printerni tanlang"</string>
     <string name="template_all_pages" msgid="3322235982020148762">"Barchasi (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
     <string name="template_page_range" msgid="428638530038286328">"O‘zgarish chegarasi (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
     <string name="pages_range_example" msgid="8558694453556945172">"masalan: 1—5,8,11—13"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
index f2b304a..a74e994 100644
--- a/packages/PrintSpooler/res/values-zh-rCN/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
@@ -27,8 +27,7 @@
     <string name="label_duplex" msgid="5370037254347072243">"双面"</string>
     <string name="label_orientation" msgid="2853142581990496477">"方向"</string>
     <string name="label_pages" msgid="7768589729282182230">"页数"</string>
-    <!-- no translation found for destination_default_text (5422708056807065710) -->
-    <skip />
+    <string name="destination_default_text" msgid="5422708056807065710">"选择打印机"</string>
     <string name="template_all_pages" msgid="3322235982020148762">"全部<xliff:g id="PAGE_COUNT">%1$s</xliff:g>页"</string>
     <string name="template_page_range" msgid="428638530038286328">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g>页"</string>
     <string name="pages_range_example" msgid="8558694453556945172">"例如:1-5、8、11-13"</string>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 8b1caf9..3971706 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -904,12 +904,12 @@
             }
         }
 
-        // Enforce what the calling package can mutate the system settings.
-        enforceRestrictedSystemSettingsMutationForCallingPackage(operation, name, runAsUserId);
-
         // Resolve the userId on whose behalf the call is made.
         final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(runAsUserId);
 
+        // Enforce what the calling package can mutate the system settings.
+        enforceRestrictedSystemSettingsMutationForCallingPackage(operation, name, callingUserId);
+
         // Determine the owning user as some profile settings are cloned from the parent.
         final int owningUserId = resolveOwningUserIdForSystemSettingLocked(callingUserId, name);
 
diff --git a/packages/Shell/res/values-af/strings.xml b/packages/Shell/res/values-af/strings.xml
index 43beb57..d1998bd 100644
--- a/packages/Shell/res/values-af/strings.xml
+++ b/packages/Shell/res/values-af/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Foutverslae bevat data van die stelsel se verskillende loglêers af, insluitend persoonlike en private inligting. Deel foutverslae net met programme en mense wat jy vertrou."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Wys hierdie boodskap volgende keer"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Foutverslae"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Foutverslaglêer kon nie gelees word nie"</string>
 </resources>
diff --git a/packages/Shell/res/values-am/strings.xml b/packages/Shell/res/values-am/strings.xml
index e86ecf8..6f905a9 100644
--- a/packages/Shell/res/values-am/strings.xml
+++ b/packages/Shell/res/values-am/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"የሳንካ ሪፖርቶች የግል መረጃን ጨምሮ ከበርካታ የስርዓቱ ምዝግብ ማስታወሻዎች የመጣ ውሂብን ይዟል። የሳንካ ሪፖርቶች ለሚያምኗቸው መተግበሪያዎችን እና ሰዎችን ብቻ ያጋሩ።"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ይህን መልዕክት በሚቀጥለው ጊዜ አሳይ"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"የሳንካ ሪፖርቶች"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"የሳንካ ሪፖርት ፋይል ሊነበብ አልተቻለም"</string>
 </resources>
diff --git a/packages/Shell/res/values-ar/strings.xml b/packages/Shell/res/values-ar/strings.xml
index 0fcf019..76100b5 100644
--- a/packages/Shell/res/values-ar/strings.xml
+++ b/packages/Shell/res/values-ar/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"تحتوي تقارير الأخطاء على بيانات من ملفات سجلات النظام المتنوعة، بما في ذلك معلومات شخصية وخاصة. لا تشارك تقارير الأخطاء إلا مع التطبيقات والأشخاص الموثوق بهم."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"إظهار هذه الرسالة في المرة القادمة"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"تقارير الأخطاء"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"تعذرت قراءة ملف تقرير الخطأ."</string>
 </resources>
diff --git a/packages/Shell/res/values-az-rAZ/strings.xml b/packages/Shell/res/values-az-rAZ/strings.xml
index e235eb8..d8176f5 100644
--- a/packages/Shell/res/values-az-rAZ/strings.xml
+++ b/packages/Shell/res/values-az-rAZ/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Baq raportları sistemin müxtəlif jurnal fayllarından data içərir ki, buna şəxsi və konfidensial məlumatlar da aiddir. Yalnız inandığınız adamlarla baq raportlarını paylaşın."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Bu mesajı növbəti dəfə göstər"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Baq hesabatları"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Baq hesabat faylı oxunmur"</string>
 </resources>
diff --git a/packages/Shell/res/values-bg/strings.xml b/packages/Shell/res/values-bg/strings.xml
index 381d5d8..fc2dad0 100644
--- a/packages/Shell/res/values-bg/strings.xml
+++ b/packages/Shell/res/values-bg/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Отчетите за програмни грешки съдържат данни от различни регистрационни файлове на системата, включително лична и поверителна информация. Споделяйте ги само с приложения и хора, на които имате доверие."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Това съобщение да се показва следващия път"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Отчети за прогр. грешки"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Файлът със сигнал за програмна грешка не можа да бъде прочетен"</string>
 </resources>
diff --git a/packages/Shell/res/values-bn-rBD/strings.xml b/packages/Shell/res/values-bn-rBD/strings.xml
index 76da84b..5aa3e9d 100644
--- a/packages/Shell/res/values-bn-rBD/strings.xml
+++ b/packages/Shell/res/values-bn-rBD/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"ত্রুটির প্রতিবেদনগুলিতে থাকা ডেটা, সিস্টেমের বিভিন্ন লগ ফাইলগুলি থেকে আসে, যাতে ব্যক্তিগত এবং গোপনীয় তথ্য অন্তর্ভুক্ত থাকে৷ আপনি বিশ্বাস করেন শুধুমাত্র এমন অ্যাপ্লিকেশান এবং ব্যক্তিদের সাথে ত্রুটির প্রতিবেদনগুলি ভাগ করুন৷"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"এই বার্তাটি পরের বার দেখান"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"ত্রুটির প্রতিবেদনগুলি"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"ত্রুটির প্রতিবেদনের ফাইলটি পড়া যায়নি"</string>
 </resources>
diff --git a/packages/Shell/res/values-ca/strings.xml b/packages/Shell/res/values-ca/strings.xml
index b07bafd..bef1a67 100644
--- a/packages/Shell/res/values-ca/strings.xml
+++ b/packages/Shell/res/values-ca/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Els informes d\'error contenen dades dels diferents fitxers de registre del sistema, inclosa informació privada i personal. Comparteix els informes d\'error només amb les aplicacions i amb les persones en qui confies."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostra aquest missatge la propera vegada"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Informes d\'error"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"No s\'ha pogut llegir el fitxer de l\'informe d\'errors"</string>
 </resources>
diff --git a/packages/Shell/res/values-cs/strings.xml b/packages/Shell/res/values-cs/strings.xml
index 3e36c6f..46c8f4e 100644
--- a/packages/Shell/res/values-cs/strings.xml
+++ b/packages/Shell/res/values-cs/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Chybová hlášení obsahují data z různých souborů protokolů systému včetně osobních a soukromých informací. Chybová hlášení sdílejte pouze s aplikacemi a uživateli, kterým důvěřujete."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Zobrazit tuto zprávu příště"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Zprávy o chybách"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Soubor chybové zprávy nelze načíst"</string>
 </resources>
diff --git a/packages/Shell/res/values-da/strings.xml b/packages/Shell/res/values-da/strings.xml
index 8925b85..7a87b9b 100644
--- a/packages/Shell/res/values-da/strings.xml
+++ b/packages/Shell/res/values-da/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Fejlrapporter indeholder data fra systemets forskellige logfiler, f.eks. personlige og private oplysninger. Del kun fejlrapporter med apps og personer, du har tillid til."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Vis denne underretning næste gang"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Fejlrapporter"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Fejlrapportfilen kunne ikke læses"</string>
 </resources>
diff --git a/packages/Shell/res/values-de/strings.xml b/packages/Shell/res/values-de/strings.xml
index 19d58fe..7a25c4d 100644
--- a/packages/Shell/res/values-de/strings.xml
+++ b/packages/Shell/res/values-de/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Fehlerberichte enthalten Daten aus verschiedenen Protokolldateien des Systems, darunter auch personenbezogene und private Daten. Teilen Sie Fehlerberichte nur mit Apps und Personen, denen Sie vertrauen."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Diese Nachricht nächstes Mal zeigen"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Fehlerberichte"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Fehlerberichtdatei konnte nicht gelesen werden."</string>
 </resources>
diff --git a/packages/Shell/res/values-el/strings.xml b/packages/Shell/res/values-el/strings.xml
index 5fadaa4..02e37f7 100644
--- a/packages/Shell/res/values-el/strings.xml
+++ b/packages/Shell/res/values-el/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Οι αναφορές σφαλμάτων περιέχουν δεδομένα από τα διάφορα αρχεία καταγραφής του συστήματος, συμπεριλαμβανομένων προσωπικών και ιδιωτικών πληροφοριών. Να μοιράζεστε αναφορές σφαλμάτων μόνο με εφαρμογές και άτομα που εμπιστεύεστε."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Εμφάνιση αυτού του μηνύματος την επόμενη φορά"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Αναφορές σφαλμάτων"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Δεν ήταν δυνατή η ανάγνωση του αρχείου της αναφοράς σφαλμάτων"</string>
 </resources>
diff --git a/packages/Shell/res/values-en-rAU/strings.xml b/packages/Shell/res/values-en-rAU/strings.xml
index b50fc2a..1b55115 100644
--- a/packages/Shell/res/values-en-rAU/strings.xml
+++ b/packages/Shell/res/values-en-rAU/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people that you trust."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Show this message next time"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Bug reports"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
 </resources>
diff --git a/packages/Shell/res/values-en-rGB/strings.xml b/packages/Shell/res/values-en-rGB/strings.xml
index b50fc2a..1b55115 100644
--- a/packages/Shell/res/values-en-rGB/strings.xml
+++ b/packages/Shell/res/values-en-rGB/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people that you trust."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Show this message next time"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Bug reports"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
 </resources>
diff --git a/packages/Shell/res/values-en-rIN/strings.xml b/packages/Shell/res/values-en-rIN/strings.xml
index b50fc2a..1b55115 100644
--- a/packages/Shell/res/values-en-rIN/strings.xml
+++ b/packages/Shell/res/values-en-rIN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people that you trust."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Show this message next time"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Bug reports"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
 </resources>
diff --git a/packages/Shell/res/values-es-rUS/strings.xml b/packages/Shell/res/values-es-rUS/strings.xml
index 06edfdc..1937349 100644
--- a/packages/Shell/res/values-es-rUS/strings.xml
+++ b/packages/Shell/res/values-es-rUS/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Los informes de errores contienen datos de los distintos archivos de registro del sistema, incluida la información personal y privada. Comparte los informes de errores únicamente con aplicaciones y personas en las que confíes."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar este mensaje la próxima vez"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Informes de errores"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"No se pudo leer el archivo de informe de errores"</string>
 </resources>
diff --git a/packages/Shell/res/values-es/strings.xml b/packages/Shell/res/values-es/strings.xml
index 3398ca3..002bea9 100644
--- a/packages/Shell/res/values-es/strings.xml
+++ b/packages/Shell/res/values-es/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Los informes de errores contienen datos de los distintos archivos de registro del sistema, incluida información personal y privada. Comparte los informes de errores únicamente con aplicaciones y usuarios en los que confíes."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar este mensaje la próxima vez"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Informes de error"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"No se ha podido leer el archivo del informe de errores"</string>
 </resources>
diff --git a/packages/Shell/res/values-et-rEE/strings.xml b/packages/Shell/res/values-et-rEE/strings.xml
index 549ee26..a16875c 100644
--- a/packages/Shell/res/values-et-rEE/strings.xml
+++ b/packages/Shell/res/values-et-rEE/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Veaaruanded sisaldavad andmeid erinevatest süsteemi logifailidest, sh isiklikku ja privaatset teavet. Jagage veaaruandeid ainult usaldusväärsete rakenduste ja inimestega."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Kuva see sõnum järgmisel korral"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Veaaruanded"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Veaaruande faili ei õnnestunud lugeda"</string>
 </resources>
diff --git a/packages/Shell/res/values-eu-rES/strings.xml b/packages/Shell/res/values-eu-rES/strings.xml
index 048ab8e..e7f1766 100644
--- a/packages/Shell/res/values-eu-rES/strings.xml
+++ b/packages/Shell/res/values-eu-rES/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Akatsen txostenek sistemaren erregistro-fitxategietako datuak dauzkate, informazio pertsonala eta pribatua barne. Akatsen txostenak partekatzen badituzu, partekatu soilik aplikazio eta pertsona fidagarriekin."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Erakutsi mezu hau hurrengoan"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Akatsen txostenak"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Ezin izan da irakurri akatsen txostena"</string>
 </resources>
diff --git a/packages/Shell/res/values-fa/strings.xml b/packages/Shell/res/values-fa/strings.xml
index f42ba81..9138b28 100644
--- a/packages/Shell/res/values-fa/strings.xml
+++ b/packages/Shell/res/values-fa/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"گزارش‌های اشکال حاوی داده‌هایی از فایل‌های گزارش مختلف در سیستم هستند، شامل اطلاعات شخصی و خصوصی. گزارش‌های اشکال را فقط با افراد و برنامه‌های مورد اعتماد خود به اشتراک بگذارید."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"دفعه بعد این پیام نشان داده شود"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"گزارش اشکال"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"فایل گزارش اشکال خوانده نشد"</string>
 </resources>
diff --git a/packages/Shell/res/values-fi/strings.xml b/packages/Shell/res/values-fi/strings.xml
index 26003b3..079433d 100644
--- a/packages/Shell/res/values-fi/strings.xml
+++ b/packages/Shell/res/values-fi/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Virheraportit sisältävät järjestelmän lokitietoja, ja niihin voi sisältyä henkilökohtaisia ja yksityisiä tietoja. Jaa virheraportteja vain luotettaville sovelluksille ja käyttäjille."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Näytä tämä viesti seuraavalla kerralla"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Virheraportit"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Virheraporttitiedostoa ei voi lukea."</string>
 </resources>
diff --git a/packages/Shell/res/values-fr-rCA/strings.xml b/packages/Shell/res/values-fr-rCA/strings.xml
index b4b81ec..4ead085 100644
--- a/packages/Shell/res/values-fr-rCA/strings.xml
+++ b/packages/Shell/res/values-fr-rCA/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Les rapports de bogue contiennent des données des fichiers journaux du système, y compris des informations personnelles et privées. Ne partagez les rapports de bogue qu\'avec les applications et les personnes que vous estimez fiables."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Afficher ce message la prochaine fois"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Rapports de bogues"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Impossible de lire le fichier du rapport de bogue"</string>
 </resources>
diff --git a/packages/Shell/res/values-fr/strings.xml b/packages/Shell/res/values-fr/strings.xml
index e801054..14c1d3b 100644
--- a/packages/Shell/res/values-fr/strings.xml
+++ b/packages/Shell/res/values-fr/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Les rapports de bug contiennent des données des fichiers journaux du système, y compris des informations personnelles et privées. Ne partagez les rapports de bug qu\'avec les applications et les personnes que vous estimez fiables."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Afficher ce message la prochaine fois"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Rapports d\'erreur"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Impossible de lire le fichier de rapport de bug."</string>
 </resources>
diff --git a/packages/Shell/res/values-gl-rES/strings.xml b/packages/Shell/res/values-gl-rES/strings.xml
index 5690c9e..61b0335 100644
--- a/packages/Shell/res/values-gl-rES/strings.xml
+++ b/packages/Shell/res/values-gl-rES/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Os informes de erros conteñen datos dos distintos ficheiros de rexistro do sistema, incluída información persoal e privada. Comparte os informes de erros unicamente con aplicacións e persoas de confianza."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar esta mensaxe a próxima vez"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Informes de erros"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Non se puido ler o ficheiro de informe de erros"</string>
 </resources>
diff --git a/packages/Shell/res/values-gu-rIN/strings.xml b/packages/Shell/res/values-gu-rIN/strings.xml
index e9fdfdb..746ac45 100644
--- a/packages/Shell/res/values-gu-rIN/strings.xml
+++ b/packages/Shell/res/values-gu-rIN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"બગ રિપોર્ટ્સ વ્યક્તિગત અને ખાનગી માહિતી સહિત, સિસ્ટમની વિભિન્ન લૉગ ફાઇલોનો ડેટા ધરાવે છે. બગ રિપોર્ટ્સ ફક્ત તમે વિશ્વાસ કરતા હો તે એપ્લિકેશનો અને લોકો સાથે જ શેર કરો."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"આગલી વખતે આ સંદેશ બતાવો"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"બગ રિપોર્ટ્સ"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"બગ રીપોર્ટ ફાઇલ વાંચી શકાઇ નથી"</string>
 </resources>
diff --git a/packages/Shell/res/values-hi/strings.xml b/packages/Shell/res/values-hi/strings.xml
index aee1121..97db607 100644
--- a/packages/Shell/res/values-hi/strings.xml
+++ b/packages/Shell/res/values-hi/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"बग रिपोर्ट में व्यक्तिगत और निजी जानकारी सहित, सिस्टम की विभिन्न लॉग फ़ाइलों का डेटा होता है. बग रिपोर्ट केवल विश्वसनीय ऐप्स  और व्यक्तियों से ही साझा करें."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"यह संदेश अगली बार दिखाएं"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"बग रिपोर्ट"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"बग रिपोर्ट फ़ाइल नहीं पढ़ी जा सकी"</string>
 </resources>
diff --git a/packages/Shell/res/values-hr/strings.xml b/packages/Shell/res/values-hr/strings.xml
index a2cb3b0..b1fad84 100644
--- a/packages/Shell/res/values-hr/strings.xml
+++ b/packages/Shell/res/values-hr/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Prijave programskih pogrešaka sadržavaju podatke iz različitih datoteka zapisnika sustava, uključujući osobne i privatne informacije. Prijave programskih pogrešaka dijelite samo s aplikacijama i osobama koje smatrate pouzdanima."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Prikaži tu poruku sljedeći put"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Izvj. o prog. pogreš."</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Izvješće o programskoj pogrešci nije pročitano"</string>
 </resources>
diff --git a/packages/Shell/res/values-hu/strings.xml b/packages/Shell/res/values-hu/strings.xml
index f0bc227..7dae6c1 100644
--- a/packages/Shell/res/values-hu/strings.xml
+++ b/packages/Shell/res/values-hu/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"A programhiba-jelentések a rendszer különféle naplófájljaiból származó adatokat tartalmaznak, köztük személyes és magánjellegű információkat is. Csak olyan alkalmazásokkal és személyekkel osszon meg programhiba-jelentéseket, amelyekben vagy akikben megbízik."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Üzenet mutatása legközelebb"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Hibajelentések"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"A hibajelentési fájlt nem sikerült beolvasni"</string>
 </resources>
diff --git a/packages/Shell/res/values-hy-rAM/strings.xml b/packages/Shell/res/values-hy-rAM/strings.xml
index 6a5358b..149b677 100644
--- a/packages/Shell/res/values-hy-rAM/strings.xml
+++ b/packages/Shell/res/values-hy-rAM/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Վրիպակի զեկույցները պարունակում են տվյալներ համակարգի տարբեր մուտքի ֆայլերից, այդ թվում նաև անհատական ​​և գաղտնի տեղեկություններ: Վրիպակի զեկույցները կիսեք միայն այն հավելվածների և մարդկանց հետ, որոնց վստահում եք:"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Այս հաղորդագրությունը ցույց տալ հաջորդ անգամ"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Վրիպակների հաշվետվություններ"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Հնարավոր չէ կարդալ վրիպակների զեկույցի ֆայլը"</string>
 </resources>
diff --git a/packages/Shell/res/values-in/strings.xml b/packages/Shell/res/values-in/strings.xml
index 627fc5e..534badc 100644
--- a/packages/Shell/res/values-in/strings.xml
+++ b/packages/Shell/res/values-in/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Laporan bug berisi data dari berbagai file log sistem, termasuk informasi pribadi dan rahasia. Hanya bagikan laporan bug dengan aplikasi dan orang yang Anda percaya."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Tampilkan pesan ini lain kali"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Laporan bug"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"File laporan bug tidak dapat dibaca"</string>
 </resources>
diff --git a/packages/Shell/res/values-is-rIS/strings.xml b/packages/Shell/res/values-is-rIS/strings.xml
index dbd39c4..ce742f6 100644
--- a/packages/Shell/res/values-is-rIS/strings.xml
+++ b/packages/Shell/res/values-is-rIS/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Villutilkynningar innihalda gögn úr hinum ýmsu annálsskrám kerfisins, þ. á m. persónuleg gögn og trúnaðarupplýsingar. Deildu villutilkynningum eingöngu með forritum og fólki sem þú treystir."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Sýna þessi skilaboð næst"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Villutilkynningar"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Ekki var hægt að lesa úr villuskýrslunni"</string>
 </resources>
diff --git a/packages/Shell/res/values-it/strings.xml b/packages/Shell/res/values-it/strings.xml
index cd63891..38e360f 100644
--- a/packages/Shell/res/values-it/strings.xml
+++ b/packages/Shell/res/values-it/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Le segnalazioni di bug contengono dati da vari file di log del sistema, incluse informazioni personali e private. Condividi le segnalazioni di bug solo con app e persone attendibili."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostra questo messaggio la prossima volta"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Rapporti sui bug"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Impossibile leggere il file relativo alla segnalazione di bug"</string>
 </resources>
diff --git a/packages/Shell/res/values-iw/strings.xml b/packages/Shell/res/values-iw/strings.xml
index 39c784f..ab9aecf 100644
--- a/packages/Shell/res/values-iw/strings.xml
+++ b/packages/Shell/res/values-iw/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"דוחות על באגים כוללים נתונים מקובצי היומן השונים במערכת, כולל מידע אישי ופרטי. שתף דוחות באגים רק עם אפליקציות ואנשים שאתה סומך עליהם."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"הצג את ההודעה הזו בפעם הבאה"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"דוחות באגים"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"לא ניתן היה לקרוא את קובץ הדוח על הבאג"</string>
 </resources>
diff --git a/packages/Shell/res/values-ja/strings.xml b/packages/Shell/res/values-ja/strings.xml
index 48be802..619ee4f 100644
--- a/packages/Shell/res/values-ja/strings.xml
+++ b/packages/Shell/res/values-ja/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"バグレポートには、個人の非公開情報など、システムのさまざまなログファイルのデータが含まれます。共有する場合は信頼するアプリとユーザーのみを選択してください。"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"このメッセージを次回も表示する"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"バグレポート"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"バグレポート ファイルを読み取ることができませんでした"</string>
 </resources>
diff --git a/packages/Shell/res/values-ka-rGE/strings.xml b/packages/Shell/res/values-ka-rGE/strings.xml
index bb539d0..f98045f 100644
--- a/packages/Shell/res/values-ka-rGE/strings.xml
+++ b/packages/Shell/res/values-ka-rGE/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"ხარვეზის ანგარიშები მოიცავს მონაცემებს სხვადასხვა სისტემური ჟურნალის ფაილებიდან, მათ შორის პირად და კონფიდენციალურ ინფორმაციას."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"შემდგომში აჩვენე ეს შეტყობინება"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"შეცდომების ანგარიშები"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"ხარვეზების შესახებ ანგარიშის წაკითხვა ვერ მოხერხდა"</string>
 </resources>
diff --git a/packages/Shell/res/values-kk-rKZ/strings.xml b/packages/Shell/res/values-kk-rKZ/strings.xml
index b22ca45..a24f2cc 100644
--- a/packages/Shell/res/values-kk-rKZ/strings.xml
+++ b/packages/Shell/res/values-kk-rKZ/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Вирус туралы баянатта жүйеде тіркелген әртүрлі файлдар туралы деректер болады, оған жеке және құпия ақпарат та кіреді. Вирус баянаттарын сенімді қолданбалар және сенімді адамдармен ғана бөлісіңіз."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Бұл хабарды келесі жолы көрсетіңіз"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Қате туралы баяндамалар"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Қате туралы есеп файлын оқу мүмкін болмады"</string>
 </resources>
diff --git a/packages/Shell/res/values-km-rKH/strings.xml b/packages/Shell/res/values-km-rKH/strings.xml
index 50c893b..2439248 100644
--- a/packages/Shell/res/values-km-rKH/strings.xml
+++ b/packages/Shell/res/values-km-rKH/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"របាយការណ៍​កំហុស​រួមមាន​ឯកសារ​កំណត់​ហេតុ​ផ្សេងៗ​របស់​ប្រព័ន្ធ រួមមាន​ព័ត៌មាន​ផ្ទាល់ខ្លួន និង​ឯកជន។ ចែករំលែក​របាយការណ៍​កំហុស​ជា​មួយ​កម្មវិធី និង​មនុស្ស​ដែល​អ្នក​ទុក​ចិត្ត។"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"បង្ហាញ​សារ​នេះ​ពេល​ក្រោយ"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"រាយការណ៍ពីកំហុស"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"មិនអាចអានឯកសាររបាយកាណ៍កំហុសបានទេ"</string>
 </resources>
diff --git a/packages/Shell/res/values-kn-rIN/strings.xml b/packages/Shell/res/values-kn-rIN/strings.xml
index 7ab6abf..bca9c45 100644
--- a/packages/Shell/res/values-kn-rIN/strings.xml
+++ b/packages/Shell/res/values-kn-rIN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"ವೈಯಕ್ತಿಕ ಮತ್ತು ಖಾಸಗಿ ಮಾಹಿತಿಯು ಸೇರಿದಂತೆ, ಸಿಸ್ಟಂನ ಹಲವಾರು ಲಾಗ್ ಫೈಲ್‌ಗಳಿಂದ ಡೇಟಾವನ್ನು ದೋಷದ ವರದಿಗಳು ಒಳಗೊಂಡಿವೆ. ನೀವು ನಂಬುವಂತಹ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಜನರೊಂದಿಗೆ ಮಾತ್ರ ದೋಷದ ವರದಿಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ಈ ಸಂದೇಶವನ್ನು ಮುಂದಿನ ಬಾರಿ ತೋರಿಸಿ"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"ದೋಷ ವರದಿಗಳು"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"ಬಗ್‌ ವರದಿ ಫೈಲ್‌‌ ಅನ್ನು ಓದಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
 </resources>
diff --git a/packages/Shell/res/values-ko/strings.xml b/packages/Shell/res/values-ko/strings.xml
index da0b31f..a3a0bf3 100644
--- a/packages/Shell/res/values-ko/strings.xml
+++ b/packages/Shell/res/values-ko/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"버그 신고서는 시스템의 다양한 로그 파일 데이터(예: 개인 및 비공개 정보)를 포함합니다. 신뢰할 수 있는 앱과 사용자에게만 버그 신고서를 공유하세요."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"다음에 이 메시지 표시"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"버그 신고"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"버그 신고 파일을 읽을 수 없습니다."</string>
 </resources>
diff --git a/packages/Shell/res/values-ky-rKG/strings.xml b/packages/Shell/res/values-ky-rKG/strings.xml
index 7183f77..3fba743 100644
--- a/packages/Shell/res/values-ky-rKG/strings.xml
+++ b/packages/Shell/res/values-ky-rKG/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Ката тууралуу билдирүүлөр системанын ар кандай лог файлдарынын берилиштерин камтыйт, аларга өздүк жана купуя маалыматтар дагы кирет. Ката тууралуу билдирүүлөрдү сиз ишенген колдонмолор жана адамдар менен гана бөлүшүңүз."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Бул билдирүү кийин көрсөтүлсүн"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Мүчүлүштүктөрдү кабарлоолор"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Мүчүлүштүк тууралуу кабар берүү файлы окулбай койду"</string>
 </resources>
diff --git a/packages/Shell/res/values-lo-rLA/strings.xml b/packages/Shell/res/values-lo-rLA/strings.xml
index fcc58e9..537f197 100644
--- a/packages/Shell/res/values-lo-rLA/strings.xml
+++ b/packages/Shell/res/values-lo-rLA/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"ການລາຍງານຂໍ້ຜິດພາດປະກອບມີ ຂໍ້ມູນຈາກໄຟລ໌ບັນທຶກຂອງລະບົບຫຼາຍໄຟລ໌, ຮວມທັງຂໍ້ມູນສ່ວນໂຕນຳ. ທ່ານຕ້ອງແບ່ງປັນລາຍງານຂໍ້ຜິດພາດໃຫ້ແອັບຯ ແລະຄົນທີ່ທ່ານເຊື່ອຖືໄດ້ເທົ່ານັ້ນ."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ສະແດງຂໍ້ຄວາມນີ້ອີກໃນເທື່ອຕໍ່ໄປ"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"ລາຍ​ງານ​ບັນ​ຫາ"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"ບໍ່ສາມາດອ່ານໄຟລ໌ລາຍງານຂໍ້ຜິດພາດໄດ້"</string>
 </resources>
diff --git a/packages/Shell/res/values-lt/strings.xml b/packages/Shell/res/values-lt/strings.xml
index 51655a4..6965e4c 100644
--- a/packages/Shell/res/values-lt/strings.xml
+++ b/packages/Shell/res/values-lt/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Riktų ataskaitose pateikiami duomenys iš įvairių sistemos žurnalo failų, įskaitant asmeninę ir privačią informaciją. Riktų ataskaitas bendrinkite tik su patikimomis programomis ir žmonėmis."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Rodyti šį pranešimą kitą kartą"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Riktų ataskaitos"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Nepavyko sukurti pranešimo apie riktą failo"</string>
 </resources>
diff --git a/packages/Shell/res/values-lv/strings.xml b/packages/Shell/res/values-lv/strings.xml
index cf1a75a..efc40f3 100644
--- a/packages/Shell/res/values-lv/strings.xml
+++ b/packages/Shell/res/values-lv/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Kļūdu pārskatā ir iekļauti dati no dažādiem sistēmas žurnālfailiem, tostarp personas dati un privāta informācija. Kļūdu pārskatus ieteicams kopīgot tikai ar uzticamām lietotnēm un lietotājiem."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Rādīt šo ziņojumu nākamajā reizē"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Kļūdu ziņojumi"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Nevarēja nolasīt kļūdas pārskata failu."</string>
 </resources>
diff --git a/packages/Shell/res/values-mk-rMK/strings.xml b/packages/Shell/res/values-mk-rMK/strings.xml
index 785a841..7571c2c 100644
--- a/packages/Shell/res/values-mk-rMK/strings.xml
+++ b/packages/Shell/res/values-mk-rMK/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Извештаите за грешка содржат податоци од разни датотеки за евиденција на системот, вклучувајќи лични и приватни информации. Извештаите за грешка споделувајте ги само со апликации и луѓе на коишто им верувате."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Прикажи ја поракава следниот пат"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Извештаи за грешки"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Датотеката со извештај за грешка не можеше да се прочита"</string>
 </resources>
diff --git a/packages/Shell/res/values-ml-rIN/strings.xml b/packages/Shell/res/values-ml-rIN/strings.xml
index 8fa6d67c..4779e4d 100644
--- a/packages/Shell/res/values-ml-rIN/strings.xml
+++ b/packages/Shell/res/values-ml-rIN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"വ്യക്തിഗതവും സ്വകാര്യവുമായ വിവരങ്ങൾ ഉൾപ്പെടെ, സിസ്റ്റത്തിന്റെ നിരവധി ലോഗ് ഫയലുകളിൽ നിന്നുള്ള ഡാറ്റ, ബഗ് റിപ്പോർട്ടുകളിൽ അടങ്ങിയിരിക്കുന്നു. നിങ്ങൾ വിശ്വസിക്കുന്ന അപ്ലിക്കേഷനുകൾക്കും ആളുകൾക്കും മാത്രം ബഗ് റിപ്പോർട്ടുകൾ പങ്കിടുക."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ഈ സന്ദേശം അടുത്ത തവണ ദൃശ്യമാക്കുക"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"ബഗ് റിപ്പോർട്ടുകൾ"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"ബഗ് റിപ്പോർട്ട് ഫയൽ വായിക്കാനായില്ല"</string>
 </resources>
diff --git a/packages/Shell/res/values-mn-rMN/strings.xml b/packages/Shell/res/values-mn-rMN/strings.xml
index 4010072..71ad7f6 100644
--- a/packages/Shell/res/values-mn-rMN/strings.xml
+++ b/packages/Shell/res/values-mn-rMN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Алдааны репорт нь хувийн болон нууц мэдээлэл зэргийг агуулсан системийн төрөл бүрийн лог файлын датаг агуулна. Алдааны репортыг зөвхөн итгэлтэй апп болон хүмүүст хуваалцана уу."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Энэ мессежийг дараагийн удаа харуулах"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Гэмтлийн тухай тайлан"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Алдааны тайлангийн файлыг уншиж чадахгүй байна"</string>
 </resources>
diff --git a/packages/Shell/res/values-mr-rIN/strings.xml b/packages/Shell/res/values-mr-rIN/strings.xml
index c4993fc..c32bb5b 100644
--- a/packages/Shell/res/values-mr-rIN/strings.xml
+++ b/packages/Shell/res/values-mr-rIN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"दोष अहवालांमध्‍ये वैयक्तिक आणि खाजगी माहितीसह, सिस्‍टमच्‍या अनेक लॉग फायलींमधील डेटा असतो. केवळ आपला विश्वास असलेल्‍या अ‍ॅप्‍स आणि लोकांसह दोष अहवाल सामायिक करा."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"पुढील वेळी हा संदेश दर्शवा"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"दोष अहवाल"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"दोष अहवाल फाईल वाचणे शक्य झाले नाही"</string>
 </resources>
diff --git a/packages/Shell/res/values-ms-rMY/strings.xml b/packages/Shell/res/values-ms-rMY/strings.xml
index f3e4f7e..61acca3 100644
--- a/packages/Shell/res/values-ms-rMY/strings.xml
+++ b/packages/Shell/res/values-ms-rMY/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Laporan pepijat mengandungi data dari pelbagai fail log sistem, termasuk maklumat peribadi dan sulit. Kongsikan laporan pepijat hanya dengan apl dan orang yang anda percayai."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Tunjukkan mesej ini pada masa akan datang"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Laporan pepijat"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Fail laporan pepijat tidak boleh dibaca"</string>
 </resources>
diff --git a/packages/Shell/res/values-my-rMM/strings.xml b/packages/Shell/res/values-my-rMM/strings.xml
index d223bd9..4ba9037 100644
--- a/packages/Shell/res/values-my-rMM/strings.xml
+++ b/packages/Shell/res/values-my-rMM/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"အမှားအယွင်း မှတ်တမ်းမှာ ပါရှိသော အချက်အလက်များမှာ ကိုယ်ရေးကိုယ်တာ နဲ့ လုံခြုံရေး အချက်အလက်များပါဝင်သော စနစ်မှ ပြုလုပ်မှု မှတ်တမ်းများ ဖြစ်ပါသည်၊ အမှားအယွင်း မှတ်တမ်းများကို ယုံကြည်ရသော အပလီကေးရှင်းများနဲ့ လူများကိုသာ ပေးဝေပြသမှု လုပ်ပါရန်။"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ဤစာတန်းကို နောက်တစ်ခါတွင် ပြရန်"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"ချို့ယွင်းမှု အစီရင်ခံစာများ"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"ချွတ်ယွင်းချက် အစီရင်ခံစာကို ဖတ်၍မရပါ"</string>
 </resources>
diff --git a/packages/Shell/res/values-nb/strings.xml b/packages/Shell/res/values-nb/strings.xml
index c00e2d0..c543e49 100644
--- a/packages/Shell/res/values-nb/strings.xml
+++ b/packages/Shell/res/values-nb/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Feilrapporter inkluderer data fra systemets forskjellige loggfiler. Dette omfatter personlig og privat informasjon. Du bør bare dele feilrapporter med apper og folk du stoler på."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Vis denne meldingen neste gang"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Feilrapporter"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Feilrapportfilen kunne ikke leses"</string>
 </resources>
diff --git a/packages/Shell/res/values-ne-rNP/strings.xml b/packages/Shell/res/values-ne-rNP/strings.xml
index 7344889..f57112a 100644
--- a/packages/Shell/res/values-ne-rNP/strings.xml
+++ b/packages/Shell/res/values-ne-rNP/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"बग रिपोर्टहरूमा प्रणालीका विभिन्न लग फाइलहरूबाट व्यक्तिगत तथा नीजि सूचनासहितको डेटा रहन्छ।  बग रिपोर्टहरू अनुप्रयोगहरू र तपाईँले विश्वास गरेका व्यक्तिहरूसँग मात्र साझेदारी गर्नुहोस्।"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"यो सन्देश अर्को पटक देखाउनुहोस्"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"बग रिपोर्टहरू"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"बग रिपोर्ट फाइल पढ्न सकिएन"</string>
 </resources>
diff --git a/packages/Shell/res/values-nl/strings.xml b/packages/Shell/res/values-nl/strings.xml
index b0dba4d..1519454 100644
--- a/packages/Shell/res/values-nl/strings.xml
+++ b/packages/Shell/res/values-nl/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Foutenrapporten bevatten gegevens uit de verschillende logbestanden van het systeem, waaronder persoonlijke en privégegevens. Deel foutenrapporten alleen met apps en mensen die u vertrouwt."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Dit bericht de volgende keer weergeven"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Foutenrapporten"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Bestand met bugrapport kan niet worden gelezen"</string>
 </resources>
diff --git a/packages/Shell/res/values-pa-rIN/strings.xml b/packages/Shell/res/values-pa-rIN/strings.xml
index a0c4cda..3f59bb9 100644
--- a/packages/Shell/res/values-pa-rIN/strings.xml
+++ b/packages/Shell/res/values-pa-rIN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"ਬਗ ਰਿਪੋਰਟਾਂ ਵਿੱਚ ਸਿਸਟਮ ਦੀਆਂ ਭਿੰਨ ਲੌਗ ਫਾਈਲਾਂ ਦਾ ਡਾਟਾ ਹੁੰਦਾ ਹੈ, ਨਿੱਜੀ ਅਤੇ ਪ੍ਰਾਈਵੇਟ ਜਾਣਕਾਰੀ ਸਮੇਤ। ਕੇਵਲ ਉਹਨਾਂ ਐਪਸ ਅਤੇ ਲੋਕਾਂ ਨਾਲ ਬਗ ਰਿਪੋਰਟਾਂ ਸ਼ੇਅਰ ਕਰੋ, ਜਿਹਨਾਂ ਤੇ ਤੁਸੀਂ ਭਰੋਸਾ ਕਰਦੇ ਹੋ।"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ਅਗਲੀ ਵਾਰ ਇਹ ਸੁਨੇਹਾ ਦਿਖਾਓ"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"ਬਗ ਰਿਪੋਰਟਾਂ"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"ਬਗ ਰਿਪੋਰਟ ਫ਼ਾਈਲ ਪੜ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ"</string>
 </resources>
diff --git a/packages/Shell/res/values-pl/strings.xml b/packages/Shell/res/values-pl/strings.xml
index 96b8f2a..accc92e8 100644
--- a/packages/Shell/res/values-pl/strings.xml
+++ b/packages/Shell/res/values-pl/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Raporty o błędach zawierają dane z różnych plików dzienników systemu, w tym dane osobowe i prywatne. Udostępniaj je tylko aplikacjom i osobom, którym ufasz."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Pokaż ten komunikat następnym razem"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Raporty o błędach"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Nie można odczytać raportu o błędzie"</string>
 </resources>
diff --git a/packages/Shell/res/values-pt-rBR/strings.xml b/packages/Shell/res/values-pt-rBR/strings.xml
index e04d600..7d4b0d3 100644
--- a/packages/Shell/res/values-pt-rBR/strings.xml
+++ b/packages/Shell/res/values-pt-rBR/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Os relatórios de bugs contêm dados de diversos arquivos de registro do sistema, inclusive informações pessoais e particulares. Compartilhe relatórios de bugs somente com apps e pessoas nos quais você confia."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar esta mensagem da próxima vez"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Relatórios de bugs"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Não foi possível ler o arquivo de relatório de bug"</string>
 </resources>
diff --git a/packages/Shell/res/values-pt-rPT/strings.xml b/packages/Shell/res/values-pt-rPT/strings.xml
index 648ef94..007d683 100644
--- a/packages/Shell/res/values-pt-rPT/strings.xml
+++ b/packages/Shell/res/values-pt-rPT/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Os relatórios de erros incluem dados de vários ficheiros de registo do sistema, nomeadamente informações pessoais e privadas. Partilhe relatórios de erros apenas com aplicações e pessoas fidedignas."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar esta mensagem da próxima vez"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Relatórios de erros"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Não foi possível ler o ficheiro de relatório de erro"</string>
 </resources>
diff --git a/packages/Shell/res/values-pt/strings.xml b/packages/Shell/res/values-pt/strings.xml
index e04d600..7d4b0d3 100644
--- a/packages/Shell/res/values-pt/strings.xml
+++ b/packages/Shell/res/values-pt/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Os relatórios de bugs contêm dados de diversos arquivos de registro do sistema, inclusive informações pessoais e particulares. Compartilhe relatórios de bugs somente com apps e pessoas nos quais você confia."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar esta mensagem da próxima vez"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Relatórios de bugs"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Não foi possível ler o arquivo de relatório de bug"</string>
 </resources>
diff --git a/packages/Shell/res/values-ro/strings.xml b/packages/Shell/res/values-ro/strings.xml
index aab29b7..e7395e1 100644
--- a/packages/Shell/res/values-ro/strings.xml
+++ b/packages/Shell/res/values-ro/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Rapoartele despre erori conțin date din diferite fișiere de jurnal ale sistemului, inclusiv informații private și personale. Permiteți accesul la rapoartele despre erori numai aplicațiilor și persoanelor în care aveți încredere."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Afișați acest mesaj data viitoare"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Rapoarte de erori"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Fișierul cu raportul de eroare nu a putut fi citit"</string>
 </resources>
diff --git a/packages/Shell/res/values-ru/strings.xml b/packages/Shell/res/values-ru/strings.xml
index 1f1444d..c9276cf 100644
--- a/packages/Shell/res/values-ru/strings.xml
+++ b/packages/Shell/res/values-ru/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Отчеты об ошибках содержат данные различных системных журналов и могут включать личную информацию. Рекомендуем открывать к ним доступ только лицам и приложениям, заслуживающим доверие."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Показать это сообщение в следующий раз"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Отчеты об ошибках"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Не удалось открыть отчет об ошибке"</string>
 </resources>
diff --git a/packages/Shell/res/values-si-rLK/strings.xml b/packages/Shell/res/values-si-rLK/strings.xml
index 4244f2b..937c1bc 100644
--- a/packages/Shell/res/values-si-rLK/strings.xml
+++ b/packages/Shell/res/values-si-rLK/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"පුද්ගලික සහ පෞද්ගලික තොරතුරු ඇතුළත්ව පද්ධතියේ විවිධ ලොග් ගොනු වල දත්ත දෝෂ වාර්තාවේ අඩංගු වේ. ඔබට විශ්වාසවන්ත යෙදුම් සහ පුද්ගලයින් සමඟ පමණක් දෝෂ වාර්තා බෙදා ගන්න."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ඊළඟ වෙලාවේ මෙම පණිවිඩය පෙන්වන්න"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"දෝෂ වාර්තා"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"දෝෂ වාර්තා ගොනුව කියවීමට නොහැකි විය"</string>
 </resources>
diff --git a/packages/Shell/res/values-sk/strings.xml b/packages/Shell/res/values-sk/strings.xml
index 4228dd3..cd52efc 100644
--- a/packages/Shell/res/values-sk/strings.xml
+++ b/packages/Shell/res/values-sk/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Správy o chybách obsahujú údaje z rôznych súborov denníkov systému vrátane osobných a súkromných informácií. Zdieľajte ich iba s dôveryhodnými aplikáciami a ľuďmi."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Zobraziť túto správu nabudúce"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Hlásenia chýb"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Súbor s hlásením chyby sa nepodarilo prečítať"</string>
 </resources>
diff --git a/packages/Shell/res/values-sl/strings.xml b/packages/Shell/res/values-sl/strings.xml
index 8c3bedc..25553f2 100644
--- a/packages/Shell/res/values-sl/strings.xml
+++ b/packages/Shell/res/values-sl/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Poročila o napakah vsebujejo podatke iz različnih dnevniških datotek sistema, vključno z osebnimi in zasebnimi podatki. Poročila o napakah delite samo z aplikacijami in ljudmi, ki jim zaupate."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Pokaži to sporočilo naslednjič"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Poročila o napakah"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Datoteke s poročilom o napakah ni bilo mogoče prebrati"</string>
 </resources>
diff --git a/packages/Shell/res/values-sq-rAL/strings.xml b/packages/Shell/res/values-sq-rAL/strings.xml
index 8f252a0..add53d8 100644
--- a/packages/Shell/res/values-sq-rAL/strings.xml
+++ b/packages/Shell/res/values-sq-rAL/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Raportet e gabimeve përmbajnë të dhëna nga skedarë të ndryshëm ditarësh sistemi, përfshi informacione personale dhe private. Shpërndaji publikisht raportet e gabimeve vetëm me aplikacionet dhe personat që iu beson."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Tregoje këtë mesazh herën tjetër"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Raportet e gabimeve"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Skedari i raportimit të defektit në kod nuk mund të lexohej."</string>
 </resources>
diff --git a/packages/Shell/res/values-sr/strings.xml b/packages/Shell/res/values-sr/strings.xml
index 763bd2b..bb60f3f 100644
--- a/packages/Shell/res/values-sr/strings.xml
+++ b/packages/Shell/res/values-sr/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Извештаји о грешкама садрже податке из различитих системских датотека евиденције, укључујући личне и приватне податке. Делите извештаје о грешкама само са апликацијама и људима у које имате поверења."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Прикажи ову поруку следећи пут"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Извештаји о грешкама"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Датотека извештаја о грешци не може да се прочита"</string>
 </resources>
diff --git a/packages/Shell/res/values-sv/strings.xml b/packages/Shell/res/values-sv/strings.xml
index 8b72938..dd23e16 100644
--- a/packages/Shell/res/values-sv/strings.xml
+++ b/packages/Shell/res/values-sv/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Felrapporter innehåller data från systemets olika loggfiler, inklusive personliga och privata uppgifter. Dela bara felrapporter med personer du litar på."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Visa det här meddelandet nästa gång"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Felrapporter"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Det gick inte att läsa felrapporten"</string>
 </resources>
diff --git a/packages/Shell/res/values-sw/strings.xml b/packages/Shell/res/values-sw/strings.xml
index 0d12cc9..3773cd7 100644
--- a/packages/Shell/res/values-sw/strings.xml
+++ b/packages/Shell/res/values-sw/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Ripoti ya hitilafu ina data kutoka kwenye faili za kumbukumbu mbalimbali za mfumo, pamoja na maelezo ya kibinafsi na faragha. Shiriki ripoti ya hitilafu na programu na watu unaowaamini pekee."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Onyesha ujumbe huu wakati mwingine"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Ripoti za hitilafu"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Faili ya ripoti ya hitilafu haikusomwa"</string>
 </resources>
diff --git a/packages/Shell/res/values-ta-rIN/strings.xml b/packages/Shell/res/values-ta-rIN/strings.xml
index cd0462b..244c929 100644
--- a/packages/Shell/res/values-ta-rIN/strings.xml
+++ b/packages/Shell/res/values-ta-rIN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"பிழை அறிக்கைகளில், சொந்த வாழ்க்கை மற்றும் தனிப்பட்ட தகவல் உள்பட கணினியின் பல்வேறு பதிவுகளில் உள்ள தரவு இருக்கும். நீங்கள் நம்பும் பயன்பாடுகள் மற்றும் நபர்களுடன் மட்டும் பிழை அறிக்கைகளைப் பகிரவும்."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"இந்தச் செய்தியை அடுத்த முறைக் காட்டு"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"பிழை அறிக்கைகள்"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"பிழை அறிக்கையைப் படிக்க முடியவில்லை"</string>
 </resources>
diff --git a/packages/Shell/res/values-te-rIN/strings.xml b/packages/Shell/res/values-te-rIN/strings.xml
index 127f602..cd9b4b7 100644
--- a/packages/Shell/res/values-te-rIN/strings.xml
+++ b/packages/Shell/res/values-te-rIN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"బగ్ నివేదికలు వ్యక్తిగతమైన మరియు రహస్యమైన సమాచారంతో సహా సిస్టమ్ యొక్క విభిన్న లాగ్ ఫైల్‌ల్లోని డేటాను కలిగి ఉంటాయి. కనుక బగ్ నివేదికలను మీరు విశ్వసించే అనువర్తనాలు మరియు వ్యక్తులతో మాత్రమే భాగస్వామ్యం చేయండి."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"తదుపరిసారి ఈ సందేశాన్ని చూపు"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"బగ్ నివేదికలు"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"బగ్ నివేదిక ఫైల్‌ను చదవడం సాధ్యపడలేదు"</string>
 </resources>
diff --git a/packages/Shell/res/values-th/strings.xml b/packages/Shell/res/values-th/strings.xml
index 2bc8f0d..35b7ec9 100644
--- a/packages/Shell/res/values-th/strings.xml
+++ b/packages/Shell/res/values-th/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"รายงานข้อบกพร่องมีข้อมูลจากไฟล์บันทึกต่างๆ ของระบบ รวมถึงข้อมูลส่วนตัว แชร์รายงานข้อบกพร่องกับแอปและบุคคลที่คุณไว้ใจเท่านั้น"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"แสดงข้อความนี้ในครั้งต่อไป"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"รายงานข้อบกพร่อง"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"ไม่สามารถอ่านไฟล์รายงานข้อบกพร่อง"</string>
 </resources>
diff --git a/packages/Shell/res/values-tl/strings.xml b/packages/Shell/res/values-tl/strings.xml
index a5c0e8a..21df206 100644
--- a/packages/Shell/res/values-tl/strings.xml
+++ b/packages/Shell/res/values-tl/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Naglalaman ang mga ulat ng bug ng data mula sa iba\'t ibang file ng log ng system, kabilang ang personal at pribadong impormasyon. Magbahagi lang ng mga ulat ng bug sa apps at mga tao na pinagkakatiwalaan mo."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Ipakita ang mensaheng ito sa susunod"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Mga ulat sa bug"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Hindi mabasa ang file ng pag-uulat ng bug"</string>
 </resources>
diff --git a/packages/Shell/res/values-tr/strings.xml b/packages/Shell/res/values-tr/strings.xml
index 67390b7..fa8b82b 100644
--- a/packages/Shell/res/values-tr/strings.xml
+++ b/packages/Shell/res/values-tr/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Hata raporları, kişisel ve özel bilgiler dahil olmak üzere sistemin çeşitli günlük dosyalarından veriler içerir. Hata raporlarını sadece güvendiğiniz uygulamalar ve kişilerle paylaşın."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Bir dahaki sefere bu iletiyi göster"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Hata raporları"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Hata raporu dosyası okunamadı"</string>
 </resources>
diff --git a/packages/Shell/res/values-uk/strings.xml b/packages/Shell/res/values-uk/strings.xml
index f8f1798..ba667f2 100644
--- a/packages/Shell/res/values-uk/strings.xml
+++ b/packages/Shell/res/values-uk/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Звіти про помилки містять дані з різних файлів журналу системи, зокрема особисті та конфіденційні. Надсилайте звіт про помилки лише тим, кому довіряєте."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Показати це повідомлення наступного разу"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Звіти про помилки"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Не вдалося прочитати звіт про помилки"</string>
 </resources>
diff --git a/packages/Shell/res/values-ur-rPK/strings.xml b/packages/Shell/res/values-ur-rPK/strings.xml
index 73d6877..255aaf8 100644
--- a/packages/Shell/res/values-ur-rPK/strings.xml
+++ b/packages/Shell/res/values-ur-rPK/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"بَگ رپورٹس میں سسٹم کی مختلف لاگ فائلوں سے ڈیٹا شامل ہوتا ہے، بشمول ذاتی اور نجی معلومات۔ بَگ رپورٹس کا اشتراک صرف اپنے بھروسے مند ایپس اور لوگوں کے ساتھ کریں۔"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"یہ پیغام اگلی بار دکھائیں"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"بگ رپورٹس"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"بگ رپورٹ فائل پڑھی نہیں جا سکی"</string>
 </resources>
diff --git a/packages/Shell/res/values-uz-rUZ/strings.xml b/packages/Shell/res/values-uz-rUZ/strings.xml
index b221171..998387e 100644
--- a/packages/Shell/res/values-uz-rUZ/strings.xml
+++ b/packages/Shell/res/values-uz-rUZ/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Xatolik hisobotlari tizimdagi har xil jurnal fayllardagi ma’lumotlarni, shuningdek, shaxsiy hamda maxfiy ma’lumotlarni o‘z ichiga oladi. Xatolik hisobotlarini faqat ishonchli dasturlar va odamlar bilan bo‘lishing."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Ushbu xabar keyingi safar ko‘rsatilsin"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Xatoliklar hisoboti"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Xatoliklar hisoboti faylini o‘qib bo‘lmadi"</string>
 </resources>
diff --git a/packages/Shell/res/values-vi/strings.xml b/packages/Shell/res/values-vi/strings.xml
index 16a7df9..5c11b13 100644
--- a/packages/Shell/res/values-vi/strings.xml
+++ b/packages/Shell/res/values-vi/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Các báo cáo lỗi chứa dữ liệu từ nhiều tệp nhật ký khác nhau của hệ thống, bao gồm cả thông tin cá nhân và riêng tư. Chỉ chia sẻ báo cáo lỗi với các ứng dụng và những người mà bạn tin tưởng."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Hiển thị thông báo này vào lần tới"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Báo cáo lỗi"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Không thể đọc tệp báo cáo lỗi"</string>
 </resources>
diff --git a/packages/Shell/res/values-zh-rCN/strings.xml b/packages/Shell/res/values-zh-rCN/strings.xml
index 17fdedd..0a2f81b 100644
--- a/packages/Shell/res/values-zh-rCN/strings.xml
+++ b/packages/Shell/res/values-zh-rCN/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"错误报告包含的数据来自于系统的各个日志文件,其中包含个人信息和隐私信息。请务必只与您信任的应用和用户分享错误报告。"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"下次再显示这条讯息"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"错误报告"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"无法读取错误报告文件"</string>
 </resources>
diff --git a/packages/Shell/res/values-zh-rHK/strings.xml b/packages/Shell/res/values-zh-rHK/strings.xml
index 0f70bab..227d937 100644
--- a/packages/Shell/res/values-zh-rHK/strings.xml
+++ b/packages/Shell/res/values-zh-rHK/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"錯誤報告中有來自系統各個記錄檔案的資料,包括個人和私人資料。請只與您信任的應用程式和使用者分享錯誤報告。"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"下次再顯示這則訊息"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"錯誤報告"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"無法讀取錯誤報告檔案"</string>
 </resources>
diff --git a/packages/Shell/res/values-zh-rTW/strings.xml b/packages/Shell/res/values-zh-rTW/strings.xml
index d7f7507..b9f8ee8 100644
--- a/packages/Shell/res/values-zh-rTW/strings.xml
+++ b/packages/Shell/res/values-zh-rTW/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"錯誤報告的資料來自系統各個紀錄檔,包括個人和私密資訊。請務必只與您信任的應用程式和使用者分享錯誤報告。"</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"下次仍顯示這則訊息"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"錯誤報告"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"無法讀取錯誤報告檔案"</string>
 </resources>
diff --git a/packages/Shell/res/values-zu/strings.xml b/packages/Shell/res/values-zu/strings.xml
index c82fb93..b675858 100644
--- a/packages/Shell/res/values-zu/strings.xml
+++ b/packages/Shell/res/values-zu/strings.xml
@@ -23,4 +23,5 @@
     <string name="bugreport_confirm" msgid="5130698467795669780">"Imibiko yeziphazamisi iqukethe idatha yamafayela wokungena ahlukile wesistimu, afaka ulwazi lomuntu siqu noma lobumfihlo. Yabelana kuphela ngemibiko yeziphazamisi nezinhlelo zokusebenza nabantu obathembayo."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Bonisa lo mlayezo ngesikhathi esilandelayo"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Imibiko yeziphazamiso"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Ifayela lombiko wesiphazamso alikwazanga ukufundwa"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 01d5e05..6c9cc1a 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Wys batteryvlakpersentasie binne die statusbalkikoon wanneer dit nie laai nie"</string>
     <string name="quick_settings" msgid="10042998191725428">"Kitsinstellings"</string>
     <string name="status_bar" msgid="4877645476959324760">"Statusbalk"</string>
+    <string name="overview" msgid="4018602013895926956">"Oorsig"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demonstrasiemodus"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Aktiveer demonstrasiemodus"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Wys demonstrasiemodus"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Wys horlosiesekondes op die statusbalk. Sal batterylewe dalk beïnvloed."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Herrangskik Kitsinstellings"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Wys helderheid in Kitsinstellings"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Aktiveer vinnige wissel"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Aktiveer blaai met die Oorsig-knoppie"</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperimenteel"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Skakel Bluetooth aan?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Jy moet Bluetooth aanskakel om jou sleutelbord aan jou tablet te koppel."</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 8999d7c..e7346a1 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ኃይል በማይሞላበት ጊዜ በሁነታ አሞሌ አዶ ውስጥ የባትሪ ደረጃ መቶኛን አሳይ"</string>
     <string name="quick_settings" msgid="10042998191725428">"ፈጣን ቅንብሮች"</string>
     <string name="status_bar" msgid="4877645476959324760">"የሁኔታ አሞሌ"</string>
+    <string name="overview" msgid="4018602013895926956">"አጠቃላይ እይታ"</string>
     <string name="demo_mode" msgid="2389163018533514619">"የቅንጭብ ማሳያ ሁነታ"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"የማሳያ ሁነታውን ያንቁ"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ማሳያ ሁነታን አሳይ"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"የሰዓት ሰከንዶችን በሁኔታ አሞሌ ውስጥ አሳይ። በባትሪ ዕድሜ ላይ ተጽዕኖ ሊኖርው ይችል ይሆናል።"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"ፈጣን ቅንብሮችን ዳግም ያደራጁ"</string>
     <string name="show_brightness" msgid="6613930842805942519">"በፈጣን ቅንብሮች ውስጥ ብሩህነትን አሳይ"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"ፈጣን ቅይይርን አንቃ"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"በአጠቃላይ እይታ አዝራር በኩል ገጽ ቁጥር አሰጣጥን አንቃ"</string>
     <string name="experimental" msgid="6198182315536726162">"የሙከራ"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"ብሉቱዝ ይብራ?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"የቁልፍ ሰሌዳዎን ከእርስዎ ጡባዊ ጋር ለማገናኘት በመጀመሪያ ብሉቱዝን ማብራት አለብዎት።"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index f677972..d8af21c 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -413,6 +413,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"عرض نسبة مستوى البطارية داخل رمز شريط الحالة أثناء عدم الشحن"</string>
     <string name="quick_settings" msgid="10042998191725428">"الإعدادات السريعة"</string>
     <string name="status_bar" msgid="4877645476959324760">"شريط الحالة"</string>
+    <string name="overview" msgid="4018602013895926956">"نظرة عامة"</string>
     <string name="demo_mode" msgid="2389163018533514619">"الوضع التجريبي"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"تمكين الوضع التجريبي"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"عرض الوضع التجريبي"</string>
@@ -441,6 +442,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"عرض ثواني الساعة في شريط الحالة. قد يؤثر ذلك في عمر البطارية."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"إعادة ترتيب الإعدادات السريعة"</string>
     <string name="show_brightness" msgid="6613930842805942519">"عرض السطوع في الإعدادات السريعة"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"تمكين التبديل السريع"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"تمكين الترحيل عبر زر \"نظرة عامة\""</string>
     <string name="experimental" msgid="6198182315536726162">"إعدادات تجريبية"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"تشغيل البلوتوث؟"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"لتوصيل لوحة المفاتيح بالجهاز اللوحي، يلزمك تشغيل بلوتوث أولاً."</string>
diff --git a/packages/SystemUI/res/values-az-rAZ/strings.xml b/packages/SystemUI/res/values-az-rAZ/strings.xml
index fb92d6b..a2f1bbb 100644
--- a/packages/SystemUI/res/values-az-rAZ/strings.xml
+++ b/packages/SystemUI/res/values-az-rAZ/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Elektrik şəbəsinə qoşulu olmayan zaman batareya səviyyəsini status paneli ikonası daxilində göstərin"</string>
     <string name="quick_settings" msgid="10042998191725428">"Sürətli Ayarlar"</string>
     <string name="status_bar" msgid="4877645476959324760">"Status paneli"</string>
+    <string name="overview" msgid="4018602013895926956">"İcmal"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demo rejimi"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Demo rejimini aktiv edin"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Demo rejimini göstərin"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Saatın saniyəsini status panelində göstərin. Batareyaya təsir edə bilər."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Sürətli Ayarları yenidən tənzimləyin"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Sürətli ayarlarda parlaqlılığı göstərin"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Sürətli keçidi aktiv edin"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Baxış düyməsi vasitəsilə səhifələməni aktiv edin"</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth aktivləşsin?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Tabletinizlə klaviaturaya bağlanmaq üçün ilk olaraq Bluetooth\'u aktivləşdirməlisiniz."</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index b7f96a1..51b8cd1 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Показване на процента на нивото на батерията в иконата на лентата на състоянието, когато не се зарежда"</string>
     <string name="quick_settings" msgid="10042998191725428">"Бързи настройки"</string>
     <string name="status_bar" msgid="4877645476959324760">"Лента на състоянието"</string>
+    <string name="overview" msgid="4018602013895926956">"Общ преглед"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Демонстрационен режим"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Активиране на демонстрационния режим"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Показване на демонстрационния режим"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Показване на секундите на часовника в лентата на състоянието. Може да се отрази на живота на батерията."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Пренареждане на бързите настройки"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Показване на яркостта от бързите настройки"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Активиране на бързото превключване"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Активиране на разделянето на страници чрез бутона за общ преглед"</string>
     <string name="experimental" msgid="6198182315536726162">"Експериментални"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Да се включи ли Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"За да свържете клавиатурата с таблета си, първо трябва да включите Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml
index 6a93724..86357bd 100644
--- a/packages/SystemUI/res/values-bn-rBD/strings.xml
+++ b/packages/SystemUI/res/values-bn-rBD/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"যখন চার্জ করা হবে না তখন স্থিতি দন্ডের আইকনের ভিতরে ব্যাটারি স্তরের শতকার হার দেখায়"</string>
     <string name="quick_settings" msgid="10042998191725428">"দ্রুত সেটিংস"</string>
     <string name="status_bar" msgid="4877645476959324760">"স্থিতি দন্ড"</string>
+    <string name="overview" msgid="4018602013895926956">"এক নজরে"</string>
     <string name="demo_mode" msgid="2389163018533514619">"ডেমো মোড"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"ডেমো মোড সক্ষম করুন"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ডেমো মোড দেখান"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"স্থিতি দন্ডে ঘড়ির সেকেন্ড দেখায়৷ ব্যাটারি লাইফকে প্রভাবিত করতে পারে৷"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"দ্রুত সেটিংসে পুনরায় সাজান"</string>
     <string name="show_brightness" msgid="6613930842805942519">"দ্রুত সেটিংসে উজ্জ্বলতা দেখান"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"\'দ্রুত টগল করা\'র ব্যবস্থাটি সক্ষম করুন"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"\'এক নজরে\' বোতামের মাধ্যমে পেজিং সক্ষম করুন"</string>
     <string name="experimental" msgid="6198182315536726162">"পরীক্ষামূলক"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth চালু করবেন?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"আপনার ট্যাবলেটের সাথে আপনার কীবোর্ড সংযুক্ত করতে, আপনাকে প্রথমে Bluetooth চালু করতে হবে।"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 0da503a..950a8e5 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Mostra el percentatge del nivell de bateria dins de la icona de la barra d\'estat quan no s\'estigui carregant"</string>
     <string name="quick_settings" msgid="10042998191725428">"Configuració ràpida"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barra d\'estat"</string>
+    <string name="overview" msgid="4018602013895926956">"Visió general"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Mode de demostració"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Activa el mode de demostració"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Mostra el mode de demostració"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra els segons del rellotge a la barra d\'estat. Això pot afectar la durada de la bateria."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Reorganitza Configuració ràpida"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Mostra la brillantor a Configuració ràpida"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Activa el canvi ràpid"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Activa la paginació mitjançant el botó Visió general"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vols activar el Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Per connectar el teclat amb la tauleta, primer has d\'activar el Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index c9e8a83..7d362d5 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -411,6 +411,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Když neprobíhá nabíjení, zobrazit v ikoně na stavovém řádku procento nabití baterie"</string>
     <string name="quick_settings" msgid="10042998191725428">"Rychlé nastavení"</string>
     <string name="status_bar" msgid="4877645476959324760">"Stavový řádek"</string>
+    <string name="overview" msgid="4018602013895926956">"Přehled"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Ukázkový režim"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Zapnout ukázkový režim"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Zobrazit ukázkový režim"</string>
@@ -439,6 +440,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Na stavovém řádku se bude zobrazovat sekundová ručička. Může být ovlivněna výdrž baterie."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Změnit uspořádání Rychlého nastavení"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Zobrazit jas v Rychlém nastavení"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Povolit rychlé přepínání"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Povolit stránkování pomocí tlačítka Přehled"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimentální"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Zapnout Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Chcete-li klávesnici připojit k tabletu, nejdříve musíte zapnout Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index a9931ce..e889dbf 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Vis procenttallet for batteriniveauet i ikonet for statusbjælken, når der ikke oplades"</string>
     <string name="quick_settings" msgid="10042998191725428">"Hurtige indstillinger"</string>
     <string name="status_bar" msgid="4877645476959324760">"Statusbjælke"</string>
+    <string name="overview" msgid="4018602013895926956">"Oversigt"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demotilstand"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Aktivér Demotilstand"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Vis Demotilstand"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Vis sekunder i statuslinjen. Dette kan påvirke batteriets levetid."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Omarranger Hurtige indstillinger"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Vis lysstyrke i Hurtige indstillinger"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Aktivér hurtigt skift"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Aktivér sideopdeling via knappen Oversigt"</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperimentel"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vil du slå Bluetooth til?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Bluetooth skal være slået til, før du kan knytte dit tastatur til din tablet."</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 8a7fa5e..6ac2790 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Prozentzahl für Akkustand in Statusleistensymbol anzeigen, wenn das Gerät nicht geladen wird"</string>
     <string name="quick_settings" msgid="10042998191725428">"Schnelleinstellungen"</string>
     <string name="status_bar" msgid="4877645476959324760">"Statusleiste"</string>
+    <string name="overview" msgid="4018602013895926956">"Übersicht"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demomodus"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Demomodus aktivieren"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Demomodus anzeigen"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Uhrsekunden in der Statusleiste anzeigen. Kann sich auf die Akkulaufzeit auswirken."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Schnelleinstellungen neu anordnen"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Helligkeit in den Schnelleinstellungen anzeigen"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Schnelles Wechseln aktivieren"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Seitenlayout über die Schaltfläche \"Übersicht\" aktivieren"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimentell"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth aktivieren?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Zum Verbinden von Tastatur und Tablet muss Bluetooth aktiviert sein."</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 47eb46f..c6c61e7 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Εμφάνιση ποσοστού επιπέδου μπαταρίας μέσα στο εικονίδιο της γραμμής κατάστασης όταν δεν γίνεται φόρτιση"</string>
     <string name="quick_settings" msgid="10042998191725428">"Γρήγορες ρυθμίσεις"</string>
     <string name="status_bar" msgid="4877645476959324760">"Γραμμή κατάστασης"</string>
+    <string name="overview" msgid="4018602013895926956">"Επισκόπηση"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Λειτουργία επίδειξης"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Ενεργοποίηση λειτουργίας επίδειξης"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Εμφάνιση λειτουργίας επίδειξης"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Εμφάνιση δευτερολέπτων ρολογιού στη γραμμή κατάστασης. Ενδέχεται να επηρεάσει τη διάρκεια ζωής της μπαταρίας."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Αναδιάταξη Γρήγορων ρυθμίσεων"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Εμφάνιση φωτεινότητας στις Γρήγορες ρυθμίσεις"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Ενεργοποίηση γρήγορης εναλλαγής"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Ενεργοποίηση σελιδοποίησης μέσω του κουμπιού \"Επισκόπηση\""</string>
     <string name="experimental" msgid="6198182315536726162">"Σε πειραματικό στάδιο"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Ενεργοποίηση Bluetooth;"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Για να συνδέσετε το πληκτρολόγιο με το tablet σας, θα πρέπει πρώτα να ενεργοποιήσετε το Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index f257c7f..7efb7eb 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Show battery level percentage inside the status bar icon when not charging"</string>
     <string name="quick_settings" msgid="10042998191725428">"Quick Settings"</string>
     <string name="status_bar" msgid="4877645476959324760">"Status bar"</string>
+    <string name="overview" msgid="4018602013895926956">"Overview"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demo mode"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Enable demo mode"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Show demo mode"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Enable fast toggle"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Enable paging via the Overview button"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"To connect your keyboard with your tablet, you first have to turn on Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index f257c7f..7efb7eb 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Show battery level percentage inside the status bar icon when not charging"</string>
     <string name="quick_settings" msgid="10042998191725428">"Quick Settings"</string>
     <string name="status_bar" msgid="4877645476959324760">"Status bar"</string>
+    <string name="overview" msgid="4018602013895926956">"Overview"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demo mode"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Enable demo mode"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Show demo mode"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Enable fast toggle"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Enable paging via the Overview button"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"To connect your keyboard with your tablet, you first have to turn on Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index f257c7f..7efb7eb 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Show battery level percentage inside the status bar icon when not charging"</string>
     <string name="quick_settings" msgid="10042998191725428">"Quick Settings"</string>
     <string name="status_bar" msgid="4877645476959324760">"Status bar"</string>
+    <string name="overview" msgid="4018602013895926956">"Overview"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demo mode"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Enable demo mode"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Show demo mode"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Enable fast toggle"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Enable paging via the Overview button"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"To connect your keyboard with your tablet, you first have to turn on Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 608f73c..5911314 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Mostrar porcentaje del nivel de batería en el ícono de la barra de estado cuando no se está cargando"</string>
     <string name="quick_settings" msgid="10042998191725428">"Configuración rápida"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barra de estado"</string>
+    <string name="overview" msgid="4018602013895926956">"Recientes"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Modo demostración"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Activar el modo de demostración"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Ver en modo de demostración"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Muestra los segundos del reloj en la barra de estado. Puede afectar la duración de la batería."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar la Configuración rápida"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Mostrar el brillo en la Configuración rápida"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Habilitar la activación rápida"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Habilita la paginación a través del botón Recientes"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"¿Activar Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Para conectar el teclado con la tablet, primero debes activar Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index aa4fd56..7deaa18 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Mostrar el porcentaje del nivel de batería en el icono de la barra de estado cuando no se esté cargando"</string>
     <string name="quick_settings" msgid="10042998191725428">"Ajustes rápidos"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barra de estado"</string>
+    <string name="overview" msgid="4018602013895926956">"Visión general"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Modo de demostración"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Habilitar modo de demostración"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demostración"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Muestra los segundos del reloj en la barra de estado. Puede afectar a la duración de la batería."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar Ajustes rápidos"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Mostrar brillo en Ajustes rápidos"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Habilitar activación rápida"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Habilitar paginación con el botón Visión general"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"¿Activar Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Para poder conectar tu teclado a tu tablet, debes activar el Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index 655ee5b..4bca9b9 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Akutaseme protsendi kuvamine olekuriba ikoonil, kui akut ei laeta"</string>
     <string name="quick_settings" msgid="10042998191725428">"Kiirseaded"</string>
     <string name="status_bar" msgid="4877645476959324760">"Olekuriba"</string>
+    <string name="overview" msgid="4018602013895926956">"Ülevaade"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demorežiim"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Demorežiimi lubamine"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Kuva demorežiim"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Olekuribal kella sekundite kuvamine. See võib mõjutada aku kasutusaega."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Korralda kiirseaded ümber"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Kuva kiirseadetes heledus"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Luba kiire vahetamine"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Saate lubada sirvimise nupuga Ülevaade"</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperimentaalne"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Kas lülitada Bluetooth sisse?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Klaviatuuri ühendamiseks tahvelarvutiga peate esmalt Bluetoothi sisse lülitama."</string>
diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml
index 5ac93c6..d906d2d 100644
--- a/packages/SystemUI/res/values-eu-rES/strings.xml
+++ b/packages/SystemUI/res/values-eu-rES/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Erakutsi bateria-mailaren ehunekoa egoera-barraren ikonoan, kargatzen ari ez denean"</string>
     <string name="quick_settings" msgid="10042998191725428">"Ezarpen bizkorrak"</string>
     <string name="status_bar" msgid="4877645476959324760">"Egoera-barra"</string>
+    <string name="overview" msgid="4018602013895926956">"Ikuspegi orokorra"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Proba modua"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Gaitu proba modua"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Erakutsi proba modua"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Erakutsi erlojuko segundoak egoera-barran. Baliteke bateria gehiago erabiltzea."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Berrantolatu ezarpen bizkorrak"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Erakutsi distira Ezarpen bizkorretan"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Gaitu bizkor aldatzeko aukera"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Gaitu orriz aldatzea ikuspegi orokorraren botoiaren bidez"</string>
     <string name="experimental" msgid="6198182315536726162">"Esperimentala"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth eginbidea aktibatu nahi duzu?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Teklatua tabletara konektatzeko, Bluetooth eginbidea aktibatu behar duzu."</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 837b727..4a41fdf 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"نمایش درصد سطح باتری در نماد نوار وضعیت، هنگامی که باتری شارژ نمی‌شود"</string>
     <string name="quick_settings" msgid="10042998191725428">"تنظیمات سریع"</string>
     <string name="status_bar" msgid="4877645476959324760">"نوار وضعیت"</string>
+    <string name="overview" msgid="4018602013895926956">"نمای کلی"</string>
     <string name="demo_mode" msgid="2389163018533514619">"حالت نمایشی"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"فعال کردن حالت نمایشی"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"نمایش حالت نمایشی"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"ثانیه‌های ساعت را در نوار وضعیت نشان می‌دهد. ممکن است بر ماندگاری باتری تأثیر بگذارد."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"ترتیب مجدد در تنظیمات سریع"</string>
     <string name="show_brightness" msgid="6613930842805942519">"نمایش روشنایی در تنظیمات سریع"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"فعال کردن جابه‌جایی سریع"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"فعال کردن صفحه‌بندی از طریق دکمه «نمای کلی»"</string>
     <string name="experimental" msgid="6198182315536726162">"آزمایشی"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"بلوتوث روشن شود؟"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"برای مرتبط کردن صفحه‌کلید با رایانه لوحی، ابتدا باید بلوتوث را روشن کنید."</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index ef6a064..3c90719 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Näyttää akun varausprosentin tilapalkin kuvakkeessa, kun laitetta ei ladata."</string>
     <string name="quick_settings" msgid="10042998191725428">"Pika-asetukset"</string>
     <string name="status_bar" msgid="4877645476959324760">"Tilapalkki"</string>
+    <string name="overview" msgid="4018602013895926956">"Yleiskatsaus"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Esittelytila"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Ota esittelytila käyttöön"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Näytä esittelytila"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Näytä sekunnit tilapalkin kellossa. Tämä voi vaikuttaa akun kestoon."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Järjestä pika-asetukset uudelleen"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Näytä kirkkaus pika-asetuksissa"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Ota käyttöön nopea päälle/pois-toiminto."</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Ota sivutus käyttöön Yleiskatsaus-painikkeen avulla."</string>
     <string name="experimental" msgid="6198182315536726162">"Kokeellinen"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Otetaanko Bluetooth käyttöön?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Jotta voit yhdistää näppäimistön tablettiisi, sinun on ensin otettava Bluetooth käyttöön."</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 52d2e2a..72f3499 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Afficher le pourcentage correspondant au niveau de la pile dans l\'icône de la barre d\'état lorsque l\'appareil n\'est pas en charge."</string>
     <string name="quick_settings" msgid="10042998191725428">"Paramètres rapides"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barre d\'état"</string>
+    <string name="overview" msgid="4018602013895926956">"Aperçu"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Mode Démonstration"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Activer le mode Démonstration"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Afficher le mode Démonstration"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Afficher les secondes sur l\'horloge dans la barre d\'état. Cela peut réduire l\'autonomie de la pile."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Réorganiser les paramètres rapides"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Afficher la luminosité dans les paramètres rapides"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Activer le basculement rapide"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Activer la pagination à l\'aide du bouton Aperçu"</string>
     <string name="experimental" msgid="6198182315536726162">"Fonctions expérimentales"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Activer Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Pour connecter votre clavier à votre tablette, vous devez d\'abord activer la connectivité Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 39a8dbc..c115fd1 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Affichez le pourcentage correspondant au niveau de la batterie dans l\'icône de la barre d\'état lorsque l\'appareil n\'est pas en charge."</string>
     <string name="quick_settings" msgid="10042998191725428">"Configuration rapide"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barre d\'état"</string>
+    <string name="overview" msgid="4018602013895926956">"Aperçu"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Mode de démonstration"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Activer le mode de démonstration"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Afficher le mode de démonstration"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Afficher les secondes dans la barre d\'état. Cela risque de réduire l\'autonomie de la batterie."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Réorganiser la fenêtre de configuration rapide"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Afficher la luminosité dans fenêtre de configuration rapide"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Activer le basculement rapide"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Activer la mise en page via le bouton Aperçu"</string>
     <string name="experimental" msgid="6198182315536726162">"Paramètres expérimentaux"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Activer le Bluetooth ?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Pour connecter un clavier à votre tablette, vous devez avoir activé le Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml
index 398a055..b1ca8f9 100644
--- a/packages/SystemUI/res/values-gl-rES/strings.xml
+++ b/packages/SystemUI/res/values-gl-rES/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Mostrar porcentaxe do nivel de batería na icona da barra de estado cando non está en carga"</string>
     <string name="quick_settings" msgid="10042998191725428">"Configuración rápida"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barra de estado"</string>
+    <string name="overview" msgid="4018602013895926956">"Visión xeral"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Modo de demostración"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Activar modo de demostración"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demostración"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra os segundos do reloxo na barra de estado. Pode influír na duración da batería."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar Configuración rápida"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Mostrar brillo en Configuración rápida"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Activar alternancia rápida"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Activar paxinación a través do botón Visión xeral"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Queres activar o Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Para conectar o teu teclado co tablet, primeiro tes que activar o Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-gu-rIN/strings.xml b/packages/SystemUI/res/values-gu-rIN/strings.xml
index 9ecaa75..db28348 100644
--- a/packages/SystemUI/res/values-gu-rIN/strings.xml
+++ b/packages/SystemUI/res/values-gu-rIN/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"જ્યારે ચાર્જ ન થઈ રહ્યું હોય ત્યારે સ્થિતિ બાર આયકનની અંદર બૅટરી સ્તર ટકા બતાવો"</string>
     <string name="quick_settings" msgid="10042998191725428">"ઝડપી સેટિંગ્સ"</string>
     <string name="status_bar" msgid="4877645476959324760">"સ્થિતિ બાર"</string>
+    <string name="overview" msgid="4018602013895926956">"વિહંગાવલોકન"</string>
     <string name="demo_mode" msgid="2389163018533514619">"ડેમો મોડ"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"ડેમો મોડ સક્ષમ કરો"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ડેમો મોડ બતાવો"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"ઘડિયાળ સેકન્ડ સ્થિતિ બારમાં બતાવો. બૅટરીની આવરદા પર અસર કરી શકે છે."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"ઝડપી સેટિંગ્સને ફરીથી ગોઠવો"</string>
     <string name="show_brightness" msgid="6613930842805942519">"ઝડપી સેટિંગ્સમાં તેજ બતાવો"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"ઝડપી ટૉગલ સક્ષમ કરો"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"વિહંગાવલોકન બટન મારફત પેજિંગ સક્ષમ કરો"</string>
     <string name="experimental" msgid="6198182315536726162">"પ્રાયોગિક"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth ચાલુ કરવુ છે?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"તમારા ટેબ્લેટ સાથે કીબોર્ડ કનેક્ટ કરવા માટે, તમારે પહેલાં Bluetooth ચાલુ કરવાની જરૂર પડશે."</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 62ef606..c7c87bd 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"जब चार्ज नहीं किया जा रहा हो तब स्थिति बार आइकन में बैटरी स्तर का प्रतिशत दिखाएं"</string>
     <string name="quick_settings" msgid="10042998191725428">"तेज़ सेटिंग"</string>
     <string name="status_bar" msgid="4877645476959324760">"स्थिति बार"</string>
+    <string name="overview" msgid="4018602013895926956">"अवलोकन"</string>
     <string name="demo_mode" msgid="2389163018533514619">"डेमो मोड"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड सक्षम करें"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"डेमो मोड दिखाएं"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"स्थिति बार में घड़ी के सेकंड दिखाएं. इससे बैटरी के जीवनकाल पर प्रभाव पड़ सकता है."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"त्वरित सेटिंग को पुन: व्यवस्थित करें"</string>
     <string name="show_brightness" msgid="6613930842805942519">"त्वरित सेटिंग में स्क्रीन की रोशनी दिखाएं"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"तेज़ टॉगल सक्षम करें"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"अवलोकन बटन के माध्‍यम से पेजिंग सक्षम करें"</string>
     <string name="experimental" msgid="6198182315536726162">"प्रयोगात्मक"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लूटूथ चालू करें?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"अपने कीबोर्ड को अपने टैबलेट से कनेक्ट करने के लिए, आपको पहले ब्लूटूथ चालू करना होगा."</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index dafc96f..ac1ce61 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -410,6 +410,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Prikazivanje postotka razine baterije na ikoni trake statusa kada se ne puni"</string>
     <string name="quick_settings" msgid="10042998191725428">"Brze postavke"</string>
     <string name="status_bar" msgid="4877645476959324760">"Traka statusa"</string>
+    <string name="overview" msgid="4018602013895926956">"Pregled"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demo način"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Omogući demo način"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Prikaži demo način"</string>
@@ -438,6 +439,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Prikazuju se sekunde na satu na traci statusa. Može utjecati na trajanje baterije."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Promijeni raspored Brzih postavki"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Prikaži svjetlinu u Brzim postavkama"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Omogući brzo prebacivanje"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Omogućivanje pregledavanja stranica gumbom Pregled"</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperimentalno"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Želite li uključiti Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Da biste povezali tipkovnicu s tabletom, morate uključiti Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index cf08b55..db4adc3 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Az akkumulátor töltöttségi szintjének megjelenítése az állapotsori ikonban, amikor az eszköz nem töltődik"</string>
     <string name="quick_settings" msgid="10042998191725428">"Gyorsbeállítások"</string>
     <string name="status_bar" msgid="4877645476959324760">"Állapotsor"</string>
+    <string name="overview" msgid="4018602013895926956">"Áttekintés"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demó mód"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Demó mód engedélyezése"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Demó mód megjelenítése"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Másodpercek megjelenítése az állapotsor óráján. Ez hatással lehet az akkumulátor üzemidejére."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Gyorsbeállítások átrendezése"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Fényerő megjelenítése a gyorsbeállításokban"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Gyors váltás engedélyezése"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Oldalkezelés engedélyezése az Áttekintés gombbal"</string>
     <string name="experimental" msgid="6198182315536726162">"Kísérleti"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Engedélyezi a Bluetooth-kapcsolatot?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Ha a billentyűzetet csatlakoztatni szeretné táblagépéhez, először engedélyeznie kell a Bluetooth-kapcsolatot."</string>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index b4a265d..82e5742 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Ցուցադրել մարտկոցի լիցքավորման տոկոսայնությունը կարգավիճակի գոտու պատկերակի վրա, երբ այն չի լիցքավորվում"</string>
     <string name="quick_settings" msgid="10042998191725428">"Արագ կարգավորումներ"</string>
     <string name="status_bar" msgid="4877645476959324760">"Կարգավիճակի գոտի"</string>
+    <string name="overview" msgid="4018602013895926956">"Համատեսք"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Ցուցադրական ռեժիմ"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Ցուցադրական ռեժիմի միացում"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Ցուցադրական ռեժիմի ցուցադրում"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Ցույց տալ ժամացույցի վայրկյանները կարգավիճակի տողում: Կարող է ազդել մարտկոցի աշխատանքի ժամանակի վրա:"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Վերադասավորել Արագ կարգավորումները"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Ցույց տալ պայծառությունն Արագ կարգավորումներում"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Միացնել արագ փոխարկումը"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Միացնել Համատեսք կոճակի միջոցով թերթումը"</string>
     <string name="experimental" msgid="6198182315536726162">"Փորձնական"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Միացնե՞լ Bluetooth-ը:"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Ստեղնաշարը ձեր պլանշետին միացնելու համար նախ անհրաժեշտ է միացնել Bluetooth-ը:"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 6d6c1c7..6226603 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Tampilkan persentase tingkat baterai dalam ikon bilah status saat tidak mengisi daya"</string>
     <string name="quick_settings" msgid="10042998191725428">"Setelan Cepat"</string>
     <string name="status_bar" msgid="4877645476959324760">"Bilah status"</string>
+    <string name="overview" msgid="4018602013895926956">"Ringkasan"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Mode demo"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Aktifkan mode demo"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Tampilkan mode demo"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Tampilkan detik jam di bilah status. Dapat memengaruhi masa pakai baterai."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Atur Ulang Setelan Cepat"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Tampilkan kecerahan di Setelan Cepat"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Mengaktifkan pengalih cepat"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Mengaktifkan tampilan laman melalui tombol Ringkasan"</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Aktifkan Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Untuk menghubungkan keyboard dengan tablet, terlebih dahulu aktifkan Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml
index 8e7711e4..506b998 100644
--- a/packages/SystemUI/res/values-is-rIS/strings.xml
+++ b/packages/SystemUI/res/values-is-rIS/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Sýna rafhlöðustöðuna í stöðustikunni þegar tækið er ekki í hleðslu"</string>
     <string name="quick_settings" msgid="10042998191725428">"Flýtistillingar"</string>
     <string name="status_bar" msgid="4877645476959324760">"Stöðustika"</string>
+    <string name="overview" msgid="4018602013895926956">"Yfirlit"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Prufustilling"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Kveikja á prufustillingu"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Sýna prufustillingu"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Sýna sekúndur á klukku í stöðustikunni. Getur haft áhrif á endingu rafhlöðu."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Endurraða flýtistillingum"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Sýna birtustig í flýtistillingum"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Kveikja á flýtiskiptingum"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Virkja síðuskoðun með yfirlitshnappinum"</string>
     <string name="experimental" msgid="6198182315536726162">"Tilraunastillingar"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Kveikja á Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Til að geta tengt lyklaborðið við spjaldtölvuna þarftu fyrst að kveikja á Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index f12e626..565a4de 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Mostra la percentuale di carica della batteria nell\'icona della barra di stato quando non è in carica"</string>
     <string name="quick_settings" msgid="10042998191725428">"Impostazioni rapide"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barra di stato"</string>
+    <string name="overview" msgid="4018602013895926956">"Panoramica"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Modalità demo"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Attiva modalità demo"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Mostra modalità demo"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra i secondi nell\'orologio nella barra di stato. Ciò potrebbe ridurre la durata della carica della batteria."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Riorganizza Impostazioni rapide"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Mostra luminosità in Impostazioni rapide"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Abilita attivazione/disattivazione veloce"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Attiva il paging tramite il pulsante Panoramica"</string>
     <string name="experimental" msgid="6198182315536726162">"Sperimentali"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Attivare il Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Per connettere la tastiera al tablet, devi prima attivare il Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index c168f7d..b05c12b 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -411,6 +411,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"הצג את אחוז עוצמת הסוללה בתוך הסמל שבשורת הסטטוס כשהמכשיר אינו בטעינה"</string>
     <string name="quick_settings" msgid="10042998191725428">"הגדרות מהירות"</string>
     <string name="status_bar" msgid="4877645476959324760">"שורת סטטוס"</string>
+    <string name="overview" msgid="4018602013895926956">"סקירה"</string>
     <string name="demo_mode" msgid="2389163018533514619">"מצב הדגמה"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"הפעל מצב הדגמה"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"הצג מצב הדגמה"</string>
@@ -439,6 +440,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"הצג שניות בשעון בשורת הסטטוס. פעולה זו עשויה להשפיע על אורך חיי הסוללה."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"סידור מחדש של הגדרות מהירות"</string>
     <string name="show_brightness" msgid="6613930842805942519">"הצג בהירות בהגדרות מהירות"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"הפעל החלפת מצב מהירה"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"הפעל דפדוף באמצעות לחצן הסקירה"</string>
     <string name="experimental" msgid="6198182315536726162">"ניסיוניות"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"‏האם להפעיל את ה-Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"‏כדי לחבר את המקלדת לטאבלט, תחילה עליך להפעיל את ה-Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index f053ee4..adbf701 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"充電していないときには電池残量の割合をステータスバーアイコンに表示する"</string>
     <string name="quick_settings" msgid="10042998191725428">"クイック設定"</string>
     <string name="status_bar" msgid="4877645476959324760">"ステータスバー"</string>
+    <string name="overview" msgid="4018602013895926956">"概要"</string>
     <string name="demo_mode" msgid="2389163018533514619">"デモモード"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"デモモードを有効にする"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"デモモードを表示"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"ステータスバーに時計の秒を表示します。電池使用量に影響する可能性があります。"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"クイック設定を並べ替え"</string>
     <string name="show_brightness" msgid="6613930842805942519">"クイック設定に明るさ調整バーを表示する"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"高速切り替えを有効にする"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"[概要] ボタンによるページ切り替えを有効にします"</string>
     <string name="experimental" msgid="6198182315536726162">"試験運用版"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"BluetoothをONにしますか?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"タブレットでキーボードに接続するには、最初にBluetoothをONにする必要があります。"</string>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
index 8d754c4..17226e2 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ბატარეის დონის პროცენტის ჩვენება სტატუსის ზოლის ხატულას შიგნით, როდესაც არ იტენება"</string>
     <string name="quick_settings" msgid="10042998191725428">"სწრაფი პარამეტრები"</string>
     <string name="status_bar" msgid="4877645476959324760">"სტატუსის ზოლი"</string>
+    <string name="overview" msgid="4018602013895926956">"მიმოხილვა"</string>
     <string name="demo_mode" msgid="2389163018533514619">"დემო-რეჟიმი"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"დემო-რეჟიმის ჩართვა"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"დემო-რეჟიმის ჩვენება"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"საათის წამების ჩვენება სტატუსის ზოლში. შეიძლება გავლენა იქონიოს ბატარეაზე."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"სწრაფი პარამეტრების გადაწყობა"</string>
     <string name="show_brightness" msgid="6613930842805942519">"სიკაშკაშის ჩვენება სწრაფ პარამეტრებში"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"სწრაფი გადართვის ჩართვა"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"მიმოხილვის ღილაკის მეშვეობით გვერდების გადაფურცვლის ჩართვა"</string>
     <string name="experimental" msgid="6198182315536726162">"ექსპერიმენტული"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"გსურთ Bluetooth-ის ჩართვა?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"კლავიატურის ტაბლეტთან დასაკავშირებლად, ჯერ უნდა ჩართოთ Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml
index d0bd8bb..d111891 100644
--- a/packages/SystemUI/res/values-kk-rKZ/strings.xml
+++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Зарядталмай тұрғанда, күй жолағы белгішесінің ішінде батарея деңгейінің пайыздық шамасын көрсетеді"</string>
     <string name="quick_settings" msgid="10042998191725428">"Жылдам параметрлер"</string>
     <string name="status_bar" msgid="4877645476959324760">"Күйін көрсету жолағы"</string>
+    <string name="overview" msgid="4018602013895926956">"Шолу"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Демо режимі"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Демо режимін қосу"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Демо режимін көрсету"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Күйін көрсету жолағында сағат секундтарын көрсету. Батареяның қызмет көрсету мерзіміне әсер етуі мүмкін."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Жылдам параметрлерді қайта реттеу"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Жылдам параметрлерде жарықтықты көрсету"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Тез ауыстырып қосуды қосу"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"\"Шолу\" түймесі арқылы беттерді аударуды қосу"</string>
     <string name="experimental" msgid="6198182315536726162">"Эксперименттік"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth функциясын қосу керек пе?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Пернетақтаны планшетке қосу үшін алдымен Bluetooth функциясын қосу керек."</string>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index d77f480..6ed8f8b 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"បង្ហាញភាគរយនៃកម្រិតថាមពលថ្មនៅក្នុងរូបតំណាងរបារស្ថានភាពនៅពេលមិនសាកថ្ម"</string>
     <string name="quick_settings" msgid="10042998191725428">"ការកំណត់រហ័ស"</string>
     <string name="status_bar" msgid="4877645476959324760">"របារស្ថានភាព"</string>
+    <string name="overview" msgid="4018602013895926956">"ទិដ្ឋភាព"</string>
     <string name="demo_mode" msgid="2389163018533514619">"របៀបសាកល្បង"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"បើករបៀបសាកល្បង"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"បង្ហាញរបៀបសាកល្បង"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"បង្ហាញវិនាទីនៅលើរបារស្ថានភាពអាចនឹងប៉ះពាល់ដល់ថាមពលថ្ម។"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"រៀបចំការកំណត់រហ័សឡើងវិញ"</string>
     <string name="show_brightness" msgid="6613930842805942519">"បង្ហាញកម្រិតពន្លឺនៅក្នុងការកំណត់រហ័ស"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"បើកដំណើរការបិទ/បើករហ័ស"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"បើកដំណើការចុះទំព័រតាមរយៈប៊ូតុងទិដ្ឋភាព"</string>
     <string name="experimental" msgid="6198182315536726162">"ពិសោធន៍"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"បើកប៊្លូធូសឬ?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"ដើម្បីភ្ជាប់ក្តារចុចរបស់អ្នកជាមួយនឹងថេប្លេតរបស់អ្នក អ្នកត្រូវតែបើកប៊្លូធូសជាមុនសិន។"</string>
diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml
index 3b9dfc2..c329485 100644
--- a/packages/SystemUI/res/values-kn-rIN/strings.xml
+++ b/packages/SystemUI/res/values-kn-rIN/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ಚಾರ್ಜ್ ಮಾಡದಿರುವಾಗ ಸ್ಥಿತಿ ಪಟ್ಟಿ ಐಕಾನ್ ಒಳಗೆ ಬ್ಯಾಟರಿ ಮಟ್ಟದ ಶೇಕಡಾವನ್ನು ತೋರಿಸಿ"</string>
     <string name="quick_settings" msgid="10042998191725428">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‍ಗಳು"</string>
     <string name="status_bar" msgid="4877645476959324760">"ಸ್ಥಿತಿ ಪಟ್ಟಿ"</string>
+    <string name="overview" msgid="4018602013895926956">"ಸಮಗ್ರ ನೋಟ"</string>
     <string name="demo_mode" msgid="2389163018533514619">"ಡೆಮೊ ಮೋಡ್"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"ಡೆಮೊ ಮೋಡ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ಡೆಮೊ ಮೋಡ್ ತೋರಿಸು"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"ಸ್ಥಿತಿ ಪಟ್ಟಿಯಲ್ಲಿ ಗಡಿಯಾರ ಸೆಕೆಂಡುಗಳನ್ನು ತೋರಿಸು. ಇದಕ್ಕೆ ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯು ಪರಿಣಾಮಬೀರಬಹುದು."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‌‌ಗಳನ್ನು ಮರುಹೊಂದಿಸಿ"</string>
     <string name="show_brightness" msgid="6613930842805942519">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‌‌ಗಳಲ್ಲಿ ಪ್ರಖರತೆಯನ್ನು ತೋರಿಸಿ"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"ವೇಗವಾಗಿ ಟಾಗಲ್‌ ಮಾಡುವಿಕೆ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"ಸಮಗ್ರ ನೋಟದ ಬಟನ್‌ ಮೂಲಕ ಪೇಜಿಂಗ್‌ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="experimental" msgid="6198182315536726162">"ಪ್ರಾಯೋಗಿಕ"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡುವುದೇ?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ ಅನ್ನು ಟ್ಯಾಬ್ಲೆಟ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು, ನೀವು ಮೊದಲು ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ."</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index a5f14e4..1a956ec 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"충전 중이 아닌 경우 상태 표시줄 아이콘 내에 배터리 잔량 비율 표시"</string>
     <string name="quick_settings" msgid="10042998191725428">"빠른 설정"</string>
     <string name="status_bar" msgid="4877645476959324760">"상태 표시줄"</string>
+    <string name="overview" msgid="4018602013895926956">"개요"</string>
     <string name="demo_mode" msgid="2389163018533514619">"데모 모드"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"데모 모드 사용"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"데모 모드 표시"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"상태 표시줄에 시계 초 단위를 표시합니다. 배터리 수명에 영향을 줄 수도 있습니다."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"빠른 설정 재정렬"</string>
     <string name="show_brightness" msgid="6613930842805942519">"빠른 설정에서 밝기 표시"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"빠른 전환 사용"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"개요 버튼을 통한 페이징 사용"</string>
     <string name="experimental" msgid="6198182315536726162">"베타"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"블루투스를 켜시겠습니까?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"키보드를 태블릿에 연결하려면 먼저 블루투스를 켜야 합니다."</string>
diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml
index 2d6dc6f..0dbae90 100644
--- a/packages/SystemUI/res/values-ky-rKG/strings.xml
+++ b/packages/SystemUI/res/values-ky-rKG/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Түзмөк кубаттанбай турганда, батареянын деңгээли статус тилкесинде көрүнүп турат"</string>
     <string name="quick_settings" msgid="10042998191725428">"Ыкчам жөндөөлөр"</string>
     <string name="status_bar" msgid="4877645476959324760">"Абал тилкеси"</string>
+    <string name="overview" msgid="4018602013895926956">"Көз жүгүртүү"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Демо режими"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Демо режимин иштетүү"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Демо режимин көрсөтүү"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Абал тилкесинен сааттын секунддары көрсөтүлсүн. Батареянын кубаты көбүрөөк сарпталышы мүмкүн."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Ыкчам жөндөөлөрдү кайра коюу"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Ыкчам жөндөөлөрдөн жарык деңгээлин көрсөтүү"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Тез которгучту иштетүү"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Сереп баскычы менен барактоону иштетүү"</string>
     <string name="experimental" msgid="6198182315536726162">"Сынамык"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth күйгүзүлсүнбү?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Баскычтобуңузду планшетиңизге туташтыруу үчүн, адегенде Bluetooth\'ту күйгүзүшүңүз керек."</string>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index 82a82e6..c9e5448 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ສະ​ແດງ​ເປີ​ເຊັນ​ລະ​ດັບ​ແບັດ​ເຕີ​ຣີ​ຢູ່​ດ້ານ​ໃນ​ໄອ​ຄອນ​ແຖບ​ສະ​ຖາ​ນະ ເມື່ອ​ບໍ່​ສາກ​ຢູ່"</string>
     <string name="quick_settings" msgid="10042998191725428">"ການ​ຕັ້ງ​ຄ່າ​ດ່ວນ"</string>
     <string name="status_bar" msgid="4877645476959324760">"ແຖບສະຖານະ"</string>
+    <string name="overview" msgid="4018602013895926956">"​ພາບ​ຮວມ"</string>
     <string name="demo_mode" msgid="2389163018533514619">"​ໂໝດສາ​ທິດ"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"​ເປີດ​ໃຊ້​ໂໝດສາທິດ"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ສະ​ແດງ​ໂຫມດ​ສາ​ທິດ"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"ສະ​ແດງວິ​ນາ​ທີ​ໂມງ​ຢູ່​ໃນ​ແຖບ​ສະ​ຖາ​ນະ. ອາດ​ຈະ​ມີ​ຜົນ​ກະ​ທົບ​ຕໍ່​ອາ​ຍຸ​ແບັດ​ເຕີ​ຣີ."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"ຈັດ​ວາງ​ການ​ຕັ້ງ​ຄ່າ​ດ່ວນ​ຄືນ​ໃໝ່"</string>
     <string name="show_brightness" msgid="6613930842805942519">"ສະ​ແດງ​ຄວາມ​ແຈ້ງ​ຢູ່​ໃນ​ການ​ຕັ້ງ​ຄ່າ​ດ່ວນ"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"ເປີດນຳໃຊ້ການສັບປ່ຽນໄວ"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"ເປີດນຳໃຊ້ການແບ່ງໜ້າຜ່ານປຸ່ມພາບຮວມ"</string>
     <string name="experimental" msgid="6198182315536726162">"ຍັງຢູ່ໃນການທົດລອງ"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"ເປີດ​ໃຊ້ Bluetooth ບໍ່?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"ເພື່ອ​ເຊື່ອມ​ຕໍ່​ແປ້ນ​ພິມ​ຂອງ​ທ່ານ​ກັບ​ແທັບ​ເລັດ​ຂອງ​ທ່ານ, ກ່ອນ​ອື່ນ​ໝົດ​ທ່ານ​ຕ້ອງ​ເປີດ Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 2341e5a..d5292aa 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -411,6 +411,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Rodyti akumuliatoriaus įkrovos lygio procentinę vertę būsenos juostos piktogramoje, kai įrenginys nėra įkraunamas"</string>
     <string name="quick_settings" msgid="10042998191725428">"Spartieji nustatymai"</string>
     <string name="status_bar" msgid="4877645476959324760">"Būsenos juosta"</string>
+    <string name="overview" msgid="4018602013895926956">"Apžvalga"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demonstracinis režimas"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Įgalinti demonstracinį režimą"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Rodyti demonstraciniu režimu"</string>
@@ -439,6 +440,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Rodyti laikrodžio sekundes būsenos juostoje. Tai gali paveikti akumuliatoriaus naudojimo laiką."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Pertvarkyti sparčiuosius nustatymus"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Rodyti skaistį sparčiuosiuose nustatymuose"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Įgalinti greitą perjungimą"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Įgalinti puslapių kaitą per apžvalgos mygtuką"</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperimentinė versija"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Įjungti „Bluetooth“?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Kad galėtumėte prijungti klaviatūrą prie planšetinio kompiuterio, pirmiausia turite įjungti „Bluetooth“."</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 27663bd..34643b0 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -410,6 +410,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Rādīt akumulatora uzlādes līmeni procentos statusa joslas ikonā, kad netiek veikta uzlāde"</string>
     <string name="quick_settings" msgid="10042998191725428">"Ātrie iestatījumi"</string>
     <string name="status_bar" msgid="4877645476959324760">"Statusa josla"</string>
+    <string name="overview" msgid="4018602013895926956">"Pārskats"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demonstrācijas režīms"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Iespējot demonstrācijas režīmu"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Rādīt demonstrācijas režīmu"</string>
@@ -438,6 +439,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Statusa joslā rādīt pulksteņa sekundes. Var ietekmēt akumulatora darbības laiku."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Pārkārtot ātros iestatījumus"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Rādīt spilgtumu ātrajos iestatījumos"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Iespējot ātro pārslēgšanu"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Iespējot lapošanu, izmantojot pogu Pārskats"</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperimentāli"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vai ieslēgt Bluetooth savienojumu?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Lai pievienotu tastatūru planšetdatoram, vispirms ir jāieslēdz Bluetooth savienojums."</string>
diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml
index 7162a5c..310b192 100644
--- a/packages/SystemUI/res/values-mk-rMK/strings.xml
+++ b/packages/SystemUI/res/values-mk-rMK/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Прикажи процент на ниво на батеријата во внатрешноста на иконата со статусна лента кога не се полни"</string>
     <string name="quick_settings" msgid="10042998191725428">"Брзи поставки"</string>
     <string name="status_bar" msgid="4877645476959324760">"Статусна лента"</string>
+    <string name="overview" msgid="4018602013895926956">"Краток преглед"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Демо-режим"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Овозможи демо-режим"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Прикажи демо-режим"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Прикажи ги секундите на часовникот на статусната лента. Може да влијае на траењето на батеријата."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Преуредете ги Брзи поставки"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Прикажете ја осветленоста во Брзи поставки"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Овозможете брзо префрлање"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Овозможете прелистување преку копчето Краток преглед"</string>
     <string name="experimental" msgid="6198182315536726162">"Експериментално"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Да се вклучи Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"За да ја поврзете тастатурата со таблетот, најпрво треба да вклучите Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml
index 5df98ec..bdad812 100644
--- a/packages/SystemUI/res/values-ml-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ml-rIN/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ചാർജ്ജുചെയ്യാതിരിക്കുമ്പോൾ സ്റ്റാറ്റസ് ബാർ ഐക്കണിൽ ബാറ്ററി ലെവൽ ശതമാനം കാണിക്കുക"</string>
     <string name="quick_settings" msgid="10042998191725428">"ദ്രുത ക്രമീകരണം"</string>
     <string name="status_bar" msgid="4877645476959324760">"സ്റ്റാറ്റസ് ബാർ"</string>
+    <string name="overview" msgid="4018602013895926956">"ചുരുക്കവിവരണം"</string>
     <string name="demo_mode" msgid="2389163018533514619">"ഡെമോ മോഡ്"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"ഡെമോ മോഡ് പ്രവർത്തനക്ഷമമാക്കുക"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ഡെമോ മോഡ് കാണിക്കുക"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"സ്റ്റാറ്റസ് ബാറിൽ ക്ലോക്ക് സെക്കൻഡ് കാണിക്കുന്നത് ബാറ്ററിയുടെ ലൈഫിനെ ബാധിക്കാം."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"ദ്രുത ക്രമീകരണം പുനഃസജ്ജീകരിക്കുക"</string>
     <string name="show_brightness" msgid="6613930842805942519">"ദ്രുത ക്രമീകരണത്തിൽ തെളിച്ചം കാണിക്കുക"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"അതിവേഗ ടോഗിൾ പ്രവർത്തനക്ഷമമാക്കുക"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"ചുരുക്കവിവരണ ബട്ടൺ വഴി പേജിംഗ് പ്രവർത്തനക്ഷമമാക്കുക"</string>
     <string name="experimental" msgid="6198182315536726162">"പരീക്ഷണാത്മകം!"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth ഓണാക്കണോ?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"നിങ്ങളുടെ ടാബ്‌ലെറ്റുമായി കീബോർഡ് കണക്റ്റുചെയ്യുന്നതിന്, ആദ്യം Bluetooth ഓണാക്കേണ്ടതുണ്ട്."</string>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index f960dfa..f97be1ef 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -407,6 +407,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Тэжээлийн хувийг цэнэглээгүй байх үед статусын хэсэгт харуулна уу"</string>
     <string name="quick_settings" msgid="10042998191725428">"Түргэвчилсэн Tохиргоо"</string>
     <string name="status_bar" msgid="4877645476959324760">"Статус самбар"</string>
+    <string name="overview" msgid="4018602013895926956">"Тойм"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Демо горим"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Демо горимыг идэвхжүүлэх"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Демо горимыг харуулах"</string>
@@ -435,6 +436,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Статус талбарт цагийн секундыг харуулах. Энэ нь тэжээлийн цэнэгт нөлөөлж болно."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Түргэн тохиргоог дахин засварлах"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Түргэн тохиргоонд гэрэлтүүлэг харах"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Түргэн унтраах/асаахыг идэвхжүүлэх"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Тойм товчлуурыг ашиглан хуудас дугаарлахыг идэвхжүүлэх"</string>
     <string name="experimental" msgid="6198182315536726162">"Туршилтын"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth-г асаах уу?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Компьютерийн гараа таблетад холбохын тулд эхлээд Bluetooth-г асаана уу."</string>
diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml
index f599aca..f9ff472 100644
--- a/packages/SystemUI/res/values-mr-rIN/strings.xml
+++ b/packages/SystemUI/res/values-mr-rIN/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"चार्ज होत नसताना स्टेटस बार चिन्हामध्‍ये बॅटरी पातळी टक्केवारी दर्शवा"</string>
     <string name="quick_settings" msgid="10042998191725428">"दृत सेटिंग्ज"</string>
     <string name="status_bar" msgid="4877645476959324760">"स्टेटस बार"</string>
+    <string name="overview" msgid="4018602013895926956">"विहंगावलोकन"</string>
     <string name="demo_mode" msgid="2389163018533514619">"डेमो मोड"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड सक्षम करा"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"डेमो मोड दर्शवा"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"स्टेटस बारमध्‍ये घड्‍याळ सेकंद दर्शवा. कदाचित बॅटरी आयुष्‍य प्रभावित होऊ शकते."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"द्रुत सेटिंग्जची पुनर्रचना करा"</string>
     <string name="show_brightness" msgid="6613930842805942519">"द्रुत सेटिंग्जमध्‍ये चमक दर्शवा"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"जलद टॉगल करा सक्षम करा"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"विहंगावलोकन बटणाद्वारे लिखाण सक्षम करा"</string>
     <string name="experimental" msgid="6198182315536726162">"प्रायोगिक"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लूटुथ सुरू करायचे?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"आपला कीबोर्ड आपल्या टॅब्लेटसह कनेक्ट करण्यासाठी, आपल्याला प्रथम ब्लूटुथ चालू करणे आवश्यक आहे."</string>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
index 6511d30..254af9b 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Tunjukkan peratusan aras bateri dalam ikon bar status semasa tidak mengecas"</string>
     <string name="quick_settings" msgid="10042998191725428">"Tetapan Pantas"</string>
     <string name="status_bar" msgid="4877645476959324760">"Bar status"</string>
+    <string name="overview" msgid="4018602013895926956">"Ikhtisar"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Mod tunjuk cara"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Dayakan mod tunjuk cara"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Tunjukkan mod tunjuk cara"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Tunjukkan saat jam dalam bar status. Mungkin menjejaskan hayat bateri."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Susun Semula Tetapan Pantas"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Tunjukkan kecerahan dalam Tetapan Pantas"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Mendayakan togol pantas"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Mendayakan penghalaman melalui butang Ikhtisar"</string>
     <string name="experimental" msgid="6198182315536726162">"Percubaan"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Hidupkan Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Untuk menyambungkan papan kekunci anda dengan tablet, anda perlu menghidupkan Bluetooth terlebih dahulu."</string>
diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml
index c8551b7..9732fc4 100644
--- a/packages/SystemUI/res/values-my-rMM/strings.xml
+++ b/packages/SystemUI/res/values-my-rMM/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"အားမသွင်းနေစဉ်တွင် ဘတ်ထရီအဆင့် ရာခိုင်နှုန်းကို အခြေနေပြဘား အိုင်ကွန်တွင် ပြပါ"</string>
     <string name="quick_settings" msgid="10042998191725428">"အမြန် ဆက်တင်များ"</string>
     <string name="status_bar" msgid="4877645476959324760">"အခြေအနေပြနေရာ"</string>
+    <string name="overview" msgid="4018602013895926956">"ခြုံငုံသုံးသပ်ချက်"</string>
     <string name="demo_mode" msgid="2389163018533514619">"သရုပ်ပြ မုဒ်"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"သရုပ်ပြမုဒ်ကို ဖွင့်ရန်"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"သရုပ်ပြမုဒ် ပြရန်"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"အခြေအနေပြနေရာမှာ နာရီ စက္ကန့်များကို ပြပါ။ ဘက်ထရီ သက်တမ်းကို အကျိုးသက်ရောက်နိုင်တယ်။"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"အမြန် ဆက်တင်များကို ပြန်စီစဉ်ရန်"</string>
     <string name="show_brightness" msgid="6613930842805942519">"အမြန် ဆက်တင်များထဲက တောက်ပမှုကို ပြရန်"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"အမြန်ဖွင့်/ပိတ်ခြင်း ဖွင့်ရန်"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"ခြုံငုံသုံးသပ်ချက်ခလုတ်မှတစ်ဆင့် စာမျက်နှာခွဲခြင်းကို ဖွင့်ပါ"</string>
     <string name="experimental" msgid="6198182315536726162">"စမ်းသပ်ရေး"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"ဘလူးတုသ် ဖွင့်ရမလား။"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"ကီးဘုတ်ကို တပ်ဘလက်နှင့် ချိတ်ဆက်ရန်၊ ပမထဦးစွာ ဘလူးတုသ်ကို ဖွင့်ပါ။"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 7cfcbe2..6bdc8e3 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Vis batterinivåprosenten inni statusfeltikonet når du ikke lader"</string>
     <string name="quick_settings" msgid="10042998191725428">"Hurtiginnstillinger"</string>
     <string name="status_bar" msgid="4877645476959324760">"Statusrad"</string>
+    <string name="overview" msgid="4018602013895926956">"Oversikt"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demo-modus"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Slå på demo-modus"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Vis demo-modus"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Vis sekunder i statusfeltet på klokken. Det kan påvirke batteritiden."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Omorganiser hurtiginnstillingene"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Vis lysstyrke i hurtiginnstillingene"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Slå på hurtigveksling"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Slå på paginering via Oversikt-knappen"</string>
     <string name="experimental" msgid="6198182315536726162">"På forsøksstadiet"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vil du slå på Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"For å koble tastaturet til nettbrettet ditt må du først slå på Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml
index 078f783..72397bb 100644
--- a/packages/SystemUI/res/values-ne-rNP/strings.xml
+++ b/packages/SystemUI/res/values-ne-rNP/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"चार्ज नगरेको बेला वस्तुस्थिति पट्टी आइकन भित्र ब्याट्री प्रतिशत स्तर देखाउनुहोस्"</string>
     <string name="quick_settings" msgid="10042998191725428">"द्रुत सेटिङहरू"</string>
     <string name="status_bar" msgid="4877645476959324760">"स्थिति पट्टी"</string>
+    <string name="overview" msgid="4018602013895926956">"परिदृश्य"</string>
     <string name="demo_mode" msgid="2389163018533514619">"डेमो मोड"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड सक्षम गर्नुहोस्"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"डेमो मोड देखाउनुहोस्"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"वस्तुस्थिति पट्टीको घडीमा सेकेन्ड देखाउनुहोस्। ब्याट्री आयु प्रभावित हुन सक्छ।"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"द्रुत सेटिङहरू पुनः व्यवस्थित गर्नुहोस्"</string>
     <string name="show_brightness" msgid="6613930842805942519">"द्रुत सेटिङहरूमा उज्यालो देखाउनुहोस्"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"छिटो टगल सक्रिय गर्नुहोस्"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"परिदृश्य बटन मार्फत पेजिङ सक्रिय गर्नुहोस्"</string>
     <string name="experimental" msgid="6198182315536726162">"प्रयोगात्मक"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लुटुथ सक्रिय पार्ने हो?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"आफ्नो ट्याब्लेटसँग किबोर्ड जोड्न, पहिले तपाईँले ब्लुटुथ सक्रिय गर्नुपर्छ।"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index de4e58a..d7dce73 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Accupercentage weergeven in het pictogram op de statusbalk wanneer er niet wordt opgeladen"</string>
     <string name="quick_settings" msgid="10042998191725428">"Snelle instellingen"</string>
     <string name="status_bar" msgid="4877645476959324760">"Statusbalk"</string>
+    <string name="overview" msgid="4018602013895926956">"Overzicht"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demomodus"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Demomodus inschakelen"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Demomodus weergeven"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Klokseconden op de statusbalk weergeven. Kan van invloed zijn op de accuduur."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Snelle instellingen opnieuw indelen"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Helderheid weergeven in Snelle instellingen"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Snel schakelen inschakelen"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Paginering via de knop Overzicht inschakelen"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimenteel"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth inschakelen?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Als je je toetsenbord wilt verbinden met je tablet, moet je eerst Bluetooth inschakelen."</string>
diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa-rIN/strings.xml
index e5cbf1f..69ebcba 100644
--- a/packages/SystemUI/res/values-pa-rIN/strings.xml
+++ b/packages/SystemUI/res/values-pa-rIN/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ਜਦੋਂ ਚਾਰਜ ਨਾ ਹੋ ਰਹੀ ਹੋਵੇ ਤਾਂ ਸਥਿਤੀ ਬਾਰ ਦੇ ਅੰਦਰ ਬੈਟਰੀ ਪੱਧਰ ਪ੍ਰਤਿਸ਼ਤਤਾ ਦਿਖਾਓ"</string>
     <string name="quick_settings" msgid="10042998191725428">"ਤਤਕਾਲ ਸੈੱਟਿੰਗਜ਼"</string>
     <string name="status_bar" msgid="4877645476959324760">"ਸਥਿਤੀ ਬਾਰ"</string>
+    <string name="overview" msgid="4018602013895926956">"ਰੂਪ-ਰੇਖਾ"</string>
     <string name="demo_mode" msgid="2389163018533514619">"ਡੈਮੋ ਮੋਡ"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"ਡੈਮੋ ਮੋਡ ਸਮਰੱਥ ਬਣਾਓ"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ਡੈਮੋ ਮੋਡ ਦੇਖੋ"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"ਸਥਿਤੀ ਬਾਰ ਵਿੱਚ ਘੜੀ ਸਕਿੰਟ ਦਿਖਾਓ। ਬੈਟਰੀ ਸਮਰੱਥਾ ਤੇ ਅਸਰ ਪੈ ਸਕਦਾ ਹੈ।"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਦੁਬਾਰਾ ਕ੍ਰਮ ਦਿਓ"</string>
     <string name="show_brightness" msgid="6613930842805942519">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਮਕ ਦਿਖਾਓ"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"ਤੇਜ਼ ਬਦਲੋ ਨੂੰ ਯੋਗ ਬਣਾਓ"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"ਰੂਪ-ਰੇਖਾ ਬਟਨ ਦੁਆਰਾ ਪੇਜਿੰਗ ਨੂੰ ਯੋਗ ਬਣਾਓ"</string>
     <string name="experimental" msgid="6198182315536726162">"ਪ੍ਰਯੋਗਾਤਮਿਕ"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth ਚਾਲੂ ਕਰੋ?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"ਆਪਣੇ ਟੈਬਲੇਟ ਨਾਲ ਆਪਣਾ ਕੀ-ਬੋਰਡ ਕਨੈਕਟ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ Bluetooth ਚਾਲੂ ਕਰਨ ਦੀ ਜ਼ਰੂਰਤ ਹੈ।"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 65d19bb..f777255 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -411,6 +411,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Pokaż procent naładowania baterii w ikonie na pasku stanu, gdy telefon się nie ładuje"</string>
     <string name="quick_settings" msgid="10042998191725428">"Szybkie ustawienia"</string>
     <string name="status_bar" msgid="4877645476959324760">"Pasek stanu"</string>
+    <string name="overview" msgid="4018602013895926956">"Przegląd"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Tryb demonstracyjny"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Włącz tryb demonstracyjny"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Pokaż tryb demonstracyjny"</string>
@@ -439,6 +440,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Pokaż sekundy na zegarku na pasku stanu. Może mieć wpływ na czas pracy baterii."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Uporządkuj Szybkie ustawienia"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Pokaż jasność w Szybkich ustawieniach"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Włącz szybkie przełączanie"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Włącz stronicowanie za pomocą przycisku Przegląd"</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperymentalne"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Włączyć Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Aby połączyć klawiaturę z tabletem, musisz najpierw włączyć Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 8448717..2192bda 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Mostrar porcentagem de nível de bateria dentro do ícone da barra de status quando não estiver carregando"</string>
     <string name="quick_settings" msgid="10042998191725428">"Configurações rápidas"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barra de status"</string>
+    <string name="overview" msgid="4018602013895926956">"Visão geral"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Modo de demonstração"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Ativar modo de demonstração"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demonstração"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostrar segundos do relógio na barra de status. Pode afetar a duração da bateria."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar \"Configurações rápidas\""</string>
     <string name="show_brightness" msgid="6613930842805942519">"Mostrar brilho nas \"Configurações rápidas\""</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Ativar alternância rápida"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Ativar paginação pelo botão \"Visão geral\""</string>
     <string name="experimental" msgid="6198182315536726162">"Experimentais"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Ativar o Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Para conectar o teclado ao tablet, é preciso primeiro ativar o Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 6abe9a9..ebdd653 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Mostrar a percentagem do nível da bateria no ícone da barra de estado quando não estiver a carregar"</string>
     <string name="quick_settings" msgid="10042998191725428">"Definições rápidas"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barra de estado"</string>
+    <string name="overview" msgid="4018602013895926956">"Vista geral"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Modo de demonstração"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Ativar o modo de demonstração"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demonstração"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostrar segundos do relógio na barra de estado. Pode afetar a autonomia da bateria."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar as Definições rápidas"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Mostrar luminosidade nas Definições rápidas"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Ativar alternância rápida"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Ativar a paginação através do botão Vista geral"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Pretende ativar o Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Para ligar o teclado ao tablet, tem de ativar primeiro o Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 8448717..2192bda 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Mostrar porcentagem de nível de bateria dentro do ícone da barra de status quando não estiver carregando"</string>
     <string name="quick_settings" msgid="10042998191725428">"Configurações rápidas"</string>
     <string name="status_bar" msgid="4877645476959324760">"Barra de status"</string>
+    <string name="overview" msgid="4018602013895926956">"Visão geral"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Modo de demonstração"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Ativar modo de demonstração"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demonstração"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostrar segundos do relógio na barra de status. Pode afetar a duração da bateria."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar \"Configurações rápidas\""</string>
     <string name="show_brightness" msgid="6613930842805942519">"Mostrar brilho nas \"Configurações rápidas\""</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Ativar alternância rápida"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Ativar paginação pelo botão \"Visão geral\""</string>
     <string name="experimental" msgid="6198182315536726162">"Experimentais"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Ativar o Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Para conectar o teclado ao tablet, é preciso primeiro ativar o Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index b45347f..c749ae1 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -410,6 +410,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Afișați procentajul cu nivelul bateriei în interiorul pictogramei din bara de stare, atunci când nu se încarcă"</string>
     <string name="quick_settings" msgid="10042998191725428">"Setări rapide"</string>
     <string name="status_bar" msgid="4877645476959324760">"Bară de stare"</string>
+    <string name="overview" msgid="4018602013895926956">"Recente"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Modul demonstrativ"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Activați modul demonstrativ"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Afișați modul demonstrativ"</string>
@@ -438,6 +439,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Afișează secundele pe ceas în bara de stare. Poate afecta autonomia bateriei."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Rearanjați Setările rapide"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Afișați luminozitatea în Setările rapide"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Activați comutarea rapidă"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Activați paginarea prin butonul Recente"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimentale"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Activați Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Pentru a conecta tastatura la tabletă, mai întâi trebuie să activați Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 96971ea..0de29f0 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -411,6 +411,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Когда устройство работает в автономном режиме, процент заряда батареи показан в строке состояния"</string>
     <string name="quick_settings" msgid="10042998191725428">"Быстрые настройки"</string>
     <string name="status_bar" msgid="4877645476959324760">"Строка состояния"</string>
+    <string name="overview" msgid="4018602013895926956">"Обзор"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Демонстрация"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Включить демонстрационный режим"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Перейти в демонстрационный режим"</string>
@@ -439,6 +440,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Показывать в строке состояния время с точностью до секунды (заряд батареи может расходоваться быстрее)."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Изменить порядок Быстрых настроек"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Добавить яркость в Быстрые настройки"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Быстрая разбивка на страницы"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Разбивать список недавних приложений на страницы с помощью кнопки \"Обзор\"."</string>
     <string name="experimental" msgid="6198182315536726162">"Экспериментальная функция"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Подключение по Bluetooth"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Чтобы подключить клавиатуру к планшету, включите Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml
index 64d460e..07c9197 100644
--- a/packages/SystemUI/res/values-si-rLK/strings.xml
+++ b/packages/SystemUI/res/values-si-rLK/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ආරෝපණය නොවන විට තත්ත්ව තීරු නිරූපකය ඇතුළත බැටරි මට්ටම් ප්‍රතිශතය පෙන්වන්න"</string>
     <string name="quick_settings" msgid="10042998191725428">"ඉක්මන් සැකසීම්"</string>
     <string name="status_bar" msgid="4877645476959324760">"තත්ත්ව තීරුව"</string>
+    <string name="overview" msgid="4018602013895926956">"දළ විශ්ලේෂණය"</string>
     <string name="demo_mode" msgid="2389163018533514619">"ආදර්ශන ප්‍රකාරය"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"ආදර්ශන ප්‍රකාරය සබල කරන්න"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ආදර්ශන ප්‍රකාරය පෙන්වන්න"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"තත්ත්ව තීරුවෙහි ඔරලෝසු තත්පර පෙන්වන්න. බැටරි ආයු කාලයට බලපෑමට හැකිය."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"ඉක්මන් සැකසීම් යළි පිළිවෙළට සකසන්න"</string>
     <string name="show_brightness" msgid="6613930842805942519">"ඉක්මන් සැකසීම්වල දීප්තිය පෙන්වන්න"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"වේගවත් ටොගල කිරීම සබල කරන්න"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"දළ විශ්ලේෂණ බොත්තම හරහා පේජින් සබල කරන්න"</string>
     <string name="experimental" msgid="6198182315536726162">"පරීක්ෂණාත්මක"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"බ්ලූටූත් ක්‍රියාත්මක කරන්නද?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"ඔබේ යතුරු පුවරුව ඔබේ ටැබ්ලට් පරිගණකයට සම්බන්ධ කිරීමට, ඔබ පළමුව බ්ලූටූත් ක්‍රියාත්මක කළ යුතුය."</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index def49e9..fe3c26b 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -411,6 +411,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Percentuálne zobrazenie nabitia batérie vnútri ikony v stavovom riadku, keď neprebieha nabíjanie"</string>
     <string name="quick_settings" msgid="10042998191725428">"Rýchle nastavenia"</string>
     <string name="status_bar" msgid="4877645476959324760">"Stavový riadok"</string>
+    <string name="overview" msgid="4018602013895926956">"Prehľad"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Režim ukážky"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Povoliť režim ukážky"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Zobraziť režim ukážky"</string>
@@ -439,6 +440,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Zobrazí sekundy v stavovom riadku. Môže to ovplyvňovať výdrž batérie."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Zmeniť usporiadanie Rýchlych nastavení"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Zobraziť jas v Rýchlych nastaveniach"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Povoliť rýchle prepínanie"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Povoľte prechádzanie po stranách prostredníctvom tlačidla Prehľad"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimentálne"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Zapnúť Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Ak chcete klávesnicu pripojiť k tabletu, najprv musíte zapnúť Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 14d3bdb..6b32443 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -411,6 +411,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Prikaz odstotka napolnjenosti akumulatorja znotraj ikone v vrstici stanja, ko se ne polni"</string>
     <string name="quick_settings" msgid="10042998191725428">"Hitre nastavitve"</string>
     <string name="status_bar" msgid="4877645476959324760">"Vrstica stanja"</string>
+    <string name="overview" msgid="4018602013895926956">"Pregled"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Predstavitveni način"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Omogočanje predstavitvenega načina"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Prikaz predstavitvenega načina"</string>
@@ -439,6 +440,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Prikaže sekunde pri uri v vrstici stanja. To lahko vpliva na čas delovanja pri akumulatorskem napajanju."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Preuredi hitre nastavitve"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Prikaz svetlosti v hitrih nastavitvah"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Omogoči hiter preklop"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Omogoči pregled strani z gumbom za pregled"</string>
     <string name="experimental" msgid="6198182315536726162">"Poskusno"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Želite vklopiti Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Če želite povezati tipkovnico in tablični računalnik, vklopite Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-sq-rAL/strings.xml b/packages/SystemUI/res/values-sq-rAL/strings.xml
index 0316c24..255fb09 100644
--- a/packages/SystemUI/res/values-sq-rAL/strings.xml
+++ b/packages/SystemUI/res/values-sq-rAL/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Shfaq përqindjen e nivelit të baterisë brenda ikonës së shiritit të statusit kur nuk është duke u ngarkuar."</string>
     <string name="quick_settings" msgid="10042998191725428">"Cilësimet e shpejta"</string>
     <string name="status_bar" msgid="4877645476959324760">"Shiriti i statusit"</string>
+    <string name="overview" msgid="4018602013895926956">"Përmbledhje"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Modaliteti i demonstrimit"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Aktivizo modalitetin e demonstrimit"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Shfaq modalitetin e demonstrimit"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Trego sekondat e orës në shiritin e statusit. Mund të ndikojë te jeta e baterisë."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Risistemo Cilësimet e shpejta"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Shfaq ndriçimin te Cilësimet e shpejta"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Aktivizo ndërrimin e shpejtë"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Aktivizo shfletimin përmes butonit \"Përmbledhje\""</string>
     <string name="experimental" msgid="6198182315536726162">"Eksperimentale"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Të aktivizohet \"bluetooth-i\"?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Për të lidhur tastierën me tabletin, në fillim duhet të aktivizosh \"bluetooth-in\"."</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 2139441..25232c0 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -410,6 +410,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Приказивање нивоа напуњености батерије у процентима унутар иконе на статусној траци када се батерија не пуни"</string>
     <string name="quick_settings" msgid="10042998191725428">"Брза подешавања"</string>
     <string name="status_bar" msgid="4877645476959324760">"Статусна трака"</string>
+    <string name="overview" msgid="4018602013895926956">"Преглед"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Режим демонстрације"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Омогући режим демонстрације"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Прикажи режим демонстрације"</string>
@@ -438,6 +439,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Секунде на сату се приказују на статусној траци. То може да утиче на трајање батерије."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Преуреди Брза подешавања"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Прикажи осветљеност у Брзим подешавањима"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Омогући брзо листање"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Омогућава листање помоћу дугмета Преглед"</string>
     <string name="experimental" msgid="6198182315536726162">"Експериментално"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Желите ли да укључите Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Да бисте повезали тастатуру са таблетом, прво морате да укључите Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index ad7bffd..035b2e7 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Visa batterinivå i procent i statusfältsikonen när enheten inte laddas"</string>
     <string name="quick_settings" msgid="10042998191725428">"Snabbinställningar"</string>
     <string name="status_bar" msgid="4877645476959324760">"Statusfält"</string>
+    <string name="overview" msgid="4018602013895926956">"Översikt"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demoläge"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Aktivera demoläge"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Visa demoläge"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Visa klocksekunder i statusfältet. Detta kan påverka batteritiden."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Ordna snabbinställningarna"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Visa ljusstyrka i snabbinställningarna"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Aktivera snabb aktivering och inaktivering"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Aktivera sidindelning via knappen Översikt"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimentella"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vill du aktivera Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Om du vill ansluta tangentbordet till surfplattan måste du först aktivera Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 244e58d..7b93044 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Onyesha asilimia ya kiwango cha betri ndani ya aikoni ya sehemu ya arifa inapokuwa haichaji"</string>
     <string name="quick_settings" msgid="10042998191725428">"Mipangilio ya Haraka"</string>
     <string name="status_bar" msgid="4877645476959324760">"Sehemu ya kuonyesha hali"</string>
+    <string name="overview" msgid="4018602013895926956">"Muhtasari"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Hali ya onyesho"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Washa hali ya onyesho"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Onyesha hali ya onyesho"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Onyesha sekunde za saa katika sehemu ya arifa. Inaweza kuathiri muda wa matumizi ya betri."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Panga Upya Mipangilio ya Haraka"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Onyesha unga\'avu katika Mipangilio ya Haraka"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Washa kugeuza haraka"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Washa nambari za ukurasa kupitia kitufe cha Muhtasari"</string>
     <string name="experimental" msgid="6198182315536726162">"Ya majaribio"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Je, ungependa kuwasha Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Ili uunganishe Kibodi yako kwenye kompyuta yako kibao, lazima kwanza uwashe Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml
index 9bd280d..880605c 100644
--- a/packages/SystemUI/res/values-ta-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ta-rIN/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"சார்ஜ் செய்யாத போது, நிலைப் பட்டி ஐகானின் உள்ளே பேட்டரி அளவு சதவீதத்தைக் காட்டும்"</string>
     <string name="quick_settings" msgid="10042998191725428">"உடனடி அமைப்புகள்"</string>
     <string name="status_bar" msgid="4877645476959324760">"நிலைப் பட்டி"</string>
+    <string name="overview" msgid="4018602013895926956">"மேலோட்டப் பார்வை"</string>
     <string name="demo_mode" msgid="2389163018533514619">"டெமோ முறை"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"டெமோ முறையை இயக்கு"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"டெமோ முறையைக் காட்டு"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"நிலைப் பட்டியில் கடிகார வினாடிகளைக் காட்டும். பேட்டரியின் ஆயுளைக் குறைக்கலாம்."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"விரைவு அமைப்புகளை மறுவரிசைப்படுத்து"</string>
     <string name="show_brightness" msgid="6613930842805942519">"விரைவு அமைப்புகளில் ஒளிர்வுப் பட்டியைக் காட்டு"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"வேகமாக மாறுவதை இயக்கு"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"மேலோட்டப் பார்வை பொத்தான் வழியாக பேஜிங்கை இயக்கும்"</string>
     <string name="experimental" msgid="6198182315536726162">"சோதனை முயற்சி"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"புளூடூத்தை இயக்கவா?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"உங்கள் டேப்லெட்டுடன் விசைப்பலகையை இணைக்க, முதலில் புளூடூத்தை இயக்க வேண்டும்."</string>
diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml
index 6e16a95..4b96106 100644
--- a/packages/SystemUI/res/values-te-rIN/strings.xml
+++ b/packages/SystemUI/res/values-te-rIN/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ఛార్జింగ్‌లో లేనప్పుడు స్థితి పట్టీ చిహ్నం లోపల బ్యాటరీ స్థాయి శాతం చూపుతుంది"</string>
     <string name="quick_settings" msgid="10042998191725428">"శీఘ్ర సెట్టింగ్‌లు"</string>
     <string name="status_bar" msgid="4877645476959324760">"స్థితి పట్టీ"</string>
+    <string name="overview" msgid="4018602013895926956">"స్థూలదృష్టి"</string>
     <string name="demo_mode" msgid="2389163018533514619">"డెమో మోడ్"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"డెమో మోడ్ ప్రారంభించండి"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"డెమో మోడ్ చూపు"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"స్థితి పట్టీలో గడియారం సెకన్లు చూపుతుంది. బ్యాటరీ శక్తి ప్రభావితం చేయవచ్చు."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"శీఘ్ర సెట్టింగ్‌ల ఏర్పాటు క్రమం మార్చు"</string>
     <string name="show_brightness" msgid="6613930842805942519">"శీఘ్ర సెట్టింగ్‌ల్లో ప్రకాశం చూపు"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"వేగవంతమైన టోగుల్‌ను ప్రారంభించు"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"స్థూలదృష్టి బటన్ ద్వారా పేజింగ్‌ను ప్రారంభిస్తుంది"</string>
     <string name="experimental" msgid="6198182315536726162">"ప్రయోగాత్మకం"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"బ్లూటూత్ ఆన్ చేయాలా?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"మీ కీబోర్డ్‌ను మీ టాబ్లెట్‌తో కనెక్ట్ చేయడానికి, మీరు ముందుగా బ్లూటూత్ ఆన్ చేయాలి."</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 256b497..3681246 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"แสดงเปอร์เซ็นต์ของระดับแบตเตอรี่ภายในไอคอนแถบสถานะเมื่อไม่มีการชาร์จ"</string>
     <string name="quick_settings" msgid="10042998191725428">"การตั้งค่าด่วน"</string>
     <string name="status_bar" msgid="4877645476959324760">"แถบสถานะ"</string>
+    <string name="overview" msgid="4018602013895926956">"ภาพรวม"</string>
     <string name="demo_mode" msgid="2389163018533514619">"โหมดสาธิต"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"เปิดใช้โหมดสาธิต"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"แสดงโหมดสาธิต"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"แสดงวินาทีของนาฬิกาในแถบสถานะ อาจส่งผลต่ออายุแบตเตอรี"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"จัดเรียงการตั้งค่าด่วนใหม่"</string>
     <string name="show_brightness" msgid="6613930842805942519">"แสดงความสว่างในการตั้งค่าด่วน"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"เปิดใช้การสลับแบบด่วน"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"เปิดใช้การสลับหน้าผ่านทางปุ่มภาพรวม"</string>
     <string name="experimental" msgid="6198182315536726162">"ทดสอบ"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"เปิดบลูทูธไหม"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"หากต้องการเชื่อมต่อแป้นพิมพ์กับแท็บเล็ต คุณต้องเปิดบลูทูธก่อน"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 66b0b6b..e2f8af0 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Ipakita ang porsyento ng antas ng baterya na nasa icon ng status bar kapag nagcha-charge"</string>
     <string name="quick_settings" msgid="10042998191725428">"Mga Maikling Setting"</string>
     <string name="status_bar" msgid="4877645476959324760">"Status bar"</string>
+    <string name="overview" msgid="4018602013895926956">"Pangkalahatang-ideya"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demo mode"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"I-enable ang demo mode"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Ipakita ang demo mode"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Ipakita ang mga segundo ng orasan sa status bar. Maaaring makaapekto sa tagal ng baterya."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Ayusing Muli ang Mga Mabilisang Setting"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Ipakita ang liwanag sa Mga Mabilisang Setting"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"I-enable ang mabilis na pag-toggle"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"I-enable ang paging sa pamamagitan ng button na Pangkalahatang-ideya"</string>
     <string name="experimental" msgid="6198182315536726162">"Pang-eksperimento"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"I-on ang Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Upang ikonekta ang iyong keyboard sa iyong tablet, kailangan mo munang i-on ang Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 5a6e5db..68cab35 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Şarj olmazken durum çubuğu simgesinin içinde pil düzeyi yüzdesini göster"</string>
     <string name="quick_settings" msgid="10042998191725428">"Hızlı Ayarlar"</string>
     <string name="status_bar" msgid="4877645476959324760">"Durum çubuğu"</string>
+    <string name="overview" msgid="4018602013895926956">"Genel Bakış"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demo modu"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Demo modunu etkinleştir"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Demo modunu göster"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Durum çubuğunda saatin saniyelerini gösterir. Pil ömrünü etkileyebilir."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Hızlı Ayarlar\'ı Yeniden Düzenle"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Hızlı Ayarlar\'da parlaklığı göster"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Hızlı açma/kapatmayı etkinleştir"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Genel bakış düğmesiyle sayfalara ayırmayı etkinleştirin"</string>
     <string name="experimental" msgid="6198182315536726162">"Deneysel"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth açılsın mı?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Klavyenizi tabletinize bağlamak için önce Bluetooth\'u açmanız gerekir."</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index afa9077..e76fa6c 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -411,6 +411,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Показувати заряд акумулятора у відсотках в рядку стану, коли пристрій не заряджається"</string>
     <string name="quick_settings" msgid="10042998191725428">"Швидкі налаштування"</string>
     <string name="status_bar" msgid="4877645476959324760">"Рядок стану"</string>
+    <string name="overview" msgid="4018602013895926956">"Огляд"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Демонстраційний режим"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Увімкнути демонстраційний режим"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Показати демонстраційний режим"</string>
@@ -439,6 +440,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Показувати секунди на годиннику в рядку стану. Акумулятор може розряджатися швидше."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Упорядкувати швидкі налаштування"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Показувати панель яскравості у швидких налаштуваннях"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Увімкнути швидкий перехід"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Увімкнути перехід між сторінками за допомогою кнопки \"Огляд\""</string>
     <string name="experimental" msgid="6198182315536726162">"Експериментальні налаштування"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Увімкнути Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Щоб під’єднати клавіатуру до планшета, спершу потрібно ввімкнути Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml
index 75160cd9..63ce6c9 100644
--- a/packages/SystemUI/res/values-ur-rPK/strings.xml
+++ b/packages/SystemUI/res/values-ur-rPK/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"جب چارج نہ ہو رہا ہو تو بیٹری کی سطح کی فیصد اسٹیٹس بار آئیکن کے اندر دکھائیں"</string>
     <string name="quick_settings" msgid="10042998191725428">"فوری ترتیبات"</string>
     <string name="status_bar" msgid="4877645476959324760">"اسٹیٹس بار"</string>
+    <string name="overview" msgid="4018602013895926956">"مجموعی جائزہ"</string>
     <string name="demo_mode" msgid="2389163018533514619">"ڈیمو موڈ"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"ڈیمو موڈ فعال کریں"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ڈیمو موڈ دکھائیں"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"گھڑی کے سیکنڈز اسٹیٹس بار میں دکھائیں۔ اس کا بیٹری کی زندگی پر اثر پڑ سکتا ہے۔"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"فوری ترتیبات کو دوبارہ ترتیب دیں"</string>
     <string name="show_brightness" msgid="6613930842805942519">"فوری ترتیبات میں چمکیلا پن دکھائیں"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"تیز ٹوگل فعال کریں"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"مجموعی جائزہ بٹن کے ذریعے پیجنگ فعال کریں"</string>
     <string name="experimental" msgid="6198182315536726162">"تجرباتی"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"بلوٹوتھ آن کریں؟"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"اپنے کی بورڈ کو اپنے ٹیبلٹ کے ساتھ منسلک کرنے کیلئے پہلے آپ کو اپنا بلو ٹوتھ آن کرنا ہو گا۔"</string>
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml
index 5ddd115..44bf45f 100644
--- a/packages/SystemUI/res/values-uz-rUZ/strings.xml
+++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Batareya quvvat olmayotgan vaqtda uning foizi holat qatorida ko‘rsatilsin"</string>
     <string name="quick_settings" msgid="10042998191725428">"Tezkor sozlamalar"</string>
     <string name="status_bar" msgid="4877645476959324760">"Holat qatori"</string>
+    <string name="overview" msgid="4018602013895926956">"Umumiy ma’lumot"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Demo rejim"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Demo rejimni yoqish"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Demo rejimni ko‘rsatish"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Holat panelida soat soniyalari ko‘rsatilsin. Bu batareya resursiga ta’sir qilishi mumkin."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Tezkor sozlamalarni qayta tartiblash"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Tezkor sozlamalarda yorqinlikni ko‘rsatish"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Tezkor almashtirishni yoqish"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Umumiy ma’lumot tugmasi orqali sahifalashni yoqish"</string>
     <string name="experimental" msgid="6198182315536726162">"Tajribaviy"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth yoqilsinmi?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Klaviaturani planshetingizga ulash uchun Bluetooth xizmatini yoqishingiz kerak."</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 1a5cc8b..e825b11 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Hiển thị tỷ lệ phần trăm mức pin bên trong biểu tượng thanh trạng thái khi không sạc"</string>
     <string name="quick_settings" msgid="10042998191725428">"Cài đặt nhanh"</string>
     <string name="status_bar" msgid="4877645476959324760">"Thanh trạng thái"</string>
+    <string name="overview" msgid="4018602013895926956">"Tổng quan"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Chế độ trình diễn"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Bật chế độ trình diễn"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Hiển thị chế độ trình diễn"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Hiển thị giây đồng hồ trong thanh trạng thái. Có thể ảnh hưởng đến thời lượng pin."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Sắp xếp lại Cài đặt nhanh"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Hiển thị độ sáng trong Cài đặt nhanh"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Bật chuyển đổi nhanh"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Bật đánh số trang qua nút Tổng quan"</string>
     <string name="experimental" msgid="6198182315536726162">"Thử nghiệm"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bật Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Để kết nối bàn phím với máy tính bảng, trước tiên, bạn phải bật Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 0c6b2c9..ef7cd8b 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"未充电时在状态栏图标内显示电池电量百分比"</string>
     <string name="quick_settings" msgid="10042998191725428">"快速设置"</string>
     <string name="status_bar" msgid="4877645476959324760">"状态栏"</string>
+    <string name="overview" msgid="4018602013895926956">"概览"</string>
     <string name="demo_mode" msgid="2389163018533514619">"演示模式"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"启用演示模式"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"显示演示模式"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"在状态栏中显示时钟的秒数。这可能会影响电池的续航时间。"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"重新排列快速设置"</string>
     <string name="show_brightness" msgid="6613930842805942519">"在快速设置中显示亮度栏"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"启用快速切换"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"通过“概览”按钮启用分页功能"</string>
     <string name="experimental" msgid="6198182315536726162">"实验性"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"要开启蓝牙吗?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"要将您的键盘连接到平板电脑,您必须先开启蓝牙。"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index ff97841..5d8b2d8 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"非充電時,在狀態列圖示顯示電量百分比"</string>
     <string name="quick_settings" msgid="10042998191725428">"快速設定"</string>
     <string name="status_bar" msgid="4877645476959324760">"狀態列"</string>
+    <string name="overview" msgid="4018602013895926956">"概覽"</string>
     <string name="demo_mode" msgid="2389163018533514619">"示範模式"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"啟用示範模式"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"顯示示範模式"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"在狀態列中顯示時鐘秒數,但可能會影響電池壽命。"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"重新排列快速設定"</string>
     <string name="show_brightness" msgid="6613930842805942519">"在快速設定顯示亮度"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"啟用快速切換"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"透過「概覽」按鈕啟用分頁"</string>
     <string name="experimental" msgid="6198182315536726162">"實驗版"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"要開啟藍牙嗎?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"如要將鍵盤連接至平板電腦,請先開啟藍牙。"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 8d238d5..c90744c 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"未充電時在狀態列圖示中顯示電量百分比"</string>
     <string name="quick_settings" msgid="10042998191725428">"快速設定"</string>
     <string name="status_bar" msgid="4877645476959324760">"狀態列"</string>
+    <string name="overview" msgid="4018602013895926956">"總覽"</string>
     <string name="demo_mode" msgid="2389163018533514619">"示範模式"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"啟用示範模式"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"顯示示範模式"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"在狀態列中顯示時鐘秒數。這可能會影響電池續航力。"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"重新排列快速設定"</string>
     <string name="show_brightness" msgid="6613930842805942519">"在快速設定中顯示亮度"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"啟用快速切換"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"啟用透過 [總覽] 按鈕切換分頁的功能"</string>
     <string name="experimental" msgid="6198182315536726162">"實驗性"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"要開啟藍牙功能嗎?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"如要將鍵盤連線到平板電腦,您必須先開啟藍牙。"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index f77e01a..9eff1e9 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -409,6 +409,7 @@
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Bonisa amaphesenti eleveli yebhethri ngaphakathi kwesithonjana sebha yesimo uma kungashajwa"</string>
     <string name="quick_settings" msgid="10042998191725428">"Izilungiselelo ezisheshayo"</string>
     <string name="status_bar" msgid="4877645476959324760">"Ibha yesimo"</string>
+    <string name="overview" msgid="4018602013895926956">"Okufingqiwe"</string>
     <string name="demo_mode" msgid="2389163018533514619">"Imodi yedemo"</string>
     <string name="enable_demo_mode" msgid="4844205668718636518">"Nika amandla imodi yedemo"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Bonisa imodi yedemo"</string>
@@ -437,6 +438,8 @@
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Bonisa amasekhondi wewashi kubha yesimo. Ingathinta impilo yebhethri."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"Hlela kabusha izilungiselelo ezisheshayo"</string>
     <string name="show_brightness" msgid="6613930842805942519">"Bonisa ukukhanya kuzilungiselelo ezisheshayo"</string>
+    <string name="overview_fast_toggle_via_button" msgid="8316769524084143500">"Nika amandla ukuguqula ngokushesha"</string>
+    <string name="overview_fast_toggle_via_button_desc" msgid="5477262463217629262">"Nika amandla wenkinobho yokubuka konke"</string>
     <string name="experimental" msgid="6198182315536726162">"Okokulinga"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vula i-Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Ukuze uxhume ikhibhodi yakho nethebhulethi yakho, kufanele uqale ngokuvula i-Bluetooth."</string>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index fa9c4bb..83edc96 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -383,6 +383,12 @@
                 @Override
                 public void onUserSwitching(int newUserId, IRemoteCallback reply) {
                     mUserInfoController.reloadUserInfo();
+                    if (reply != null) {
+                        try {
+                            reply.sendResult(null);
+                        } catch (RemoteException e) {
+                        }
+                    }
                 }
 
                 @Override
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 9f1dc0a..3d358ec 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -64,21 +64,17 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.text.TextUtils.SimpleStringSplitter;
-import android.util.Pools.Pool;
-import android.util.Pools.SimplePool;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.view.Display;
 import android.view.IWindow;
 import android.view.InputDevice;
-import android.view.InputEventConsistencyVerifier;
 import android.view.KeyCharacterMap;
 import android.view.KeyEvent;
 import android.view.MagnificationSpec;
 import android.view.WindowInfo;
 import android.view.WindowManager;
 import android.view.WindowManagerInternal;
-import android.view.WindowManagerPolicy;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityInteractionClient;
 import android.view.accessibility.AccessibilityManager;
@@ -146,8 +142,6 @@
 
     private static final int OWN_PROCESS_ID = android.os.Process.myPid();
 
-    private static final int MAX_POOL_SIZE = 10;
-
     private static final int WINDOW_ID_UNKNOWN = -1;
 
     private static int sIdCounter = 0;
@@ -158,9 +152,6 @@
 
     private final Object mLock = new Object();
 
-    private final Pool<PendingEvent> mPendingEventPool =
-            new SimplePool<>(MAX_POOL_SIZE);
-
     private final SimpleStringSplitter mStringColonSplitter =
             new SimpleStringSplitter(COMPONENT_NAME_SEPARATOR);
 
@@ -193,6 +184,8 @@
 
     private boolean mHasInputFilter;
 
+    private KeyEventDispatcher mKeyEventDispatcher;
+
     private final Set<ComponentName> mTempComponentNameSet = new HashSet<>();
 
     private final List<AccessibilityServiceInfo> mTempAccessibilityServiceInfoList =
@@ -756,12 +749,11 @@
 
     boolean notifyKeyEvent(KeyEvent event, int policyFlags) {
         synchronized (mLock) {
-            KeyEvent localClone = KeyEvent.obtain(event);
-            boolean handled = notifyKeyEventLocked(localClone, policyFlags, false);
-            if (!handled) {
-                handled = notifyKeyEventLocked(localClone, policyFlags, true);
+            List<Service> boundServices = getCurrentUserStateLocked().mBoundServices;
+            if (boundServices.isEmpty()) {
+                return false;
             }
-            return handled;
+            return getKeyEventDispatcher().notifyKeyEventLocked(event, policyFlags, boundServices);
         }
     }
 
@@ -935,31 +927,6 @@
         return false;
     }
 
-    private boolean notifyKeyEventLocked(KeyEvent event, int policyFlags, boolean isDefault) {
-        // TODO: Now we are giving the key events to the last enabled
-        //       service that can handle them Ideally, the user should
-        //       make the call which service handles key events. However,
-        //       only one service should handle key events to avoid user
-        //       frustration when different behavior is observed from
-        //       different combinations of enabled accessibility services.
-        UserState state = getCurrentUserStateLocked();
-        for (int i = state.mBoundServices.size() - 1; i >= 0; i--) {
-            Service service = state.mBoundServices.get(i);
-            // Key events are handled only by services that declared
-            // this capability and requested to filter key events.
-            if (!service.mRequestFilterKeyEvents ||
-                    (service.mAccessibilityServiceInfo.getCapabilities() & AccessibilityServiceInfo
-                            .CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS) == 0) {
-                continue;
-            }
-            if (service.mIsDefault == isDefault) {
-                service.notifyKeyEvent(event, policyFlags);
-                return true;
-            }
-        }
-        return false;
-    }
-
     private void notifyClearAccessibilityCacheLocked() {
         UserState state = getCurrentUserStateLocked();
         for (int i = state.mBoundServices.size() - 1; i >= 0; i--) {
@@ -1754,6 +1721,14 @@
         return null;
     }
 
+    private KeyEventDispatcher getKeyEventDispatcher() {
+        if (mKeyEventDispatcher == null) {
+            mKeyEventDispatcher = new KeyEventDispatcher(
+                    mMainHandler, MainHandler.MSG_SEND_KEY_EVENT_TO_INPUT_FILTER, mLock);
+        }
+        return mKeyEventDispatcher;
+    }
+
     @Override
     public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
         mSecurityPolicy.enforceCallingPermission(Manifest.permission.DUMP, FUNCTION_DUMP);
@@ -1954,22 +1929,6 @@
         }
     }
 
-    private PendingEvent obtainPendingEventLocked(KeyEvent event, int policyFlags, int sequence) {
-        PendingEvent pendingEvent = mPendingEventPool.acquire();
-        if (pendingEvent == null) {
-            pendingEvent = new PendingEvent();
-        }
-        pendingEvent.event = event;
-        pendingEvent.policyFlags = policyFlags;
-        pendingEvent.sequence = sequence;
-        return pendingEvent;
-    }
-
-    private void recyclePendingEventLocked(PendingEvent pendingEvent) {
-        pendingEvent.clear();
-        mPendingEventPool.release(pendingEvent);
-    }
-
     private int findWindowIdLocked(IBinder token) {
         final int globalIndex = mGlobalWindowTokens.indexOfValue(token);
         if (globalIndex >= 0) {
@@ -2082,8 +2041,6 @@
         final SparseArray<AccessibilityEvent> mPendingEvents =
             new SparseArray<>();
 
-        final KeyEventDispatcher mKeyEventDispatcher = new KeyEventDispatcher();
-
         boolean mWasConnectedAndDied;
 
         // Handler only for dispatching accessibility events since we use event
@@ -2195,7 +2152,7 @@
                 return false;
             }
             UserState userState = getUserStateLocked(mUserId);
-            mKeyEventDispatcher.flush();
+            getKeyEventDispatcher().flush(this);
             if (!mIsAutomation) {
                 mContext.unbindService(this);
             } else {
@@ -2212,7 +2169,7 @@
 
         @Override
         public void setOnKeyEventResult(boolean handled, int sequence) {
-            mKeyEventDispatcher.setOnKeyEventResult(handled, sequence);
+            getKeyEventDispatcher().setOnKeyEventResult(this, handled, sequence);
         }
 
         @Override
@@ -2926,7 +2883,7 @@
                     return;
                 }
                 mWasConnectedAndDied = true;
-                mKeyEventDispatcher.flush();
+                getKeyEventDispatcher().flush(this);
                 UserState userState = getUserStateLocked(mUserId);
                 // The death recipient is unregistered in removeServiceLocked
                 removeServiceLocked(this, userState);
@@ -3035,11 +2992,6 @@
                     gestureId, 0).sendToTarget();
         }
 
-        public void notifyKeyEvent(KeyEvent event, int policyFlags) {
-            mInvocationHandler.obtainMessage(InvocationHandler.MSG_ON_KEY_EVENT,
-                    policyFlags, 0, event).sendToTarget();
-        }
-
         public void notifyClearAccessibilityNodeInfoCache() {
             mInvocationHandler.sendEmptyMessage(
                     InvocationHandler.MSG_CLEAR_ACCESSIBILITY_CACHE);
@@ -3084,10 +3036,6 @@
             }
         }
 
-        private void notifyKeyEventInternal(KeyEvent event, int policyFlags) {
-            mKeyEventDispatcher.notifyKeyEvent(event, policyFlags);
-        }
-
         private void notifyClearAccessibilityCacheInternal() {
             final IAccessibilityServiceClient listener;
             synchronized (mLock) {
@@ -3205,9 +3153,7 @@
 
         private final class InvocationHandler extends Handler {
             public static final int MSG_ON_GESTURE = 1;
-            public static final int MSG_ON_KEY_EVENT = 2;
-            public static final int MSG_CLEAR_ACCESSIBILITY_CACHE = 3;
-            public static final int MSG_ON_KEY_EVENT_TIMEOUT = 4;
+            public static final int MSG_CLEAR_ACCESSIBILITY_CACHE = 2;
 
             private static final int MSG_ON_MAGNIFICATION_CHANGED = 5;
 
@@ -3226,21 +3172,10 @@
                         notifyGestureInternal(gestureId);
                     } break;
 
-                    case MSG_ON_KEY_EVENT: {
-                        KeyEvent event = (KeyEvent) message.obj;
-                        final int policyFlags = message.arg1;
-                        notifyKeyEventInternal(event, policyFlags);
-                    } break;
-
                     case MSG_CLEAR_ACCESSIBILITY_CACHE: {
                         notifyClearAccessibilityCacheInternal();
                     } break;
 
-                    case MSG_ON_KEY_EVENT_TIMEOUT: {
-                        PendingEvent eventState = (PendingEvent) message.obj;
-                        setOnKeyEventResult(false, eventState.sequence);
-                    } break;
-
                     case MSG_ON_MAGNIFICATION_CHANGED: {
                         final SomeArgs args = (SomeArgs) message.obj;
                         final Region region = (Region) args.arg1;
@@ -3278,140 +3213,6 @@
             }
         }
 
-        private final class KeyEventDispatcher {
-
-            private static final long ON_KEY_EVENT_TIMEOUT_MILLIS = 500;
-
-            private PendingEvent mPendingEvents;
-
-            private final InputEventConsistencyVerifier mSentEventsVerifier =
-                    InputEventConsistencyVerifier.isInstrumentationEnabled()
-                            ? new InputEventConsistencyVerifier(
-                                    this, 0, KeyEventDispatcher.class.getSimpleName()) : null;
-
-            public void notifyKeyEvent(KeyEvent event, int policyFlags) {
-                final PendingEvent pendingEvent;
-
-                synchronized (mLock) {
-                    pendingEvent = addPendingEventLocked(event, policyFlags);
-                }
-
-                Message message = mInvocationHandler.obtainMessage(
-                        InvocationHandler.MSG_ON_KEY_EVENT_TIMEOUT, pendingEvent);
-                mInvocationHandler.sendMessageDelayed(message, ON_KEY_EVENT_TIMEOUT_MILLIS);
-
-                try {
-                    // Accessibility services are exclusively not in the system
-                    // process, therefore no need to clone the motion event to
-                    // prevent tampering. It will be cloned in the IPC call.
-                    mServiceInterface.onKeyEvent(pendingEvent.event, pendingEvent.sequence);
-                } catch (RemoteException re) {
-                    setOnKeyEventResult(false, pendingEvent.sequence);
-                }
-            }
-
-            public void setOnKeyEventResult(boolean handled, int sequence) {
-                synchronized (mLock) {
-                    PendingEvent pendingEvent = removePendingEventLocked(sequence);
-                    if (pendingEvent != null) {
-                        mInvocationHandler.removeMessages(
-                                InvocationHandler.MSG_ON_KEY_EVENT_TIMEOUT,
-                                pendingEvent);
-                        pendingEvent.handled = handled;
-                        finishPendingEventLocked(pendingEvent);
-                    }
-                }
-            }
-
-            public void flush() {
-                synchronized (mLock) {
-                    cancelAllPendingEventsLocked();
-                    if (mSentEventsVerifier != null) {
-                        mSentEventsVerifier.reset();
-                    }
-                }
-            }
-
-            private PendingEvent addPendingEventLocked(KeyEvent event, int policyFlags) {
-                final int sequence = event.getSequenceNumber();
-                PendingEvent pendingEvent = obtainPendingEventLocked(event, policyFlags, sequence);
-                pendingEvent.next = mPendingEvents;
-                mPendingEvents = pendingEvent;
-                return pendingEvent;
-            }
-
-            private PendingEvent removePendingEventLocked(int sequence) {
-                PendingEvent previous = null;
-                PendingEvent current = mPendingEvents;
-
-                while (current != null) {
-                    if (current.sequence == sequence) {
-                        if (previous != null) {
-                            previous.next = current.next;
-                        } else {
-                            mPendingEvents = current.next;
-                        }
-                        current.next = null;
-                        return current;
-                    }
-                    previous = current;
-                    current = current.next;
-                }
-                return null;
-            }
-
-            private void finishPendingEventLocked(PendingEvent pendingEvent) {
-                if (!pendingEvent.handled) {
-                    sendKeyEventToInputFilter(pendingEvent.event, pendingEvent.policyFlags);
-                }
-                // Nullify the event since we do not want it to be
-                // recycled yet. It will be sent to the input filter.
-                pendingEvent.event = null;
-                recyclePendingEventLocked(pendingEvent);
-            }
-
-            private void sendKeyEventToInputFilter(KeyEvent event, int policyFlags) {
-                if (DEBUG) {
-                    Slog.i(LOG_TAG, "Injecting event: " + event);
-                }
-                if (mSentEventsVerifier != null) {
-                    mSentEventsVerifier.onKeyEvent(event, 0);
-                }
-                policyFlags |= WindowManagerPolicy.FLAG_PASS_TO_USER;
-                mMainHandler.obtainMessage(MainHandler.MSG_SEND_KEY_EVENT_TO_INPUT_FILTER,
-                        policyFlags, 0, event).sendToTarget();
-            }
-
-            private void cancelAllPendingEventsLocked() {
-                while (mPendingEvents != null) {
-                    PendingEvent pendingEvent = removePendingEventLocked(mPendingEvents.sequence);
-                    pendingEvent.handled = false;
-                    mInvocationHandler.removeMessages(InvocationHandler.MSG_ON_KEY_EVENT_TIMEOUT,
-                            pendingEvent);
-                    finishPendingEventLocked(pendingEvent);
-                }
-            }
-        }
-    }
-
-    private static final class PendingEvent {
-        PendingEvent next;
-
-        KeyEvent event;
-        int policyFlags;
-        int sequence;
-        boolean handled;
-
-        public void clear() {
-            if (event != null) {
-                event.recycle();
-                event = null;
-            }
-            next = null;
-            policyFlags = 0;
-            sequence = 0;
-            handled = false;
-        }
     }
 
     final class WindowsForAccessibilityCallback implements
diff --git a/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java b/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java
new file mode 100644
index 0000000..3469565
--- /dev/null
+++ b/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java
@@ -0,0 +1,285 @@
+/*
+ ** Copyright 2015, The Android Open Source Project
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+package com.android.server.accessibility;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.os.Handler;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.ArrayMap;
+import android.util.Pools;
+import android.util.Pools.Pool;
+import android.util.Slog;
+import android.view.InputEventConsistencyVerifier;
+import android.view.KeyEvent;
+import android.view.WindowManagerPolicy;
+
+import com.android.server.accessibility.AccessibilityManagerService.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Dispatcher to send KeyEvents to all accessibility services that are able to process them.
+ * Events that are handled by one or more services are consumed. Events that are not processed
+ * by any service (or time out before a service reports them as handled) are passed along to
+ * the rest of the system.
+ *
+ * The class assumes that services report their return values in order, which is valid because
+ * they process each call to {@code AccessibilityService.onKeyEvent} on a single thread, and so
+ * don't see the N+1th event until they have processed the Nth event.
+ */
+public class KeyEventDispatcher {
+    // Debugging
+    private static final String LOG_TAG = "KeyEventDispatcher";
+    private static final boolean DEBUG = false;
+    /* KeyEvents must be processed in this time interval */
+    private static final long ON_KEY_EVENT_TIMEOUT_MILLIS = 500;
+    private static final int MSG_ON_KEY_EVENT_TIMEOUT = 1;
+    private static final int MAX_POOL_SIZE = 10;
+
+    private final Pool<PendingKeyEvent> mPendingEventPool = new Pools.SimplePool<>(MAX_POOL_SIZE);
+    private final Object mLock;
+
+    /*
+     * Track events sent to each service. If a KeyEvent is to be sent to at least one service,
+     * a corresponding PendingKeyEvent is created for it. This PendingKeyEvent is placed in
+     * the list for each service its KeyEvent is sent to. It is removed from the list when
+     * the service calls setOnKeyEventResult, or when we time out waiting for the service to
+     * respond.
+     */
+    private final Map<Service, ArrayList<PendingKeyEvent>> mPendingEventsMap = new ArrayMap<>();
+
+    private final InputEventConsistencyVerifier mSentEventsVerifier;
+    private final Handler mHandlerToSendKeyEventsToInputFilter;
+    private final int mMessageTypeForSendKeyEvent;
+    private final Handler mKeyEventTimeoutHandler;
+
+    /**
+     * @param handlerToSendKeyEventsToInputFilter The handler to which to post {@code KeyEvent}s
+     * that have not been handled by any accessibility service.
+     * @param messageTypeForSendKeyEvent The field to populate {@code message.what} for the
+     * message that carries a {@code KeyEvent} to be sent to the input filter
+     * @param lock The lock used for all synchronization in this package. This lock must be held
+     * when calling {@code notifyKeyEventLocked}
+     */
+    public KeyEventDispatcher(Handler handlerToSendKeyEventsToInputFilter,
+                              int messageTypeForSendKeyEvent, Object lock) {
+        if (InputEventConsistencyVerifier.isInstrumentationEnabled()) {
+            mSentEventsVerifier = new InputEventConsistencyVerifier(
+                    this, 0, KeyEventDispatcher.class.getSimpleName());
+        } else {
+            mSentEventsVerifier = null;
+        }
+        mHandlerToSendKeyEventsToInputFilter = handlerToSendKeyEventsToInputFilter;
+        mMessageTypeForSendKeyEvent = messageTypeForSendKeyEvent;
+        mKeyEventTimeoutHandler =
+                new Handler(mHandlerToSendKeyEventsToInputFilter.getLooper(), new Callback());
+        mLock = lock;
+    }
+
+    /**
+     * Notify that a new KeyEvent is available to accessibility services. Must be called with the
+     * lock used to construct this object held. The boundServices list must also be protected
+     * by a lock.
+     *
+     * @param event The new key event
+     * @param policyFlags Flags for the event
+     * @param boundServices A list of currently bound AccessibilityServices
+     *
+     * @return {@code true} if the event was passed to at least one AccessibilityService,
+     * {@code false} otherwise.
+     */
+    // TODO: The locking policy for boundServices needs some thought.
+    public boolean notifyKeyEventLocked(
+            KeyEvent event, int policyFlags, List<Service> boundServices) {
+        PendingKeyEvent pendingKeyEvent = null;
+        KeyEvent localClone = KeyEvent.obtain(event);
+        for (int i = 0; i < boundServices.size(); i++) {
+            Service service = boundServices.get(i);
+            // Key events are handled only by services that declared
+            // this capability and requested to filter key events.
+            if (!service.mRequestFilterKeyEvents) {
+                continue;
+            }
+            int filterKeyEventBit = service.mAccessibilityServiceInfo.getCapabilities()
+                    & AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS;
+            if (filterKeyEventBit == 0) {
+                continue;
+            }
+
+            try {
+                // The event will be cloned in the IPC call, so it doesn't need to be here.
+                service.mServiceInterface.onKeyEvent(localClone, localClone.getSequenceNumber());
+            } catch (RemoteException re) {
+                continue;
+            }
+
+            if (pendingKeyEvent == null) {
+                pendingKeyEvent = obtainPendingEventLocked(localClone, policyFlags);
+            }
+            ArrayList<PendingKeyEvent> pendingEventList = mPendingEventsMap.get(service);
+            if (pendingEventList == null) {
+                pendingEventList = new ArrayList<>();
+                mPendingEventsMap.put(service, pendingEventList);
+            }
+            pendingEventList.add(pendingKeyEvent);
+            pendingKeyEvent.referenceCount++;
+        }
+
+        if (pendingKeyEvent == null) {
+            localClone.recycle();
+            return false;
+        }
+
+        Message message = mKeyEventTimeoutHandler.obtainMessage(
+                MSG_ON_KEY_EVENT_TIMEOUT, pendingKeyEvent);
+        mKeyEventTimeoutHandler.sendMessageDelayed(message, ON_KEY_EVENT_TIMEOUT_MILLIS);
+        return true;
+    }
+
+    /**
+     * Set the result from onKeyEvent from one service.
+     *
+     * @param service The service setting the result
+     * @param handled {@code true} if the service handled the {@code KeyEvent}
+     * @param sequence The sequence number of the {@code KeyEvent}
+     */
+    public void setOnKeyEventResult(Service service, boolean handled, int sequence) {
+        synchronized (mLock) {
+            PendingKeyEvent pendingEvent =
+                    removeEventFromListLocked(mPendingEventsMap.get(service), sequence);
+            if (pendingEvent != null) {
+                pendingEvent.handled |= handled;
+                removeReferenceToPendingEventLocked(pendingEvent);
+            }
+        }
+    }
+
+    /**
+     * Flush all pending key events for a service, treating all of them as unhandled
+     *
+     * @param service The service for which to flush events
+     */
+    public void flush(Service service) {
+        synchronized (mLock) {
+            List<PendingKeyEvent> pendingEvents = mPendingEventsMap.get(service);
+            if (pendingEvents != null) {
+                for (int i = 0; i < pendingEvents.size(); i++) {
+                    PendingKeyEvent pendingEvent = pendingEvents.get(i);
+                    removeReferenceToPendingEventLocked(pendingEvent);
+                }
+                mPendingEventsMap.remove(service);
+            }
+        }
+    }
+
+    private PendingKeyEvent obtainPendingEventLocked(KeyEvent event, int policyFlags) {
+        PendingKeyEvent pendingEvent = mPendingEventPool.acquire();
+        if (pendingEvent == null) {
+            pendingEvent = new PendingKeyEvent();
+        }
+        pendingEvent.event = event;
+        pendingEvent.policyFlags = policyFlags;
+        pendingEvent.referenceCount = 0;
+        pendingEvent.handled = false;
+        return pendingEvent;
+    }
+
+    private static PendingKeyEvent removeEventFromListLocked(
+            List<PendingKeyEvent> listOfEvents, int sequence) {
+        /* In normal operation, the event should be first */
+        for (int i = 0; i < listOfEvents.size(); i++) {
+            PendingKeyEvent pendingKeyEvent = listOfEvents.get(i);
+            if (pendingKeyEvent.event.getSequenceNumber() == sequence) {
+                    /*
+                     * Removing the first element of the ArrayList can be slow if there are a lot
+                     * of events backed up, but for a handful of events it's better than incurring
+                     * the fixed overhead of LinkedList. An ArrayList optimized for removing the
+                     * first element (by treating the underlying array as a circular buffer) would
+                     * be ideal.
+                     */
+                listOfEvents.remove(pendingKeyEvent);
+                return pendingKeyEvent;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param pendingEvent The event whose reference count should be decreased
+     * @return {@code true} if the event was release, {@code false} if not.
+     */
+    private boolean removeReferenceToPendingEventLocked(PendingKeyEvent pendingEvent) {
+        if (--pendingEvent.referenceCount > 0) {
+            return false;
+        }
+        mKeyEventTimeoutHandler.removeMessages(MSG_ON_KEY_EVENT_TIMEOUT, pendingEvent);
+        if (!pendingEvent.handled) {
+                /* Pass event to input filter */
+            if (DEBUG) {
+                Slog.i(LOG_TAG, "Injecting event: " + pendingEvent.event);
+            }
+            if (mSentEventsVerifier != null) {
+                mSentEventsVerifier.onKeyEvent(pendingEvent.event, 0);
+            }
+            int policyFlags = pendingEvent.policyFlags | WindowManagerPolicy.FLAG_PASS_TO_USER;
+            mHandlerToSendKeyEventsToInputFilter
+                    .obtainMessage(mMessageTypeForSendKeyEvent, policyFlags, 0, pendingEvent.event)
+                            .sendToTarget();
+        } else {
+            pendingEvent.event.recycle();
+        }
+        mPendingEventPool.release(pendingEvent);
+        return true;
+    }
+
+    private static final class PendingKeyEvent {
+        /* Event and policyFlag provided in notifyKeyEventLocked */
+        KeyEvent event;
+        int policyFlags;
+        /*
+         * The referenceCount optimizes the process of determining the number of services
+         * still holding a KeyEvent. It must be equal to the number of times the PendingEvent
+         * appears in mPendingEventsMap, or PendingEvents will leak.
+         */
+        int referenceCount;
+        /* Whether or not at least one service had handled this event */
+        boolean handled;
+    }
+
+    private class Callback implements Handler.Callback {
+        @Override
+        public boolean handleMessage(Message message) {
+            if (message.what != MSG_ON_KEY_EVENT_TIMEOUT) {
+                throw new IllegalArgumentException("Unknown message: " + message.what);
+            }
+            PendingKeyEvent pendingKeyEvent = (PendingKeyEvent) message.obj;
+            synchronized (mLock) {
+                for (ArrayList<PendingKeyEvent> listForService : mPendingEventsMap.values()) {
+                    if (listForService.remove(pendingKeyEvent)) {
+                        if(removeReferenceToPendingEventLocked(pendingKeyEvent)) {
+                            break;
+                        }
+                    }
+                }
+            }
+            return true;
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index 504a7ef..c5ce2fd 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -2769,7 +2769,9 @@
         }
 
         @Override public void onUidIdle(int uid) throws RemoteException {
-            removeForStoppedLocked(uid);
+            synchronized (mLock) {
+                removeForStoppedLocked(uid);
+            }
         }
     };
 
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 37d47c3..93eaf0e 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -2286,8 +2286,11 @@
     }
 
     @Override
-    public void startAddAccountSession(final IAccountManagerResponse response, final String accountType,
-            final String authTokenType, final String[] requiredFeatures,
+    public void startAddAccountSession(
+            final IAccountManagerResponse response,
+            final String accountType,
+            final String authTokenType,
+            final String[] requiredFeatures,
             final boolean expectActivityLaunch,
             final Bundle optionsIn) {
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
@@ -2571,6 +2574,60 @@
     }
 
     @Override
+    public void startUpdateCredentialsSession(
+            IAccountManagerResponse response,
+            final Account account,
+            final String authTokenType,
+            final boolean expectActivityLaunch,
+            final Bundle loginOptions) {
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+            Log.v(TAG,
+                    "startUpdateCredentialsSession: " + account + ", response " + response
+                            + ", authTokenType " + authTokenType + ", expectActivityLaunch "
+                            + expectActivityLaunch + ", caller's uid " + Binder.getCallingUid()
+                            + ", pid " + Binder.getCallingPid());
+        }
+        if (response == null) {
+            throw new IllegalArgumentException("response is null");
+        }
+        if (account == null) {
+            throw new IllegalArgumentException("account is null");
+        }
+        int userId = UserHandle.getCallingUserId();
+        long identityToken = clearCallingIdentity();
+        try {
+            UserAccounts accounts = getUserAccounts(userId);
+            new StartAccountSession(
+                    accounts,
+                    response,
+                    account.type,
+                    expectActivityLaunch,
+                    account.name,
+                    false /* authDetailsRequired */,
+                    true /* updateLastCredentialTime */) {
+                @Override
+                public void run() throws RemoteException {
+                    mAuthenticator.startUpdateCredentialsSession(this, account, authTokenType,
+                            loginOptions);
+                }
+
+                @Override
+                protected String toDebugString(long now) {
+                    if (loginOptions != null)
+                        loginOptions.keySet();
+                    return super.toDebugString(now)
+                            + ", startUpdateCredentialsSession"
+                            + ", " + account
+                            + ", authTokenType " + authTokenType
+                            + ", loginOptions " + loginOptions;
+                }
+            }.bind();
+        } finally {
+            restoreCallingIdentity(identityToken);
+        }
+    }
+
+    @Override
     public void editProperties(IAccountManagerResponse response, final String accountType,
             final boolean expectActivityLaunch) {
         final int callingUid = Binder.getCallingUid();
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index 3fc6846..02cf87a 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -1277,7 +1277,7 @@
             }
 
             final Configuration serviceConfig = mService.mConfiguration;
-            mOverrideConfig = new Configuration(serviceConfig);
+            mOverrideConfig = new Configuration(Configuration.EMPTY);
             // TODO(multidisplay): Update Dp to that of display stack is on.
             final float density = serviceConfig.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE;
             mOverrideConfig.screenWidthDp =
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 6d8bd1c..4b2a55f 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -674,7 +674,7 @@
 
     void timeoutUserSwitch(UserState uss, int oldUserId, int newUserId) {
         synchronized (mService) {
-            Slog.w(TAG, "User switch timeout: from " + oldUserId + " to " + newUserId);
+            Slog.wtf(TAG, "User switch timeout: from " + oldUserId + " to " + newUserId);
             sendContinueUserSwitchLocked(uss, oldUserId, newUserId);
         }
     }
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index ec7c1c4..103ed0a 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -1139,6 +1139,12 @@
                     public void onUserSwitching(int newUserId, IRemoteCallback reply) {
                         mHandler.obtainMessage(MSG_USER_SWITCHING, newUserId, 0 /* unused */)
                                 .sendToTarget();
+                        if (reply != null) {
+                            try {
+                                reply.sendResult(null);
+                            } catch (RemoteException e) {
+                            }
+                        }
                     }
                     @Override
                     public void onUserSwitchComplete(int newUserId) throws RemoteException {
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java b/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java
index 2eca42b..adc1cd7 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java
@@ -448,4 +448,20 @@
     static boolean isSupportedKeycode(int androidKeycode) {
         return HdmiCecKeycode.androidKeyToCecKey(androidKeycode) != null;
     }
+
+    /**
+     * Returns CEC keycode to control audio mute status.
+     *
+     * @param muting {@code true} if audio is being muted
+     */
+    public static int getMuteKey(boolean muting) {
+        // CEC_KEYCODE_MUTE_FUNCTION, CEC_KEYCODE_RESTORE_VOLUME_FUNCTION are deterministic
+        // commands that ensures the status changes to what we want, while CEC_KEYCODE_MUTE
+        // simply toggles the status.
+        // The former is a better choice in this regard, but there are compatibility issues
+        // observed - many audio receivers don't recognize the commands. We fall back on
+        // CEC_KEYCODE_MUTE for now.
+        // return muting ? CEC_KEYCODE_MUTE_FUNCTION : CEC_KEYCODE_RESTORE_VOLUME_FUNCTION;
+        return CEC_KEYCODE_MUTE;
+    }
 }
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index cd8484f..e63a143 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -1099,8 +1099,7 @@
         // Remove existing volume action.
         removeAction(VolumeControlAction.class);
         sendUserControlPressedAndReleased(getAvrDeviceInfo().getLogicalAddress(),
-                mute ? HdmiCecKeycode.CEC_KEYCODE_MUTE_FUNCTION :
-                        HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION);
+                HdmiCecKeycode.getMuteKey(mute));
     }
 
     @Override
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
index dba3591..2ae5c97 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
@@ -68,10 +68,8 @@
         // the audio amplifier is unknown.
         tv().setAudioStatus(false, Constants.UNKNOWN_VOLUME);
 
-        int uiCommand = tv().isSystemAudioActivated()
-                ? HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION  // SystemAudioMode: ON
-                : HdmiCecKeycode.CEC_KEYCODE_MUTE_FUNCTION;           // SystemAudioMode: OFF
-        sendUserControlPressedAndReleased(mAvrAddress, uiCommand);
+        sendUserControlPressedAndReleased(mAvrAddress,
+                HdmiCecKeycode.getMuteKey(!tv().isSystemAudioActivated()));
 
         // Still return SUCCESS to callback.
         finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 4424838..946fbb1 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -1211,29 +1211,36 @@
         }
 
         @Override
-        public void setPackagePriority(String pkg, int uid, int priority) {
+        public ParceledListSlice<Notification.Topic> getTopics(String pkg, int uid) {
             checkCallerIsSystem();
-            mRankingHelper.setPackagePriority(pkg, uid, priority);
+            return new ParceledListSlice<Notification.Topic>(mRankingHelper.getTopics(pkg, uid));
+        }
+
+        @Override
+        public void setTopicPriority(String pkg, int uid, Notification.Topic topic, int priority) {
+            checkCallerIsSystem();
+            mRankingHelper.setTopicPriority(pkg, uid, topic, priority);
             savePolicyFile();
         }
 
         @Override
-        public int getPackagePriority(String pkg, int uid) {
+        public int getTopicPriority(String pkg, int uid, Notification.Topic topic) {
             checkCallerIsSystem();
-            return mRankingHelper.getPackagePriority(pkg, uid);
+            return mRankingHelper.getTopicPriority(pkg, uid, topic);
         }
 
         @Override
-        public void setPackageVisibilityOverride(String pkg, int uid, int visibility) {
+        public void setTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic,
+                int visibility) {
             checkCallerIsSystem();
-            mRankingHelper.setPackageVisibilityOverride(pkg, uid, visibility);
+            mRankingHelper.setTopicVisibilityOverride(pkg, uid, topic, visibility);
             savePolicyFile();
         }
 
         @Override
-        public int getPackageVisibilityOverride(String pkg, int uid) {
+        public int getTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic) {
             checkCallerIsSystem();
-            return mRankingHelper.getPackageVisibilityOverride(pkg, uid);
+            return mRankingHelper.getTopicVisibilityOverride(pkg, uid, topic);
         }
 
         /**
diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java
index aea137b..7ee29e4 100644
--- a/services/core/java/com/android/server/notification/RankingConfig.java
+++ b/services/core/java/com/android/server/notification/RankingConfig.java
@@ -15,12 +15,20 @@
  */
 package com.android.server.notification;
 
+import android.app.Notification;
+
+import java.util.List;
+
 public interface RankingConfig {
-    int getPackagePriority(String packageName, int uid);
 
-    void setPackagePriority(String packageName, int uid, int priority);
+    List<Notification.Topic> getTopics(String packageName, int uid);
 
-    int getPackageVisibilityOverride(String packageName, int uid);
+    int getTopicPriority(String packageName, int uid, Notification.Topic topic);
 
-    void setPackageVisibilityOverride(String packageName, int uid, int visibility);
+    void setTopicPriority(String packageName, int uid, Notification.Topic topic, int priority);
+
+    int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic);
+
+    void setTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic,
+            int visibility);
 }
diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java
index f8b661f..4d33248 100644
--- a/services/core/java/com/android/server/notification/RankingHelper.java
+++ b/services/core/java/com/android/server/notification/RankingHelper.java
@@ -27,6 +27,8 @@
 import android.util.ArrayMap;
 import android.util.Slog;
 
+import com.android.internal.R;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
@@ -35,6 +37,8 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 public class RankingHelper implements RankingConfig {
@@ -45,11 +49,14 @@
     private static final String TAG_RANKING = "ranking";
     private static final String TAG_PACKAGE = "package";
     private static final String ATT_VERSION = "version";
+    private static final String TAG_TOPIC = "topic";
 
     private static final String ATT_NAME = "name";
     private static final String ATT_UID = "uid";
     private static final String ATT_PRIORITY = "priority";
     private static final String ATT_VISIBILITY = "visibility";
+    private static final String ATT_TOPIC_ID = "id";
+    private static final String ATT_TOPIC_LABEL = "label";
 
     private static final int DEFAULT_PRIORITY = Notification.PRIORITY_DEFAULT;
     private static final int DEFAULT_VISIBILITY =
@@ -161,12 +168,14 @@
                         } else {
                             r = getOrCreateRecord(name, uid);
                         }
-                        if (priority != DEFAULT_PRIORITY) {
-                            r.priority = priority;
-                        }
-                        if (vis != DEFAULT_VISIBILITY) {
-                            r.visibility = vis;
-                        }
+
+                        // Migrate package level settings to the default topic.
+                        // Might be overwritten by parseTopics.
+                        Topic defaultTopic = r.topics.get(Notification.TOPIC_DEFAULT);
+                        defaultTopic.priority = priority;
+                        defaultTopic.visibility = vis;
+
+                        parseTopics(r, parser);
                     }
                 }
             }
@@ -174,6 +183,38 @@
         throw new IllegalStateException("Failed to reach END_DOCUMENT");
     }
 
+    public void parseTopics(Record r, XmlPullParser parser)
+            throws XmlPullParserException, IOException {
+        final int innerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            String tagName = parser.getName();
+            if (TAG_TOPIC.equals(tagName)) {
+                int priority = safeInt(parser, ATT_PRIORITY, DEFAULT_PRIORITY);
+                int vis = safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY);
+                String id = parser.getAttributeValue(null, ATT_TOPIC_ID);
+                CharSequence label = parser.getAttributeValue(null, ATT_TOPIC_LABEL);
+
+                if (!TextUtils.isEmpty(id)) {
+                    Topic topic = new Topic(new Notification.Topic(id, label));
+
+                    if (priority != DEFAULT_PRIORITY) {
+                        topic.priority = priority;
+                    }
+                    if (vis != DEFAULT_VISIBILITY) {
+                        topic.visibility = vis;
+                    }
+                    r.topics.put(id, topic);
+                }
+            }
+        }
+    }
+
     private static String recordKey(String pkg, int uid) {
         return pkg + "|" + uid;
     }
@@ -185,21 +226,14 @@
             r = new Record();
             r.pkg = pkg;
             r.uid = uid;
+            r.topics.put(Notification.TOPIC_DEFAULT,
+                    new Topic(new Notification.Topic(Notification.TOPIC_DEFAULT,
+                            mContext.getString(R.string.default_notification_topic_label))));
             mRecords.put(key, r);
         }
         return r;
     }
 
-    private void removeDefaultRecords() {
-        final int N = mRecords.size();
-        for (int i = N - 1; i >= 0; i--) {
-            final Record r = mRecords.valueAt(i);
-            if (r.priority == DEFAULT_PRIORITY && r.visibility == DEFAULT_VISIBILITY) {
-                mRecords.remove(i);
-            }
-        }
-    }
-
     public void writeXml(XmlSerializer out, boolean forBackup) throws IOException {
         out.startTag(null, TAG_RANKING);
         out.attribute(null, ATT_VERSION, Integer.toString(XML_VERSION));
@@ -213,20 +247,32 @@
             }
             out.startTag(null, TAG_PACKAGE);
             out.attribute(null, ATT_NAME, r.pkg);
-            if (r.priority != DEFAULT_PRIORITY) {
-                out.attribute(null, ATT_PRIORITY, Integer.toString(r.priority));
-            }
-            if (r.visibility != DEFAULT_VISIBILITY) {
-                out.attribute(null, ATT_VISIBILITY, Integer.toString(r.visibility));
-            }
+
             if (!forBackup) {
                 out.attribute(null, ATT_UID, Integer.toString(r.uid));
             }
+
+            writeTopicsXml(out, r);
             out.endTag(null, TAG_PACKAGE);
         }
         out.endTag(null, TAG_RANKING);
     }
 
+    public void writeTopicsXml(XmlSerializer out, Record r) throws IOException {
+        for (Topic t : r.topics.values()) {
+            out.startTag(null, TAG_TOPIC);
+            out.attribute(null, ATT_TOPIC_ID, t.topic.getId());
+            out.attribute(null, ATT_TOPIC_LABEL, t.topic.getLabel().toString());
+            if (t.priority != DEFAULT_PRIORITY) {
+                out.attribute(null, ATT_PRIORITY, Integer.toString(t.priority));
+            }
+            if (t.visibility != DEFAULT_VISIBILITY) {
+                out.attribute(null, ATT_VISIBILITY, Integer.toString(t.visibility));
+            }
+            out.endTag(null, TAG_TOPIC);
+        }
+    }
+
     private void updateConfig() {
         final int N = mSignalExtractors.length;
         for (int i = 0; i < N; i++) {
@@ -322,37 +368,54 @@
     }
 
     @Override
-    public int getPackagePriority(String packageName, int uid) {
-        final Record r = mRecords.get(recordKey(packageName, uid));
-        return r != null ? r.priority : DEFAULT_PRIORITY;
+    public List<Notification.Topic> getTopics(String packageName, int uid) {
+        final Record r = getOrCreateRecord(packageName, uid);
+        List<Notification.Topic> topics = new ArrayList<>();
+        for (Topic t :  r.topics.values()) {
+            topics.add(t.topic);
+        }
+        return topics;
     }
 
     @Override
-    public void setPackagePriority(String packageName, int uid, int priority) {
-        if (priority == getPackagePriority(packageName, uid)) {
-            return;
-        }
-        getOrCreateRecord(packageName, uid).priority = priority;
-        removeDefaultRecords();
+    public int getTopicPriority(String packageName, int uid, Notification.Topic topic) {
+        final Record r = getOrCreateRecord(packageName, uid);
+        return getOrCreateTopic(r, topic).priority;
+    }
+
+    @Override
+    public void setTopicPriority(String packageName, int uid, Notification.Topic topic,
+            int priority) {
+        final Record r = getOrCreateRecord(packageName, uid);
+        getOrCreateTopic(r, topic).priority = priority;
         updateConfig();
     }
 
     @Override
-    public int getPackageVisibilityOverride(String packageName, int uid) {
-        final Record r = mRecords.get(recordKey(packageName, uid));
-        return r != null ? r.visibility : DEFAULT_VISIBILITY;
+    public int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic) {
+        final Record r = getOrCreateRecord(packageName, uid);
+        return getOrCreateTopic(r, topic).visibility;
     }
 
     @Override
-    public void setPackageVisibilityOverride(String packageName, int uid, int visibility) {
-        if (visibility == getPackageVisibilityOverride(packageName, uid)) {
-            return;
-        }
-        getOrCreateRecord(packageName, uid).visibility = visibility;
-        removeDefaultRecords();
+    public void setTopicVisibilityOverride(String pkgName, int uid, Notification.Topic topic,
+        int visibility) {
+        final Record r = getOrCreateRecord(pkgName, uid);
+        getOrCreateTopic(r, topic).visibility = visibility;
         updateConfig();
     }
 
+    private Topic getOrCreateTopic(Record r, Notification.Topic topic) {
+        Topic t = r.topics.get(topic.getId());
+        if (t != null) {
+            return t;
+        } else {
+            t = new Topic(topic);
+            r.topics.put(topic.getId(), t);
+            return t;
+        }
+    }
+
     public void dump(PrintWriter pw, String prefix, NotificationManagerService.DumpFilter filter) {
         if (filter == null) {
             final int N = mSignalExtractors.length;
@@ -385,15 +448,22 @@
                 pw.print(" (");
                 pw.print(r.uid == Record.UNKNOWN_UID ? "UNKNOWN_UID" : Integer.toString(r.uid));
                 pw.print(')');
-                if (r.priority != DEFAULT_PRIORITY) {
-                    pw.print(" priority=");
-                    pw.print(Notification.priorityToString(r.priority));
-                }
-                if (r.visibility != DEFAULT_VISIBILITY) {
-                    pw.print(" visibility=");
-                    pw.print(Notification.visibilityToString(r.visibility));
-                }
                 pw.println();
+                for (Topic t : r.topics.values()) {
+                    pw.print(prefix);
+                    pw.print("  ");
+                    pw.print("  ");
+                    pw.print(t.topic.getId());
+                    if (t.priority != DEFAULT_PRIORITY) {
+                        pw.print(" priority=");
+                        pw.print(Notification.priorityToString(t.priority));
+                    }
+                    if (t.visibility != DEFAULT_VISIBILITY) {
+                        pw.print(" visibility=");
+                        pw.print(Notification.visibilityToString(t.visibility));
+                    }
+                    pw.println();
+                }
             }
         }
     }
@@ -429,8 +499,16 @@
 
         String pkg;
         int uid = UNKNOWN_UID;
+        Map<String, Topic> topics = new ArrayMap<>();
+   }
+
+    private static class Topic {
+        Notification.Topic topic;
         int priority = DEFAULT_PRIORITY;
         int visibility = DEFAULT_VISIBILITY;
-    }
 
+        public Topic(Notification.Topic topic) {
+            this.topic = topic;
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/notification/PackagePriorityExtractor.java b/services/core/java/com/android/server/notification/TopicPriorityExtractor.java
similarity index 79%
rename from services/core/java/com/android/server/notification/PackagePriorityExtractor.java
rename to services/core/java/com/android/server/notification/TopicPriorityExtractor.java
index 6beed9c..5bf989ae 100644
--- a/services/core/java/com/android/server/notification/PackagePriorityExtractor.java
+++ b/services/core/java/com/android/server/notification/TopicPriorityExtractor.java
@@ -18,8 +18,11 @@
 import android.content.Context;
 import android.util.Slog;
 
-public class PackagePriorityExtractor implements NotificationSignalExtractor {
-    private static final String TAG = "ImportantPackageExtractor";
+/**
+ * Determines if the given notification can bypass Do Not Disturb.
+ */
+public class TopicPriorityExtractor implements NotificationSignalExtractor {
+    private static final String TAG = "ImportantTopicExtractor";
     private static final boolean DBG = false;
 
     private RankingConfig mConfig;
@@ -39,8 +42,8 @@
             return null;
         }
 
-        final int packagePriority = mConfig.getPackagePriority(
-                record.sbn.getPackageName(), record.sbn.getUid());
+        final int packagePriority = mConfig.getTopicPriority(record.sbn.getPackageName(),
+                record.sbn.getUid(), record.sbn.getNotification().getTopic());
         record.setPackagePriority(packagePriority);
 
         return null;
diff --git a/services/core/java/com/android/server/notification/PackageVisibilityExtractor.java b/services/core/java/com/android/server/notification/TopicVisibilityExtractor.java
similarity index 80%
rename from services/core/java/com/android/server/notification/PackageVisibilityExtractor.java
rename to services/core/java/com/android/server/notification/TopicVisibilityExtractor.java
index af99db7..e053382 100644
--- a/services/core/java/com/android/server/notification/PackageVisibilityExtractor.java
+++ b/services/core/java/com/android/server/notification/TopicVisibilityExtractor.java
@@ -18,8 +18,11 @@
 import android.content.Context;
 import android.util.Slog;
 
-public class PackageVisibilityExtractor implements NotificationSignalExtractor {
-    private static final String TAG = "PackageVisibilityExtractor";
+/**
+ * Determines if the given notification can display sensitive content on the lockscreen.
+ */
+public class TopicVisibilityExtractor implements NotificationSignalExtractor {
+    private static final String TAG = "TopicVisibilityExtractor";
     private static final boolean DBG = false;
 
     private RankingConfig mConfig;
@@ -39,8 +42,9 @@
             return null;
         }
 
-        final int packageVisibility = mConfig.getPackageVisibilityOverride(
-                record.sbn.getPackageName(), record.sbn.getUid());
+        final int packageVisibility = mConfig.getTopicVisibilityOverride(
+                record.sbn.getPackageName(), record.sbn.getUid(),
+                record.sbn.getNotification().getTopic());
         record.setPackageVisibilityOverride(packageVisibility);
 
         return null;
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 4f3544b..21a4206 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -617,6 +617,9 @@
     final DefaultPermissionGrantPolicy mDefaultPermissionPolicy =
             new DefaultPermissionGrantPolicy(this);
 
+    // List of packages names to keep cached, even if they are uninstalled for all users
+    private List<String> mKeepUninstalledPackages;
+
     private static class IFVerificationParams {
         PackageParser.Package pkg;
         boolean replacing;
@@ -13015,7 +13018,7 @@
         final boolean deleteAllUsers = (flags & PackageManager.DELETE_ALL_USERS) != 0;
         final int[] users = deleteAllUsers ? sUserManager.getUserIds() : new int[]{ userId };
         if (UserHandle.getUserId(uid) != userId || (deleteAllUsers && users.length > 1)) {
-            mContext.enforceCallingPermission(
+            mContext.enforceCallingOrSelfPermission(
                     android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
                     "deletePackage for user " + userId);
         }
@@ -13090,6 +13093,10 @@
         return false;
     }
 
+    private boolean shouldKeepUninstalledPackageLPr(String packageName) {
+        return mKeepUninstalledPackages != null && mKeepUninstalledPackages.contains(packageName);
+    }
+
     /**
      *  This method is an internal method that could be get invoked either
      *  to delete an installed package or to clean up a failed installation.
@@ -13512,7 +13519,9 @@
                         false, // blockUninstall
                         ps.readUserState(userId).domainVerificationStatus, 0);
                 if (!isSystemApp(ps)) {
-                    if (ps.isAnyInstalled(sUserManager.getUserIds())) {
+                    // Do not uninstall the APK if an app should be cached
+                    boolean keepUninstalledPackage = shouldKeepUninstalledPackageLPr(packageName);
+                    if (ps.isAnyInstalled(sUserManager.getUserIds()) || keepUninstalledPackage) {
                         // Other user still have this package installed, so all
                         // we need to do is clear this user's data and save that
                         // it is uninstalled.
@@ -16686,15 +16695,21 @@
             if (DEBUG_CLEAN_APKS) {
                 Slog.i(TAG, "Checking package " + packageName);
             }
-            boolean keep = false;
-            for (int i = 0; i < users.length; i++) {
-                if (users[i] != userHandle && ps.getInstalled(users[i])) {
-                    keep = true;
-                    if (DEBUG_CLEAN_APKS) {
-                        Slog.i(TAG, "  Keeping package " + packageName + " for user "
-                                + users[i]);
+            boolean keep = shouldKeepUninstalledPackageLPr(packageName);
+            if (keep) {
+                if (DEBUG_CLEAN_APKS) {
+                    Slog.i(TAG, "  Keeping package " + packageName + " - requested by DO");
+                }
+            } else {
+                for (int i = 0; i < users.length; i++) {
+                    if (users[i] != userHandle && ps.getInstalled(users[i])) {
+                        keep = true;
+                        if (DEBUG_CLEAN_APKS) {
+                            Slog.i(TAG, "  Keeping package " + packageName + " for user "
+                                    + users[i]);
+                        }
+                        break;
                     }
-                    break;
                 }
             }
             if (!keep) {
@@ -16896,6 +16911,23 @@
         }
     }
 
+    private void deletePackageIfUnusedLPr(final String packageName) {
+        PackageSetting ps = mSettings.mPackages.get(packageName);
+        if (ps == null) {
+            return;
+        }
+        if (!ps.isAnyInstalled(sUserManager.getUserIds())) {
+            // TODO Implement atomic delete if package is unused
+            // It is currently possible that the package will be deleted even if it is installed
+            // after this method returns.
+            mHandler.post(new Runnable() {
+                public void run() {
+                    deletePackageX(packageName, 0, PackageManager.DELETE_ALL_USERS);
+                }
+            });
+        }
+    }
+
     /**
      * Check and throw if the given before/after packages would be considered a
      * downgrade.
@@ -17133,6 +17165,34 @@
                         packageName, userId);
             }
         }
+
+        @Override
+        public void setKeepUninstalledPackages(final List<String> packageList) {
+            Preconditions.checkNotNull(packageList);
+            List<String> removedFromList = null;
+            synchronized (mPackages) {
+                if (mKeepUninstalledPackages != null) {
+                    final int packagesCount = mKeepUninstalledPackages.size();
+                    for (int i = 0; i < packagesCount; i++) {
+                        String oldPackage = mKeepUninstalledPackages.get(i);
+                        if (packageList != null && packageList.contains(oldPackage)) {
+                            continue;
+                        }
+                        if (removedFromList == null) {
+                            removedFromList = new ArrayList<>();
+                        }
+                        removedFromList.add(oldPackage);
+                    }
+                }
+                mKeepUninstalledPackages = new ArrayList<>(packageList);
+                if (removedFromList != null) {
+                    final int removedCount = removedFromList.size();
+                    for (int i = 0; i < removedCount; i++) {
+                        deletePackageIfUnusedLPr(removedFromList.get(i));
+                    }
+                }
+            }
+        }
     }
 
     @Override
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index b3c40d3..fd036a7 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -1561,6 +1561,8 @@
         final boolean isManagedProfile = (flags & UserInfo.FLAG_MANAGED_PROFILE) != 0;
         final boolean isRestricted = (flags & UserInfo.FLAG_RESTRICTED) != 0;
         final long ident = Binder.clearCallingIdentity();
+        final DevicePolicyManager devicePolicyManager = (DevicePolicyManager) mContext
+                .getSystemService(Context.DEVICE_POLICY_SERVICE);
         UserInfo userInfo;
         final int userId;
         try {
@@ -1603,13 +1605,22 @@
                         return null;
                     }
                 }
+                if (devicePolicyManager != null) {
+                    int deviceOwnerUserId = devicePolicyManager.getDeviceOwnerUserId();
+                    // If there is a device owner, completely disallow multiple user in non-split
+                    // user devices. In split user devices, no further users can be added If there
+                    // is a device owner outside of the system user.
+                    if (deviceOwnerUserId != UserHandle.USER_NULL
+                            && (!UserManager.isSplitSystemUser()
+                            || deviceOwnerUserId != UserHandle.USER_SYSTEM)) {
+                        return null;
+                    }
+                }
                 // In split system user mode, we assign the first human user the primary flag.
                 // And if there is no device owner, we also assign the admin flag to primary user.
                 if (UserManager.isSplitSystemUser()
                         && !isGuest && !isManagedProfile && getPrimaryUser() == null) {
                     flags |= UserInfo.FLAG_PRIMARY;
-                    DevicePolicyManager devicePolicyManager = (DevicePolicyManager)
-                            mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
                     if (devicePolicyManager == null
                             || devicePolicyManager.getDeviceOwner() == null) {
                         flags |= UserInfo.FLAG_ADMIN;
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 8b1a830..9a88c60 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -1419,7 +1419,7 @@
                             // to be set.
                             Rect rect = spec.rect;
                             putDefaultNextAppTransitionCoordinates(rect.left, rect.top,
-                                    rect.width(), rect.height(), null);
+                                    rect.width(), rect.height(), spec.bitmap);
                         }
                     }
                 }
diff --git a/services/core/java/com/android/server/wm/AppWindowAnimator.java b/services/core/java/com/android/server/wm/AppWindowAnimator.java
index dfd01ef..b32ec2d 100644
--- a/services/core/java/com/android/server/wm/AppWindowAnimator.java
+++ b/services/core/java/com/android/server/wm/AppWindowAnimator.java
@@ -228,7 +228,8 @@
 
     private void stepThumbnailAnimation(long currentTime) {
         thumbnailTransformation.clear();
-        thumbnailAnimation.getTransformation(currentTime, thumbnailTransformation);
+        final long animationFrameTime = getAnimationFrameTime(thumbnailAnimation, currentTime);
+        thumbnailAnimation.getTransformation(animationFrameTime, thumbnailTransformation);
         thumbnailTransformation.getMatrix().preTranslate(thumbnailX, thumbnailY);
 
         ScreenRotationAnimation screenRotationAnimation =
@@ -265,16 +266,26 @@
                 tmpFloats[Matrix.MSKEW_X], tmpFloats[Matrix.MSCALE_Y]);
     }
 
+    /**
+     * Sometimes we need to synchronize the first frame of animation with some external event, e.g.
+     * Recents hiding some of its content. To achieve this, we prolong the start of the animaiton
+     * and keep producing the first frame of the animation.
+     */
+    private long getAnimationFrameTime(Animation animation, long currentTime) {
+        if (mProlongAnimation == PROLONG_ANIMATION_AT_START) {
+            animation.setStartTime(currentTime);
+            return currentTime + 1;
+        }
+        return currentTime;
+    }
+
     private boolean stepAnimation(long currentTime) {
         if (animation == null) {
             return false;
         }
         transformation.clear();
-        if (mProlongAnimation == PROLONG_ANIMATION_AT_START) {
-            animation.setStartTime(currentTime);
-            currentTime += 1;
-        }
-        boolean hasMoreFrames = animation.getTransformation(currentTime, transformation);
+        final long animationFrameTime = getAnimationFrameTime(animation, currentTime);
+        boolean hasMoreFrames = animation.getTransformation(animationFrameTime, transformation);
         if (!hasMoreFrames) {
             if (deferThumbnailDestruction && !deferFinalFrameCleanup) {
                 // We are deferring the thumbnail destruction, so extend the animation for one more
@@ -290,10 +301,10 @@
                     hasMoreFrames = true;
                 } else {
                     animation = null;
+                    clearThumbnail();
+                    if (DEBUG_ANIM) Slog.v(TAG, "Finished animation in " + mAppToken + " @ "
+                            + currentTime);
                 }
-                clearThumbnail();
-                if (DEBUG_ANIM) Slog.v(TAG,
-                        "Finished animation in " + mAppToken + " @ " + currentTime);
             }
         }
         hasTransformation = hasMoreFrames;
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java
index 4926352..74750a9 100644
--- a/services/core/java/com/android/server/wm/DragState.java
+++ b/services/core/java/com/android/server/wm/DragState.java
@@ -16,6 +16,14 @@
 
 package com.android.server.wm;
 
+import android.graphics.Matrix;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.AnimationSet;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
+import android.view.animation.Transformation;
+import android.view.animation.TranslateAnimation;
 import com.android.server.input.InputApplicationHandle;
 import com.android.server.input.InputWindowHandle;
 import com.android.server.wm.WindowManagerService.DragInputEventReceiver;
@@ -45,6 +53,8 @@
  * Drag/drop state
  */
 class DragState {
+    private static final long ANIMATION_DURATION_MS = 500;
+
     final WindowManagerService mService;
     IBinder mToken;
     SurfaceControl mSurfaceControl;
@@ -55,6 +65,8 @@
     ClipData mData;
     ClipDescription mDataDescription;
     boolean mDragResult;
+    float mOriginalAlpha;
+    float mOriginalX, mOriginalY;
     float mCurrentX, mCurrentY;
     float mThumbOffsetX, mThumbOffsetY;
     InputChannel mServerChannel, mClientChannel;
@@ -69,6 +81,10 @@
     private final Region mTmpRegion = new Region();
     private final Rect mTmpRect = new Rect();
 
+    private Animation mAnimation;
+    final Transformation mTransformation = new Transformation();
+    private final Interpolator mCubicEaseOutInterpolator = new DecelerateInterpolator(1.5f);
+
     DragState(WindowManagerService service, IBinder token, SurfaceControl surface,
             int flags, IBinder localWin) {
         mService = service;
@@ -184,6 +200,9 @@
     /* call out to each visible window/session informing it about the drag
      */
     void broadcastDragStartedLw(final float touchX, final float touchY) {
+        mOriginalX = mCurrentX = touchX;
+        mOriginalY = mCurrentY = touchY;
+
         // Cache a base-class instance of the clip metadata so that parceling
         // works correctly in calling out to the apps.
         mDataDescription = (mData != null) ? mData.getDescription() : null;
@@ -294,19 +313,32 @@
     }
 
     void endDragLw() {
-        mService.mDragState.broadcastDragEndedLw();
+        if (!mDragResult) {
+            mAnimation = createReturnAnimationLocked();
+            mService.scheduleAnimationLocked();
+            return;  // Will call cleanUpDragLw when the animation is done.
+        }
+        cleanUpDragLw();
+    }
+
+
+    void cleanUpDragLw() {
+        broadcastDragEndedLw();
 
         // stop intercepting input
-        mService.mDragState.unregister();
+        unregister();
 
         // free our resources and drop all the object references
-        mService.mDragState.reset();
+        reset();
         mService.mDragState = null;
 
         mService.mInputMonitor.updateInputWindowsLw(true /*force*/);
     }
 
     void notifyMoveLw(float x, float y) {
+        mCurrentX = x;
+        mCurrentY = y;
+
         final int myPid = Process.myPid();
 
         // Move the surface to the given touch
@@ -378,6 +410,9 @@
     // result from the recipient.
     boolean notifyDropLw(WindowState touchedWin, DropPermissionHolder dropPermissionHolder,
             float x, float y) {
+        mCurrentX = x;
+        mCurrentY = y;
+
         if (touchedWin == null) {
             // "drop" outside a valid window -- no recipient to apply a
             // timeout to, and we can send the drag-ended message immediately.
@@ -469,4 +504,38 @@
         return DragEvent.obtain(action, winX, winY, localState, description, data,
                 dropPermissionHolder, result);
     }
+
+    boolean stepAnimationLocked(long currentTimeMs) {
+        if (mAnimation == null) {
+            return false;
+        }
+
+        mTransformation.clear();
+        if (!mAnimation.getTransformation(currentTimeMs, mTransformation)) {
+            cleanUpDragLw();
+            return false;
+        }
+
+        final float tmpFloats[] = mService.mTmpFloats;
+        mTransformation.getMatrix().getValues(tmpFloats);
+        mSurfaceControl.setPosition(
+                tmpFloats[Matrix.MTRANS_X] - mThumbOffsetX,
+                tmpFloats[Matrix.MTRANS_Y] - mThumbOffsetY);
+        mSurfaceControl.setAlpha(mTransformation.getAlpha());
+        mSurfaceControl.setMatrix(tmpFloats[Matrix.MSCALE_X], tmpFloats[Matrix.MSKEW_Y],
+                tmpFloats[Matrix.MSKEW_X], tmpFloats[Matrix.MSCALE_Y]);
+        return true;
+    }
+
+    private Animation createReturnAnimationLocked() {
+        final AnimationSet set = new AnimationSet(false);
+        set.addAnimation(new TranslateAnimation(
+                mCurrentX, mOriginalX, mCurrentY, mOriginalY));
+        set.addAnimation(new AlphaAnimation(mOriginalAlpha, mOriginalAlpha / 2));
+        set.setDuration(ANIMATION_DURATION_MS);
+        set.setInterpolator(mCubicEaseOutInterpolator);
+        set.initialize(0, 0, 0, 0);
+        set.start();  // Will start on the first call to getTransformation.
+        return set;
+    }
 }
\ No newline at end of file
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index 1caeca0..f23fcdb 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -325,8 +325,6 @@
             }
 
             mService.mDragState.mData = data;
-            mService.mDragState.mCurrentX = touchX;
-            mService.mDragState.mCurrentY = touchY;
             mService.mDragState.broadcastDragStartedLw(touchX, touchY);
 
             // remember the thumb offsets for later
@@ -401,6 +399,34 @@
         }
     }
 
+    public void cancelDragAndDrop(IBinder dragToken) {
+        if (WindowManagerService.DEBUG_DRAG) {
+            Slog.d(WindowManagerService.TAG, "cancelDragAndDrop");
+        }
+
+        synchronized (mService.mWindowMap) {
+            long ident = Binder.clearCallingIdentity();
+            try {
+                if (mService.mDragState == null) {
+                    Slog.w(WindowManagerService.TAG, "cancelDragAndDrop() without prepareDrag()");
+                    throw new IllegalStateException("cancelDragAndDrop() without prepareDrag()");
+                }
+
+                if (mService.mDragState.mToken != dragToken) {
+                    Slog.w(WindowManagerService.TAG,
+                            "cancelDragAndDrop() does not match prepareDrag()");
+                    throw new IllegalStateException(
+                            "cancelDragAndDrop() does not match prepareDrag()");
+                }
+
+                mService.mDragState.mDragResult = false;
+                mService.mDragState.endDragLw();
+            } finally {
+                Binder.restoreCallingIdentity(ident);
+            }
+        }
+    }
+
     public void dragRecipientEntered(IWindow window) {
         if (WindowManagerService.DEBUG_DRAG) {
             Slog.d(WindowManagerService.TAG, "Drag into new candidate view @ " + window.asBinder());
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 8085f13..04ab544 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -515,10 +515,11 @@
         for (int i = 0; i < count; i++) {
             final TaskStack otherStack = mService.mStackIdToStack.valueAt(i);
             final int otherStackId = otherStack.mStackId;
-            if (StackId.isResizeableByDockedStack(otherStackId)) {
+            if (StackId.isResizeableByDockedStack(otherStackId)
+                    && !otherStack.mBounds.equals(bounds)) {
                 mService.mH.sendMessage(
                         mService.mH.obtainMessage(RESIZE_STACK, otherStackId,
-                                1 /*allowResizeInDockedMode*/, bounds));
+                                1 /*allowResizeInDockedMode*/, fullscreen ? null : bounds));
             }
         }
     }
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index a96bd2c..46fab2a 100644
--- a/services/core/java/com/android/server/wm/WindowAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowAnimator.java
@@ -708,6 +708,10 @@
                 }
             }
 
+            if (mService.mDragState != null) {
+                mAnimating |= mService.mDragState.stepAnimationLocked(mCurrentTime);
+            }
+
             if (mAnimating) {
                 mService.scheduleAnimationLocked();
             }
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index b6600266..e741c45 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -309,6 +309,8 @@
     // trying to apply a new one.
     private static final boolean ALWAYS_KEEP_CURRENT = true;
 
+    private static final float DRAG_SHADOW_ALPHA_TRANSPARENT = .7071f;
+
     final private KeyguardDisableHandler mKeyguardDisableHandler;
 
     final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@@ -753,9 +755,6 @@
     private boolean completeDropLw(float x, float y) {
         WindowState dropTargetWin = mDragState.getDropTargetWinLw(x, y);
 
-        mDragState.mCurrentX = x;
-        mDragState.mCurrentY = y;
-
         DropPermissionHolder dropPermissionHolder = null;
         if (dropTargetWin != null &&
                 (mDragState.mFlags & View.DRAG_FLAG_GLOBAL) != 0 &&
@@ -7175,9 +7174,11 @@
                         SurfaceControl surface = new SurfaceControl(session, "drag surface",
                                 width, height, PixelFormat.TRANSLUCENT, SurfaceControl.HIDDEN);
                         surface.setLayerStack(display.getLayerStack());
+                        float alpha = 1;
                         if ((flags & View.DRAG_FLAG_OPAQUE) == 0) {
-                            surface.setAlpha(.7071f);
+                            alpha = DRAG_SHADOW_ALPHA_TRANSPARENT;
                         }
+                        surface.setAlpha(alpha);
 
                         if (SHOW_TRANSACTIONS) Slog.i(TAG, "  DRAG "
                                 + surface + ": CREATE");
@@ -7187,6 +7188,7 @@
                         mDragState = new DragState(this, token, surface, flags, winBinder);
                         mDragState.mPid = callerPid;
                         mDragState.mUid = callerUid;
+                        mDragState.mOriginalAlpha = alpha;
                         token = mDragState.mToken = new Binder();
 
                         // 5 second timeout for this window to actually begin the drag
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 642def3..3ae2751 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -60,6 +60,7 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PackageManagerInternal;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.content.pm.UserInfo;
@@ -416,7 +417,7 @@
                 "cross-profile-widget-providers";
         private static final String TAG_PROVIDER = "provider";
         private static final String TAG_PACKAGE_LIST_ITEM  = "item";
-
+        private static final String TAG_KEEP_UNINSTALLED_PACKAGES  = "keep-uninstalled-packages";
         private static final String TAG_USER_RESTRICTIONS = "user-restrictions";
 
         final DeviceAdminInfo info;
@@ -489,6 +490,9 @@
         // allowed.
         List<String> permittedInputMethods;
 
+        // List of package names to keep cached.
+        List<String> keepUninstalledPackages;
+
         // TODO: review implementation decisions with frameworks team
         boolean specifiesGlobalProxy = false;
         String globalProxySpec = null;
@@ -674,6 +678,7 @@
             writePackageListToXml(out, TAG_PERMITTED_ACCESSIBILITY_SERVICES,
                     permittedAccessiblityServices);
             writePackageListToXml(out, TAG_PERMITTED_IMES, permittedInputMethods);
+            writePackageListToXml(out, TAG_KEEP_UNINSTALLED_PACKAGES, keepUninstalledPackages);
             if (hasUserRestrictions()) {
                 UserRestrictionsUtils.writeRestrictions(
                         out, userRestrictions, TAG_USER_RESTRICTIONS);
@@ -787,6 +792,8 @@
                     permittedAccessiblityServices = readPackageList(parser, tag);
                 } else if (TAG_PERMITTED_IMES.equals(tag)) {
                     permittedInputMethods = readPackageList(parser, tag);
+                } else if (TAG_KEEP_UNINSTALLED_PACKAGES.equals(tag)) {
+                    keepUninstalledPackages = readPackageList(parser, tag);
                 } else if (TAG_USER_RESTRICTIONS.equals(tag)) {
                     UserRestrictionsUtils.readRestrictions(parser, ensureUserRestrictions());
                 } else {
@@ -981,13 +988,17 @@
                     pw.println(disabledKeyguardFeatures);
             pw.print(prefix); pw.print("crossProfileWidgetProviders=");
                     pw.println(crossProfileWidgetProviders);
-            if (!(permittedAccessiblityServices == null)) {
+            if (permittedAccessiblityServices != null) {
                 pw.print(prefix); pw.print("permittedAccessibilityServices=");
-                        pw.println(permittedAccessiblityServices.toString());
+                    pw.println(permittedAccessiblityServices);
             }
-            if (!(permittedInputMethods == null)) {
+            if (permittedInputMethods != null) {
                 pw.print(prefix); pw.print("permittedInputMethods=");
-                        pw.println(permittedInputMethods.toString());
+                    pw.println(permittedInputMethods);
+            }
+            if (keepUninstalledPackages != null) {
+                pw.print(prefix); pw.print("keepUninstalledPackages=");
+                    pw.println(keepUninstalledPackages);
             }
             pw.print(prefix); pw.println("userRestrictions:");
             UserRestrictionsUtils.dumpRestrictions(pw, prefix + "  ", userRestrictions);
@@ -1068,6 +1079,10 @@
             return LocalServices.getService(UserManagerInternal.class);
         }
 
+        PackageManagerInternal getPackageManagerInternal() {
+            return LocalServices.getService(PackageManagerInternal.class);
+        }
+
         NotificationManager getNotificationManager() {
             return mContext.getSystemService(NotificationManager.class);
         }
@@ -2101,6 +2116,14 @@
         new SetupContentObserver(mHandler).register(mContext.getContentResolver());
         // Initialize the user setup state, to handle the upgrade case.
         updateUserSetupComplete();
+
+        List<String> packageList;
+        synchronized (this) {
+            packageList = getKeepUninstalledPackagesLocked();
+        }
+        if (packageList != null) {
+            mInjector.getPackageManagerInternal().setKeepUninstalledPackages(packageList);
+        }
     }
 
     private void ensureDeviceOwnerUserStarted() {
@@ -4490,6 +4513,42 @@
     }
 
     @Override
+    public void setKeepUninstalledPackages(ComponentName who, List<String> packageList) {
+        if (!mHasFeature) {
+            return;
+        }
+        Preconditions.checkNotNull(who, "ComponentName is null");
+        Preconditions.checkNotNull(packageList, "packageList is null");
+        final int userHandle = UserHandle.getCallingUserId();
+        synchronized (this) {
+            ActiveAdmin admin = getActiveAdminForCallerLocked(who,
+                    DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
+            admin.keepUninstalledPackages = packageList;
+            saveSettingsLocked(userHandle);
+            mInjector.getPackageManagerInternal().setKeepUninstalledPackages(packageList);
+        }
+    }
+
+    @Override
+    public List<String> getKeepUninstalledPackages(ComponentName who) {
+        Preconditions.checkNotNull(who, "ComponentName is null");
+        if (!mHasFeature) {
+            return null;
+        }
+        // TODO In split system user mode, allow apps on user 0 to query the list
+        synchronized (this) {
+            // Check if this is the device owner who is calling
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
+            return getKeepUninstalledPackagesLocked();
+        }
+    }
+
+    private List<String> getKeepUninstalledPackagesLocked() {
+        ActiveAdmin deviceOwner = getDeviceOwnerAdminLocked();
+        return (deviceOwner != null) ? deviceOwner.keepUninstalledPackages : null;
+    }
+
+    @Override
     public boolean setDeviceOwner(ComponentName admin, String ownerName, int userId) {
         if (!mHasFeature) {
             return false;
@@ -4569,6 +4628,11 @@
         }
     }
 
+    @Override
+    public int getDeviceOwnerUserId() {
+        return mOwners.hasDeviceOwner() ? mOwners.getDeviceOwnerUserId() : UserHandle.USER_NULL;
+    }
+
     // Returns the active device owner or null if there is no device owner.
     @VisibleForTesting
     ActiveAdmin getDeviceOwnerAdminLocked() {
@@ -6012,9 +6076,9 @@
 
     @Override
     public void startManagedQuickContact(String actualLookupKey, long actualContactId,
-            Intent originalIntent) {
+            long actualDirectoryId, Intent originalIntent) {
         final Intent intent = QuickContact.rebuildManagedQuickContactsIntent(
-                actualLookupKey, actualContactId, originalIntent);
+                actualLookupKey, actualContactId, actualDirectoryId, originalIntent);
         final int callingUserId = UserHandle.getCallingUserId();
 
         final long ident = mInjector.binderClearCallingIdentity();
diff --git a/services/net/java/android/net/dhcp/DhcpPacket.java b/services/net/java/android/net/dhcp/DhcpPacket.java
index 8927bfa..6a255e5 100644
--- a/services/net/java/android/net/dhcp/DhcpPacket.java
+++ b/services/net/java/android/net/dhcp/DhcpPacket.java
@@ -291,6 +291,11 @@
      */
     abstract void finishPacket(ByteBuffer buffer);
 
+    // Set in unit tests, to ensure that the test does not break when run on different devices and
+    // on different releases.
+    static String testOverrideVendorId = null;
+    static String testOverrideHostname = null;
+
     protected DhcpPacket(int transId, short secs, Inet4Address clientIp, Inet4Address yourIp,
                          Inet4Address nextIp, Inet4Address relayIp,
                          byte[] clientMac, boolean broadcast) {
@@ -593,6 +598,16 @@
         buf.put((byte) 0xFF);
     }
 
+    private String getVendorId() {
+        if (testOverrideVendorId != null) return testOverrideVendorId;
+        return "android-dhcp-" + Build.VERSION.RELEASE;
+    }
+
+    private String getHostname() {
+        if (testOverrideHostname != null) return testOverrideHostname;
+        return SystemProperties.get("net.hostname");
+    }
+
     /**
      * Adds common client TLVs.
      *
@@ -601,8 +616,8 @@
      */
     protected void addCommonClientTlvs(ByteBuffer buf) {
         addTlv(buf, DHCP_MAX_MESSAGE_SIZE, (short) MAX_LENGTH);
-        addTlv(buf, DHCP_VENDOR_CLASS_ID, "android-dhcp-" + Build.VERSION.RELEASE);
-        addTlv(buf, DHCP_HOST_NAME, SystemProperties.get("net.hostname"));
+        addTlv(buf, DHCP_VENDOR_CLASS_ID, getVendorId());
+        addTlv(buf, DHCP_HOST_NAME, getHostname());
     }
 
     /**
diff --git a/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java b/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java
index 7e60bf1..2a967e6 100644
--- a/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java
+++ b/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java
@@ -29,6 +29,7 @@
 
 import junit.framework.TestCase;
 import libcore.util.HexEncoding;
+import java.util.Arrays;
 
 import static android.net.dhcp.DhcpPacket.*;
 
@@ -47,6 +48,11 @@
         return (Inet4Address) NetworkUtils.numericToInetAddress(addrString);
     }
 
+    public void setUp() {
+        DhcpPacket.testOverrideVendorId = "android-dhcp-???";
+        DhcpPacket.testOverrideHostname = "android-01234567890abcde";
+    }
+
     class TestDhcpPacket extends DhcpPacket {
         private byte mType;
         // TODO: Make this a map of option numbers to bytes instead.
@@ -584,4 +590,93 @@
         assertDhcpResults("192.168.189.49/24", "192.168.189.1", "8.8.8.8,8.8.4.4",
                 null, "192.171.189.2", null, 28800, false, dhcpResults);
     }
+
+    @SmallTest
+    public void testDiscoverPacket() throws Exception {
+        short secs = 7;
+        int transactionId = 0xdeadbeef;
+        byte[] hwaddr = {
+                (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, (byte) 0xb1, (byte) 0x7a
+        };
+        byte[] params = new byte[] {
+            DHCP_SUBNET_MASK,
+            DHCP_ROUTER,
+            DHCP_DNS_SERVER,
+            DHCP_DOMAIN_NAME,
+            DHCP_MTU,
+            DHCP_LEASE_TIME,
+        };
+
+        ByteBuffer packet = DhcpPacket.buildDiscoverPacket(
+                DhcpPacket.ENCAP_L2, transactionId, secs, hwaddr,
+                false /* do unicast */, params);
+
+        byte[] headers = new byte[] {
+            // Ethernet header.
+            (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+            (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, (byte) 0xb1, (byte) 0x7a,
+            (byte) 0x08, (byte) 0x00,
+            // IP header.
+            (byte) 0x45, (byte) 0x10, (byte) 0x01, (byte) 0x52,
+            (byte) 0x00, (byte) 0x00, (byte) 0x40, (byte) 0x00,
+            (byte) 0x40, (byte) 0x11, (byte) 0x39, (byte) 0x8c,
+            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+            (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+            // UDP header.
+            (byte) 0x00, (byte) 0x44, (byte) 0x00, (byte) 0x43,
+            (byte) 0x01, (byte) 0x3e, (byte) 0xd8, (byte) 0xa4,
+            // BOOTP.
+            (byte) 0x01, (byte) 0x01, (byte) 0x06, (byte) 0x00,
+            (byte) 0xde, (byte) 0xad, (byte) 0xbe, (byte) 0xef,
+            (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x00,
+            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+            (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b,
+            (byte) 0xb1, (byte) 0x7a
+        };
+        byte[] options = new byte[] {
+            // Magic cookie 0x63825363.
+            (byte) 0x63, (byte) 0x82, (byte) 0x53, (byte) 0x63,
+            // Message type DISCOVER.
+            (byte) 0x35, (byte) 0x01, (byte) 0x01,
+            // Client identifier Ethernet, da:01:19:5b:b1:7a.
+            (byte) 0x3d, (byte) 0x07,
+                    (byte) 0x01,
+                    (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, (byte) 0xb1, (byte) 0x7a,
+            // Max message size 1500.
+            (byte) 0x39, (byte) 0x02, (byte) 0x05, (byte) 0xdc,
+            // Version "android-dhcp-???".
+            (byte) 0x3c, (byte) 0x10,
+                    'a', 'n', 'd', 'r', 'o', 'i', 'd', '-', 'd', 'h', 'c', 'p', '-', '?', '?', '?',
+            // Hostname "android-01234567890abcde"
+            (byte) 0x0c, (byte) 0x18,
+                    'a', 'n', 'd', 'r', 'o', 'i', 'd', '-',
+                    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e',
+            // Requested parameter list.
+            (byte) 0x37, (byte) 0x06,
+                DHCP_SUBNET_MASK,
+                DHCP_ROUTER,
+                DHCP_DNS_SERVER,
+                DHCP_DOMAIN_NAME,
+                DHCP_MTU,
+                DHCP_LEASE_TIME,
+            // End options.
+            (byte) 0xff,
+            // Our packets are always of even length. TODO: find out why and possibly fix it.
+            (byte) 0x00
+        };
+        byte[] expected = new byte[DhcpPacket.MIN_PACKET_LENGTH_L2 + options.length];
+        assertTrue((expected.length & 1) == 0);
+        System.arraycopy(headers, 0, expected, 0, headers.length);
+        System.arraycopy(options, 0, expected, DhcpPacket.MIN_PACKET_LENGTH_L2, options.length);
+
+        byte[] actual = new byte[packet.limit()];
+        packet.get(actual);
+        String msg =
+                "Expected:\n  " + Arrays.toString(expected) +
+                "\nActual:\n  " + Arrays.toString(actual);
+        assertTrue(msg, Arrays.equals(expected, actual));
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java
index 2c01b8a..56d6fc0 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java
@@ -20,8 +20,8 @@
 import android.app.IActivityManager;
 import android.app.NotificationManager;
 import android.app.backup.IBackupManager;
-import android.content.Context;
 import android.content.pm.IPackageManager;
+import android.content.pm.PackageManagerInternal;
 import android.media.IAudioService;
 import android.os.Looper;
 import android.os.PowerManagerInternal;
@@ -113,6 +113,11 @@
         }
 
         @Override
+        PackageManagerInternal getPackageManagerInternal() {
+            return context.packageManagerInternal;
+        }
+
+        @Override
         PowerManagerInternal getPowerManagerInternal() {
             return context.powerManagerInternal;
         }
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java
index f4fdc95..bb1e06d 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java
@@ -28,6 +28,7 @@
 import android.content.IntentFilter;
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManagerInternal;
 import android.content.pm.UserInfo;
 import android.media.IAudioService;
 import android.os.Bundle;
@@ -205,6 +206,7 @@
     public final SystemPropertiesForMock systemProperties;
     public final UserManager userManager;
     public final UserManagerInternal userManagerInternal;
+    public final PackageManagerInternal packageManagerInternal;
     public final UserManagerForMock userManagerForMock;
     public final PowerManagerForMock powerManager;
     public final PowerManagerInternal powerManagerInternal;
@@ -237,6 +239,7 @@
         userManager = mock(UserManager.class);
         userManagerInternal = mock(UserManagerInternal.class);
         userManagerForMock = mock(UserManagerForMock.class);
+        packageManagerInternal = mock(PackageManagerInternal.class);
         powerManager = mock(PowerManagerForMock.class);
         powerManagerInternal = mock(PowerManagerInternal.class);
         notificationManager = mock(NotificationManager.class);
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java
deleted file mode 100644
index 56fd351..0000000
--- a/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.pm;
-
-import com.android.server.devicepolicy.DpmTestUtils;
-
-import android.os.Bundle;
-import android.os.UserManager;
-import android.test.AndroidTestCase;
-import android.test.MoreAsserts;
-
-/**
- * Tests for {@link com.android.server.pm.UserRestrictionsUtils}.
- *
- * <p>Run with:<pre>
-   m FrameworksServicesTests &&
-   adb install \
-     -r out/target/product/hammerhead/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&
-   adb shell am instrument -e class com.android.server.pm.UserRestrictionsUtilsTest \
-     -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner
- * </pre>
- */
-public class UserRestrictionsUtilsTest extends AndroidTestCase {
-    public void testNonNull() {
-        Bundle out = UserRestrictionsUtils.nonNull(null);
-        assertNotNull(out);
-        out.putBoolean("a", true); // Should not be Bundle.EMPTY.
-
-        Bundle in = new Bundle();
-        assertSame(in, UserRestrictionsUtils.nonNull(in));
-    }
-
-    public void testIsEmpty() {
-        assertTrue(UserRestrictionsUtils.isEmpty(null));
-        assertTrue(UserRestrictionsUtils.isEmpty(new Bundle()));
-        assertFalse(UserRestrictionsUtils.isEmpty(DpmTestUtils.newRestrictions("a")));
-    }
-
-    public void testClone() {
-        Bundle in = new Bundle();
-        Bundle out = UserRestrictionsUtils.clone(in);
-        assertNotSame(in, out);
-        DpmTestUtils.assertRestrictions(out, new Bundle());
-
-        out = UserRestrictionsUtils.clone(null);
-        assertNotNull(out);
-        out.putBoolean("a", true); // Should not be Bundle.EMPTY.
-    }
-
-    public void testMerge() {
-        Bundle a = DpmTestUtils.newRestrictions("a", "d");
-        Bundle b = DpmTestUtils.newRestrictions("b", "d", "e");
-
-        UserRestrictionsUtils.merge(a, b);
-
-        DpmTestUtils.assertRestrictions(DpmTestUtils.newRestrictions("a", "b", "d", "e"), a);
-
-        UserRestrictionsUtils.merge(a, null);
-
-        DpmTestUtils.assertRestrictions(DpmTestUtils.newRestrictions("a", "b", "d", "e"), a);
-
-        try {
-            UserRestrictionsUtils.merge(a, a);
-            fail();
-        } catch (IllegalArgumentException expected) {
-        }
-    }
-
-    public void testIsSystemControlled() {
-        assertTrue(UserRestrictionsUtils.isSystemControlled(UserManager.DISALLOW_RECORD_AUDIO));
-        assertFalse(UserRestrictionsUtils.isSystemControlled(UserManager.DISALLOW_FUN));
-    }
-
-    public void testCanDeviceOwnerChange() {
-        assertFalse(UserRestrictionsUtils.canDeviceOwnerChange(UserManager.DISALLOW_RECORD_AUDIO));
-        assertFalse(UserRestrictionsUtils.canDeviceOwnerChange(UserManager.DISALLOW_WALLPAPER));
-        assertTrue(UserRestrictionsUtils.canDeviceOwnerChange(UserManager.DISALLOW_ADD_USER));
-    }
-
-    public void testCanProfileOwnerChange() {
-        assertFalse(UserRestrictionsUtils.canProfileOwnerChange(UserManager.DISALLOW_RECORD_AUDIO));
-        assertFalse(UserRestrictionsUtils.canProfileOwnerChange(UserManager.DISALLOW_WALLPAPER));
-        assertFalse(UserRestrictionsUtils.canProfileOwnerChange(UserManager.DISALLOW_ADD_USER));
-        assertTrue(UserRestrictionsUtils.canProfileOwnerChange(UserManager.DISALLOW_ADJUST_VOLUME));
-    }
-
-    public void testSortToGlobalAndLocal() {
-        final Bundle local = new Bundle();
-        final Bundle global = new Bundle();
-
-        UserRestrictionsUtils.sortToGlobalAndLocal(null, global, local);
-        assertEquals(0, global.size());
-        assertEquals(0, local.size());
-
-        UserRestrictionsUtils.sortToGlobalAndLocal(Bundle.EMPTY, global, local);
-        assertEquals(0, global.size());
-        assertEquals(0, local.size());
-
-        UserRestrictionsUtils.sortToGlobalAndLocal(DpmTestUtils.newRestrictions(
-                UserManager.DISALLOW_ADJUST_VOLUME,
-                UserManager.DISALLOW_UNMUTE_MICROPHONE,
-                UserManager.DISALLOW_USB_FILE_TRANSFER,
-                UserManager.DISALLOW_CONFIG_TETHERING,
-                UserManager.DISALLOW_OUTGOING_BEAM,
-                UserManager.DISALLOW_APPS_CONTROL
-        ), global, local);
-
-
-        DpmTestUtils.assertRestrictions(DpmTestUtils.newRestrictions(
-                // These can be set by PO too, but when DO sets them, they're global.
-                UserManager.DISALLOW_ADJUST_VOLUME,
-                UserManager.DISALLOW_UNMUTE_MICROPHONE,
-
-                // These can only be set by DO.
-                UserManager.DISALLOW_USB_FILE_TRANSFER,
-                UserManager.DISALLOW_CONFIG_TETHERING
-        ), global);
-
-        DpmTestUtils.assertRestrictions(DpmTestUtils.newRestrictions(
-                // They can be set by both DO/PO.
-                UserManager.DISALLOW_OUTGOING_BEAM,
-                UserManager.DISALLOW_APPS_CONTROL
-        ), local);
-    }
-
-    public void testAreEqual() {
-        assertTrue(UserRestrictionsUtils.areEqual(
-                null,
-                null));
-
-        assertTrue(UserRestrictionsUtils.areEqual(
-                null,
-                Bundle.EMPTY));
-
-        assertTrue(UserRestrictionsUtils.areEqual(
-                Bundle.EMPTY,
-                null));
-
-        assertTrue(UserRestrictionsUtils.areEqual(
-                Bundle.EMPTY,
-                Bundle.EMPTY));
-
-        assertTrue(UserRestrictionsUtils.areEqual(
-                new Bundle(),
-                Bundle.EMPTY));
-
-        assertFalse(UserRestrictionsUtils.areEqual(
-                null,
-                DpmTestUtils.newRestrictions("a")));
-
-        assertFalse(UserRestrictionsUtils.areEqual(
-                DpmTestUtils.newRestrictions("a"),
-                null));
-
-        assertTrue(UserRestrictionsUtils.areEqual(
-                DpmTestUtils.newRestrictions("a"),
-                DpmTestUtils.newRestrictions("a")));
-
-        assertFalse(UserRestrictionsUtils.areEqual(
-                DpmTestUtils.newRestrictions("a"),
-                DpmTestUtils.newRestrictions("a", "b")));
-
-        assertFalse(UserRestrictionsUtils.areEqual(
-                DpmTestUtils.newRestrictions("a", "b"),
-                DpmTestUtils.newRestrictions("a")));
-
-        assertFalse(UserRestrictionsUtils.areEqual(
-                DpmTestUtils.newRestrictions("b", "a"),
-                DpmTestUtils.newRestrictions("a", "a")));
-
-        // Make sure false restrictions are handled correctly.
-        final Bundle a = DpmTestUtils.newRestrictions("a");
-        a.putBoolean("b", true);
-
-        final Bundle b = DpmTestUtils.newRestrictions("a");
-        b.putBoolean("b", false);
-
-        assertFalse(UserRestrictionsUtils.areEqual(a, b));
-        assertFalse(UserRestrictionsUtils.areEqual(b, a));
-    }
-}
diff --git a/telephony/java/com/android/internal/telephony/PhoneConstants.java b/telephony/java/com/android/internal/telephony/PhoneConstants.java
index 572cc6f..a183de5 100644
--- a/telephony/java/com/android/internal/telephony/PhoneConstants.java
+++ b/telephony/java/com/android/internal/telephony/PhoneConstants.java
@@ -59,6 +59,9 @@
     public static final int PHONE_TYPE_SIP = RILConstants.SIP_PHONE;
     public static final int PHONE_TYPE_THIRD_PARTY = RILConstants.THIRD_PARTY_PHONE;
     public static final int PHONE_TYPE_IMS = RILConstants.IMS_PHONE;
+    // Currently this is used only to differentiate CDMA and CDMALTE Phone in GsmCdma* files. For
+    // anything outside of that, a cdma + lte phone is still CDMA_PHONE
+    public static final int PHONE_TYPE_CDMA_LTE = RILConstants.CDMA_LTE_PHONE;
 
     // Modes for LTE_ON_CDMA
     public static final int LTE_ON_CDMA_UNKNOWN = RILConstants.LTE_ON_CDMA_UNKNOWN;
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index 7088be8..3c4c04b 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -118,6 +118,7 @@
     int SIP_PHONE  = 3;
     int THIRD_PARTY_PHONE = 4;
     int IMS_PHONE = 5;
+    int CDMA_LTE_PHONE = 6;
 
     int LTE_ON_CDMA_UNKNOWN = -1;
     int LTE_ON_CDMA_FALSE = 0;
diff --git a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
index 67b9d77..8eb30d2 100644
--- a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
+++ b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
@@ -160,6 +160,36 @@
             }
         },
 
+        new Test("with topic Hello") {
+            public void run() {
+                Notification n = new Notification.Builder(NotificationTestList.this)
+                        .setSmallIcon(R.drawable.icon1)
+                        .setWhen(mActivityCreateTime)
+                        .setContentTitle("hihi")
+                        .setContentText("This is a notification!!!")
+                        .setContentIntent(makeIntent2())
+                        .setTopic(new Notification.Topic("hello", "Hello"))
+                        .build();
+
+                mNM.notify(999, n);
+            }
+        },
+
+        new Test("with topic GoodBye") {
+            public void run() {
+                Notification n = new Notification.Builder(NotificationTestList.this)
+                        .setSmallIcon(R.drawable.icon1)
+                        .setWhen(mActivityCreateTime)
+                        .setContentTitle("byebye")
+                        .setContentText("This is a notification!!!")
+                        .setContentIntent(makeIntent2())
+                        .setTopic(new Notification.Topic("bye", "Goodbye"))
+                        .build();
+
+                mNM.notify(9999, n);
+            }
+        },
+
         new Test("Whens") {
             public void run()
             {
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
index 1ec0547..5c73fb6a 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
@@ -167,6 +167,11 @@
     }
 
     @Override
+    public void cancelDragAndDrop(IBinder dragToken) throws RemoteException {
+        // pass for now
+    }
+
+    @Override
     public void dragRecipientEntered(IWindow window) throws RemoteException {
         // pass for now
     }