Merge "Add presubmit repo hook to check license headers in luni/ojluni"
diff --git a/JavaLibrary.bp b/JavaLibrary.bp
index 968072b..2d26422 100644
--- a/JavaLibrary.bp
+++ b/JavaLibrary.bp
@@ -615,6 +615,8 @@
 
 // Generates stubs for the parts of the public SDK API provided by the core
 // library.
+//
+// Only for use by core.current.stubs target below.
 droidstubs {
     name: "core-current-stubs-gen",
     srcs: [":core_api_files"],
@@ -626,6 +628,25 @@
     merge_inclusion_annotations_dirs: ["ojluni-annotated-mmodule-stubs"],
 }
 
+// A stubs target containing the parts of the public SDK API provided by the
+// core library.
+//
+// Don't use this directly, use "sdk_version: core_current".
+java_library {
+    name: "core.current.stubs",
+    srcs: [":core-current-stubs-gen"],
+    errorprone: {
+        javacflags: [
+            "-Xep:MissingOverride:OFF",
+        ],
+    },
+    openjdk9: {
+        javacflags: ["--patch-module=java.base=."],
+    },
+    no_standard_libs: true,
+    system_modules: "none",
+}
+
 // Target for validating nullability annotations for correctness and
 // completeness. To check that there are no nullability errors:
 //   make core-current-stubs-nullability-validation
@@ -654,25 +675,6 @@
     check_nullability_warnings: "nullability_warnings.txt",
 }
 
-// A stubs target containing the parts of the public SDK API provided by the
-// core library.
-//
-// Don't use this directly, use "sdk_version: core_current".
-java_library {
-    name: "core.current.stubs",
-    srcs: [":core-current-stubs-gen"],
-    errorprone: {
-        javacflags: [
-            "-Xep:MissingOverride:OFF",
-        ],
-    },
-    openjdk9: {
-        javacflags: ["--patch-module=java.base=."],
-    },
-    no_standard_libs: true,
-    system_modules: "none",
-}
-
 // A host library containing time zone related classes. Used for
 // host-side tools and tests that have to deal with Android
 // time zone data.
diff --git a/NativeCode.bp b/NativeCode.bp
index f3b4217..9e68b07 100644
--- a/NativeCode.bp
+++ b/NativeCode.bp
@@ -86,6 +86,9 @@
         "core_native_default_libs",
     ],
     srcs: [":libopenjdk_native_srcs"],
+    include_dirs: [
+        "libcore/luni/src/main/native",
+    ],
     cflags: [
         // TODO(narayan): Prune down this list of exclusions once the underlying
         // issues have been fixed. Most of these are small changes except for
@@ -100,9 +103,9 @@
     shared_libs: [
         "libcrypto",
         "libicuuc",
-        "libz",
-
+        "libjavacore",
         "libnativehelper",
+        "libz",
     ],
     static_libs: ["libfdlibm"],
 
diff --git a/dalvik/src/main/java/dalvik/system/ZygoteHooks.java b/dalvik/src/main/java/dalvik/system/ZygoteHooks.java
index 5ae9f23..13769e1 100644
--- a/dalvik/src/main/java/dalvik/system/ZygoteHooks.java
+++ b/dalvik/src/main/java/dalvik/system/ZygoteHooks.java
@@ -30,10 +30,10 @@
  */
 @libcore.api.CorePlatformApi
 public final class ZygoteHooks {
-    private long token;
+    private static long token;
 
-    @libcore.api.CorePlatformApi
-    public ZygoteHooks() {
+    /** All methods are static, no need to instantiate. */
+    private ZygoteHooks() {
     }
 
     /**
@@ -101,7 +101,7 @@
      * the child process.
      */
     @libcore.api.CorePlatformApi
-    public void preFork() {
+    public static void preFork() {
         Daemons.stop();
         token = nativePreFork();
         waitUntilAllThreadsStopped();
@@ -112,7 +112,7 @@
      * before {@code postForkChild} for system server.
      */
     @libcore.api.CorePlatformApi
-    public void postForkSystemServer() {
+    public static void postForkSystemServer() {
         nativePostForkSystemServer();
     }
 
@@ -122,7 +122,7 @@
      * {@code instructionSet} determines whether to use a native bridge.
      */
     @libcore.api.CorePlatformApi
-    public void postForkChild(int runtimeFlags, boolean isSystemServer, boolean isZygote,
+    public static void postForkChild(int runtimeFlags, boolean isSystemServer, boolean isZygote,
             String instructionSet) {
         nativePostForkChild(token, runtimeFlags, isSystemServer, isZygote, instructionSet);
 
@@ -135,7 +135,7 @@
      * {@code postForkChild}.
      */
     @libcore.api.CorePlatformApi
-    public void postForkCommon() {
+    public static void postForkCommon() {
         Daemons.startPostZygoteFork();
         nativePostZygoteFork();
     }
diff --git a/dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/DdmServer.java b/dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/DdmServer.java
index cfc16f1..e961d56 100644
--- a/dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/DdmServer.java
+++ b/dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/DdmServer.java
@@ -31,9 +31,6 @@
 @libcore.api.CorePlatformApi
 public class DdmServer {
 
-    @libcore.api.CorePlatformApi
-    public static final int CLIENT_PROTOCOL_VERSION = 1;
-
     private static HashMap<Integer,ChunkHandler> mHandlerMap =
         new HashMap<Integer,ChunkHandler>();
 
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/SimpleDateFormatTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/SimpleDateFormatTest.java
index 7793169..2eb64fe 100644
--- a/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/SimpleDateFormatTest.java
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/SimpleDateFormatTest.java
@@ -891,51 +891,76 @@
         assertEquals(f2.toPattern(), f2.toLocalizedPattern());
     }
 
-    public void test_parse_with_spaces() {
-        // Regression for HARMONY-502
-        SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
-        df.setLenient(false);
+    // Regression for HARMONY-502
+    public void test_parse_whitespace_within_date() {
+        Date date = new GregorianCalendar(2003, Calendar.APRIL, 5, 9, 7, 6).getTime();
+        parse_whitespace_variants(
+            new SimpleDateFormat("HH:mm:ss dd/MM/yy"),
+            date,
+            new String[] {
+                "%c9:07:06 05/04/03",
+                "%c09:07:06 05/04/03",
+                "09:%c7:06 05/04/03",
+                "09:%c07:06 05/04/03",
+                "09:07:%c6 05/04/03",
+                "09:07:%c06 05/04/03",
+                "09:07:06 %c05/04/03",
+                "09:07:06 %c5/04/03",
+                "09:07:06 05/%c4/03",
+                "09:07:06 05/%c04/03",
+                "09:07:06 05/04/%c03",
+            });
 
-        char allowed_chars[] = { 0x9, 0x20 };
-        String allowed_char_names[] = { "tab", "space" };
-        for (int i = 0; i < allowed_chars.length; i++) {
-            Date expected = new GregorianCalendar(1970, Calendar.JANUARY, 1, 9, 7, 6).getTime();
-            ParsePosition pp = new ParsePosition(0);
-            Date d = df.parse(allowed_chars[i] + "9:07:06", pp);
-            assertNotNull("hour may be prefixed by " + allowed_char_names[i], d);
-            assertEquals(expected, d);
+        parse_whitespace_variants(
+            new SimpleDateFormat("HH:mm:ss dd/MM/yyyy"),
+            date,
+            new String[] {
+                "09:07:06 05/04/%c2003",
+            });
+    }
 
-            pp = new ParsePosition(0);
-            d = df.parse("09:" + allowed_chars[i] + "7:06", pp);
-            assertNotNull("minute may be prefixed by " + allowed_char_names[i], d);
-            assertEquals(expected, d);
-
-            pp = new ParsePosition(0);
-            d = df.parse("09:07:" + allowed_chars[i] + "6", pp);
-            assertNotNull("second may be prefixed by " + allowed_char_names[i], d);
-            assertEquals(expected, d);
-        }
-
-        char not_allowed_chars[] = {
-                // whitespace
+    // Tests valid and invalid whitespace characters are parsed correctly within
+    // a date string. dateFormat and expected are the SimpleDateFormat and expected date.
+    // variants is a list of input variations where %c will be substituted with
+    // the whitespace characters to test.
+    private void parse_whitespace_variants(SimpleDateFormat dateFormat, Date expected,
+        String[] variants) {
+        char validWhitespace[] = { 0x9, 0x20 };
+        char invalidWhitespace[] = {
+                // Whitespace
                 0x1c, 0x1d, 0x1e, 0x1f, 0xa, 0xb, 0xc, 0xd, 0x2001, 0x2002,
                 0x2003, 0x2004, 0x2005, 0x2006, 0x2008, 0x2009, 0x200a, 0x200b,
                 0x2028, 0x2029, 0x3000,
-                // non-breaking space
+                // Non-breaking space
                 0xA0, 0x2007, 0x202F };
 
-        for (int i = 0; i < not_allowed_chars.length; i++) {
-            ParsePosition pp = new ParsePosition(0);
-            Date d = df.parse(not_allowed_chars[i] + "9:07", pp);
-            assertNull(d);
+        dateFormat.setLenient(false);
+        for (String variant: variants) {
+            for (char c : validWhitespace) {
+                String info = String.format("Parsing variant='%s', c=0x%x:", variant, (int) c);
+                String input = String.format(variant, c);
+                Date date = dateFormat.parse(input, new ParsePosition(0));
+                assertEquals(info, expected, date);
+                try {
+                    date = dateFormat.parse(input);
+                } catch (ParseException e) {
+                    fail(info);
+                }
+                assertEquals(info, expected, date);
 
-            pp = new ParsePosition(0);
-            d = df.parse("09:" + not_allowed_chars[i] + "7", pp);
-            assertNull(d);
-
-            pp = new ParsePosition(0);
-            d = df.parse("09:07:" + not_allowed_chars[i] + "6", pp);
-            assertNull(d);
+            }
+            for (char c : invalidWhitespace) {
+                String info = String.format("Parsing variant='%s', c=0x%x:", variant, (int) c);
+                String input = String.format(variant, c);
+                Date date = dateFormat.parse(input, new ParsePosition(0));
+                assertNull(info, date);
+                try {
+                    dateFormat.parse(input);
+                    fail(info);
+                } catch (ParseException e) {
+                    // Expected
+                }
+            }
         }
     }
 }
diff --git a/libart/src/main/java/dalvik/system/VMRuntime.java b/libart/src/main/java/dalvik/system/VMRuntime.java
index d2f0317..c5cabe3 100644
--- a/libart/src/main/java/dalvik/system/VMRuntime.java
+++ b/libart/src/main/java/dalvik/system/VMRuntime.java
@@ -56,6 +56,77 @@
     }
 
     /**
+     * Interface for logging hidden API usage events.
+     */
+    @libcore.api.CorePlatformApi
+    public interface HiddenApiUsageLogger {
+
+        // The following ACCESS_METHOD_ constants must match the values in
+        // art/runtime/hidden_api.h
+        /**
+         * Internal test value that does not correspond to an actual access by the
+         * application. Never logged, added for completeness.
+         */
+        public static final int ACCESS_METHOD_NONE = 0;
+
+        /**
+         *  Used when a method has been accessed via reflection.
+         */
+        public static final int ACCESS_METHOD_REFLECTION = 1;
+
+        /**
+         *  Used when a method has been accessed via JNI.
+         */
+        public static final int ACCESS_METHOD_JNI = 2;
+
+        /**
+         * Used when a method is accessed at link time. Never logged, added only
+         * for completeness.
+         */
+        public static final int ACCESS_METHOD_LINKING = 3;
+
+        /**
+         * Logs hidden API access
+         *
+         * @param appPackageName package name of the app attempting the access
+         * @param signature signature of the method being called, i.e
+         *      class_name->member_name:type_signature (e.g.
+         *      {@code com.android.app.Activity->mDoReportFullyDrawn:Z}) for fields and
+         *      class_name->method_name_and_signature for methods (e.g
+         *      {@code com.android.app.Activity->finish(I)V})
+         * @param accessType how the accessed was done
+         * @param accessDenied whether the access was allowed or not
+         */
+        public void hiddenApiUsed(String appPackageName, String signature,
+            int accessType, boolean accessDenied);
+    }
+
+    static HiddenApiUsageLogger hiddenApiUsageLogger;
+
+    /**
+     * Sets the hidden API usage logger {@link #hiddenApiUsageLogger}.
+     * It should only be called if {@link #setHiddenApiAccessLogSamplingRate(int)}
+     * is called with a value > 0
+     */
+    @libcore.api.CorePlatformApi
+    public static void setHiddenApiUsageLogger(HiddenApiUsageLogger hiddenApiUsageLogger) {
+        VMRuntime.hiddenApiUsageLogger = hiddenApiUsageLogger;
+    }
+
+    /**
+     * Records an attempted hidden API access to
+     * {@link HiddenApiUsageLogger#hiddenApiUsed(String, String, int, boolean}
+     * if a logger is registered via {@link #setHiddenApiUsageLogger}.
+     */
+    private static void hiddenApiUsed(String appPackageName, String signature,
+         int accessType, boolean accessDenied) {
+        if (VMRuntime.hiddenApiUsageLogger != null) {
+            VMRuntime.hiddenApiUsageLogger.hiddenApiUsed(appPackageName, signature,
+                accessType, accessDenied);
+        }
+    }
+
+    /**
      * Magic version number for a current development build, which has not
      * yet turned into an official release. This number must be larger than
      * any released version in {@code android.os.Build.VERSION_CODES}.
diff --git a/libart/src/main/java/java/lang/Daemons.java b/libart/src/main/java/java/lang/Daemons.java
index a04bee8..c827532 100644
--- a/libart/src/main/java/java/lang/Daemons.java
+++ b/libart/src/main/java/java/lang/Daemons.java
@@ -25,6 +25,7 @@
 import java.lang.ref.ReferenceQueue;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeoutException;
 import libcore.util.EmptyArray;
 
@@ -40,28 +41,44 @@
     private static final int NANOS_PER_SECOND = NANOS_PER_MILLI * 1000;
     @UnsupportedAppUsage
     private static final long MAX_FINALIZE_NANOS = 10L * NANOS_PER_SECOND;
+    private static final Daemon[] DAEMONS = new Daemon[] {
+            HeapTaskDaemon.INSTANCE,
+            ReferenceQueueDaemon.INSTANCE,
+            FinalizerDaemon.INSTANCE,
+            FinalizerWatchdogDaemon.INSTANCE,
+    };
+    private static final CountDownLatch POST_ZYGOTE_START_LATCH = new CountDownLatch(DAEMONS.length);
+    private static final CountDownLatch PRE_ZYGOTE_START_LATCH = new CountDownLatch(DAEMONS.length);
+
+    private static boolean postZygoteFork = false;
 
     @UnsupportedAppUsage
     public static void start() {
-        ReferenceQueueDaemon.INSTANCE.start();
-        FinalizerDaemon.INSTANCE.start();
-        FinalizerWatchdogDaemon.INSTANCE.start();
-        HeapTaskDaemon.INSTANCE.start();
+        for (Daemon daemon : DAEMONS) {
+            daemon.start();
+        }
     }
 
     public static void startPostZygoteFork() {
-        ReferenceQueueDaemon.INSTANCE.startPostZygoteFork();
-        FinalizerDaemon.INSTANCE.startPostZygoteFork();
-        FinalizerWatchdogDaemon.INSTANCE.startPostZygoteFork();
-        HeapTaskDaemon.INSTANCE.startPostZygoteFork();
+        postZygoteFork = true;
+        for (Daemon daemon : DAEMONS) {
+            daemon.startPostZygoteFork();
+        }
     }
 
     @UnsupportedAppUsage
     public static void stop() {
-        HeapTaskDaemon.INSTANCE.stop();
-        ReferenceQueueDaemon.INSTANCE.stop();
-        FinalizerDaemon.INSTANCE.stop();
-        FinalizerWatchdogDaemon.INSTANCE.stop();
+        for (Daemon daemon : DAEMONS) {
+            daemon.stop();
+        }
+    }
+
+    private static void waitForDaemonStart() throws Exception {
+        if (postZygoteFork) {
+            POST_ZYGOTE_START_LATCH.await();
+        } else {
+            PRE_ZYGOTE_START_LATCH.await();
+        }
     }
 
     /**
@@ -95,16 +112,20 @@
             }
             thread = new Thread(ThreadGroup.systemThreadGroup, this, name);
             thread.setDaemon(true);
+            thread.setSystemDaemon(true);
             thread.start();
         }
 
-        public void run() {
+        public final void run() {
             if (postZygoteFork) {
                 // We don't set the priority before the Thread.start() call above because
                 // Thread.start() will call SetNativePriority and overwrite the desired native
                 // priority. We (may) use a native priority that doesn't have a corresponding
                 // java.lang.Thread-level priority (native priorities are more coarse-grained.)
                 VMRuntime.getRuntime().setSystemDaemonThreadPriority();
+                POST_ZYGOTE_START_LATCH.countDown();
+            } else {
+                PRE_ZYGOTE_START_LATCH.countDown();
             }
             runInternal();
         }
diff --git a/luni/src/main/java/android/system/Os.java b/luni/src/main/java/android/system/Os.java
index 0f13a83..8451884 100644
--- a/luni/src/main/java/android/system/Os.java
+++ b/luni/src/main/java/android/system/Os.java
@@ -42,12 +42,6 @@
     public static FileDescriptor accept(FileDescriptor fd, InetSocketAddress peerAddress) throws ErrnoException, SocketException { return Libcore.os.accept(fd, peerAddress); }
 
     /**
-     * TODO Change the public API by removing the overload above and unhiding this version.
-     * @hide
-     */
-    public static FileDescriptor accept(FileDescriptor fd, SocketAddress peerAddress) throws ErrnoException, SocketException { return Libcore.os.accept(fd, peerAddress); }
-
-    /**
      * See <a href="http://man7.org/linux/man-pages/man2/access.2.html">access(2)</a>.
      */
     public static boolean access(String path, int mode) throws ErrnoException { return Libcore.os.access(path, mode); }
@@ -60,9 +54,9 @@
      */
     public static void bind(FileDescriptor fd, InetAddress address, int port) throws ErrnoException, SocketException { Libcore.os.bind(fd, address, port); }
 
-    /** @hide */
-    @UnsupportedAppUsage
-    @libcore.api.CorePlatformApi
+    /**
+     * See <a href="http://man7.org/linux/man-pages/man2/bind.2.html">bind(2)</a>.
+     */
     public static void bind(FileDescriptor fd, SocketAddress address) throws ErrnoException, SocketException { Libcore.os.bind(fd, address); }
 
     /**
@@ -517,10 +511,7 @@
 
     /**
      * See <a href="http://man7.org/linux/man-pages/man2/sendto.2.html">sendto(2)</a>.
-     * @hide
      */
-    @UnsupportedAppUsage
-    @libcore.api.CorePlatformApi
     public static int sendto(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount, int flags, SocketAddress address) throws ErrnoException, SocketException { return Libcore.os.sendto(fd, bytes, byteOffset, byteCount, flags, address); }
 
     /**
diff --git a/luni/src/main/native/Android.bp b/luni/src/main/native/Android.bp
index e63fa42..4e03c1f 100644
--- a/luni/src/main/native/Android.bp
+++ b/luni/src/main/native/Android.bp
@@ -1,6 +1,7 @@
 filegroup {
     name: "luni_native_srcs",
     srcs: [
+        "AsynchronousCloseMonitor.cpp",
         "ExecStrings.cpp",
         "IcuUtilities.cpp",
         "JniConstants.cpp",
diff --git a/luni/src/main/native/AsynchronousCloseMonitor.cpp b/luni/src/main/native/AsynchronousCloseMonitor.cpp
new file mode 100644
index 0000000..7fea936
--- /dev/null
+++ b/luni/src/main/native/AsynchronousCloseMonitor.cpp
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+#define LOG_TAG "AsynchronousCloseMonitor"
+
+#include <log/log.h>
+
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+
+#include <mutex>
+
+#include "AsynchronousCloseMonitor.h"
+
+namespace {
+
+class AsynchronousCloseMonitorImpl {
+public:
+    explicit AsynchronousCloseMonitorImpl(int fd);
+    ~AsynchronousCloseMonitorImpl();
+    bool wasSignaled() const;
+
+    static void init();
+
+    static void signalBlockedThreads(int fd);
+
+private:
+    AsynchronousCloseMonitorImpl(const AsynchronousCloseMonitorImpl&) = delete;
+    AsynchronousCloseMonitorImpl& operator=(const AsynchronousCloseMonitorImpl&) = delete;
+
+    AsynchronousCloseMonitorImpl* mPrev;
+    AsynchronousCloseMonitorImpl* mNext;
+    pthread_t mThread;
+    int mFd;
+    bool mSignaled;
+};
+
+/**
+ * We use an intrusive doubly-linked list to keep track of blocked threads.
+ * This gives us O(1) insertion and removal, and means we don't need to do any allocation.
+ * (The objects themselves are stack-allocated.)
+ * Waking potentially-blocked threads when a file descriptor is closed is O(n) in the total number
+ * of blocked threads (not the number of threads actually blocked on the file descriptor in
+ * question). For now at least, this seems like a good compromise for Android.
+ */
+static std::mutex blockedThreadListMutex;
+static AsynchronousCloseMonitorImpl* blockedThreadList = NULL;
+
+/**
+ * The specific signal chosen here is arbitrary, but bionic needs to know so that SIGRTMIN
+ * starts at a higher value.
+ */
+#if defined(__Fuchsia__)
+static const int BLOCKED_THREAD_SIGNAL = SIGRTMIN + 2;
+#else
+static const int BLOCKED_THREAD_SIGNAL = __SIGRTMIN + 2;
+#endif
+
+static void blockedThreadSignalHandler(int /*signal*/) {
+    // Do nothing. We only sent this signal for its side-effect of interrupting syscalls.
+}
+
+void AsynchronousCloseMonitorImpl::init() {
+    // Ensure that the signal we send interrupts system calls but doesn't kill threads.
+    // Using sigaction(2) lets us ensure that the SA_RESTART flag is not set.
+    // (The whole reason we're sending this signal is to unblock system calls!)
+    struct sigaction sa;
+    memset(&sa, 0, sizeof(sa));
+    sa.sa_handler = blockedThreadSignalHandler;
+    sa.sa_flags = 0;
+    int rc = sigaction(BLOCKED_THREAD_SIGNAL, &sa, NULL);
+    if (rc == -1) {
+        ALOGE("setting blocked thread signal handler failed: %s", strerror(errno));
+    }
+}
+
+void AsynchronousCloseMonitorImpl::signalBlockedThreads(int fd) {
+    std::lock_guard<std::mutex> lock(blockedThreadListMutex);
+    for (AsynchronousCloseMonitorImpl* it = blockedThreadList; it != NULL; it = it->mNext) {
+        if (it->mFd == fd) {
+            it->mSignaled = true;
+            pthread_kill(it->mThread, BLOCKED_THREAD_SIGNAL);
+            // Keep going, because there may be more than one thread...
+        }
+    }
+}
+
+bool AsynchronousCloseMonitorImpl::wasSignaled() const {
+    return mSignaled;
+}
+
+AsynchronousCloseMonitorImpl::AsynchronousCloseMonitorImpl(int fd) {
+    std::lock_guard<std::mutex> lock(blockedThreadListMutex);
+    // Who are we, and what are we waiting for?
+    mThread = pthread_self();
+    mFd = fd;
+    mSignaled = false;
+    // Insert ourselves at the head of the intrusive doubly-linked list...
+    mPrev = NULL;
+    mNext = blockedThreadList;
+    if (mNext != NULL) {
+        mNext->mPrev = this;
+    }
+    blockedThreadList = this;
+}
+
+AsynchronousCloseMonitorImpl::~AsynchronousCloseMonitorImpl() {
+    std::lock_guard<std::mutex> lock(blockedThreadListMutex);
+    // Unlink ourselves from the intrusive doubly-linked list...
+    if (mNext != NULL) {
+        mNext->mPrev = mPrev;
+    }
+    if (mPrev == NULL) {
+        blockedThreadList = mNext;
+    } else {
+        mPrev->mNext = mNext;
+    }
+}
+
+}  // namespace
+
+//
+// C ABI and API boundary
+//
+
+extern "C" {
+void async_close_monitor_static_init() {
+  AsynchronousCloseMonitorImpl::init();
+}
+
+void async_close_monitor_signal_blocked_threads(int fd) {
+  AsynchronousCloseMonitorImpl::signalBlockedThreads(fd);
+}
+
+void* async_close_monitor_create(int fd) {
+  return new AsynchronousCloseMonitorImpl(fd);
+}
+
+void async_close_monitor_destroy(void* instance) {
+  auto monitor = reinterpret_cast<AsynchronousCloseMonitorImpl*>(instance);
+  delete monitor;
+}
+
+int async_close_monitor_was_signalled(const void* instance) {
+  auto monitor = reinterpret_cast<const AsynchronousCloseMonitorImpl*>(instance);
+  return monitor->wasSignaled() ? 1 : 0;
+}
+}
diff --git a/luni/src/main/native/AsynchronousCloseMonitor.h b/luni/src/main/native/AsynchronousCloseMonitor.h
new file mode 100644
index 0000000..5bccf3d
--- /dev/null
+++ b/luni/src/main/native/AsynchronousCloseMonitor.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+#ifndef ASYNCHRONOUS_CLOSE_MONITOR_H_included
+#define ASYNCHRONOUS_CLOSE_MONITOR_H_included
+
+#include <pthread.h>
+
+// Public API for library function.
+extern "C" {
+void async_close_monitor_destroy(void* instance);
+void async_close_monitor_static_init();
+void async_close_monitor_signal_blocked_threads(int fd);
+int async_close_monitor_was_signalled(const void* instance);
+void* async_close_monitor_create(int fd);
+}
+
+/**
+ * AsynchronousCloseMonitor helps implement Java's asynchronous close semantics.
+ *
+ * AsynchronousCloseMonitor::init must be called before anything else.
+ *
+ * Every blocking I/O operation must be surrounded by an AsynchronousCloseMonitor
+ * instance. For example:
+ *
+ *   {
+ *     AsynchronousCloseMonitor monitor(fd);
+ *     byteCount = ::read(fd, buf, sizeof(buf));
+ *   }
+ *
+ * To interrupt all threads currently blocked on file descriptor 'fd', call signalBlockedThreads:
+ *
+ *   AsynchronousCloseMonitor::signalBlockedThreads(fd);
+ *
+ * To test to see if the interruption was due to the signalBlockedThreads call:
+ *
+ *   monitor.wasSignaled();
+ */
+class AsynchronousCloseMonitor {
+public:
+    explicit AsynchronousCloseMonitor(int fd) {
+        instance_ = async_close_monitor_create(fd);
+    }
+    ~AsynchronousCloseMonitor() {
+        async_close_monitor_destroy(instance_);
+    }
+    bool wasSignaled() const {
+        return async_close_monitor_was_signalled(instance_) != 0;
+    }
+
+    static void init() {
+        async_close_monitor_static_init();
+    }
+
+    static void signalBlockedThreads(int fd) {
+        async_close_monitor_signal_blocked_threads(fd);
+    }
+
+private:
+    AsynchronousCloseMonitor(const AsynchronousCloseMonitor&) = delete;
+    AsynchronousCloseMonitor& operator=(const AsynchronousCloseMonitor&) = delete;
+
+    void* instance_;
+};
+
+#endif  // ASYNCHRONOUS_CLOSE_MONITOR_H_included
diff --git a/luni/src/main/native/NetFd.h b/luni/src/main/native/NetFd.h
deleted file mode 100644
index ae4e5ab..0000000
--- a/luni/src/main/native/NetFd.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef NET_FD_H_included
-#define NET_FD_H_included
-
-#include <nativehelper/JNIHelp.h>
-
-/**
- * Wraps access to the int inside a java.io.FileDescriptor, taking care of throwing exceptions.
- */
-class NetFd {
-public:
-    NetFd(JNIEnv* env, jobject fileDescriptor)
-        : mEnv(env), mFileDescriptor(fileDescriptor), mFd(-1)
-    {
-    }
-
-    bool isClosed() {
-        mFd = jniGetFDFromFileDescriptor(mEnv, mFileDescriptor);
-        bool closed = (mFd == -1);
-        if (closed) {
-            jniThrowException(mEnv, "java/net/SocketException", "Socket closed");
-        }
-        return closed;
-    }
-
-    int get() const {
-        return mFd;
-    }
-
-private:
-    JNIEnv* mEnv;
-    jobject mFileDescriptor;
-    int mFd;
-
-    // Disallow copy and assignment.
-    NetFd(const NetFd&);
-    void operator=(const NetFd&);
-};
-
-/**
- * Used to retry syscalls that can return EINTR. This differs from TEMP_FAILURE_RETRY in that
- * it also considers the case where the reason for failure is that another thread called
- * Socket.close.
- */
-#define NET_FAILURE_RETRY(fd, exp) ({               \
-    typeof (exp) _rc;                               \
-    do {                                            \
-        _rc = (exp);                                \
-        if (_rc == -1) {                            \
-            if (fd.isClosed() || errno != EINTR) {  \
-                break;                              \
-            }                                       \
-        }                                           \
-    } while (_rc == -1);                            \
-    _rc; })
-
-#endif // NET_FD_H_included
diff --git a/luni/src/main/native/libcore_io_AsynchronousCloseMonitor.cpp b/luni/src/main/native/libcore_io_AsynchronousCloseMonitor.cpp
index d9119c8..55803b8 100644
--- a/luni/src/main/native/libcore_io_AsynchronousCloseMonitor.cpp
+++ b/luni/src/main/native/libcore_io_AsynchronousCloseMonitor.cpp
@@ -16,10 +16,11 @@
 
 #define LOG_TAG "AsynchronousCloseMonitor"
 
-#include <nativehelper/AsynchronousCloseMonitor.h>
 #include <nativehelper/JNIHelp.h>
 #include <nativehelper/jni_macros.h>
 
+#include "AsynchronousCloseMonitor.h"
+
 static void AsynchronousCloseMonitor_signalBlockedThreads(JNIEnv* env, jclass, jobject javaFd) {
     int fd = jniGetFDFromFileDescriptor(env, javaFd);
     AsynchronousCloseMonitor::signalBlockedThreads(fd);
diff --git a/luni/src/main/native/libcore_io_Linux.cpp b/luni/src/main/native/libcore_io_Linux.cpp
index 55de1bd..5d621de 100644
--- a/luni/src/main/native/libcore_io_Linux.cpp
+++ b/luni/src/main/native/libcore_io_Linux.cpp
@@ -58,7 +58,6 @@
 #include <android-base/macros.h>
 #include <android-base/strings.h>
 #include <log/log.h>
-#include <nativehelper/AsynchronousCloseMonitor.h>
 #include <nativehelper/JNIHelp.h>
 #include <nativehelper/ScopedBytes.h>
 #include <nativehelper/ScopedLocalRef.h>
@@ -67,6 +66,7 @@
 #include <nativehelper/jni_macros.h>
 #include <nativehelper/toStringArray.h>
 
+#include "AsynchronousCloseMonitor.h"
 #include "ExecStrings.h"
 #include "JniConstants.h"
 #include "JniException.h"
diff --git a/luni/src/test/java/libcore/java/net/InetAddressTest.java b/luni/src/test/java/libcore/java/net/InetAddressTest.java
index e55d38f..307cd1d 100644
--- a/luni/src/test/java/libcore/java/net/InetAddressTest.java
+++ b/luni/src/test/java/libcore/java/net/InetAddressTest.java
@@ -192,6 +192,20 @@
     }
 
     @Test
+    public void test_isNumeric_notNumeric_null() throws Exception {
+        try {
+            boolean result = InetAddress.isNumeric(null);
+            fail("Expected isNumeric(null) to throw a NPE but instead returned " + result);
+        } catch (NullPointerException expected) {
+        }
+    }
+
+    @Test
+    public void test_isNumeric_notNumeric_empty() throws Exception {
+        assertFalse(InetAddress.isNumeric(""));
+    }
+
+    @Test
     public void test_isNumeric_notNumeric() throws Exception {
         // Negative test
         assertFalse(InetAddress.isNumeric("example.com"));
diff --git a/luni/src/test/java/libcore/libcore/icu/ICUCurrencyTest.java b/luni/src/test/java/libcore/libcore/icu/ICUCurrencyTest.java
new file mode 100644
index 0000000..48c8655
--- /dev/null
+++ b/luni/src/test/java/libcore/libcore/icu/ICUCurrencyTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2019 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 libcore.libcore.icu;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Currency;
+import java.util.Locale;
+import org.junit.Test;
+
+public class ICUCurrencyTest {
+
+  /**
+   * Regression test that ensures CLDR root data has U+00A4 ¤ as the
+   * symbol for unknown currency XXX.
+   * http://b/113149899
+   */
+  @Test
+  public void test_fallbackCurrencySymbolForUnknownLocale() {
+    final String unknownCurrencySymbol = "\u00a4"; // "¤"
+
+    Currency c = Currency.getInstance("XXX");
+    assertNotNull(c);
+    assertEquals(unknownCurrencySymbol, c.getSymbol(Locale.ROOT));
+
+    android.icu.util.Currency ac = android.icu.util.Currency.getInstance("XXX");
+    assertNotNull(ac);
+    assertEquals(unknownCurrencySymbol, ac.getSymbol(android.icu.util.ULocale.ROOT));
+  }
+
+}
diff --git a/luni/src/test/java/libcore/libcore/icu/TimeZoneIntegrationTest.java b/luni/src/test/java/libcore/libcore/icu/TimeZoneIntegrationTest.java
index bd5c1b1..0c5f938 100644
--- a/luni/src/test/java/libcore/libcore/icu/TimeZoneIntegrationTest.java
+++ b/luni/src/test/java/libcore/libcore/icu/TimeZoneIntegrationTest.java
@@ -20,6 +20,7 @@
 
 import android.icu.text.TimeZoneNames;
 import android.icu.util.VersionInfo;
+import android.system.Os;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -260,7 +261,7 @@
      * expectations.
      */
     @Test
-    public void testTimeZoneDebugInfo() {
+    public void testTimeZoneDebugInfo() throws Exception {
         DebugInfo debugInfo = CoreLibraryDebug.getDebugInfo();
 
         // Devices are expected to have a time zone module which overrides or extends the data in
@@ -294,7 +295,9 @@
         runtimeModuleFiles.forEach(TimeZoneIntegrationTest::assertFileExists);
 
         String icuDatFileName = "icudt" + VersionInfo.ICU_VERSION.getMajor() + "l.dat";
-        assertFileExists(TimeZoneDataFiles.getRuntimeModuleFile("icu/" + icuDatFileName));
+        String runtimeModuleIcuData =
+                TimeZoneDataFiles.getRuntimeModuleFile("icu/" + icuDatFileName);
+        assertFileExists(runtimeModuleIcuData);
 
         // Devices currently have a subset of the time zone files in /system. These are going away
         // but we test them while they exist. Host ART should match device.
@@ -304,8 +307,15 @@
                 TimeZoneDataFiles.getSystemTimeZoneFile(TzDataSetVersion.DEFAULT_FILE_NAME));
         assertFileExists(TimeZoneDataFiles.getSystemTimeZoneFile("tzdata"));
         // The following files once existed in /system but have been removed as part of APEX work.
-        assertFileDoesNotExist(TimeZoneDataFiles.getSystemIcuFile(icuDatFileName));
         assertFileDoesNotExist(TimeZoneDataFiles.getSystemTimeZoneFile("tzlookup.xml"));
+
+        // It's hard to assert much about this file as there is a symlink in /system on device for
+        // app compatibility (b/122985829) but it doesn't exist in host environments. If the file
+        // exists we can say it should resolve (realpath) to the same file as the runtime module.
+        String systemIcuData = TimeZoneDataFiles.getSystemIcuFile(icuDatFileName);
+        if (new File(systemIcuData).exists()) {
+            assertEquals(Os.realpath(runtimeModuleIcuData), Os.realpath(systemIcuData));
+        }
     }
 
     private static List<String> createModuleTzFileNames(
diff --git a/luni/src/test/java/libcore/libcore/io/OsTest.java b/luni/src/test/java/libcore/libcore/io/OsTest.java
index e1dafe1..5d09939 100644
--- a/luni/src/test/java/libcore/libcore/io/OsTest.java
+++ b/luni/src/test/java/libcore/libcore/io/OsTest.java
@@ -41,6 +41,8 @@
 import java.net.InetSocketAddress;
 import java.net.NetworkInterface;
 import java.net.ServerSocket;
+import java.net.SocketAddress;
+import java.net.SocketException;
 import java.net.SocketOptions;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
@@ -307,6 +309,157 @@
     Libcore.os.close(clientFd);
   }
 
+  private static void expectBindConnectSendtoSuccess(FileDescriptor socket, String socketDesc,
+                                                     SocketAddress addr) {
+    String msg = socketDesc + " socket to " + addr.toString();
+
+    try {
+      // Expect bind to succeed.
+      try {
+        Libcore.os.bind(socket, addr);
+
+        // Find out which port we're actually bound to, and use that in subsequent connect() and
+        // send() calls. We can't send to addr because that has a port of 0.
+        if (addr instanceof InetSocketAddress) {
+          InetSocketAddress addrISA = (InetSocketAddress) addr;
+          InetSocketAddress socknameISA = (InetSocketAddress) Libcore.os.getsockname(socket);
+
+          assertEquals(addrISA.getAddress(), socknameISA.getAddress());
+          assertEquals(0, addrISA.getPort());
+          assertFalse(0 == socknameISA.getPort());
+          addr = socknameISA;
+        }
+
+        // Expect connect to succeed.
+        Libcore.os.connect(socket, addr);
+        assertEquals(Libcore.os.getsockname(socket), Libcore.os.getpeername(socket));
+
+        // Expect sendto to succeed.
+        byte[] packet = new byte[42];
+        Libcore.os.sendto(socket, packet, 0, packet.length, 0, addr);
+      } catch (SocketException | ErrnoException e) {
+        fail("Expected success for " + msg + ", but got: " + e);
+      }
+
+    } finally {
+      IoUtils.closeQuietly(socket);
+    }
+  }
+
+  private static void expectBindConnectSendtoErrno(int bindErrno, int connectErrno, int sendtoErrno,
+                                                   FileDescriptor socket, String socketDesc,
+                                                   SocketAddress addr) {
+    try {
+
+      // Expect bind to fail with bindErrno.
+      String msg = "bind " + socketDesc + " socket to " + addr.toString();
+      try {
+        Libcore.os.bind(socket, addr);
+        fail("Expected to fail " + msg);
+      } catch (ErrnoException e) {
+        assertEquals("Expected errno " + bindErrno + " " + msg, bindErrno, e.errno);
+      } catch (SocketException e) {
+        fail("Unexpected SocketException " + msg);
+      }
+
+      // Expect connect to fail with connectErrno.
+      msg = "connect " + socketDesc + " socket to " + addr.toString();
+      try {
+        Libcore.os.connect(socket, addr);
+        fail("Expected to fail " + msg);
+      } catch (ErrnoException e) {
+        assertEquals("Expected errno " + connectErrno + " " + msg, connectErrno, e.errno);
+      } catch (SocketException e) {
+        fail("Unexpected SocketException " + msg);
+      }
+
+      // Expect sendto to fail with sendtoErrno.
+      byte[] packet = new byte[42];
+      msg = "sendto " + socketDesc + " socket to " + addr.toString();
+      try {
+        Libcore.os.sendto(socket, packet, 0, packet.length, 0, addr);
+        fail("Expected to fail " + msg);
+      } catch (ErrnoException e) {
+        assertEquals("Expected errno " + sendtoErrno + " " + msg, sendtoErrno, e.errno);
+      } catch (SocketException e) {
+        fail("Unexpected SocketException " + msg);
+      }
+
+    } finally {
+      // No matter what happened, close the socket.
+      IoUtils.closeQuietly(socket);
+    }
+  }
+
+  private FileDescriptor makeIpv4Socket() throws Exception {
+    return Libcore.os.socket(AF_INET, SOCK_DGRAM, 0);
+  }
+
+  private FileDescriptor makeIpv6Socket() throws Exception {
+    return Libcore.os.socket(AF_INET6, SOCK_DGRAM, 0);
+  }
+
+  private FileDescriptor makeUnixSocket() throws Exception {
+    return Libcore.os.socket(AF_UNIX, SOCK_DGRAM, 0);
+  }
+
+  public void testCrossFamilyBindConnectSendto() throws Exception {
+    SocketAddress addrIpv4 = new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 0);
+    SocketAddress addrIpv6 = new InetSocketAddress(InetAddress.getByName("::1"), 0);
+    SocketAddress addrUnix = UnixSocketAddress.createAbstract("/abstract_name_unix_socket");
+
+    // TODO: fix and uncomment. Currently fails with EAFNOSUPPORT because
+    // Linux_bindSocketAddress uses NET_FAILURE_RETRY instead of NET_IPV4_RETRY.
+    // expectBindConnectSendtoSuccess(makeIpv4Socket(), "ipv4", addrIpv4);
+    expectBindConnectSendtoErrno(EAFNOSUPPORT, EAFNOSUPPORT, EAFNOSUPPORT,
+                                 makeIpv4Socket(), "ipv4", addrIpv6);
+    expectBindConnectSendtoErrno(EAFNOSUPPORT, EAFNOSUPPORT, EAFNOSUPPORT,
+                                 makeIpv4Socket(), "ipv4", addrUnix);
+
+    // This succeeds because Java always uses dual-stack sockets and all InetAddress and
+    // InetSocketAddress objects represent IPv4 addresses using IPv4-mapped IPv6 addresses.
+    expectBindConnectSendtoSuccess(makeIpv6Socket(), "ipv6", addrIpv4);
+    expectBindConnectSendtoSuccess(makeIpv6Socket(), "ipv6", addrIpv6);
+    expectBindConnectSendtoErrno(EAFNOSUPPORT, EAFNOSUPPORT, EINVAL,
+                                 makeIpv6Socket(), "ipv6", addrUnix);
+
+    expectBindConnectSendtoErrno(EINVAL, EINVAL, EINVAL,
+                                 makeUnixSocket(), "unix", addrIpv4);
+    expectBindConnectSendtoErrno(EINVAL, EINVAL, EINVAL,
+                                 makeUnixSocket(), "unix", addrIpv6);
+    expectBindConnectSendtoSuccess(makeUnixSocket(), "unix", addrUnix);
+  }
+
+  public void testUnknownSocketAddressSubclass() throws Exception {
+    class MySocketAddress extends SocketAddress {}
+    MySocketAddress myaddr = new MySocketAddress();
+
+    for (int family : new int[]{AF_INET, AF_INET6, AF_NETLINK}) {
+      FileDescriptor s = Libcore.os.socket(family, SOCK_DGRAM, 0);
+      try {
+
+        try {
+          Libcore.os.bind(s, myaddr);
+          fail("bind socket family " + family + " to unknown SocketAddress subclass succeeded");
+        } catch (UnsupportedOperationException expected) {}
+
+        try {
+          Libcore.os.connect(s, myaddr);
+          fail("connect socket family " + family + " to unknown SocketAddress subclass succeeded");
+        } catch (UnsupportedOperationException expected) {}
+
+        byte[] msg = new byte[42];
+        try {
+          Libcore.os.sendto(s, msg, 0, msg.length, 0, myaddr);
+          fail("sendto socket family " + family + " to unknown SocketAddress subclass succeeded");
+        } catch (UnsupportedOperationException expected) {}
+
+      } finally {
+        Libcore.os.close(s);
+      }
+    }
+  }
+
   public void test_NetlinkSocket() throws Exception {
     FileDescriptor nlSocket = Libcore.os.socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
     Libcore.os.bind(nlSocket, new NetlinkSocketAddress());
diff --git a/mmodules/core_platform_api/api/platform/current-api.txt b/mmodules/core_platform_api/api/platform/current-api.txt
index d2ecf29..10d7819 100644
--- a/mmodules/core_platform_api/api/platform/current-api.txt
+++ b/mmodules/core_platform_api/api/platform/current-api.txt
@@ -88,7 +88,6 @@
   }
 
   public final class Os {
-    method @dalvik.annotation.compat.UnsupportedAppUsage public static void bind(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
     method public static android.system.StructCapUserData[] capget(android.system.StructCapUserHeader) throws android.system.ErrnoException;
     method public static void capset(android.system.StructCapUserHeader, android.system.StructCapUserData[]) throws android.system.ErrnoException;
     method @dalvik.annotation.compat.UnsupportedAppUsage public static void connect(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
@@ -101,7 +100,6 @@
     method public static int ioctlInt(java.io.FileDescriptor, int, android.system.Int32Ref) throws android.system.ErrnoException;
     method public static java.io.FileDescriptor[] pipe2(int) throws android.system.ErrnoException;
     method public static String realpath(String) throws android.system.ErrnoException;
-    method @dalvik.annotation.compat.UnsupportedAppUsage public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
     method public static void setpgid(int, int) throws android.system.ErrnoException;
     method public static void setregid(int, int) throws android.system.ErrnoException;
     method public static void setreuid(int, int) throws android.system.ErrnoException;
@@ -774,6 +772,7 @@
     method public static void setDedupeHiddenApiWarnings(boolean);
     method public void setHiddenApiAccessLogSamplingRate(int);
     method public void setHiddenApiExemptions(String[]);
+    method public static void setHiddenApiUsageLogger(dalvik.system.VMRuntime.HiddenApiUsageLogger);
     method public static void setNonSdkApiUsageConsumer(java.util.function.Consumer<java.lang.String>);
     method public static void setProcessPackageName(String);
     method @dalvik.annotation.compat.UnsupportedAppUsage public float setTargetHeapUtilization(float);
@@ -785,6 +784,14 @@
     field public static final int SDK_VERSION_CUR_DEVELOPMENT = 10000; // 0x2710
   }
 
+  public static interface VMRuntime.HiddenApiUsageLogger {
+    method public void hiddenApiUsed(String, String, int, boolean);
+    field public static final int ACCESS_METHOD_JNI = 2; // 0x2
+    field public static final int ACCESS_METHOD_LINKING = 3; // 0x3
+    field public static final int ACCESS_METHOD_NONE = 0; // 0x0
+    field public static final int ACCESS_METHOD_REFLECTION = 1; // 0x1
+  }
+
   public final class VMStack {
     method @dalvik.annotation.optimization.FastNative public static dalvik.system.AnnotatedStackTraceElement[] getAnnotatedThreadStackTrace(Thread);
   }
@@ -795,14 +802,13 @@
   }
 
   public final class ZygoteHooks {
-    ctor public ZygoteHooks();
     method public static void gcAndFinalize();
     method public static void onBeginPreload();
     method public static void onEndPreload();
-    method public void postForkChild(int, boolean, boolean, String);
-    method public void postForkCommon();
-    method public void postForkSystemServer();
-    method public void preFork();
+    method public static void postForkChild(int, boolean, boolean, String);
+    method public static void postForkCommon();
+    method public static void postForkSystemServer();
+    method public static void preFork();
     method public static void startZygoteNoThreadCreation();
     method public static void stopZygoteNoThreadCreation();
   }
@@ -1345,7 +1351,6 @@
     method public static void registerHandler(int, org.apache.harmony.dalvik.ddmc.ChunkHandler);
     method public static void registrationComplete();
     method @dalvik.annotation.compat.UnsupportedAppUsage public static void sendChunk(org.apache.harmony.dalvik.ddmc.Chunk);
-    field public static final int CLIENT_PROTOCOL_VERSION = 1; // 0x1
   }
 
   public class DdmVmInternal {
diff --git a/mmodules/core_platform_api/api/platform/last-api.txt b/mmodules/core_platform_api/api/platform/last-api.txt
index 1851150..e69de29 100644
--- a/mmodules/core_platform_api/api/platform/last-api.txt
+++ b/mmodules/core_platform_api/api/platform/last-api.txt
@@ -1,1412 +0,0 @@
-package android.icu.impl {
-
-  public class CalendarAstronomer {
-    ctor public CalendarAstronomer(double, double);
-    method public long getSunRiseSet(boolean);
-    method public void setTime(long);
-  }
-
-  public class TimeZoneAdapter extends java.util.TimeZone {
-    method public static java.util.TimeZone wrap(android.icu.util.TimeZone);
-  }
-
-}
-
-package android.icu.text {
-
-  public final class StringPrep {
-    method public static android.icu.text.StringPrep getInstance(int);
-    method public java.lang.String prepare(java.lang.String, int) throws android.icu.text.StringPrepParseException;
-    field public static final int DEFAULT = 0; // 0x0
-    field public static final int RFC3920_RESOURCEPREP = 8; // 0x8
-  }
-
-  public class StringPrepParseException extends java.text.ParseException {
-    ctor public StringPrepParseException(java.lang.String, int);
-    ctor public StringPrepParseException(java.lang.String, int, java.lang.String, int);
-    ctor public StringPrepParseException(java.lang.String, int, java.lang.String, int, int);
-    method public int getError();
-    field public static final int ACE_PREFIX_ERROR = 6; // 0x6
-    field public static final int BUFFER_OVERFLOW_ERROR = 9; // 0x9
-    field public static final int CHECK_BIDI_ERROR = 4; // 0x4
-    field public static final int DOMAIN_NAME_TOO_LONG_ERROR = 11; // 0xb
-    field public static final int ILLEGAL_CHAR_FOUND = 1; // 0x1
-    field public static final int INVALID_CHAR_FOUND = 0; // 0x0
-    field public static final int LABEL_TOO_LONG_ERROR = 8; // 0x8
-    field public static final int PROHIBITED_ERROR = 2; // 0x2
-    field public static final int STD3_ASCII_RULES_ERROR = 5; // 0x5
-    field public static final int UNASSIGNED_ERROR = 3; // 0x3
-    field public static final int VERIFICATION_ERROR = 7; // 0x7
-    field public static final int ZERO_LENGTH_LABEL = 10; // 0xa
-  }
-
-  public abstract class Transliterator {
-    method public static final android.icu.text.Transliterator getInstance(java.lang.String);
-    method public final java.lang.String transliterate(java.lang.String);
-  }
-
-}
-
-package android.icu.util {
-
-  public abstract class BasicTimeZone extends android.icu.util.TimeZone {
-    method public abstract android.icu.util.TimeZoneTransition getNextTransition(long, boolean);
-  }
-
-  public class Region implements java.lang.Comparable {
-    method public static java.util.Set<android.icu.util.Region> getAvailable(android.icu.util.Region.RegionType);
-  }
-
-  public static final class Region.RegionType extends java.lang.Enum {
-    enum_constant public static final android.icu.util.Region.RegionType TERRITORY;
-  }
-
-  public abstract class TimeZoneRule implements java.io.Serializable {
-    method public int getDSTSavings();
-  }
-
-  public class TimeZoneTransition {
-    method public android.icu.util.TimeZoneRule getFrom();
-    method public long getTime();
-    method public android.icu.util.TimeZoneRule getTo();
-  }
-
-}
-
-package android.system {
-
-  public final class ErrnoException extends java.lang.Exception {
-    method public java.io.IOException rethrowAsIOException() throws java.io.IOException;
-    method public java.net.SocketException rethrowAsSocketException() throws java.net.SocketException;
-  }
-
-  public class Int32Ref {
-    ctor public Int32Ref(int);
-    field public int value;
-  }
-
-  public final class NetlinkSocketAddress extends java.net.SocketAddress {
-    ctor public NetlinkSocketAddress(int, int);
-    method public int getGroupsMask();
-    method public int getPortId();
-  }
-
-  public final class Os {
-    method public static void bind(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
-    method public static android.system.StructCapUserData[] capget(android.system.StructCapUserHeader) throws android.system.ErrnoException;
-    method public static void capset(android.system.StructCapUserHeader, android.system.StructCapUserData[]) throws android.system.ErrnoException;
-    method public static void connect(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
-    method public static int fcntlInt(java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
-    method public static int getpgid(int) throws android.system.ErrnoException;
-    method public static android.system.StructRlimit getrlimit(int) throws android.system.ErrnoException;
-    method public static int getsockoptInt(java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
-    method public static android.system.StructLinger getsockoptLinger(java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
-    method public static android.system.StructTimeval getsockoptTimeval(java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
-    method public static int ioctlInt(java.io.FileDescriptor, int, android.system.Int32Ref) throws android.system.ErrnoException;
-    method public static java.io.FileDescriptor[] pipe2(int) throws android.system.ErrnoException;
-    method public static java.lang.String realpath(java.lang.String) throws android.system.ErrnoException;
-    method public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
-    method public static void setpgid(int, int) throws android.system.ErrnoException;
-    method public static void setregid(int, int) throws android.system.ErrnoException;
-    method public static void setreuid(int, int) throws android.system.ErrnoException;
-    method public static void setsockoptIfreq(java.io.FileDescriptor, int, int, java.lang.String) throws android.system.ErrnoException;
-    method public static void setsockoptLinger(java.io.FileDescriptor, int, int, android.system.StructLinger) throws android.system.ErrnoException;
-    method public static void setsockoptTimeval(java.io.FileDescriptor, int, int, android.system.StructTimeval) throws android.system.ErrnoException;
-    method public static long splice(java.io.FileDescriptor, android.system.Int64Ref, java.io.FileDescriptor, android.system.Int64Ref, long, int) throws android.system.ErrnoException;
-    method public static void unlink(java.lang.String) throws android.system.ErrnoException;
-  }
-
-  public final class OsConstants {
-    method public static int CAP_TO_INDEX(int);
-    method public static int CAP_TO_MASK(int);
-    field public static final int AF_NETLINK;
-    field public static final int AF_PACKET;
-    field public static final int ARPHRD_ETHER;
-    field public static final int ENONET;
-    field public static final int ETH_P_ALL;
-    field public static final int ETH_P_ARP;
-    field public static final int ETH_P_IP;
-    field public static final int ETH_P_IPV6;
-    field public static final int EUSERS;
-    field public static final int ICMP6_ECHO_REPLY;
-    field public static final int ICMP6_ECHO_REQUEST;
-    field public static final int ICMP_ECHO;
-    field public static final int ICMP_ECHOREPLY;
-    field public static final int MAP_POPULATE;
-    field public static final int NETLINK_INET_DIAG;
-    field public static final int NETLINK_NETFILTER;
-    field public static final int NETLINK_ROUTE;
-    field public static final int O_DIRECT;
-    field public static final int PR_CAP_AMBIENT;
-    field public static final int PR_CAP_AMBIENT_RAISE;
-    field public static final int RLIMIT_NOFILE;
-    field public static final int RTMGRP_IPV4_IFADDR;
-    field public static final int RTMGRP_NEIGH;
-    field public static final int SPLICE_F_MORE;
-    field public static final int SPLICE_F_MOVE;
-    field public static final int TIOCOUTQ;
-    field public static final int UDP_ENCAP;
-    field public static final int UDP_ENCAP_ESPINUDP;
-    field public static final int XATTR_CREATE;
-    field public static final int _LINUX_CAPABILITY_VERSION_3;
-  }
-
-  public final class PacketSocketAddress extends java.net.SocketAddress {
-    ctor public PacketSocketAddress(short, int);
-    ctor public PacketSocketAddress(int, byte[]);
-  }
-
-  public final class StructCapUserData {
-    ctor public StructCapUserData(int, int, int);
-    field public final int effective;
-    field public final int inheritable;
-    field public final int permitted;
-  }
-
-  public final class StructCapUserHeader {
-    ctor public StructCapUserHeader(int, int);
-  }
-
-  public final class StructLinger {
-    ctor public StructLinger(int, int);
-    method public boolean isOn();
-    field public final int l_linger;
-  }
-
-  public final class StructRlimit {
-    field public final long rlim_cur;
-  }
-
-  public final class StructTimeval {
-    method public static android.system.StructTimeval fromMillis(long);
-    method public long toMillis();
-    field public final long tv_sec;
-    field public final long tv_usec;
-  }
-
-  public final class UnixSocketAddress extends java.net.SocketAddress {
-    method public static android.system.UnixSocketAddress createFileSystem(java.lang.String);
-  }
-
-}
-
-package com.android.okhttp.internalandroidapi {
-
-  public final class AndroidResponseCacheAdapter {
-    ctor public AndroidResponseCacheAdapter(com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder);
-    method public void close() throws java.io.IOException;
-    method public void delete() throws java.io.IOException;
-    method public void flush() throws java.io.IOException;
-    method public 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 com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder getCacheHolder();
-    method public int getHitCount();
-    method public long getMaxSize();
-    method public int getNetworkCount();
-    method public int getRequestCount();
-    method public long getSize() throws java.io.IOException;
-    method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException;
-  }
-
-  public abstract interface Dns {
-    method public abstract java.util.List<java.net.InetAddress> lookup(java.lang.String) throws java.net.UnknownHostException;
-  }
-
-  public abstract interface HasCacheHolder {
-    method public abstract com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder getCacheHolder();
-  }
-
-  public static final class HasCacheHolder.CacheHolder {
-    method public static com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder create(java.io.File, long);
-    method public boolean isEquivalent(java.io.File, long);
-  }
-
-  public final class HttpURLConnectionFactory {
-    ctor public HttpURLConnectionFactory();
-    method public java.net.URLConnection openConnection(java.net.URL, javax.net.SocketFactory, java.net.Proxy) throws java.io.IOException;
-    method public void setDns(com.android.okhttp.internalandroidapi.Dns);
-    method public void setNewConnectionPool(int, long, java.util.concurrent.TimeUnit);
-  }
-
-}
-
-package com.android.org.bouncycastle.asn1 {
-
-  public abstract class ASN1BitString extends com.android.org.bouncycastle.asn1.ASN1Primitive {
-  }
-
-  public abstract interface ASN1Encodable {
-  }
-
-  public class ASN1EncodableVector {
-    ctor public ASN1EncodableVector();
-    method public void add(com.android.org.bouncycastle.asn1.ASN1Encodable);
-  }
-
-  public class ASN1InputStream extends java.io.FilterInputStream {
-    ctor public ASN1InputStream(java.io.InputStream);
-    ctor public ASN1InputStream(byte[]);
-    method public com.android.org.bouncycastle.asn1.ASN1Primitive readObject() throws java.io.IOException;
-  }
-
-  public class ASN1Integer extends com.android.org.bouncycastle.asn1.ASN1Primitive {
-    ctor public ASN1Integer(java.math.BigInteger);
-  }
-
-  public abstract class ASN1Null extends com.android.org.bouncycastle.asn1.ASN1Primitive {
-  }
-
-  public abstract class ASN1Object implements com.android.org.bouncycastle.asn1.ASN1Encodable {
-    ctor public ASN1Object();
-    method public byte[] getEncoded() throws java.io.IOException;
-    method public byte[] getEncoded(java.lang.String) throws java.io.IOException;
-  }
-
-  public class ASN1ObjectIdentifier extends com.android.org.bouncycastle.asn1.ASN1Primitive {
-    ctor public ASN1ObjectIdentifier(java.lang.String);
-    method public java.lang.String getId();
-    method public static com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier getInstance(java.lang.Object);
-  }
-
-  public abstract class ASN1OctetString extends com.android.org.bouncycastle.asn1.ASN1Primitive implements com.android.org.bouncycastle.asn1.ASN1Encodable {
-    method public byte[] getOctets();
-  }
-
-  public abstract class ASN1Primitive extends com.android.org.bouncycastle.asn1.ASN1Object {
-  }
-
-  public abstract class ASN1Sequence extends com.android.org.bouncycastle.asn1.ASN1Primitive implements com.android.org.bouncycastle.util.Iterable {
-    method public com.android.org.bouncycastle.asn1.ASN1Encodable getObjectAt(int);
-    method public int size();
-  }
-
-  public abstract class ASN1TaggedObject extends com.android.org.bouncycastle.asn1.ASN1Primitive implements com.android.org.bouncycastle.asn1.ASN1Encodable {
-    method public com.android.org.bouncycastle.asn1.ASN1Primitive getObject();
-  }
-
-  public class DERBitString extends com.android.org.bouncycastle.asn1.ASN1BitString {
-    ctor public DERBitString(byte[]);
-  }
-
-  public deprecated class DERInteger extends com.android.org.bouncycastle.asn1.ASN1Integer {
-    ctor public DERInteger(long);
-  }
-
-  public class DERNull extends com.android.org.bouncycastle.asn1.ASN1Null {
-    field public static final com.android.org.bouncycastle.asn1.DERNull INSTANCE;
-  }
-
-  public class DEROctetString extends com.android.org.bouncycastle.asn1.ASN1OctetString {
-    ctor public DEROctetString(byte[]);
-  }
-
-  public class DERSequence extends com.android.org.bouncycastle.asn1.ASN1Sequence {
-    ctor public DERSequence();
-    ctor public DERSequence(com.android.org.bouncycastle.asn1.ASN1EncodableVector);
-  }
-
-  public class DERTaggedObject extends com.android.org.bouncycastle.asn1.ASN1TaggedObject {
-    ctor public DERTaggedObject(int, com.android.org.bouncycastle.asn1.ASN1Encodable);
-  }
-
-  public class DERUTF8String extends com.android.org.bouncycastle.asn1.ASN1Primitive {
-    ctor public DERUTF8String(java.lang.String);
-    method public java.lang.String getString();
-  }
-
-}
-
-package com.android.org.bouncycastle.asn1.pkcs {
-
-  public abstract interface PKCSObjectIdentifiers {
-    field public static final com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier sha256WithRSAEncryption;
-  }
-
-  public class PrivateKeyInfo extends com.android.org.bouncycastle.asn1.ASN1Object {
-    method public static com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo getInstance(java.lang.Object);
-    method public com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier getPrivateKeyAlgorithm();
-  }
-
-}
-
-package com.android.org.bouncycastle.asn1.x509 {
-
-  public class AlgorithmIdentifier extends com.android.org.bouncycastle.asn1.ASN1Object {
-    ctor public AlgorithmIdentifier(com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier);
-    ctor public AlgorithmIdentifier(com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier, com.android.org.bouncycastle.asn1.ASN1Encodable);
-    method public com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier getAlgorithm();
-  }
-
-  public class BasicConstraints extends com.android.org.bouncycastle.asn1.ASN1Object {
-    method public static com.android.org.bouncycastle.asn1.x509.BasicConstraints getInstance(java.lang.Object);
-    method public boolean isCA();
-  }
-
-  public class Certificate extends com.android.org.bouncycastle.asn1.ASN1Object {
-    method public static com.android.org.bouncycastle.asn1.x509.Certificate getInstance(java.lang.Object);
-  }
-
-  public class GeneralName extends com.android.org.bouncycastle.asn1.ASN1Object {
-    ctor public GeneralName(int, com.android.org.bouncycastle.asn1.ASN1Encodable);
-    ctor public GeneralName(int, java.lang.String);
-    method public int getTagNo();
-    field public static final int dNSName = 2; // 0x2
-    field public static final int iPAddress = 7; // 0x7
-    field public static final int otherName = 0; // 0x0
-  }
-
-  public class SubjectPublicKeyInfo extends com.android.org.bouncycastle.asn1.ASN1Object {
-    method public static com.android.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo getInstance(java.lang.Object);
-  }
-
-  public class TBSCertificate extends com.android.org.bouncycastle.asn1.ASN1Object {
-  }
-
-  public class Time extends com.android.org.bouncycastle.asn1.ASN1Object {
-    ctor public Time(java.util.Date);
-  }
-
-  public class V3TBSCertificateGenerator {
-    ctor public V3TBSCertificateGenerator();
-    method public com.android.org.bouncycastle.asn1.x509.TBSCertificate generateTBSCertificate();
-    method public void setEndDate(com.android.org.bouncycastle.asn1.x509.Time);
-    method public deprecated void setIssuer(com.android.org.bouncycastle.asn1.x509.X509Name);
-    method public void setSerialNumber(com.android.org.bouncycastle.asn1.ASN1Integer);
-    method public void setSignature(com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier);
-    method public void setStartDate(com.android.org.bouncycastle.asn1.x509.Time);
-    method public deprecated void setSubject(com.android.org.bouncycastle.asn1.x509.X509Name);
-    method public void setSubjectPublicKeyInfo(com.android.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo);
-  }
-
-  public deprecated class X509Name extends com.android.org.bouncycastle.asn1.ASN1Object {
-    ctor public deprecated X509Name(java.lang.String);
-    method public static com.android.org.bouncycastle.asn1.x509.X509Name getInstance(java.lang.Object);
-    method public java.util.Vector getOIDs();
-    method public java.util.Vector getValues();
-    method public java.lang.String toString(boolean, java.util.Hashtable);
-    field public static final deprecated com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier CN;
-    field public static final java.util.Hashtable DefaultSymbols;
-    field public static final deprecated com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier O;
-    field public static final deprecated com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier OU;
-  }
-
-}
-
-package com.android.org.bouncycastle.asn1.x9 {
-
-  public abstract interface X9ObjectIdentifiers {
-    field public static final com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier ecdsa_with_SHA256;
-  }
-
-}
-
-package com.android.org.bouncycastle.jce {
-
-  public deprecated class X509Principal extends com.android.org.bouncycastle.asn1.x509.X509Name implements java.security.Principal {
-    ctor public X509Principal(byte[]) throws java.io.IOException;
-    method public byte[] getEncoded();
-  }
-
-}
-
-package com.android.org.bouncycastle.jce.provider {
-
-  public final class BouncyCastleProvider extends java.security.Provider {
-    ctor public BouncyCastleProvider();
-  }
-
-  public deprecated class X509CertificateObject extends java.security.cert.X509Certificate {
-    ctor public X509CertificateObject(com.android.org.bouncycastle.asn1.x509.Certificate) throws java.security.cert.CertificateParsingException;
-  }
-
-}
-
-package com.android.org.bouncycastle.util {
-
-  public abstract interface Iterable<T> implements java.lang.Iterable {
-  }
-
-}
-
-package com.android.org.bouncycastle.util.io.pem {
-
-  public class PemObject implements com.android.org.bouncycastle.util.io.pem.PemObjectGenerator {
-    ctor public PemObject(java.lang.String, byte[]);
-    method public byte[] getContent();
-    method public java.lang.String getType();
-  }
-
-  public abstract interface PemObjectGenerator {
-  }
-
-  public class PemReader extends java.io.BufferedReader {
-    ctor public PemReader(java.io.Reader);
-    method public com.android.org.bouncycastle.util.io.pem.PemObject readPemObject() throws java.io.IOException;
-  }
-
-  public class PemWriter extends java.io.BufferedWriter {
-    ctor public PemWriter(java.io.Writer);
-    method public void writeObject(com.android.org.bouncycastle.util.io.pem.PemObjectGenerator) throws java.io.IOException;
-  }
-
-}
-
-package com.android.org.bouncycastle.x509 {
-
-  public deprecated class X509V3CertificateGenerator {
-    ctor public X509V3CertificateGenerator();
-    method public java.security.cert.X509Certificate generate(java.security.PrivateKey) throws java.security.cert.CertificateEncodingException, java.lang.IllegalStateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.SignatureException;
-    method public void setIssuerDN(javax.security.auth.x500.X500Principal);
-    method public void setNotAfter(java.util.Date);
-    method public void setNotBefore(java.util.Date);
-    method public void setPublicKey(java.security.PublicKey) throws java.lang.IllegalArgumentException;
-    method public void setSerialNumber(java.math.BigInteger);
-    method public void setSignatureAlgorithm(java.lang.String);
-    method public void setSubjectDN(javax.security.auth.x500.X500Principal);
-  }
-
-}
-
-package com.android.org.conscrypt {
-
-  public abstract interface CertPinManager {
-  }
-
-  public final class ClientSessionContext implements javax.net.ssl.SSLSessionContext {
-    method public void setPersistentCache(com.android.org.conscrypt.SSLClientSessionCache);
-  }
-
-  public final class Conscrypt {
-    method public static javax.net.ssl.X509TrustManager getDefaultX509TrustManager() throws java.security.KeyManagementException;
-    method public static javax.net.ssl.SSLContextSpi newPreferredSSLContextSpi();
-  }
-
-  public abstract interface ConscryptCertStore {
-  }
-
-  public final class FileClientSessionCache {
-    method public static synchronized com.android.org.conscrypt.SSLClientSessionCache usingDirectory(java.io.File) throws java.io.IOException;
-  }
-
-  public abstract class OpenSSLContextImpl extends javax.net.ssl.SSLContextSpi {
-    method public com.android.org.conscrypt.ClientSessionContext engineGetClientSessionContext();
-    method public javax.net.ssl.SSLSocketFactory engineGetSocketFactory();
-    method public void engineInit(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException;
-  }
-
-  public final class OpenSSLProvider extends java.security.Provider {
-    ctor public OpenSSLProvider();
-  }
-
-  public abstract class OpenSSLSocketImpl extends javax.net.ssl.SSLSocket {
-    method public final deprecated byte[] getAlpnSelectedProtocol();
-    method public final deprecated byte[] getNpnSelectedProtocol();
-    method public final deprecated void setAlpnProtocols(byte[]);
-    method public abstract void setChannelIdPrivateKey(java.security.PrivateKey);
-    method public void setHandshakeTimeout(int) throws java.net.SocketException;
-    method public void setHostname(java.lang.String);
-    method public final deprecated void setNpnProtocols(byte[]);
-    method public void setSoWriteTimeout(int) throws java.net.SocketException;
-    method public abstract void setUseSessionTickets(boolean);
-  }
-
-  public abstract interface SSLClientSessionCache {
-  }
-
-  public final class ServerSessionContext implements javax.net.ssl.SSLSessionContext {
-  }
-
-  public final class TrustManagerImpl extends javax.net.ssl.X509ExtendedTrustManager {
-    ctor public TrustManagerImpl(java.security.KeyStore);
-    ctor public TrustManagerImpl(java.security.KeyStore, com.android.org.conscrypt.CertPinManager, com.android.org.conscrypt.ConscryptCertStore);
-    method public void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String) throws java.security.cert.CertificateException;
-    method public void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException;
-    method public void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
-    method public java.util.List<java.security.cert.X509Certificate> checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, java.lang.String) throws java.security.cert.CertificateException;
-    method public java.util.List<java.security.cert.X509Certificate> getTrustedChainForServer(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException;
-    method public java.util.List<java.security.cert.X509Certificate> getTrustedChainForServer(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
-    method public void handleTrustStorageUpdate();
-  }
-
-  public final class TrustedCertificateIndex {
-    ctor public TrustedCertificateIndex();
-    method public java.util.Set<java.security.cert.TrustAnchor> findAllByIssuerAndSignature(java.security.cert.X509Certificate);
-    method public java.security.cert.TrustAnchor findByIssuerAndSignature(java.security.cert.X509Certificate);
-    method public java.security.cert.TrustAnchor findBySubjectAndPublicKey(java.security.cert.X509Certificate);
-    method public java.security.cert.TrustAnchor index(java.security.cert.X509Certificate);
-  }
-
-  public class TrustedCertificateStore implements com.android.org.conscrypt.ConscryptCertStore {
-    ctor public TrustedCertificateStore();
-    method public java.util.Set<java.lang.String> aliases();
-    method public java.util.Set<java.lang.String> allSystemAliases();
-    method public boolean containsAlias(java.lang.String);
-    method public void deleteCertificateEntry(java.lang.String) throws java.security.cert.CertificateException, java.io.IOException;
-    method public java.util.Set<java.security.cert.X509Certificate> findAllIssuers(java.security.cert.X509Certificate);
-    method public java.security.cert.X509Certificate findIssuer(java.security.cert.X509Certificate);
-    method public java.security.cert.Certificate getCertificate(java.lang.String);
-    method public java.security.cert.Certificate getCertificate(java.lang.String, boolean);
-    method public java.lang.String getCertificateAlias(java.security.cert.Certificate);
-    method public java.lang.String getCertificateAlias(java.security.cert.Certificate, boolean);
-    method public java.util.List<java.security.cert.X509Certificate> getCertificateChain(java.security.cert.X509Certificate) throws java.security.cert.CertificateException;
-    method public java.io.File getCertificateFile(java.io.File, java.security.cert.X509Certificate);
-    method public java.util.Date getCreationDate(java.lang.String);
-    method public java.security.cert.X509Certificate getTrustAnchor(java.security.cert.X509Certificate);
-    method public void installCertificate(java.security.cert.X509Certificate) throws java.security.cert.CertificateException, java.io.IOException;
-    method public static final boolean isUser(java.lang.String);
-    method public boolean isUserAddedCertificate(java.security.cert.X509Certificate);
-    method public static void setDefaultUserDirectory(java.io.File);
-    method public java.util.Set<java.lang.String> userAliases();
-  }
-
-}
-
-package dalvik.annotation.optimization {
-
-  public abstract class CriticalNative implements java.lang.annotation.Annotation {
-  }
-
-  public abstract class FastNative implements java.lang.annotation.Annotation {
-  }
-
-}
-
-package dalvik.system {
-
-  public class AnnotatedStackTraceElement {
-    method public java.lang.Object getBlockedOn();
-    method public java.lang.Object[] getHeldLocks();
-    method public java.lang.StackTraceElement getStackTraceElement();
-  }
-
-  public class BaseDexClassLoader extends java.lang.ClassLoader {
-    method public void addDexPath(java.lang.String);
-    method public void addNativePath(java.util.Collection<java.lang.String>);
-    method public java.lang.String getLdLibraryPath();
-    method public static void setReporter(dalvik.system.BaseDexClassLoader.Reporter);
-  }
-
-  public static abstract interface BaseDexClassLoader.Reporter {
-    method public abstract void report(java.util.List<dalvik.system.BaseDexClassLoader>, java.util.List<java.lang.String>);
-  }
-
-  public final class BlockGuard {
-    method public static dalvik.system.BlockGuard.Policy getThreadPolicy();
-    method public static dalvik.system.BlockGuard.VmPolicy getVmPolicy();
-    method public static void setThreadPolicy(dalvik.system.BlockGuard.Policy);
-    method public static void setVmPolicy(dalvik.system.BlockGuard.VmPolicy);
-    field public static final dalvik.system.BlockGuard.Policy LAX_POLICY;
-    field public static final dalvik.system.BlockGuard.VmPolicy LAX_VM_POLICY;
-  }
-
-  public static abstract interface BlockGuard.Policy {
-    method public abstract int getPolicyMask();
-    method public abstract void onReadFromDisk();
-    method public abstract void onUnbufferedIO();
-    method public abstract void onWriteToDisk();
-  }
-
-  public static abstract interface BlockGuard.VmPolicy {
-    method public abstract void onPathAccess(java.lang.String);
-  }
-
-  public final class CloseGuard {
-    method public void close();
-    method public static dalvik.system.CloseGuard get();
-    method public static dalvik.system.CloseGuard.Reporter getReporter();
-    method public void open(java.lang.String);
-    method public static void setEnabled(boolean);
-    method public static void setReporter(dalvik.system.CloseGuard.Reporter);
-    method public void warnIfOpen();
-  }
-
-  public static abstract interface CloseGuard.Reporter {
-    method public abstract void report(java.lang.String, java.lang.Throwable);
-  }
-
-  public abstract interface DalvikLogHandler {
-    method public abstract void publish(java.util.logging.Logger, java.lang.String, java.util.logging.Level, java.lang.String);
-  }
-
-  public final class DalvikLogging {
-    method public static java.lang.String loggerNameToTag(java.lang.String);
-  }
-
-  public final deprecated class DexFile {
-    ctor public deprecated DexFile(java.io.File) throws java.io.IOException;
-    ctor public deprecated DexFile(java.lang.String) throws java.io.IOException;
-    method public void close() throws java.io.IOException;
-    method public java.util.Enumeration<java.lang.String> entries();
-    method public static dalvik.system.DexFile.OptimizationInfo getDexFileOptimizationInfo(java.lang.String, java.lang.String) throws java.io.FileNotFoundException;
-    method public static java.lang.String[] getDexFileOutputPaths(java.lang.String, java.lang.String) throws java.io.FileNotFoundException;
-    method public static int getDexOptNeeded(java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean, boolean) throws java.io.FileNotFoundException, java.io.IOException;
-    method public java.lang.String getName();
-    method public static java.lang.String getSafeModeCompilerFilter(java.lang.String);
-    method public static boolean isDexOptNeeded(java.lang.String) throws java.io.FileNotFoundException, java.io.IOException;
-    method public static boolean isProfileGuidedCompilerFilter(java.lang.String);
-    method public static boolean isValidCompilerFilter(java.lang.String);
-    method public java.lang.Class loadClass(java.lang.String, java.lang.ClassLoader);
-    method public static deprecated dalvik.system.DexFile loadDex(java.lang.String, java.lang.String, int) throws java.io.IOException;
-    field public static final int DEX2OAT_FOR_FILTER = 3; // 0x3
-    field public static final int NO_DEXOPT_NEEDED = 0; // 0x0
-  }
-
-  public static final class DexFile.OptimizationInfo {
-    method public java.lang.String getReason();
-    method public java.lang.String getStatus();
-  }
-
-  public final class RuntimeHooks {
-    method public static void setTimeZoneIdSupplier(java.util.function.Supplier<java.lang.String>);
-    method public static void setUncaughtExceptionPreHandler(java.lang.Thread.UncaughtExceptionHandler);
-  }
-
-  public abstract class SocketTagger {
-    ctor public SocketTagger();
-    method public static synchronized dalvik.system.SocketTagger get();
-    method public static synchronized void set(dalvik.system.SocketTagger);
-    method public abstract void tag(java.io.FileDescriptor) throws java.net.SocketException;
-    method public final void tag(java.net.Socket) throws java.net.SocketException;
-    method public final void tag(java.net.DatagramSocket) throws java.net.SocketException;
-    method public abstract void untag(java.io.FileDescriptor) throws java.net.SocketException;
-    method public final void untag(java.net.Socket) throws java.net.SocketException;
-    method public final void untag(java.net.DatagramSocket) throws java.net.SocketException;
-  }
-
-  public final class VMDebug {
-    method public static void attachAgent(java.lang.String, java.lang.ClassLoader) throws java.io.IOException;
-    method public static boolean cacheRegisterMap(java.lang.String);
-    method public static long countInstancesOfClass(java.lang.Class, boolean);
-    method public static long[] countInstancesOfClasses(java.lang.Class[], boolean);
-    method public static void dumpHprofData(java.lang.String) throws java.io.IOException;
-    method public static void dumpHprofData(java.lang.String, java.io.FileDescriptor) throws java.io.IOException;
-    method public static void dumpHprofDataDdms();
-    method public static void dumpReferenceTables();
-    method public static int getAllocCount(int);
-    method public static int getLoadedClassCount();
-    method public static int getMethodTracingMode();
-    method public static java.lang.String getRuntimeStat(java.lang.String);
-    method public static java.util.Map<java.lang.String, java.lang.String> getRuntimeStats();
-    method public static java.lang.String[] getVmFeatureList();
-    method public static boolean isDebuggerConnected();
-    method public static boolean isDebuggingEnabled();
-    method public static long lastDebuggerActivity();
-    method public static void printLoadedClasses(int);
-    method public static void resetAllocCount(int);
-    method public static void startAllocCounting();
-    method public static void startEmulatorTracing();
-    method public static void startMethodTracing(java.lang.String, int, int, boolean, int);
-    method public static void startMethodTracing(java.lang.String, java.io.FileDescriptor, int, int, boolean, int, boolean);
-    method public static void startMethodTracingDdms(int, int, boolean, int);
-    method public static void stopAllocCounting();
-    method public static void stopEmulatorTracing();
-    method public static void stopMethodTracing();
-    method public static long threadCpuTimeNanos();
-    field public static final int KIND_ALL_COUNTS = -1; // 0xffffffff
-    field public static final int KIND_GLOBAL_ALLOCATED_BYTES = 2; // 0x2
-    field public static final int KIND_GLOBAL_ALLOCATED_OBJECTS = 1; // 0x1
-    field public static final int KIND_GLOBAL_CLASS_INIT_COUNT = 32; // 0x20
-    field public static final int KIND_GLOBAL_CLASS_INIT_TIME = 64; // 0x40
-    field public static final int KIND_GLOBAL_FREED_BYTES = 8; // 0x8
-    field public static final int KIND_GLOBAL_FREED_OBJECTS = 4; // 0x4
-    field public static final int KIND_GLOBAL_GC_INVOCATIONS = 16; // 0x10
-    field public static final int KIND_THREAD_ALLOCATED_BYTES = 131072; // 0x20000
-    field public static final int KIND_THREAD_ALLOCATED_OBJECTS = 65536; // 0x10000
-    field public static final int KIND_THREAD_GC_INVOCATIONS = 1048576; // 0x100000
-    field public static final int TRACE_COUNT_ALLOCS = 1; // 0x1
-  }
-
-  public final class VMRuntime {
-    method public long addressOf(java.lang.Object);
-    method public void clampGrowthLimit();
-    method public void clearGrowthLimit();
-    method public static boolean didPruneDalvikCache();
-    method public void disableJitCompilation();
-    method public static java.lang.String getCurrentInstructionSet();
-    method public static java.lang.String getInstructionSet(java.lang.String);
-    method public static dalvik.system.VMRuntime getRuntime();
-    method public float getTargetHeapUtilization();
-    method public synchronized int getTargetSdkVersion();
-    method public static boolean hasBootImageSpaces();
-    method public boolean hasUsedHiddenApi();
-    method public boolean is64Bit();
-    method public static boolean is64BitAbi(java.lang.String);
-    method public static boolean is64BitInstructionSet(java.lang.String);
-    method public static boolean isBootClassPathOnDisk(java.lang.String);
-    method public boolean isCheckJniEnabled();
-    method public boolean isNativeDebuggable();
-    method public java.lang.Object newNonMovableArray(java.lang.Class<?>, int);
-    method public java.lang.Object newUnpaddedArray(java.lang.Class<?>, int);
-    method public void preloadDexCaches();
-    method public static void registerAppInfo(java.lang.String, java.lang.String[]);
-    method public void registerNativeAllocation(int);
-    method public void registerNativeFree(int);
-    method public static void registerSensitiveThread();
-    method public void requestConcurrentGC();
-    method public static void setDedupeHiddenApiWarnings(boolean);
-    method public void setHiddenApiAccessLogSamplingRate(int);
-    method public void setHiddenApiExemptions(java.lang.String[]);
-    method public static void setNonSdkApiUsageConsumer(java.util.function.Consumer<java.lang.String>);
-    method public static void setProcessPackageName(java.lang.String);
-    method public float setTargetHeapUtilization(float);
-    method public synchronized void setTargetSdkVersion(int);
-    method public void startJitCompilation();
-    method public void updateProcessState(int);
-    method public java.lang.String vmInstructionSet();
-    method public java.lang.String vmLibrary();
-    field public static final int SDK_VERSION_CUR_DEVELOPMENT = 10000; // 0x2710
-  }
-
-  public final class VMStack {
-    ctor public VMStack();
-    method public static dalvik.system.AnnotatedStackTraceElement[] getAnnotatedThreadStackTrace(java.lang.Thread);
-  }
-
-  public final class ZygoteHooks {
-    ctor public ZygoteHooks();
-    method public static void gcAndFinalize();
-    method public static void onBeginPreload();
-    method public static void onEndPreload();
-    method public void postForkChild(int, boolean, boolean, java.lang.String);
-    method public void postForkCommon();
-    method public void preFork();
-    method public static void startZygoteNoThreadCreation();
-    method public static void stopZygoteNoThreadCreation();
-  }
-
-}
-
-package java.io {
-
-  public final class FileDescriptor {
-    method public int getInt$();
-    method public void setInt$(int);
-  }
-
-  public class FileInputStream extends java.io.InputStream {
-    ctor public FileInputStream(java.io.FileDescriptor, boolean);
-  }
-
-}
-
-package java.lang {
-
-  public final class Byte extends java.lang.Number implements java.lang.Comparable {
-    method public static java.lang.String toHexString(byte, boolean);
-  }
-
-  public final class Class<T> implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
-    method public java.lang.reflect.Field[] getDeclaredFieldsUnchecked(boolean);
-    method public java.lang.reflect.Method[] getDeclaredMethodsUnchecked(boolean);
-    method public java.lang.String getPackageName$();
-  }
-
-  public final class Math {
-    method public static long randomLongInternal();
-  }
-
-  public final class System {
-    method public static void logE(java.lang.String, java.lang.Throwable);
-  }
-
-  public class Thread implements java.lang.Runnable {
-    method public static java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionPreHandler();
-    method public static void setUncaughtExceptionPreHandler(java.lang.Thread.UncaughtExceptionHandler);
-  }
-
-}
-
-package java.net {
-
-  public class DatagramSocket implements java.io.Closeable {
-    method public java.io.FileDescriptor getFileDescriptor$();
-  }
-
-  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[], 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 static void clearDnsCache();
-    method public static java.net.InetAddress[] getAllByNameOnNet(java.lang.String, int) throws java.net.UnknownHostException;
-    method public static java.net.InetAddress getByNameOnNet(java.lang.String, int) throws java.net.UnknownHostException;
-    method public static boolean isNumeric(java.lang.String);
-    method public static java.net.InetAddress parseNumericAddress(java.lang.String);
-  }
-
-  public class InetSocketAddress extends java.net.SocketAddress {
-    ctor public InetSocketAddress();
-  }
-
-  public class ServerSocket implements java.io.Closeable {
-    method public java.net.SocketImpl getImpl() throws java.net.SocketException;
-  }
-
-  public class Socket implements java.io.Closeable {
-    method public java.io.FileDescriptor getFileDescriptor$();
-  }
-
-  public abstract class SocketImpl implements java.net.SocketOptions {
-    method public java.io.FileDescriptor getFD$();
-  }
-
-}
-
-package java.nio {
-
-  public abstract class ByteBuffer extends java.nio.Buffer implements java.lang.Comparable {
-    method public void setAccessible(boolean);
-  }
-
-  public class DirectByteBuffer extends java.nio.MappedByteBuffer {
-    ctor public DirectByteBuffer(int, long, java.io.FileDescriptor, java.lang.Runnable, boolean);
-    method public final long address();
-    method public final void setAccessible(boolean);
-  }
-
-  public final class NioUtils {
-    method public static void freeDirectBuffer(java.nio.ByteBuffer);
-    method public static byte[] unsafeArray(java.nio.ByteBuffer);
-    method public static int unsafeArrayOffset(java.nio.ByteBuffer);
-  }
-
-}
-
-package java.security {
-
-  public abstract class Provider extends java.util.Properties {
-    method public synchronized void warmUpServiceProvision();
-  }
-
-  public abstract class Signature extends java.security.SignatureSpi {
-    method public java.security.SignatureSpi getCurrentSpi();
-  }
-
-}
-
-package java.text {
-
-  public abstract class DateFormat extends java.text.Format {
-    method public static final void set24HourTimePref(java.lang.Boolean);
-  }
-
-}
-
-package java.util {
-
-  public class LinkedHashMap<K, V> extends java.util.HashMap implements java.util.Map {
-    method public java.util.Map.Entry<K, V> eldest();
-  }
-
-  public final class Locale implements java.lang.Cloneable java.io.Serializable {
-    method public static java.lang.String adjustLanguageCode(java.lang.String);
-  }
-
-}
-
-package java.util.concurrent {
-
-  public class CompletableFuture<T> implements java.util.concurrent.CompletionStage java.util.concurrent.Future {
-    method public java.util.concurrent.CompletableFuture<T> completeOnTimeout(T, long, java.util.concurrent.TimeUnit);
-    method public static <U> java.util.concurrent.CompletableFuture<U> failedFuture(java.lang.Throwable);
-  }
-
-}
-
-package java.util.zip {
-
-  public class ZipEntry implements java.lang.Cloneable {
-    method public long getDataOffset();
-  }
-
-}
-
-package javax.crypto {
-
-  public class Cipher {
-    method public javax.crypto.CipherSpi getCurrentSpi();
-  }
-
-  public class Mac implements java.lang.Cloneable {
-    method public javax.crypto.MacSpi getCurrentSpi();
-  }
-
-}
-
-package libcore.icu {
-
-  public final class DateIntervalFormat {
-    method public static java.lang.String formatDateRange(long, long, int, java.lang.String);
-  }
-
-  public final class ICU {
-    ctor public ICU();
-    method public static java.util.Locale addLikelySubtags(java.util.Locale);
-    method public static java.lang.String getBestDateTimePattern(java.lang.String, java.util.Locale);
-    method public static char[] getDateFormatOrder(java.lang.String);
-    method public static java.lang.String getTZDataVersion();
-  }
-
-  public final class LocaleData {
-    method public static libcore.icu.LocaleData get(java.util.Locale);
-    method public java.lang.String getDateFormat(int);
-    field public java.lang.String[] amPm;
-    field public java.lang.Integer firstDayOfWeek;
-    field public java.lang.String[] longMonthNames;
-    field public java.lang.String[] longStandAloneMonthNames;
-    field public java.lang.String[] longStandAloneWeekdayNames;
-    field public java.lang.String[] longWeekdayNames;
-    field public java.lang.String narrowAm;
-    field public java.lang.String narrowPm;
-    field public java.lang.String[] shortMonthNames;
-    field public java.lang.String[] shortStandAloneMonthNames;
-    field public java.lang.String[] shortStandAloneWeekdayNames;
-    field public java.lang.String[] shortWeekdayNames;
-    field public java.lang.String timeFormat_Hm;
-    field public java.lang.String timeFormat_Hms;
-    field public java.lang.String timeFormat_hm;
-    field public java.lang.String timeFormat_hms;
-    field public java.lang.String[] tinyMonthNames;
-    field public java.lang.String[] tinyStandAloneMonthNames;
-    field public java.lang.String[] tinyStandAloneWeekdayNames;
-    field public java.lang.String[] tinyWeekdayNames;
-    field public java.lang.String today;
-    field public java.lang.String yesterday;
-    field public char zeroDigit;
-  }
-
-  public final class RelativeDateTimeFormatter {
-    method public static java.lang.String getRelativeDateTimeString(java.util.Locale, java.util.TimeZone, long, long, long, long, int);
-    method public static java.lang.String getRelativeTimeSpanString(java.util.Locale, java.util.TimeZone, long, long, long, int);
-  }
-
-  public final class TimeZoneNames {
-  }
-
-  public static class TimeZoneNames.ZoneStringsCache extends libcore.util.BasicLruCache {
-  }
-
-}
-
-package libcore.internal {
-
-  public final class StringPool {
-    ctor public StringPool();
-    method public java.lang.String get(char[], int, int);
-  }
-
-}
-
-package libcore.io {
-
-  public final class DropBox {
-    ctor public DropBox();
-    method public static void setReporter(libcore.io.DropBox.Reporter);
-  }
-
-  public static abstract interface DropBox.Reporter {
-    method public abstract void addData(java.lang.String, byte[], int);
-    method public abstract void addText(java.lang.String, java.lang.String);
-  }
-
-  public final class EventLogger {
-    ctor public EventLogger();
-    method public static void setReporter(libcore.io.EventLogger.Reporter);
-  }
-
-  public static abstract interface EventLogger.Reporter {
-    method public abstract void report(int, java.lang.Object...);
-  }
-
-  public class ForwardingOs implements libcore.io.Os {
-    ctor protected ForwardingOs(libcore.io.Os);
-    method public boolean access(java.lang.String, int) throws android.system.ErrnoException;
-    method public java.io.FileDescriptor open(java.lang.String, int, int) throws android.system.ErrnoException;
-    method public android.system.StructStat stat(java.lang.String) throws android.system.ErrnoException;
-  }
-
-  public final class IoBridge {
-    method public static void closeAndSignalBlockedThreads(java.io.FileDescriptor) throws java.io.IOException;
-    method public static java.net.InetSocketAddress getLocalInetSocketAddress(java.io.FileDescriptor) throws java.net.SocketException;
-    method public static java.io.FileDescriptor open(java.lang.String, int) throws java.io.FileNotFoundException;
-    method public static int read(java.io.FileDescriptor, byte[], int, int) throws java.io.IOException;
-    method public static int recvfrom(boolean, java.io.FileDescriptor, byte[], int, int, int, java.net.DatagramPacket, boolean) throws java.io.IOException;
-    method public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.InetAddress, int) throws java.io.IOException;
-    method public static java.io.FileDescriptor socket(int, int, int) throws java.net.SocketException;
-    method public static void write(java.io.FileDescriptor, byte[], int, int) throws java.io.IOException;
-  }
-
-  public final class IoUtils {
-    method public static int acquireRawFd(java.io.FileDescriptor);
-    method public static void close(java.io.FileDescriptor) throws java.io.IOException;
-    method public static void closeQuietly(java.lang.AutoCloseable);
-    method public static void closeQuietly(java.io.FileDescriptor);
-    method public static void closeQuietly(java.net.Socket);
-    method public static deprecated java.io.File createTemporaryDirectory(java.lang.String);
-    method public static deprecated void deleteContents(java.io.File) throws java.io.IOException;
-    method public static byte[] readFileAsByteArray(java.lang.String) throws java.io.IOException;
-    method public static java.lang.String readFileAsString(java.lang.String) throws java.io.IOException;
-    method public static void setBlocking(java.io.FileDescriptor, boolean) throws java.io.IOException;
-    method public static void setFdOwner(java.io.FileDescriptor, java.lang.Object);
-  }
-
-  public final class Libcore {
-  }
-
-  public final class Memory {
-    method public static void memmove(java.lang.Object, int, java.lang.Object, int, long);
-    method public static int peekInt(byte[], int, java.nio.ByteOrder);
-    method public static short peekShort(byte[], int, java.nio.ByteOrder);
-    method public static void pokeInt(byte[], int, int, java.nio.ByteOrder);
-    method public static void pokeLong(byte[], int, long, java.nio.ByteOrder);
-    method public static void pokeShort(byte[], int, short, java.nio.ByteOrder);
-  }
-
-  public abstract interface Os {
-    method public static boolean compareAndSetDefault(libcore.io.Os, libcore.io.Os);
-    method public static libcore.io.Os getDefault();
-  }
-
-  public final class SizeOf {
-    field public static final int INT = 4; // 0x4
-    field public static final int SHORT = 2; // 0x2
-  }
-
-  public final class Streams {
-    method public static int copy(java.io.InputStream, java.io.OutputStream) throws java.io.IOException;
-    method public static void readFully(java.io.InputStream, byte[]) throws java.io.IOException;
-    method public static byte[] readFully(java.io.InputStream) throws java.io.IOException;
-    method public static java.lang.String readFully(java.io.Reader) throws java.io.IOException;
-    method public static byte[] readFullyNoClose(java.io.InputStream) throws java.io.IOException;
-    method public static int readSingleByte(java.io.InputStream) throws java.io.IOException;
-    method public static long skipByReading(java.io.InputStream, long) throws java.io.IOException;
-    method public static void writeSingleByte(java.io.OutputStream, int) throws java.io.IOException;
-  }
-
-}
-
-package libcore.mmodule.libart {
-
-  public class DemoLibartClass {
-    method public static java.lang.String corePlatformApiMethod();
-  }
-
-}
-
-package libcore.net {
-
-  public final class MimeUtils {
-    ctor public MimeUtils();
-    method public static java.lang.String guessExtensionFromMimeType(java.lang.String);
-    method public static java.lang.String guessMimeTypeFromExtension(java.lang.String);
-    method public static boolean hasExtension(java.lang.String);
-    method public static boolean hasMimeType(java.lang.String);
-  }
-
-  public abstract class NetworkSecurityPolicy {
-    ctor public NetworkSecurityPolicy();
-    method public static libcore.net.NetworkSecurityPolicy getInstance();
-    method public abstract boolean isCertificateTransparencyVerificationRequired(java.lang.String);
-    method public abstract boolean isCleartextTrafficPermitted();
-    method public abstract boolean isCleartextTrafficPermitted(java.lang.String);
-    method public static void setInstance(libcore.net.NetworkSecurityPolicy);
-  }
-
-}
-
-package libcore.net.event {
-
-  public class NetworkEventDispatcher {
-    method public static libcore.net.event.NetworkEventDispatcher getInstance();
-    method public void onNetworkConfigurationChanged();
-  }
-
-}
-
-package libcore.util {
-
-  public final class ArrayUtils {
-    method public static void throwsIfOutOfBounds(int, int, int);
-  }
-
-  public class BasicLruCache<K, V> {
-    ctor public BasicLruCache(int);
-  }
-
-  public final class CountryTimeZones {
-    method public java.lang.String getCountryIso();
-    method public java.lang.String getDefaultTimeZoneId();
-    method public java.util.List<libcore.util.CountryTimeZones.TimeZoneMapping> getTimeZoneMappings();
-    method public boolean hasUtcZone(long);
-    method public boolean isDefaultOkForCountryTimeZoneDetection(long);
-    method public boolean isForCountryCode(java.lang.String);
-    method public deprecated libcore.util.CountryTimeZones.OffsetResult lookupByOffsetWithBias(int, boolean, long, android.icu.util.TimeZone);
-  }
-
-  public static final class CountryTimeZones.OffsetResult {
-    field public final boolean mOneMatch;
-    field public final android.icu.util.TimeZone mTimeZone;
-  }
-
-  public static final class CountryTimeZones.TimeZoneMapping {
-    method public static libcore.util.CountryTimeZones.TimeZoneMapping createForTests(java.lang.String, boolean, java.lang.Long);
-    field public final java.lang.Long notUsedAfter;
-    field public final boolean showInPicker;
-    field public final java.lang.String timeZoneId;
-  }
-
-  public final class CountryZonesFinder {
-    method public java.util.List<java.lang.String> lookupAllCountryIsoCodes();
-    method public libcore.util.CountryTimeZones lookupCountryTimeZones(java.lang.String);
-    method public java.util.List<libcore.util.CountryTimeZones> lookupCountryTimeZonesForZoneId(java.lang.String);
-  }
-
-  public final class EmptyArray {
-    field public static final boolean[] BOOLEAN;
-    field public static final byte[] BYTE;
-    field public static final float[] FLOAT;
-    field public static final int[] INT;
-    field public static final long[] LONG;
-    field public static final java.lang.Object[] OBJECT;
-    field public static final java.lang.String[] STRING;
-  }
-
-  public class HexEncoding {
-    method public static byte[] decode(java.lang.String) throws java.lang.IllegalArgumentException;
-    method public static byte[] decode(char[]) throws java.lang.IllegalArgumentException;
-    method public static byte[] decode(char[], boolean) throws java.lang.IllegalArgumentException;
-    method public static char[] encode(byte[]);
-    method public static char[] encode(byte[], int, int);
-    method public static java.lang.String encodeToString(byte[]);
-  }
-
-  public class NativeAllocationRegistry {
-    ctor public NativeAllocationRegistry(java.lang.ClassLoader, long, long);
-    method public static void applyFreeFunction(long, long);
-    method public java.lang.Runnable registerNativeAllocation(java.lang.Object, long);
-  }
-
-  public class SneakyThrow {
-    ctor public SneakyThrow();
-    method public static void sneakyThrow(java.lang.Throwable);
-  }
-
-  public final class TimeZoneFinder {
-    method public static libcore.util.TimeZoneFinder createInstance(java.lang.String) throws java.io.IOException;
-    method public libcore.util.CountryZonesFinder getCountryZonesFinder();
-    method public java.lang.String getIanaVersion();
-    method public static libcore.util.TimeZoneFinder getInstance();
-    method public libcore.util.CountryTimeZones lookupCountryTimeZones(java.lang.String);
-    method public java.lang.String lookupDefaultTimeZoneIdByCountry(java.lang.String);
-    method public android.icu.util.TimeZone lookupTimeZoneByCountryAndOffset(java.lang.String, int, boolean, long, android.icu.util.TimeZone);
-    method public java.util.List<java.lang.String> lookupTimeZoneIdsByCountry(java.lang.String);
-    method public java.util.List<android.icu.util.TimeZone> lookupTimeZonesByCountry(java.lang.String);
-    method public void validate() throws java.io.IOException;
-  }
-
-  public class XmlObjectFactory {
-    method public static org.xml.sax.XMLReader newXMLReader();
-    method public static org.xmlpull.v1.XmlPullParser newXmlPullParser();
-    method public static org.xmlpull.v1.XmlSerializer newXmlSerializer();
-  }
-
-  public final class ZoneInfo extends java.util.TimeZone {
-  }
-
-  public static class ZoneInfo.WallTime {
-    ctor public ZoneInfo.WallTime();
-    method public int getGmtOffset();
-    method public int getHour();
-    method public int getIsDst();
-    method public int getMinute();
-    method public int getMonth();
-    method public int getMonthDay();
-    method public int getSecond();
-    method public int getWeekDay();
-    method public int getYear();
-    method public int getYearDay();
-    method public void localtime(int, libcore.util.ZoneInfo);
-    method public int mktime(libcore.util.ZoneInfo);
-    method public void setGmtOffset(int);
-    method public void setHour(int);
-    method public void setIsDst(int);
-    method public void setMinute(int);
-    method public void setMonth(int);
-    method public void setMonthDay(int);
-    method public void setSecond(int);
-    method public void setWeekDay(int);
-    method public void setYear(int);
-    method public void setYearDay(int);
-  }
-
-  public final class ZoneInfoDB {
-    method public static libcore.util.ZoneInfoDB.TzData getInstance();
-  }
-
-  public static class ZoneInfoDB.TzData implements java.lang.AutoCloseable {
-    method public static java.lang.String getRulesVersion(java.io.File) throws java.io.IOException;
-    method public java.lang.String getVersion();
-    method public boolean hasTimeZone(java.lang.String) throws java.io.IOException;
-    method public static libcore.util.ZoneInfoDB.TzData loadTzData(java.lang.String);
-    method public libcore.util.ZoneInfo makeTimeZone(java.lang.String) throws java.io.IOException;
-    method public void validate() throws java.io.IOException;
-  }
-
-}
-
-package org.apache.harmony.dalvik {
-
-  public final class NativeTestTarget {
-    ctor public NativeTestTarget();
-    method public static void emptyInlineMethod();
-    method public static void emptyInternalStaticMethod();
-    method public void emptyJniMethod0();
-    method public void emptyJniMethod0_Fast();
-    method public void emptyJniMethod6(int, int, int, int, int, int);
-    method public void emptyJniMethod6L(java.lang.String, java.lang.String[], int[][], java.lang.Object, java.lang.Object[], java.lang.Object[][][][]);
-    method public void emptyJniMethod6L_Fast(java.lang.String, java.lang.String[], int[][], java.lang.Object, java.lang.Object[], java.lang.Object[][][][]);
-    method public void emptyJniMethod6_Fast(int, int, int, int, int, int);
-    method public static void emptyJniStaticMethod0();
-    method public static void emptyJniStaticMethod0_Critical();
-    method public static void emptyJniStaticMethod0_Fast();
-    method public static void emptyJniStaticMethod6(int, int, int, int, int, int);
-    method public static void emptyJniStaticMethod6L(java.lang.String, java.lang.String[], int[][], java.lang.Object, java.lang.Object[], java.lang.Object[][][][]);
-    method public static void emptyJniStaticMethod6L_Fast(java.lang.String, java.lang.String[], int[][], java.lang.Object, java.lang.Object[], java.lang.Object[][][][]);
-    method public static void emptyJniStaticMethod6_Critical(int, int, int, int, int, int);
-    method public static void emptyJniStaticMethod6_Fast(int, int, int, int, int, int);
-    method public static synchronized void emptyJniStaticSynchronizedMethod0();
-    method public synchronized void emptyJniSynchronizedMethod0();
-  }
-
-}
-
-package org.apache.harmony.dalvik.ddmc {
-
-  public class Chunk {
-    ctor public Chunk(int, byte[], int, int);
-    ctor public Chunk(int, java.nio.ByteBuffer);
-    field public int type;
-  }
-
-  public abstract class ChunkHandler {
-    ctor public ChunkHandler();
-    method public abstract void connected();
-    method public static org.apache.harmony.dalvik.ddmc.Chunk createFailChunk(int, java.lang.String);
-    method public abstract void disconnected();
-    method public static java.lang.String getString(java.nio.ByteBuffer, int);
-    method public abstract org.apache.harmony.dalvik.ddmc.Chunk handleChunk(org.apache.harmony.dalvik.ddmc.Chunk);
-    method public static java.lang.String name(int);
-    method public static void putString(java.nio.ByteBuffer, java.lang.String);
-    method public static int type(java.lang.String);
-    method public static java.nio.ByteBuffer wrapChunk(org.apache.harmony.dalvik.ddmc.Chunk);
-    field public static final java.nio.ByteOrder CHUNK_ORDER;
-  }
-
-  public class DdmServer {
-    method public static void registerHandler(int, org.apache.harmony.dalvik.ddmc.ChunkHandler);
-    method public static void registrationComplete();
-    method public static void sendChunk(org.apache.harmony.dalvik.ddmc.Chunk);
-    field public static final int CLIENT_PROTOCOL_VERSION = 1; // 0x1
-  }
-
-  public class DdmVmInternal {
-    method public static void enableRecentAllocations(boolean);
-    method public static boolean getRecentAllocationStatus();
-    method public static byte[] getRecentAllocations();
-    method public static java.lang.StackTraceElement[] getStackTraceById(int);
-    method public static byte[] getThreadStats();
-    method public static boolean heapInfoNotify(int);
-    method public static boolean heapSegmentNotify(int, int, boolean);
-    method public static void threadNotify(boolean);
-  }
-
-}
-
-package org.json {
-
-  public class JSONObject {
-    method public java.util.Set<java.lang.String> keySet();
-  }
-
-}
-
-package sun.misc {
-
-  public class Cleaner extends java.lang.ref.PhantomReference {
-    method public void clean();
-    method public static sun.misc.Cleaner create(java.lang.Object, java.lang.Runnable);
-  }
-
-}
-
-package sun.security.jca {
-
-  public class Providers {
-    method public static java.lang.Object startJarVerification();
-    method public static void stopJarVerification(java.lang.Object);
-  }
-
-}
-
-package sun.security.pkcs {
-
-  public class ContentInfo {
-    method public byte[] getContentBytes() throws java.io.IOException;
-  }
-
-  public class PKCS7 {
-    ctor public PKCS7(java.io.InputStream) throws java.io.IOException, sun.security.pkcs.ParsingException;
-    ctor public PKCS7(byte[]) throws sun.security.pkcs.ParsingException;
-    method public java.security.cert.X509Certificate[] getCertificates();
-    method public sun.security.pkcs.ContentInfo getContentInfo();
-    method public sun.security.pkcs.SignerInfo[] getSignerInfos();
-    method public sun.security.pkcs.SignerInfo verify(sun.security.pkcs.SignerInfo, java.io.InputStream) throws java.io.IOException, java.security.NoSuchAlgorithmException, java.security.SignatureException;
-    method public sun.security.pkcs.SignerInfo[] verify(byte[]) throws java.security.NoSuchAlgorithmException, java.security.SignatureException;
-  }
-
-  public class ParsingException extends java.io.IOException {
-  }
-
-  public class SignerInfo {
-    ctor public SignerInfo();
-    method public java.util.ArrayList<java.security.cert.X509Certificate> getCertificateChain(sun.security.pkcs.PKCS7) throws java.io.IOException;
-  }
-
-}
-
-package sun.security.util {
-
-  public final class ObjectIdentifier implements java.io.Serializable {
-    ctor public ObjectIdentifier(java.lang.String) throws java.io.IOException;
-  }
-
-}
-
-package sun.security.x509 {
-
-  public class AlgorithmId implements java.io.Serializable {
-    ctor public AlgorithmId(sun.security.util.ObjectIdentifier);
-    method public java.lang.String getName();
-  }
-
-}
-
-package sun.util.locale {
-
-  public class LanguageTag {
-    method public static boolean isLanguage(java.lang.String);
-  }
-
-}
-
diff --git a/ojluni/annotations/hiddenapi/java/util/HashMap.java b/ojluni/annotations/hiddenapi/java/util/HashMap.java
index 1010dad..af1c342 100644
--- a/ojluni/annotations/hiddenapi/java/util/HashMap.java
+++ b/ojluni/annotations/hiddenapi/java/util/HashMap.java
@@ -368,7 +368,6 @@
             throw new RuntimeException("Stub!");
         }
 
-        @UnsupportedAppUsage
         public final boolean hasNext() {
             throw new RuntimeException("Stub!");
         }
@@ -377,7 +376,6 @@
             throw new RuntimeException("Stub!");
         }
 
-        @UnsupportedAppUsage
         public final void remove() {
             throw new RuntimeException("Stub!");
         }
diff --git a/ojluni/annotations/hiddenapi/java/util/LinkedHashMap.java b/ojluni/annotations/hiddenapi/java/util/LinkedHashMap.java
index 9dd8e37..8294334 100644
--- a/ojluni/annotations/hiddenapi/java/util/LinkedHashMap.java
+++ b/ojluni/annotations/hiddenapi/java/util/LinkedHashMap.java
@@ -210,7 +210,6 @@
             throw new RuntimeException("Stub!");
         }
 
-        @UnsupportedAppUsage
         public final boolean hasNext() {
             throw new RuntimeException("Stub!");
         }
diff --git a/ojluni/annotations/hiddenapi/java/util/concurrent/ConcurrentHashMap.java b/ojluni/annotations/hiddenapi/java/util/concurrent/ConcurrentHashMap.java
deleted file mode 100644
index 86d503f..0000000
--- a/ojluni/annotations/hiddenapi/java/util/concurrent/ConcurrentHashMap.java
+++ /dev/null
@@ -1,2788 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import dalvik.annotation.compat.UnsupportedAppUsage;
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public class ConcurrentHashMap<K, V> extends java.util.AbstractMap<K, V>
-        implements java.util.concurrent.ConcurrentMap<K, V>, java.io.Serializable {
-
-    public ConcurrentHashMap() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public ConcurrentHashMap(int initialCapacity) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public ConcurrentHashMap(java.util.Map<? extends K, ? extends V> m) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public ConcurrentHashMap(int initialCapacity, float loadFactor) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) {
-        throw new RuntimeException("Stub!");
-    }
-
-    static final int spread(int h) {
-        throw new RuntimeException("Stub!");
-    }
-
-    private static final int tableSizeFor(int c) {
-        throw new RuntimeException("Stub!");
-    }
-
-    static java.lang.Class<?> comparableClassFor(java.lang.Object x) {
-        throw new RuntimeException("Stub!");
-    }
-
-    static int compareComparables(java.lang.Class<?> kc, java.lang.Object k, java.lang.Object x) {
-        throw new RuntimeException("Stub!");
-    }
-
-    static final <K, V> java.util.concurrent.ConcurrentHashMap.Node<K, V> tabAt(
-            java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab, int i) {
-        throw new RuntimeException("Stub!");
-    }
-
-    static final <K, V> boolean casTabAt(
-            java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-            int i,
-            java.util.concurrent.ConcurrentHashMap.Node<K, V> c,
-            java.util.concurrent.ConcurrentHashMap.Node<K, V> v) {
-        throw new RuntimeException("Stub!");
-    }
-
-    static final <K, V> void setTabAt(
-            java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-            int i,
-            java.util.concurrent.ConcurrentHashMap.Node<K, V> v) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public int size() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public boolean isEmpty() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V get(java.lang.Object key) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public boolean containsKey(java.lang.Object key) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public boolean containsValue(java.lang.Object value) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V put(K key, V value) {
-        throw new RuntimeException("Stub!");
-    }
-
-    final V putVal(K key, V value, boolean onlyIfAbsent) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public void putAll(java.util.Map<? extends K, ? extends V> m) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V remove(java.lang.Object key) {
-        throw new RuntimeException("Stub!");
-    }
-
-    final V replaceNode(java.lang.Object key, V value, java.lang.Object cv) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public void clear() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public java.util.Set<K> keySet() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public java.util.Collection<V> values() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public java.util.Set<java.util.Map.Entry<K, V>> entrySet() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public int hashCode() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public java.lang.String toString() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public boolean equals(java.lang.Object o) {
-        throw new RuntimeException("Stub!");
-    }
-
-    private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
-        throw new RuntimeException("Stub!");
-    }
-
-    private void readObject(java.io.ObjectInputStream s)
-            throws java.lang.ClassNotFoundException, java.io.IOException {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V putIfAbsent(K key, V value) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public boolean remove(java.lang.Object key, java.lang.Object value) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public boolean replace(K key, V oldValue, V newValue) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V replace(K key, V value) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V getOrDefault(java.lang.Object key, V defaultValue) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public void forEach(java.util.function.BiConsumer<? super K, ? super V> action) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public void replaceAll(
-            java.util.function.BiFunction<? super K, ? super V, ? extends V> function) {
-        throw new RuntimeException("Stub!");
-    }
-
-    boolean removeEntryIf(
-            java.util.function.Predicate<? super java.util.Map.Entry<K, V>> function) {
-        throw new RuntimeException("Stub!");
-    }
-
-    boolean removeValueIf(java.util.function.Predicate<? super V> function) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V computeIfAbsent(
-            K key, java.util.function.Function<? super K, ? extends V> mappingFunction) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V computeIfPresent(
-            K key,
-            java.util.function.BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V compute(
-            K key,
-            java.util.function.BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V merge(
-            K key,
-            V value,
-            java.util.function.BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public boolean contains(java.lang.Object value) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public java.util.Enumeration<K> keys() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public java.util.Enumeration<V> elements() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public long mappingCount() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public static <K>
-            java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet() {
-        throw new RuntimeException("Stub!");
-    }
-
-    public static <K>
-            java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(
-                    int initialCapacity) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V mappedValue) {
-        throw new RuntimeException("Stub!");
-    }
-
-    static final int resizeStamp(int n) {
-        throw new RuntimeException("Stub!");
-    }
-
-    private final java.util.concurrent.ConcurrentHashMap.Node<K, V>[] initTable() {
-        throw new RuntimeException("Stub!");
-    }
-
-    private final void addCount(long x, int check) {
-        throw new RuntimeException("Stub!");
-    }
-
-    final java.util.concurrent.ConcurrentHashMap.Node<K, V>[] helpTransfer(
-            java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-            java.util.concurrent.ConcurrentHashMap.Node<K, V> f) {
-        throw new RuntimeException("Stub!");
-    }
-
-    private final void tryPresize(int size) {
-        throw new RuntimeException("Stub!");
-    }
-
-    private final void transfer(
-            java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-            java.util.concurrent.ConcurrentHashMap.Node<K, V>[] nextTab) {
-        throw new RuntimeException("Stub!");
-    }
-
-    final long sumCount() {
-        throw new RuntimeException("Stub!");
-    }
-
-    private final void fullAddCount(long x, boolean wasUncontended) {
-        throw new RuntimeException("Stub!");
-    }
-
-    private final void treeifyBin(
-            java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab, int index) {
-        throw new RuntimeException("Stub!");
-    }
-
-    static <K, V> java.util.concurrent.ConcurrentHashMap.Node<K, V> untreeify(
-            java.util.concurrent.ConcurrentHashMap.Node<K, V> b) {
-        throw new RuntimeException("Stub!");
-    }
-
-    final int batchFor(long b) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public void forEach(
-            long parallelismThreshold, java.util.function.BiConsumer<? super K, ? super V> action) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> void forEach(
-            long parallelismThreshold,
-            java.util.function.BiFunction<? super K, ? super V, ? extends U> transformer,
-            java.util.function.Consumer<? super U> action) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> U search(
-            long parallelismThreshold,
-            java.util.function.BiFunction<? super K, ? super V, ? extends U> searchFunction) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> U reduce(
-            long parallelismThreshold,
-            java.util.function.BiFunction<? super K, ? super V, ? extends U> transformer,
-            java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public double reduceToDouble(
-            long parallelismThreshold,
-            java.util.function.ToDoubleBiFunction<? super K, ? super V> transformer,
-            double basis,
-            java.util.function.DoubleBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public long reduceToLong(
-            long parallelismThreshold,
-            java.util.function.ToLongBiFunction<? super K, ? super V> transformer,
-            long basis,
-            java.util.function.LongBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public int reduceToInt(
-            long parallelismThreshold,
-            java.util.function.ToIntBiFunction<? super K, ? super V> transformer,
-            int basis,
-            java.util.function.IntBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public void forEachKey(
-            long parallelismThreshold, java.util.function.Consumer<? super K> action) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> void forEachKey(
-            long parallelismThreshold,
-            java.util.function.Function<? super K, ? extends U> transformer,
-            java.util.function.Consumer<? super U> action) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> U searchKeys(
-            long parallelismThreshold,
-            java.util.function.Function<? super K, ? extends U> searchFunction) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public K reduceKeys(
-            long parallelismThreshold,
-            java.util.function.BiFunction<? super K, ? super K, ? extends K> reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> U reduceKeys(
-            long parallelismThreshold,
-            java.util.function.Function<? super K, ? extends U> transformer,
-            java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public double reduceKeysToDouble(
-            long parallelismThreshold,
-            java.util.function.ToDoubleFunction<? super K> transformer,
-            double basis,
-            java.util.function.DoubleBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public long reduceKeysToLong(
-            long parallelismThreshold,
-            java.util.function.ToLongFunction<? super K> transformer,
-            long basis,
-            java.util.function.LongBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public int reduceKeysToInt(
-            long parallelismThreshold,
-            java.util.function.ToIntFunction<? super K> transformer,
-            int basis,
-            java.util.function.IntBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public void forEachValue(
-            long parallelismThreshold, java.util.function.Consumer<? super V> action) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> void forEachValue(
-            long parallelismThreshold,
-            java.util.function.Function<? super V, ? extends U> transformer,
-            java.util.function.Consumer<? super U> action) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> U searchValues(
-            long parallelismThreshold,
-            java.util.function.Function<? super V, ? extends U> searchFunction) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public V reduceValues(
-            long parallelismThreshold,
-            java.util.function.BiFunction<? super V, ? super V, ? extends V> reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> U reduceValues(
-            long parallelismThreshold,
-            java.util.function.Function<? super V, ? extends U> transformer,
-            java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public double reduceValuesToDouble(
-            long parallelismThreshold,
-            java.util.function.ToDoubleFunction<? super V> transformer,
-            double basis,
-            java.util.function.DoubleBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public long reduceValuesToLong(
-            long parallelismThreshold,
-            java.util.function.ToLongFunction<? super V> transformer,
-            long basis,
-            java.util.function.LongBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public int reduceValuesToInt(
-            long parallelismThreshold,
-            java.util.function.ToIntFunction<? super V> transformer,
-            int basis,
-            java.util.function.IntBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public void forEachEntry(
-            long parallelismThreshold,
-            java.util.function.Consumer<? super java.util.Map.Entry<K, V>> action) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> void forEachEntry(
-            long parallelismThreshold,
-            java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U> transformer,
-            java.util.function.Consumer<? super U> action) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> U searchEntries(
-            long parallelismThreshold,
-            java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U> searchFunction) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public java.util.Map.Entry<K, V> reduceEntries(
-            long parallelismThreshold,
-            java.util.function.BiFunction<
-                            java.util.Map.Entry<K, V>,
-                            java.util.Map.Entry<K, V>,
-                            ? extends java.util.Map.Entry<K, V>>
-                    reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public <U> U reduceEntries(
-            long parallelismThreshold,
-            java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U> transformer,
-            java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public double reduceEntriesToDouble(
-            long parallelismThreshold,
-            java.util.function.ToDoubleFunction<java.util.Map.Entry<K, V>> transformer,
-            double basis,
-            java.util.function.DoubleBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public long reduceEntriesToLong(
-            long parallelismThreshold,
-            java.util.function.ToLongFunction<java.util.Map.Entry<K, V>> transformer,
-            long basis,
-            java.util.function.LongBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    public int reduceEntriesToInt(
-            long parallelismThreshold,
-            java.util.function.ToIntFunction<java.util.Map.Entry<K, V>> transformer,
-            int basis,
-            java.util.function.IntBinaryOperator reducer) {
-        throw new RuntimeException("Stub!");
-    }
-
-    private static final int ABASE;
-
-    static {
-        ABASE = 0;
-    }
-
-    private static final int ASHIFT;
-
-    static {
-        ASHIFT = 0;
-    }
-
-    private static final long BASECOUNT;
-
-    static {
-        BASECOUNT = 0;
-    }
-
-    private static final long CELLSBUSY;
-
-    static {
-        CELLSBUSY = 0;
-    }
-
-    private static final long CELLVALUE;
-
-    static {
-        CELLVALUE = 0;
-    }
-
-    private static final int DEFAULT_CAPACITY = 16; // 0x10
-
-    private static final int DEFAULT_CONCURRENCY_LEVEL = 16; // 0x10
-
-    static final int HASH_BITS = 2147483647; // 0x7fffffff
-
-    private static final float LOAD_FACTOR = 0.75f;
-
-    private static final int MAXIMUM_CAPACITY = 1073741824; // 0x40000000
-
-    static final int MAX_ARRAY_SIZE = 2147483639; // 0x7ffffff7
-
-    private static final int MAX_RESIZERS = 65535; // 0xffff
-
-    private static final int MIN_TRANSFER_STRIDE = 16; // 0x10
-
-    static final int MIN_TREEIFY_CAPACITY = 64; // 0x40
-
-    static final int MOVED = -1; // 0xffffffff
-
-    static final int NCPU;
-
-    static {
-        NCPU = 0;
-    }
-
-    static final int RESERVED = -3; // 0xfffffffd
-
-    private static final int RESIZE_STAMP_BITS = 16; // 0x10
-
-    private static final int RESIZE_STAMP_SHIFT = 16; // 0x10
-
-    private static final long SIZECTL;
-
-    static {
-        SIZECTL = 0;
-    }
-
-    private static final long TRANSFERINDEX;
-
-    static {
-        TRANSFERINDEX = 0;
-    }
-
-    static final int TREEBIN = -2; // 0xfffffffe
-
-    static final int TREEIFY_THRESHOLD = 8; // 0x8
-
-    private static final sun.misc.Unsafe U;
-
-    static {
-        U = null;
-    }
-
-    static final int UNTREEIFY_THRESHOLD = 6; // 0x6
-
-    private transient volatile long baseCount;
-
-    private transient volatile int cellsBusy;
-
-    private transient volatile java.util.concurrent.ConcurrentHashMap.CounterCell[] counterCells;
-
-    private transient java.util.concurrent.ConcurrentHashMap.EntrySetView<K, V> entrySet;
-
-    private transient java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet;
-
-    private transient volatile java.util.concurrent.ConcurrentHashMap.Node<K, V>[] nextTable;
-
-    private static final java.io.ObjectStreamField[] serialPersistentFields;
-
-    static {
-        serialPersistentFields = new java.io.ObjectStreamField[0];
-    }
-
-    private static final long serialVersionUID = 7249069246763182397L; // 0x6499de129d87293dL
-
-    private transient volatile int sizeCtl;
-
-    transient volatile java.util.concurrent.ConcurrentHashMap.Node<K, V>[] table;
-
-    private transient volatile int transferIndex;
-
-    private transient java.util.concurrent.ConcurrentHashMap.ValuesView<K, V> values;
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static class BaseIterator<K, V> extends java.util.concurrent.ConcurrentHashMap.Traverser<K, V> {
-
-        BaseIterator(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-                int size,
-                int index,
-                int limit,
-                java.util.concurrent.ConcurrentHashMap<K, V> map) {
-            super(null, 0, 0, 0);
-            throw new RuntimeException("Stub!");
-        }
-
-        public final boolean hasNext() {
-            throw new RuntimeException("Stub!");
-        }
-
-        @UnsupportedAppUsage
-        public final boolean hasMoreElements() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final void remove() {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V> lastReturned;
-
-        final java.util.concurrent.ConcurrentHashMap<K, V> map;
-
-        {
-            map = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    abstract static class BulkTask<K, V, R> extends java.util.concurrent.CountedCompleter<R> {
-
-        BulkTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> par,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t) {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.concurrent.ConcurrentHashMap.Node<K, V> advance() {
-            throw new RuntimeException("Stub!");
-        }
-
-        private void pushState(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t, int i, int n) {
-            throw new RuntimeException("Stub!");
-        }
-
-        private void recoverState(int n) {
-            throw new RuntimeException("Stub!");
-        }
-
-        int baseIndex;
-
-        int baseLimit;
-
-        final int baseSize;
-
-        {
-            baseSize = 0;
-        }
-
-        int batch;
-
-        int index;
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V> next;
-
-        java.util.concurrent.ConcurrentHashMap.TableStack<K, V> spare;
-
-        java.util.concurrent.ConcurrentHashMap.TableStack<K, V> stack;
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    abstract static class CollectionView<K, V, E>
-            implements java.util.Collection<E>, java.io.Serializable {
-
-        CollectionView(java.util.concurrent.ConcurrentHashMap<K, V> map) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.concurrent.ConcurrentHashMap<K, V> getMap() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final void clear() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final int size() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final boolean isEmpty() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public abstract java.util.Iterator<E> iterator();
-
-        public abstract boolean contains(java.lang.Object o);
-
-        public abstract boolean remove(java.lang.Object o);
-
-        public final java.lang.Object[] toArray() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final <T> T[] toArray(T[] a) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final java.lang.String toString() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final boolean containsAll(java.util.Collection<?> c) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final boolean removeAll(java.util.Collection<?> c) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final boolean retainAll(java.util.Collection<?> c) {
-            throw new RuntimeException("Stub!");
-        }
-
-        private static final java.lang.String OOME_MSG = "Required array size too large";
-
-        final java.util.concurrent.ConcurrentHashMap<K, V> map;
-
-        {
-            map = null;
-        }
-
-        private static final long serialVersionUID = 7249069246763182397L; // 0x6499de129d87293dL
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class CounterCell {
-
-        CounterCell(long x) {
-            throw new RuntimeException("Stub!");
-        }
-
-        volatile long value;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class EntryIterator<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BaseIterator<K, V>
-            implements java.util.Iterator<java.util.Map.Entry<K, V>> {
-
-        EntryIterator(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-                int index,
-                int size,
-                int limit,
-                java.util.concurrent.ConcurrentHashMap<K, V> map) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.Map.Entry<K, V> next() {
-            throw new RuntimeException("Stub!");
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class EntrySetView<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.CollectionView<
-                    K, V, java.util.Map.Entry<K, V>>
-            implements java.util.Set<java.util.Map.Entry<K, V>>, java.io.Serializable {
-
-        EntrySetView(java.util.concurrent.ConcurrentHashMap<K, V> map) {
-            super(null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean contains(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean remove(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.Iterator<java.util.Map.Entry<K, V>> iterator() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean add(java.util.Map.Entry<K, V> e) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean addAll(java.util.Collection<? extends java.util.Map.Entry<K, V>> c) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean removeIf(
-                java.util.function.Predicate<? super java.util.Map.Entry<K, V>> filter) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public int hashCode() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean equals(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.Spliterator<java.util.Map.Entry<K, V>> spliterator() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void forEach(java.util.function.Consumer<? super java.util.Map.Entry<K, V>> action) {
-            throw new RuntimeException("Stub!");
-        }
-
-        private static final long serialVersionUID = 2249069246763182397L; // 0x1f364c905893293dL
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class EntrySpliterator<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.Traverser<K, V>
-            implements java.util.Spliterator<java.util.Map.Entry<K, V>> {
-
-        EntrySpliterator(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-                int size,
-                int index,
-                int limit,
-                long est,
-                java.util.concurrent.ConcurrentHashMap<K, V> map) {
-            super(null, 0, 0, 0);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.concurrent.ConcurrentHashMap.EntrySpliterator<K, V> trySplit() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void forEachRemaining(
-                java.util.function.Consumer<? super java.util.Map.Entry<K, V>> action) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean tryAdvance(
-                java.util.function.Consumer<? super java.util.Map.Entry<K, V>> action) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public long estimateSize() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public int characteristics() {
-            throw new RuntimeException("Stub!");
-        }
-
-        long est;
-
-        final java.util.concurrent.ConcurrentHashMap<K, V> map;
-
-        {
-            map = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ForEachEntryTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Void> {
-
-        ForEachEntryTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.Consumer<? super java.util.Map.Entry<K, V>> action) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.function.Consumer<? super java.util.Map.Entry<K, V>> action;
-
-        {
-            action = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ForEachKeyTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Void> {
-
-        ForEachKeyTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.Consumer<? super K> action) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.function.Consumer<? super K> action;
-
-        {
-            action = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ForEachMappingTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Void> {
-
-        ForEachMappingTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.BiConsumer<? super K, ? super V> action) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.function.BiConsumer<? super K, ? super V> action;
-
-        {
-            action = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ForEachTransformedEntryTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Void> {
-
-        ForEachTransformedEntryTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U> transformer,
-                java.util.function.Consumer<? super U> action) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.function.Consumer<? super U> action;
-
-        {
-            action = null;
-        }
-
-        final java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ForEachTransformedKeyTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Void> {
-
-        ForEachTransformedKeyTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.Function<? super K, ? extends U> transformer,
-                java.util.function.Consumer<? super U> action) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.function.Consumer<? super U> action;
-
-        {
-            action = null;
-        }
-
-        final java.util.function.Function<? super K, ? extends U> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ForEachTransformedMappingTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Void> {
-
-        ForEachTransformedMappingTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.BiFunction<? super K, ? super V, ? extends U> transformer,
-                java.util.function.Consumer<? super U> action) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.function.Consumer<? super U> action;
-
-        {
-            action = null;
-        }
-
-        final java.util.function.BiFunction<? super K, ? super V, ? extends U> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ForEachTransformedValueTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Void> {
-
-        ForEachTransformedValueTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.Function<? super V, ? extends U> transformer,
-                java.util.function.Consumer<? super U> action) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.function.Consumer<? super U> action;
-
-        {
-            action = null;
-        }
-
-        final java.util.function.Function<? super V, ? extends U> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ForEachValueTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Void> {
-
-        ForEachValueTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.Consumer<? super V> action) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.function.Consumer<? super V> action;
-
-        {
-            action = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ForwardingNode<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.Node<K, V> {
-
-        ForwardingNode(java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab) {
-            super(0, null, null, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V> find(int h, java.lang.Object k) {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.concurrent.ConcurrentHashMap.Node<K, V>[] nextTable;
-
-        {
-            nextTable = new java.util.concurrent.ConcurrentHashMap.Node[0];
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class KeyIterator<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BaseIterator<K, V>
-            implements java.util.Iterator<K>, java.util.Enumeration<K> {
-
-        KeyIterator(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-                int index,
-                int size,
-                int limit,
-                java.util.concurrent.ConcurrentHashMap<K, V> map) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public K next() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public K nextElement() {
-            throw new RuntimeException("Stub!");
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    public static class KeySetView<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.CollectionView<K, V, K>
-            implements java.util.Set<K>, java.io.Serializable {
-
-        KeySetView(java.util.concurrent.ConcurrentHashMap<K, V> map, V value) {
-            super(null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public V getMappedValue() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean contains(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean remove(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.Iterator<K> iterator() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean add(K e) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean addAll(java.util.Collection<? extends K> c) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public int hashCode() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean equals(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.Spliterator<K> spliterator() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void forEach(java.util.function.Consumer<? super K> action) {
-            throw new RuntimeException("Stub!");
-        }
-
-        private static final long serialVersionUID = 7249069246763182397L; // 0x6499de129d87293dL
-
-        private final V value;
-
-        {
-            value = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class KeySpliterator<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.Traverser<K, V>
-            implements java.util.Spliterator<K> {
-
-        KeySpliterator(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-                int size,
-                int index,
-                int limit,
-                long est) {
-            super(null, 0, 0, 0);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.concurrent.ConcurrentHashMap.KeySpliterator<K, V> trySplit() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void forEachRemaining(java.util.function.Consumer<? super K> action) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean tryAdvance(java.util.function.Consumer<? super K> action) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public long estimateSize() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public int characteristics() {
-            throw new RuntimeException("Stub!");
-        }
-
-        long est;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapEntry<K, V> implements java.util.Map.Entry<K, V> {
-
-        MapEntry(K key, V val, java.util.concurrent.ConcurrentHashMap<K, V> map) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public K getKey() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public V getValue() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public int hashCode() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.String toString() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean equals(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public V setValue(V value) {
-            throw new RuntimeException("Stub!");
-        }
-
-        final K key;
-
-        {
-            key = null;
-        }
-
-        final java.util.concurrent.ConcurrentHashMap<K, V> map;
-
-        {
-            map = null;
-        }
-
-        V val;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceEntriesTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, U> {
-
-        MapReduceEntriesTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceEntriesTask<K, V, U> nextRight,
-                java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U> transformer,
-                java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public U getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceEntriesTask<K, V, U> nextRight;
-
-        final java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer;
-
-        {
-            reducer = null;
-        }
-
-        U result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceEntriesTask<K, V, U> rights;
-
-        final java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceEntriesToDoubleTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Double> {
-
-        MapReduceEntriesToDoubleTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceEntriesToDoubleTask<K, V> nextRight,
-                java.util.function.ToDoubleFunction<java.util.Map.Entry<K, V>> transformer,
-                double basis,
-                java.util.function.DoubleBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Double getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final double basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceEntriesToDoubleTask<K, V> nextRight;
-
-        final java.util.function.DoubleBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        double result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceEntriesToDoubleTask<K, V> rights;
-
-        final java.util.function.ToDoubleFunction<java.util.Map.Entry<K, V>> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceEntriesToIntTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Integer> {
-
-        MapReduceEntriesToIntTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceEntriesToIntTask<K, V> nextRight,
-                java.util.function.ToIntFunction<java.util.Map.Entry<K, V>> transformer,
-                int basis,
-                java.util.function.IntBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Integer getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final int basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceEntriesToIntTask<K, V> nextRight;
-
-        final java.util.function.IntBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        int result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceEntriesToIntTask<K, V> rights;
-
-        final java.util.function.ToIntFunction<java.util.Map.Entry<K, V>> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceEntriesToLongTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Long> {
-
-        MapReduceEntriesToLongTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceEntriesToLongTask<K, V> nextRight,
-                java.util.function.ToLongFunction<java.util.Map.Entry<K, V>> transformer,
-                long basis,
-                java.util.function.LongBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Long getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final long basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceEntriesToLongTask<K, V> nextRight;
-
-        final java.util.function.LongBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        long result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceEntriesToLongTask<K, V> rights;
-
-        final java.util.function.ToLongFunction<java.util.Map.Entry<K, V>> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceKeysTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, U> {
-
-        MapReduceKeysTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceKeysTask<K, V, U> nextRight,
-                java.util.function.Function<? super K, ? extends U> transformer,
-                java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public U getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceKeysTask<K, V, U> nextRight;
-
-        final java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer;
-
-        {
-            reducer = null;
-        }
-
-        U result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceKeysTask<K, V, U> rights;
-
-        final java.util.function.Function<? super K, ? extends U> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceKeysToDoubleTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Double> {
-
-        MapReduceKeysToDoubleTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceKeysToDoubleTask<K, V> nextRight,
-                java.util.function.ToDoubleFunction<? super K> transformer,
-                double basis,
-                java.util.function.DoubleBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Double getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final double basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceKeysToDoubleTask<K, V> nextRight;
-
-        final java.util.function.DoubleBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        double result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceKeysToDoubleTask<K, V> rights;
-
-        final java.util.function.ToDoubleFunction<? super K> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceKeysToIntTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Integer> {
-
-        MapReduceKeysToIntTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceKeysToIntTask<K, V> nextRight,
-                java.util.function.ToIntFunction<? super K> transformer,
-                int basis,
-                java.util.function.IntBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Integer getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final int basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceKeysToIntTask<K, V> nextRight;
-
-        final java.util.function.IntBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        int result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceKeysToIntTask<K, V> rights;
-
-        final java.util.function.ToIntFunction<? super K> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceKeysToLongTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Long> {
-
-        MapReduceKeysToLongTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceKeysToLongTask<K, V> nextRight,
-                java.util.function.ToLongFunction<? super K> transformer,
-                long basis,
-                java.util.function.LongBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Long getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final long basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceKeysToLongTask<K, V> nextRight;
-
-        final java.util.function.LongBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        long result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceKeysToLongTask<K, V> rights;
-
-        final java.util.function.ToLongFunction<? super K> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceMappingsTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, U> {
-
-        MapReduceMappingsTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceMappingsTask<K, V, U> nextRight,
-                java.util.function.BiFunction<? super K, ? super V, ? extends U> transformer,
-                java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public U getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceMappingsTask<K, V, U> nextRight;
-
-        final java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer;
-
-        {
-            reducer = null;
-        }
-
-        U result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceMappingsTask<K, V, U> rights;
-
-        final java.util.function.BiFunction<? super K, ? super V, ? extends U> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceMappingsToDoubleTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Double> {
-
-        MapReduceMappingsToDoubleTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceMappingsToDoubleTask<K, V>
-                        nextRight,
-                java.util.function.ToDoubleBiFunction<? super K, ? super V> transformer,
-                double basis,
-                java.util.function.DoubleBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Double getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final double basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceMappingsToDoubleTask<K, V> nextRight;
-
-        final java.util.function.DoubleBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        double result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceMappingsToDoubleTask<K, V> rights;
-
-        final java.util.function.ToDoubleBiFunction<? super K, ? super V> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceMappingsToIntTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Integer> {
-
-        MapReduceMappingsToIntTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceMappingsToIntTask<K, V> nextRight,
-                java.util.function.ToIntBiFunction<? super K, ? super V> transformer,
-                int basis,
-                java.util.function.IntBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Integer getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final int basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceMappingsToIntTask<K, V> nextRight;
-
-        final java.util.function.IntBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        int result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceMappingsToIntTask<K, V> rights;
-
-        final java.util.function.ToIntBiFunction<? super K, ? super V> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceMappingsToLongTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Long> {
-
-        MapReduceMappingsToLongTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceMappingsToLongTask<K, V> nextRight,
-                java.util.function.ToLongBiFunction<? super K, ? super V> transformer,
-                long basis,
-                java.util.function.LongBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Long getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final long basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceMappingsToLongTask<K, V> nextRight;
-
-        final java.util.function.LongBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        long result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceMappingsToLongTask<K, V> rights;
-
-        final java.util.function.ToLongBiFunction<? super K, ? super V> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceValuesTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, U> {
-
-        MapReduceValuesTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceValuesTask<K, V, U> nextRight,
-                java.util.function.Function<? super V, ? extends U> transformer,
-                java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public U getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceValuesTask<K, V, U> nextRight;
-
-        final java.util.function.BiFunction<? super U, ? super U, ? extends U> reducer;
-
-        {
-            reducer = null;
-        }
-
-        U result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceValuesTask<K, V, U> rights;
-
-        final java.util.function.Function<? super V, ? extends U> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceValuesToDoubleTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Double> {
-
-        MapReduceValuesToDoubleTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceValuesToDoubleTask<K, V> nextRight,
-                java.util.function.ToDoubleFunction<? super V> transformer,
-                double basis,
-                java.util.function.DoubleBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Double getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final double basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceValuesToDoubleTask<K, V> nextRight;
-
-        final java.util.function.DoubleBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        double result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceValuesToDoubleTask<K, V> rights;
-
-        final java.util.function.ToDoubleFunction<? super V> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceValuesToIntTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Integer> {
-
-        MapReduceValuesToIntTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceValuesToIntTask<K, V> nextRight,
-                java.util.function.ToIntFunction<? super V> transformer,
-                int basis,
-                java.util.function.IntBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Integer getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final int basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceValuesToIntTask<K, V> nextRight;
-
-        final java.util.function.IntBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        int result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceValuesToIntTask<K, V> rights;
-
-        final java.util.function.ToIntFunction<? super V> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class MapReduceValuesToLongTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, java.lang.Long> {
-
-        MapReduceValuesToLongTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.MapReduceValuesToLongTask<K, V> nextRight,
-                java.util.function.ToLongFunction<? super V> transformer,
-                long basis,
-                java.util.function.LongBinaryOperator reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.lang.Long getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final long basis;
-
-        {
-            basis = 0;
-        }
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceValuesToLongTask<K, V> nextRight;
-
-        final java.util.function.LongBinaryOperator reducer;
-
-        {
-            reducer = null;
-        }
-
-        long result;
-
-        java.util.concurrent.ConcurrentHashMap.MapReduceValuesToLongTask<K, V> rights;
-
-        final java.util.function.ToLongFunction<? super V> transformer;
-
-        {
-            transformer = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static class Node<K, V> implements java.util.Map.Entry<K, V> {
-
-        Node(int hash, K key, V val, java.util.concurrent.ConcurrentHashMap.Node<K, V> next) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final K getKey() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final V getValue() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final int hashCode() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final java.lang.String toString() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final V setValue(V value) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public final boolean equals(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V> find(int h, java.lang.Object k) {
-            throw new RuntimeException("Stub!");
-        }
-
-        final int hash;
-
-        {
-            hash = 0;
-        }
-
-        final K key;
-
-        {
-            key = null;
-        }
-
-        volatile java.util.concurrent.ConcurrentHashMap.Node<K, V> next;
-
-        volatile V val;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ReduceEntriesTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<
-                    K, V, java.util.Map.Entry<K, V>> {
-
-        ReduceEntriesTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.ReduceEntriesTask<K, V> nextRight,
-                java.util.function.BiFunction<
-                                java.util.Map.Entry<K, V>,
-                                java.util.Map.Entry<K, V>,
-                                ? extends java.util.Map.Entry<K, V>>
-                        reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.Map.Entry<K, V> getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.ReduceEntriesTask<K, V> nextRight;
-
-        final java.util.function.BiFunction<
-                        java.util.Map.Entry<K, V>,
-                        java.util.Map.Entry<K, V>,
-                        ? extends java.util.Map.Entry<K, V>>
-                reducer;
-
-        {
-            reducer = null;
-        }
-
-        java.util.Map.Entry<K, V> result;
-
-        java.util.concurrent.ConcurrentHashMap.ReduceEntriesTask<K, V> rights;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ReduceKeysTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, K> {
-
-        ReduceKeysTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.ReduceKeysTask<K, V> nextRight,
-                java.util.function.BiFunction<? super K, ? super K, ? extends K> reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public K getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.ReduceKeysTask<K, V> nextRight;
-
-        final java.util.function.BiFunction<? super K, ? super K, ? extends K> reducer;
-
-        {
-            reducer = null;
-        }
-
-        K result;
-
-        java.util.concurrent.ConcurrentHashMap.ReduceKeysTask<K, V> rights;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ReduceValuesTask<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, V> {
-
-        ReduceValuesTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.concurrent.ConcurrentHashMap.ReduceValuesTask<K, V> nextRight,
-                java.util.function.BiFunction<? super V, ? super V, ? extends V> reducer) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public V getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.ReduceValuesTask<K, V> nextRight;
-
-        final java.util.function.BiFunction<? super V, ? super V, ? extends V> reducer;
-
-        {
-            reducer = null;
-        }
-
-        V result;
-
-        java.util.concurrent.ConcurrentHashMap.ReduceValuesTask<K, V> rights;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ReservationNode<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.Node<K, V> {
-
-        ReservationNode() {
-            super(0, null, null, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V> find(int h, java.lang.Object k) {
-            throw new RuntimeException("Stub!");
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class SearchEntriesTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, U> {
-
-        SearchEntriesTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U> searchFunction,
-                java.util.concurrent.atomic.AtomicReference<U> result) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public U getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.concurrent.atomic.AtomicReference<U> result;
-
-        {
-            result = null;
-        }
-
-        final java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U> searchFunction;
-
-        {
-            searchFunction = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class SearchKeysTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, U> {
-
-        SearchKeysTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.Function<? super K, ? extends U> searchFunction,
-                java.util.concurrent.atomic.AtomicReference<U> result) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public U getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.concurrent.atomic.AtomicReference<U> result;
-
-        {
-            result = null;
-        }
-
-        final java.util.function.Function<? super K, ? extends U> searchFunction;
-
-        {
-            searchFunction = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class SearchMappingsTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, U> {
-
-        SearchMappingsTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.BiFunction<? super K, ? super V, ? extends U> searchFunction,
-                java.util.concurrent.atomic.AtomicReference<U> result) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public U getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.concurrent.atomic.AtomicReference<U> result;
-
-        {
-            result = null;
-        }
-
-        final java.util.function.BiFunction<? super K, ? super V, ? extends U> searchFunction;
-
-        {
-            searchFunction = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class SearchValuesTask<K, V, U>
-            extends java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, U> {
-
-        SearchValuesTask(
-                java.util.concurrent.ConcurrentHashMap.BulkTask<K, V, ?> p,
-                int b,
-                int i,
-                int f,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t,
-                java.util.function.Function<? super V, ? extends U> searchFunction,
-                java.util.concurrent.atomic.AtomicReference<U> result) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public U getRawResult() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void compute() {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.concurrent.atomic.AtomicReference<U> result;
-
-        {
-            result = null;
-        }
-
-        final java.util.function.Function<? super V, ? extends U> searchFunction;
-
-        {
-            searchFunction = null;
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static class Segment<K, V> extends java.util.concurrent.locks.ReentrantLock
-            implements java.io.Serializable {
-
-        Segment(float lf) {
-            throw new RuntimeException("Stub!");
-        }
-
-        final float loadFactor;
-
-        {
-            loadFactor = 0;
-        }
-
-        private static final long serialVersionUID = 2249069246763182397L; // 0x1f364c905893293dL
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class TableStack<K, V> {
-
-        TableStack() {
-            throw new RuntimeException("Stub!");
-        }
-
-        int index;
-
-        int length;
-
-        java.util.concurrent.ConcurrentHashMap.TableStack<K, V> next;
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static class Traverser<K, V> {
-
-        Traverser(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-                int size,
-                int index,
-                int limit) {
-            throw new RuntimeException("Stub!");
-        }
-
-        final java.util.concurrent.ConcurrentHashMap.Node<K, V> advance() {
-            throw new RuntimeException("Stub!");
-        }
-
-        private void pushState(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] t, int i, int n) {
-            throw new RuntimeException("Stub!");
-        }
-
-        private void recoverState(int n) {
-            throw new RuntimeException("Stub!");
-        }
-
-        int baseIndex;
-
-        int baseLimit;
-
-        final int baseSize;
-
-        {
-            baseSize = 0;
-        }
-
-        int index;
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V> next;
-
-        java.util.concurrent.ConcurrentHashMap.TableStack<K, V> spare;
-
-        java.util.concurrent.ConcurrentHashMap.TableStack<K, V> stack;
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class TreeBin<K, V> extends java.util.concurrent.ConcurrentHashMap.Node<K, V> {
-
-        TreeBin(java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> b) {
-            super(0, null, null, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        static int tieBreakOrder(java.lang.Object a, java.lang.Object b) {
-            throw new RuntimeException("Stub!");
-        }
-
-        private void lockRoot() {
-            throw new RuntimeException("Stub!");
-        }
-
-        private void unlockRoot() {
-            throw new RuntimeException("Stub!");
-        }
-
-        private void contendedLock() {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V> find(int h, java.lang.Object k) {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> putTreeVal(int h, K k, V v) {
-            throw new RuntimeException("Stub!");
-        }
-
-        boolean removeTreeNode(java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> p) {
-            throw new RuntimeException("Stub!");
-        }
-
-        static <K, V> java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> rotateLeft(
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> root,
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> p) {
-            throw new RuntimeException("Stub!");
-        }
-
-        static <K, V> java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> rotateRight(
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> root,
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> p) {
-            throw new RuntimeException("Stub!");
-        }
-
-        static <K, V> java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> balanceInsertion(
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> root,
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> x) {
-            throw new RuntimeException("Stub!");
-        }
-
-        static <K, V> java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> balanceDeletion(
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> root,
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> x) {
-            throw new RuntimeException("Stub!");
-        }
-
-        static <K, V> boolean checkInvariants(
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> t) {
-            throw new RuntimeException("Stub!");
-        }
-
-        private static final long LOCKSTATE;
-
-        static {
-            LOCKSTATE = 0;
-        }
-
-        static final int READER = 4; // 0x4
-
-        private static final sun.misc.Unsafe U;
-
-        static {
-            U = null;
-        }
-
-        static final int WAITER = 2; // 0x2
-
-        static final int WRITER = 1; // 0x1
-
-        volatile java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> first;
-
-        volatile int lockState;
-
-        java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> root;
-
-        volatile java.lang.Thread waiter;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class TreeNode<K, V> extends java.util.concurrent.ConcurrentHashMap.Node<K, V> {
-
-        TreeNode(
-                int hash,
-                K key,
-                V val,
-                java.util.concurrent.ConcurrentHashMap.Node<K, V> next,
-                java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> parent) {
-            super(0, null, null, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.Node<K, V> find(int h, java.lang.Object k) {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> findTreeNode(
-                int h, java.lang.Object k, java.lang.Class<?> kc) {
-            throw new RuntimeException("Stub!");
-        }
-
-        java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> left;
-
-        java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> parent;
-
-        java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> prev;
-
-        boolean red;
-
-        java.util.concurrent.ConcurrentHashMap.TreeNode<K, V> right;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ValueIterator<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.BaseIterator<K, V>
-            implements java.util.Iterator<V>, java.util.Enumeration<V> {
-
-        ValueIterator(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-                int index,
-                int size,
-                int limit,
-                java.util.concurrent.ConcurrentHashMap<K, V> map) {
-            super(null, 0, 0, 0, null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public V next() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public V nextElement() {
-            throw new RuntimeException("Stub!");
-        }
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ValueSpliterator<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.Traverser<K, V>
-            implements java.util.Spliterator<V> {
-
-        ValueSpliterator(
-                java.util.concurrent.ConcurrentHashMap.Node<K, V>[] tab,
-                int size,
-                int index,
-                int limit,
-                long est) {
-            super(null, 0, 0, 0);
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.concurrent.ConcurrentHashMap.ValueSpliterator<K, V> trySplit() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void forEachRemaining(java.util.function.Consumer<? super V> action) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean tryAdvance(java.util.function.Consumer<? super V> action) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public long estimateSize() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public int characteristics() {
-            throw new RuntimeException("Stub!");
-        }
-
-        long est;
-    }
-
-    @SuppressWarnings({"unchecked", "deprecation", "all"})
-    static final class ValuesView<K, V>
-            extends java.util.concurrent.ConcurrentHashMap.CollectionView<K, V, V>
-            implements java.util.Collection<V>, java.io.Serializable {
-
-        ValuesView(java.util.concurrent.ConcurrentHashMap<K, V> map) {
-            super(null);
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean contains(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean remove(java.lang.Object o) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.Iterator<V> iterator() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean add(V e) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean addAll(java.util.Collection<? extends V> c) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public boolean removeIf(java.util.function.Predicate<? super V> filter) {
-            throw new RuntimeException("Stub!");
-        }
-
-        public java.util.Spliterator<V> spliterator() {
-            throw new RuntimeException("Stub!");
-        }
-
-        public void forEach(java.util.function.Consumer<? super V> action) {
-            throw new RuntimeException("Stub!");
-        }
-
-        private static final long serialVersionUID = 2249069246763182397L; // 0x1f364c905893293dL
-    }
-}
diff --git a/ojluni/annotations/hiddenapi/sun/misc/Unsafe.java b/ojluni/annotations/hiddenapi/sun/misc/Unsafe.java
index 23ad7c6..54308e4 100644
--- a/ojluni/annotations/hiddenapi/sun/misc/Unsafe.java
+++ b/ojluni/annotations/hiddenapi/sun/misc/Unsafe.java
@@ -26,6 +26,7 @@
 package sun.misc;
 
 import dalvik.annotation.compat.UnsupportedAppUsage;
+import dalvik.system.VersionCodes;
 
 @SuppressWarnings({"unchecked", "deprecation", "all"})
 public final class Unsafe {
@@ -54,10 +55,10 @@
         throw new RuntimeException("Stub!");
     }
 
-    @UnsupportedAppUsage
+    @UnsupportedAppUsage(maxTargetSdk = VersionCodes.O)
     private static native int getArrayBaseOffsetForComponentType(java.lang.Class component_class);
 
-    @UnsupportedAppUsage
+    @UnsupportedAppUsage(maxTargetSdk = VersionCodes.O)
     private static native int getArrayIndexScaleForComponentType(java.lang.Class component_class);
 
     @UnsupportedAppUsage
diff --git a/ojluni/src/main/java/java/lang/Thread.java b/ojluni/src/main/java/java/lang/Thread.java
index 591d14a..0ca9074 100644
--- a/ojluni/src/main/java/java/lang/Thread.java
+++ b/ojluni/src/main/java/java/lang/Thread.java
@@ -236,6 +236,11 @@
     /* For generating thread ID */
     private static long threadSeqNumber;
 
+
+    // Android-added: The concept of "system-daemon" threads. See java.lang.Daemons.
+    /** True if this thread is managed by {@link Daemons}. */
+    private boolean systemDaemon = false;
+
     /* Java thread status for tools,
      * initialized to indicate thread 'not yet started'
      */
@@ -2182,6 +2187,43 @@
         getUncaughtExceptionHandler().uncaughtException(this, e);
     }
 
+    // BEGIN Android-added: The concept of "system-daemon" threads. See java.lang.Daemons.
+    /**
+     * Marks this thread as either a special runtime-managed ("system daemon")
+     * thread or a normal (i.e. app code created) daemon thread.)
+     *
+     * <p>System daemon threads get special handling when starting up in some
+     * cases.
+     *
+     * <p>This method must be invoked before the thread is started.
+     *
+     * <p>This method must only be invoked on Thread instances that have already
+     * had {@code setDaemon(true)} called on them.
+     *
+     * <p>Package-private since only {@link java.lang.Daemons} needs to call
+     * this.
+     *
+     * @param  on if {@code true}, marks this thread as a system daemon thread
+     *
+     * @throws  IllegalThreadStateException
+     *          if this thread is {@linkplain #isAlive alive} or not a
+     *          {@linkplain #isDaemon daemon}
+     *
+     * @throws  SecurityException
+     *          if {@link #checkAccess} determines that the current
+     *          thread cannot modify this thread
+     *
+     * @hide For use by Daemons.java only.
+     */
+    final void setSystemDaemon(boolean on) {
+        checkAccess();
+        if (isAlive() || !isDaemon()) {
+            throw new IllegalThreadStateException();
+        }
+        systemDaemon = on;
+    }
+    // END Android-added: The concept of "system-daemon" threads. See java.lang.Daemons.
+
     /**
      * Removes from the specified map any keys that have been enqueued
      * on the specified reference queue.
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandleInfo.java b/ojluni/src/main/java/java/lang/invoke/MethodHandleInfo.java
index 2746d4a..356768d 100644
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandleInfo.java
+++ b/ojluni/src/main/java/java/lang/invoke/MethodHandleInfo.java
@@ -283,19 +283,37 @@
     }
 
     // BEGIN Android-added: refKind...() methods needed for API compatibility with 26.
-    // These methods were accidentally added into the public API in API level 26 and so cannot be
-    // removed.
+    // These methods were accidentally added into the public API in API level. They are now
+    // deprecated as a prelude to being removed from the public API.
+    /**
+     * @deprecated This internal method was accidentally added to API 26 and must not be used. No
+     *             replacement is available but it is possible to replicate using information from
+     *             the <a href="MethodHandleInfo.html#refkinds">table above</a>, e.g.
+     *             {@code refKind >= 1 && refKind <= 9}. There are no guarantees that this logic
+     *             will work if future versions extend the table.
+     */
+    @Deprecated
     static boolean refKindIsValid(int refKind) {
         return MethodHandleNatives.refKindIsValid(refKind);
     }
 
-    // Android-changed: Inlined from MethodHandleNatives.
+    /**
+     * @deprecated This internal method was accidentally added to API 26 and must not be used. No
+     *             replacement is available but it is possible to replicate using information from
+     *             the <a href="MethodHandleInfo.html#refkinds">table above</a>, e.g.
+     *             {@code refKind >= 1 && refKind <= 4}.  There are no guarantees that this logic
+     *             will work if future versions extend the table.
+     */
+    @Deprecated
     static boolean refKindIsField(int refKind) {
         return MethodHandleNatives.refKindIsField((byte) refKind);
     }
 
-    // Android-changed: Inlined from MethodHandleNatives and replaced 'byte' argument with
-    // 'int'.
+    /**
+     * @deprecated This internal method was accidentally added to API 26 and must not be used. Use
+     *             {@link MethodHandleInfo#referenceKindToString(int)} instead.
+     */
+    @Deprecated
     static String refKindName(int refKind) {
         return MethodHandleNatives.refKindName((byte) refKind);
     }
diff --git a/ojluni/src/main/java/java/net/InetAddress.java b/ojluni/src/main/java/java/net/InetAddress.java
index 9685ffa..e4f8660 100644
--- a/ojluni/src/main/java/java/net/InetAddress.java
+++ b/ojluni/src/main/java/java/net/InetAddress.java
@@ -1607,21 +1607,26 @@
     // Particularly those required to deal with scope ids.
     /**
      * Returns true if the string is a valid numeric IPv4 or IPv6 address (such as "192.168.0.1").
-     * This copes with all forms of address that Java supports, detailed in the {@link InetAddress}
-     * class documentation.
+     *
+     * <p>This copes with all forms of address that Java supports, detailed in the
+     * {@link InetAddress} class documentation. An empty string is not treated as numeric.
      *
      * @hide used by frameworks/base to ensure that a getAllByName won't cause a DNS lookup.
      * @deprecated Use {@link InetAddressUtils#isNumericAddress(String)} instead, if possible.
+     * @throws NullPointerException if the {@code address} is {@code null}.
      */
     @Deprecated
     public static boolean isNumeric(String address) {
-        return _parseNumericAddress(address) != null;
+        return InetAddressUtils.parseNumericAddressNoThrowStripOptionalBrackets(address) != null;
     }
 
     /**
      * Returns an InetAddress corresponding to the given numeric address (such
      * as {@code "192.168.0.1"} or {@code "2001:4860:800d::68"}).
-     * This method will never do a DNS lookup. Non-numeric addresses are errors.
+     *
+     * <p>This method will never do a DNS lookup. Non-numeric addresses are errors. Passing either
+     * an empty string or a {@code null} as the {@code numericAddress} will return the
+     * {@link Inet6Address#LOOPBACK} address.
      *
      * @hide used by frameworks/base's NetworkUtils.numericToInetAddress
      * @throws IllegalArgumentException if {@code numericAddress} is not a numeric address
@@ -1629,20 +1634,17 @@
      */
     @Deprecated
     public static InetAddress parseNumericAddress(String numericAddress) {
-        InetAddress result = _parseNumericAddress(numericAddress);
+        if (numericAddress == null || numericAddress.isEmpty()) {
+            return Inet6Address.LOOPBACK;
+        }
+        InetAddress result = InetAddressUtils
+                .parseNumericAddressNoThrowStripOptionalBrackets(numericAddress);
         if (result == null) {
             throw new IllegalArgumentException("Not a numeric address: " + numericAddress);
         }
         return result;
     }
 
-    private static InetAddress _parseNumericAddress(String numericAddress) {
-        if (numericAddress == null || numericAddress.isEmpty()) {
-            return Inet6Address.LOOPBACK;
-        }
-        return InetAddressUtils.parseNumericAddressNoThrowStripOptionalBrackets(numericAddress);
-    }
-
     /**
      * Removes all entries from the VM's DNS cache. This does not affect the C library's DNS
      * cache, nor any caching DNS servers between you and the canonical server.
diff --git a/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArrayList.java b/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArrayList.java
index d3d681f..ebcbbef 100644
--- a/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArrayList.java
+++ b/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArrayList.java
@@ -51,11 +51,7 @@
 import java.util.function.Predicate;
 import java.util.function.UnaryOperator;
 
-// BEGIN android-note
-// removed link to collections framework docs
-// fixed framework docs link to "Collection#optional"
-// END android-note
-
+// Android-changed: Removed javadoc link to collections framework docs
 /**
  * A thread-safe variant of {@link java.util.ArrayList} in which all mutative
  * operations ({@code add}, {@code set}, and so on) are implemented by
@@ -100,22 +96,21 @@
     final transient Object lock = new Object();
 
     /** The array, accessed only via getArray/setArray. */
-    // Android-changed: renamed array -> elements for backwards compatibility b/33916927
-    private transient volatile Object[] elements;
+    private transient volatile Object[] array;
 
     /**
      * Gets the array.  Non-private so as to also be accessible
      * from CopyOnWriteArraySet class.
      */
     final Object[] getArray() {
-        return elements;
+        return array;
     }
 
     /**
      * Sets the array.
      */
     final void setArray(Object[] a) {
-        elements = a;
+        array = a;
     }
 
     /**
diff --git a/ojluni/src/main/native/linux_close.cpp b/ojluni/src/main/native/linux_close.cpp
index 5b48292..baef240 100644
--- a/ojluni/src/main/native/linux_close.cpp
+++ b/ojluni/src/main/native/linux_close.cpp
@@ -47,8 +47,7 @@
 #include <poll.h>
 #endif
 
-
-#include <nativehelper/AsynchronousCloseMonitor.h>
+#include <AsynchronousCloseMonitor.h>
 
 extern "C" {