am 49c0bf1f: Suppress okhttp\'s ResponseCacheAdapterTest.

* commit '49c0bf1f52cb73f458fdc5122bea561ec90a4788':
  Suppress okhttp's ResponseCacheAdapterTest.
diff --git a/benchmarks/src/benchmarks/regression/R.java b/benchmarks/src/benchmarks/regression/R.java
new file mode 100644
index 0000000..b5ae3ec
--- /dev/null
+++ b/benchmarks/src/benchmarks/regression/R.java
@@ -0,0 +1,2540 @@
+/*
+ * Copyright (C) 2014 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 benchmarks.regression;
+
+/**
+ * This file is a subset of the frameworks' R.java (resource definition) file
+ * with references to android specific annotations stripped out.
+ */
+public final class R {
+    private R() {}
+
+    public final int mabsListViewStyle = 0;
+    public final int maccessibilityEventTypes = 0;
+    public final int maccessibilityFeedbackType = 0;
+    public final int maccessibilityFlags = 0;
+    public final int maccessibilityLiveRegion = 0;
+    public final int maccessibilityTraversalAfter = 0;
+    public final int maccessibilityTraversalBefore = 0;
+    public final int maccountPreferences = 0;
+    public final int maccountType = 0;
+    public final int maction = 0;
+    public final int mactionBarDivider = 0;
+    public final int mactionBarItemBackground = 0;
+    public final int mactionBarPopupTheme = 0;
+    public final int mactionBarSize = 0;
+    public final int mactionBarSplitStyle = 0;
+    public final int mactionBarStyle = 0;
+    public final int mactionBarTabBarStyle = 0;
+    public final int mactionBarTabStyle = 0;
+    public final int mactionBarTabTextStyle = 0;
+    public final int mactionBarTheme = 0;
+    public final int mactionBarWidgetTheme = 0;
+    public final int mactionButtonStyle = 0;
+    public final int mactionDropDownStyle = 0;
+    public final int mactionLayout = 0;
+    public final int mactionMenuTextAppearance = 0;
+    public final int mactionMenuTextColor = 0;
+    public final int mactionModeBackground = 0;
+    public final int mactionModeCloseButtonStyle = 0;
+    public final int mactionModeCloseDrawable = 0;
+    public final int mactionModeCopyDrawable = 0;
+    public final int mactionModeCutDrawable = 0;
+    public final int mactionModeFindDrawable = 0;
+    public final int mactionModePasteDrawable = 0;
+    public final int mactionModeSelectAllDrawable = 0;
+    public final int mactionModeShareDrawable = 0;
+    public final int mactionModeSplitBackground = 0;
+    public final int mactionModeStyle = 0;
+    public final int mactionModeWebSearchDrawable = 0;
+    public final int mactionOverflowButtonStyle = 0;
+    public final int mactionOverflowMenuStyle = 0;
+    public final int mactionProviderClass = 0;
+    public final int mactionViewClass = 0;
+    public final int mactivatedBackgroundIndicator = 0;
+    public final int mactivityCloseEnterAnimation = 0;
+    public final int mactivityCloseExitAnimation = 0;
+    public final int mactivityOpenEnterAnimation = 0;
+    public final int mactivityOpenExitAnimation = 0;
+    public final int maddPrintersActivity = 0;
+    public final int maddStatesFromChildren = 0;
+    public final int madjustViewBounds = 0;
+    public final int madvancedPrintOptionsActivity = 0;
+    public final int malertDialogIcon = 0;
+    public final int malertDialogStyle = 0;
+    public final int malertDialogTheme = 0;
+    public final int malignmentMode = 0;
+    public final int mallContactsName = 0;
+    public final int mallowBackup = 0;
+    public final int mallowClearUserData = 0;
+    public final int mallowEmbedded = 0;
+    public final int mallowParallelSyncs = 0;
+    public final int mallowSingleTap = 0;
+    public final int mallowTaskReparenting = 0;
+    public final int malpha = 0;
+    public final int malphabeticShortcut = 0;
+    public final int malwaysDrawnWithCache = 0;
+    public final int malwaysRetainTaskState = 0;
+    public final int mamPmBackgroundColor = 0;
+    public final int mamPmTextColor = 0;
+    public final int mambientShadowAlpha = 0;
+    public final int mangle = 0;
+    public final int manimateFirstView = 0;
+    public final int manimateLayoutChanges = 0;
+    public final int manimateOnClick = 0;
+    public final int manimation = 0;
+    public final int manimationCache = 0;
+    public final int manimationDuration = 0;
+    public final int manimationOrder = 0;
+    public final int manimationResolution = 0;
+    public final int mantialias = 0;
+    public final int manyDensity = 0;
+    public final int mapduServiceBanner = 0;
+    public final int mapiKey = 0;
+    public final int mauthor = 0;
+    public final int mauthorities = 0;
+    public final int mautoAdvanceViewId = 0;
+    public final int mautoCompleteTextViewStyle = 0;
+    public final int mautoLink = 0;
+    public final int mautoMirrored = 0;
+    public final int mautoRemoveFromRecents = 0;
+    public final int mautoStart = 0;
+    public final int mautoText = 0;
+    public final int mautoUrlDetect = 0;
+    public final int mbackground = 0;
+    public final int mbackgroundDimAmount = 0;
+    public final int mbackgroundDimEnabled = 0;
+    public final int mbackgroundSplit = 0;
+    public final int mbackgroundStacked = 0;
+    public final int mbackgroundTint = 0;
+    public final int mbackgroundTintMode = 0;
+    public final int mbackupAgent = 0;
+    public final int mbanner = 0;
+    public final int mbaseline = 0;
+    public final int mbaselineAlignBottom = 0;
+    public final int mbaselineAligned = 0;
+    public final int mbaselineAlignedChildIndex = 0;
+    public final int mborderlessButtonStyle = 0;
+    public final int mbottom = 0;
+    public final int mbottomBright = 0;
+    public final int mbottomDark = 0;
+    public final int mbottomLeftRadius = 0;
+    public final int mbottomMedium = 0;
+    public final int mbottomOffset = 0;
+    public final int mbottomRightRadius = 0;
+    public final int mbreadCrumbShortTitle = 0;
+    public final int mbreadCrumbTitle = 0;
+    public final int mbufferType = 0;
+    public final int mbutton = 0;
+    public final int mbuttonBarButtonStyle = 0;
+    public final int mbuttonBarNegativeButtonStyle = 0;
+    public final int mbuttonBarNeutralButtonStyle = 0;
+    public final int mbuttonBarPositiveButtonStyle = 0;
+    public final int mbuttonBarStyle = 0;
+    public final int mbuttonStyle = 0;
+    public final int mbuttonStyleInset = 0;
+    public final int mbuttonStyleSmall = 0;
+    public final int mbuttonStyleToggle = 0;
+    public final int mbuttonTint = 0;
+    public final int mbuttonTintMode = 0;
+    public final int mcacheColorHint = 0;
+    public final int mcalendarTextColor = 0;
+    public final int mcalendarViewShown = 0;
+    public final int mcalendarViewStyle = 0;
+    public final int mcanRequestEnhancedWebAccessibility = 0;
+    public final int mcanRequestFilterKeyEvents = 0;
+    public final int mcanRequestTouchExplorationMode = 0;
+    public final int mcanRetrieveWindowContent = 0;
+    public final int mcandidatesTextStyleSpans = 0;
+    public final int mcapitalize = 0;
+    public final int mcategory = 0;
+    public final int mcenterBright = 0;
+    public final int mcenterColor = 0;
+    public final int mcenterDark = 0;
+    public final int mcenterMedium = 0;
+    public final int mcenterX = 0;
+    public final int mcenterY = 0;
+    public final int mcheckBoxPreferenceStyle = 0;
+    public final int mcheckMark = 0;
+    public final int mcheckMarkTint = 0;
+    public final int mcheckMarkTintMode = 0;
+    public final int mcheckable = 0;
+    public final int mcheckableBehavior = 0;
+    public final int mcheckboxStyle = 0;
+    public final int mchecked = 0;
+    public final int mcheckedButton = 0;
+    public final int mcheckedTextViewStyle = 0;
+    public final int mchildDivider = 0;
+    public final int mchildIndicator = 0;
+    public final int mchildIndicatorEnd = 0;
+    public final int mchildIndicatorLeft = 0;
+    public final int mchildIndicatorRight = 0;
+    public final int mchildIndicatorStart = 0;
+    public final int mchoiceMode = 0;
+    public final int mclearTaskOnLaunch = 0;
+    public final int mclickable = 0;
+    public final int mclipChildren = 0;
+    public final int mclipOrientation = 0;
+    public final int mclipToPadding = 0;
+    public final int mcloseIcon = 0;
+    public final int mcodes = 0;
+    public final int mcollapseColumns = 0;
+    public final int mcollapseContentDescription = 0;
+    public final int mcolor = 0;
+    public final int mcolorAccent = 0;
+    public final int mcolorActivatedHighlight = 0;
+    public final int mcolorBackground = 0;
+    public final int mcolorBackgroundCacheHint = 0;
+    public final int mcolorButtonNormal = 0;
+    public final int mcolorControlActivated = 0;
+    public final int mcolorControlHighlight = 0;
+    public final int mcolorControlNormal = 0;
+    public final int mcolorEdgeEffect = 0;
+    public final int mcolorFocusedHighlight = 0;
+    public final int mcolorForeground = 0;
+    public final int mcolorForegroundInverse = 0;
+    public final int mcolorLongPressedHighlight = 0;
+    public final int mcolorMultiSelectHighlight = 0;
+    public final int mcolorPressedHighlight = 0;
+    public final int mcolorPrimary = 0;
+    public final int mcolorPrimaryDark = 0;
+    public final int mcolumnCount = 0;
+    public final int mcolumnDelay = 0;
+    public final int mcolumnOrderPreserved = 0;
+    public final int mcolumnWidth = 0;
+    public final int mcommitIcon = 0;
+    public final int mcompatibleWidthLimitDp = 0;
+    public final int mcompletionHint = 0;
+    public final int mcompletionHintView = 0;
+    public final int mcompletionThreshold = 0;
+    public final int mconfigChanges = 0;
+    public final int mconfigure = 0;
+    public final int mconstantSize = 0;
+    public final int mcontent = 0;
+    public final int mcontentAgeHint = 0;
+    public final int mcontentAuthority = 0;
+    public final int mcontentDescription = 0;
+    public final int mcontentInsetEnd = 0;
+    public final int mcontentInsetLeft = 0;
+    public final int mcontentInsetRight = 0;
+    public final int mcontentInsetStart = 0;
+    public final int mcontrolX1 = 0;
+    public final int mcontrolX2 = 0;
+    public final int mcontrolY1 = 0;
+    public final int mcontrolY2 = 0;
+    public final int mcountry = 0;
+    public final int mcropToPadding = 0;
+    public final int mcursorVisible = 0;
+    public final int mcustomNavigationLayout = 0;
+    public final int mcustomTokens = 0;
+    public final int mcycles = 0;
+    public final int mdashGap = 0;
+    public final int mdashWidth = 0;
+    public final int mdata = 0;
+    public final int mdatePickerDialogTheme = 0;
+    public final int mdatePickerMode = 0;
+    public final int mdatePickerStyle = 0;
+    public final int mdateTextAppearance = 0;
+    public final int mdayOfWeekBackground = 0;
+    public final int mdayOfWeekTextAppearance = 0;
+    public final int mdebuggable = 0;
+    public final int mdefaultValue = 0;
+    public final int mdelay = 0;
+    public final int mdependency = 0;
+    public final int mdescendantFocusability = 0;
+    public final int mdescription = 0;
+    public final int mdetachWallpaper = 0;
+    public final int mdetailColumn = 0;
+    public final int mdetailSocialSummary = 0;
+    public final int mdetailsElementBackground = 0;
+    public final int mdial = 0;
+    public final int mdialogIcon = 0;
+    public final int mdialogLayout = 0;
+    public final int mdialogMessage = 0;
+    public final int mdialogPreferenceStyle = 0;
+    public final int mdialogPreferredPadding = 0;
+    public final int mdialogTheme = 0;
+    public final int mdialogTitle = 0;
+    public final int mdigits = 0;
+    public final int mdirection = 0;
+    public final int mdirectionDescriptions = 0;
+    public final int mdirectionPriority = 0;
+    public final int mdisableDependentsState = 0;
+    public final int mdisabledAlpha = 0;
+    public final int mdisplayOptions = 0;
+    public final int mdither = 0;
+    public final int mdivider = 0;
+    public final int mdividerHeight = 0;
+    public final int mdividerHorizontal = 0;
+    public final int mdividerPadding = 0;
+    public final int mdividerVertical = 0;
+    public final int mdocumentLaunchMode = 0;
+    public final int mdrawSelectorOnTop = 0;
+    public final int mdrawable = 0;
+    public final int mdrawableBottom = 0;
+    public final int mdrawableEnd = 0;
+    public final int mdrawableLeft = 0;
+    public final int mdrawablePadding = 0;
+    public final int mdrawableRight = 0;
+    public final int mdrawableStart = 0;
+    public final int mdrawableTop = 0;
+    public final int mdrawingCacheQuality = 0;
+    public final int mdropDownAnchor = 0;
+    public final int mdropDownHeight = 0;
+    public final int mdropDownHintAppearance = 0;
+    public final int mdropDownHorizontalOffset = 0;
+    public final int mdropDownItemStyle = 0;
+    public final int mdropDownListViewStyle = 0;
+    public final int mdropDownSelector = 0;
+    public final int mdropDownSpinnerStyle = 0;
+    public final int mdropDownVerticalOffset = 0;
+    public final int mdropDownWidth = 0;
+    public final int mduplicateParentState = 0;
+    public final int mduration = 0;
+    public final int meditTextBackground = 0;
+    public final int meditTextColor = 0;
+    public final int meditTextPreferenceStyle = 0;
+    public final int meditTextStyle = 0;
+    public final int meditable = 0;
+    public final int meditorExtras = 0;
+    public final int melegantTextHeight = 0;
+    public final int melevation = 0;
+    public final int mellipsize = 0;
+    public final int mems = 0;
+    public final int menabled = 0;
+    public final int mendColor = 0;
+    public final int mendYear = 0;
+    public final int menterFadeDuration = 0;
+    public final int mentries = 0;
+    public final int mentryValues = 0;
+    public final int meventsInterceptionEnabled = 0;
+    public final int mexcludeClass = 0;
+    public final int mexcludeFromRecents = 0;
+    public final int mexcludeId = 0;
+    public final int mexcludeName = 0;
+    public final int mexitFadeDuration = 0;
+    public final int mexpandableListPreferredChildIndicatorLeft = 0;
+    public final int mexpandableListPreferredChildIndicatorRight = 0;
+    public final int mexpandableListPreferredChildPaddingLeft = 0;
+    public final int mexpandableListPreferredItemIndicatorLeft = 0;
+    public final int mexpandableListPreferredItemIndicatorRight = 0;
+    public final int mexpandableListPreferredItemPaddingLeft = 0;
+    public final int mexpandableListViewStyle = 0;
+    public final int mexpandableListViewWhiteStyle = 0;
+    public final int mexported = 0;
+    public final int mextraTension = 0;
+    public final int mfactor = 0;
+    public final int mfadeDuration = 0;
+    public final int mfadeEnabled = 0;
+    public final int mfadeOffset = 0;
+    public final int mfadeScrollbars = 0;
+    public final int mfadingEdge = 0;
+    public final int mfadingEdgeLength = 0;
+    public final int mfadingMode = 0;
+    public final int mfastScrollAlwaysVisible = 0;
+    public final int mfastScrollEnabled = 0;
+    public final int mfastScrollOverlayPosition = 0;
+    public final int mfastScrollPreviewBackgroundLeft = 0;
+    public final int mfastScrollPreviewBackgroundRight = 0;
+    public final int mfastScrollStyle = 0;
+    public final int mfastScrollTextColor = 0;
+    public final int mfastScrollThumbDrawable = 0;
+    public final int mfastScrollTrackDrawable = 0;
+    public final int mfillAfter = 0;
+    public final int mfillAlpha = 0;
+    public final int mfillBefore = 0;
+    public final int mfillColor = 0;
+    public final int mfillEnabled = 0;
+    public final int mfillViewport = 0;
+    public final int mfilter = 0;
+    public final int mfilterTouchesWhenObscured = 0;
+    public final int mfinishOnCloseSystemDialogs = 0;
+    public final int mfinishOnTaskLaunch = 0;
+    public final int mfirstDayOfWeek = 0;
+    public final int mfitsSystemWindows = 0;
+    public final int mflipInterval = 0;
+    public final int mfocusable = 0;
+    public final int mfocusableInTouchMode = 0;
+    public final int mfocusedMonthDateColor = 0;
+    public final int mfontFamily = 0;
+    public final int mfontFeatureSettings = 0;
+    public final int mfooterDividersEnabled = 0;
+    public final int mforeground = 0;
+    public final int mforegroundGravity = 0;
+    public final int mforegroundTint = 0;
+    public final int mforegroundTintMode = 0;
+    public final int mformat = 0;
+    public final int mformat12Hour = 0;
+    public final int mformat24Hour = 0;
+    public final int mfragment = 0;
+    public final int mfragmentAllowEnterTransitionOverlap = 0;
+    public final int mfragmentAllowReturnTransitionOverlap = 0;
+    public final int mfragmentCloseEnterAnimation = 0;
+    public final int mfragmentCloseExitAnimation = 0;
+    public final int mfragmentEnterTransition = 0;
+    public final int mfragmentExitTransition = 0;
+    public final int mfragmentFadeEnterAnimation = 0;
+    public final int mfragmentFadeExitAnimation = 0;
+    public final int mfragmentOpenEnterAnimation = 0;
+    public final int mfragmentOpenExitAnimation = 0;
+    public final int mfragmentReenterTransition = 0;
+    public final int mfragmentReturnTransition = 0;
+    public final int mfragmentSharedElementEnterTransition = 0;
+    public final int mfragmentSharedElementReturnTransition = 0;
+    public final int mfreezesText = 0;
+    public final int mfromAlpha = 0;
+    public final int mfromDegrees = 0;
+    public final int mfromId = 0;
+    public final int mfromScene = 0;
+    public final int mfromXDelta = 0;
+    public final int mfromXScale = 0;
+    public final int mfromYDelta = 0;
+    public final int mfromYScale = 0;
+    public final int mfullBackupOnly = 0;
+    public final int mfullBright = 0;
+    public final int mfullDark = 0;
+    public final int mfunctionalTest = 0;
+    public final int mgalleryItemBackground = 0;
+    public final int mgalleryStyle = 0;
+    public final int mgestureColor = 0;
+    public final int mgestureStrokeAngleThreshold = 0;
+    public final int mgestureStrokeLengthThreshold = 0;
+    public final int mgestureStrokeSquarenessThreshold = 0;
+    public final int mgestureStrokeType = 0;
+    public final int mgestureStrokeWidth = 0;
+    public final int mglEsVersion = 0;
+    public final int mgoIcon = 0;
+    public final int mgradientRadius = 0;
+    public final int mgrantUriPermissions = 0;
+    public final int mgravity = 0;
+    public final int mgridViewStyle = 0;
+    public final int mgroupIndicator = 0;
+    public final int mhand_hour = 0;
+    public final int mhand_minute = 0;
+    public final int mhandle = 0;
+    public final int mhandleProfiling = 0;
+    public final int mhapticFeedbackEnabled = 0;
+    public final int mhardwareAccelerated = 0;
+    public final int mhasCode = 0;
+    public final int mheaderAmPmTextAppearance = 0;
+    public final int mheaderBackground = 0;
+    public final int mheaderDayOfMonthTextAppearance = 0;
+    public final int mheaderDividersEnabled = 0;
+    public final int mheaderMonthTextAppearance = 0;
+    public final int mheaderTimeTextAppearance = 0;
+    public final int mheaderYearTextAppearance = 0;
+    public final int mheight = 0;
+    public final int mhideOnContentScroll = 0;
+    public final int mhint = 0;
+    public final int mhomeAsUpIndicator = 0;
+    public final int mhomeLayout = 0;
+    public final int mhorizontalDivider = 0;
+    public final int mhorizontalGap = 0;
+    public final int mhorizontalScrollViewStyle = 0;
+    public final int mhorizontalSpacing = 0;
+    public final int mhost = 0;
+    public final int micon = 0;
+    public final int miconPreview = 0;
+    public final int miconifiedByDefault = 0;
+    public final int mid = 0;
+    public final int mignoreGravity = 0;
+    public final int mimageButtonStyle = 0;
+    public final int mimageWellStyle = 0;
+    public final int mimeActionId = 0;
+    public final int mimeActionLabel = 0;
+    public final int mimeExtractEnterAnimation = 0;
+    public final int mimeExtractExitAnimation = 0;
+    public final int mimeFullscreenBackground = 0;
+    public final int mimeOptions = 0;
+    public final int mimeSubtypeExtraValue = 0;
+    public final int mimeSubtypeLocale = 0;
+    public final int mimeSubtypeMode = 0;
+    public final int mimmersive = 0;
+    public final int mimportantForAccessibility = 0;
+    public final int minAnimation = 0;
+    public final int mincludeFontPadding = 0;
+    public final int mincludeInGlobalSearch = 0;
+    public final int mindeterminate = 0;
+    public final int mindeterminateBehavior = 0;
+    public final int mindeterminateDrawable = 0;
+    public final int mindeterminateDuration = 0;
+    public final int mindeterminateOnly = 0;
+    public final int mindeterminateProgressStyle = 0;
+    public final int mindeterminateTint = 0;
+    public final int mindeterminateTintMode = 0;
+    public final int mindicatorEnd = 0;
+    public final int mindicatorLeft = 0;
+    public final int mindicatorRight = 0;
+    public final int mindicatorStart = 0;
+    public final int minflatedId = 0;
+    public final int minitOrder = 0;
+    public final int minitialKeyguardLayout = 0;
+    public final int minitialLayout = 0;
+    public final int minnerRadius = 0;
+    public final int minnerRadiusRatio = 0;
+    public final int minputMethod = 0;
+    public final int minputType = 0;
+    public final int minset = 0;
+    public final int minsetBottom = 0;
+    public final int minsetLeft = 0;
+    public final int minsetRight = 0;
+    public final int minsetTop = 0;
+    public final int minstallLocation = 0;
+    public final int minterpolator = 0;
+    public final int misAlwaysSyncable = 0;
+    public final int misAsciiCapable = 0;
+    public final int misAuxiliary = 0;
+    public final int misDefault = 0;
+    public final int misGame = 0;
+    public final int misIndicator = 0;
+    public final int misModifier = 0;
+    public final int misRepeatable = 0;
+    public final int misScrollContainer = 0;
+    public final int misSticky = 0;
+    public final int misolatedProcess = 0;
+    public final int mitemBackground = 0;
+    public final int mitemIconDisabledAlpha = 0;
+    public final int mitemPadding = 0;
+    public final int mitemTextAppearance = 0;
+    public final int mkeepScreenOn = 0;
+    public final int mkey = 0;
+    public final int mkeyBackground = 0;
+    public final int mkeyEdgeFlags = 0;
+    public final int mkeyHeight = 0;
+    public final int mkeyIcon = 0;
+    public final int mkeyLabel = 0;
+    public final int mkeyOutputText = 0;
+    public final int mkeyPreviewHeight = 0;
+    public final int mkeyPreviewLayout = 0;
+    public final int mkeyPreviewOffset = 0;
+    public final int mkeySet = 0;
+    public final int mkeyTextColor = 0;
+    public final int mkeyTextSize = 0;
+    public final int mkeyWidth = 0;
+    public final int mkeyboardLayout = 0;
+    public final int mkeyboardMode = 0;
+    public final int mkeycode = 0;
+    public final int mkillAfterRestore = 0;
+    public final int mlabel = 0;
+    public final int mlabelFor = 0;
+    public final int mlabelTextSize = 0;
+    public final int mlargeHeap = 0;
+    public final int mlargeScreens = 0;
+    public final int mlargestWidthLimitDp = 0;
+    public final int mlaunchMode = 0;
+    public final int mlaunchTaskBehindSourceAnimation = 0;
+    public final int mlaunchTaskBehindTargetAnimation = 0;
+    public final int mlayerType = 0;
+    public final int mlayout = 0;
+    public final int mlayoutAnimation = 0;
+    public final int mlayoutDirection = 0;
+    public final int mlayoutMode = 0;
+    public final int mlayout_above = 0;
+    public final int mlayout_alignBaseline = 0;
+    public final int mlayout_alignBottom = 0;
+    public final int mlayout_alignEnd = 0;
+    public final int mlayout_alignLeft = 0;
+    public final int mlayout_alignParentBottom = 0;
+    public final int mlayout_alignParentEnd = 0;
+    public final int mlayout_alignParentLeft = 0;
+    public final int mlayout_alignParentRight = 0;
+    public final int mlayout_alignParentStart = 0;
+    public final int mlayout_alignParentTop = 0;
+    public final int mlayout_alignRight = 0;
+    public final int mlayout_alignStart = 0;
+    public final int mlayout_alignTop = 0;
+    public final int mlayout_alignWithParentIfMissing = 0;
+    public final int mlayout_below = 0;
+    public final int mlayout_centerHorizontal = 0;
+    public final int mlayout_centerInParent = 0;
+    public final int mlayout_centerVertical = 0;
+    public final int mlayout_column = 0;
+    public final int mlayout_columnSpan = 0;
+    public final int mlayout_columnWeight = 0;
+    public final int mlayout_gravity = 0;
+    public final int mlayout_height = 0;
+    public final int mlayout_margin = 0;
+    public final int mlayout_marginBottom = 0;
+    public final int mlayout_marginEnd = 0;
+    public final int mlayout_marginLeft = 0;
+    public final int mlayout_marginRight = 0;
+    public final int mlayout_marginStart = 0;
+    public final int mlayout_marginTop = 0;
+    public final int mlayout_row = 0;
+    public final int mlayout_rowSpan = 0;
+    public final int mlayout_rowWeight = 0;
+    public final int mlayout_scale = 0;
+    public final int mlayout_span = 0;
+    public final int mlayout_toEndOf = 0;
+    public final int mlayout_toLeftOf = 0;
+    public final int mlayout_toRightOf = 0;
+    public final int mlayout_toStartOf = 0;
+    public final int mlayout_weight = 0;
+    public final int mlayout_width = 0;
+    public final int mlayout_x = 0;
+    public final int mlayout_y = 0;
+    public final int mleft = 0;
+    public final int mletterSpacing = 0;
+    public final int mlineSpacingExtra = 0;
+    public final int mlineSpacingMultiplier = 0;
+    public final int mlines = 0;
+    public final int mlinksClickable = 0;
+    public final int mlistChoiceBackgroundIndicator = 0;
+    public final int mlistChoiceIndicatorMultiple = 0;
+    public final int mlistChoiceIndicatorSingle = 0;
+    public final int mlistDivider = 0;
+    public final int mlistDividerAlertDialog = 0;
+    public final int mlistPopupWindowStyle = 0;
+    public final int mlistPreferredItemHeight = 0;
+    public final int mlistPreferredItemHeightLarge = 0;
+    public final int mlistPreferredItemHeightSmall = 0;
+    public final int mlistPreferredItemPaddingEnd = 0;
+    public final int mlistPreferredItemPaddingLeft = 0;
+    public final int mlistPreferredItemPaddingRight = 0;
+    public final int mlistPreferredItemPaddingStart = 0;
+    public final int mlistSelector = 0;
+    public final int mlistSeparatorTextViewStyle = 0;
+    public final int mlistViewStyle = 0;
+    public final int mlistViewWhiteStyle = 0;
+    public final int mlogo = 0;
+    public final int mlongClickable = 0;
+    public final int mloopViews = 0;
+    public final int mmanageSpaceActivity = 0;
+    public final int mmapViewStyle = 0;
+    public final int mmarqueeRepeatLimit = 0;
+    public final int mmatchOrder = 0;
+    public final int mmax = 0;
+    public final int mmaxDate = 0;
+    public final int mmaxEms = 0;
+    public final int mmaxHeight = 0;
+    public final int mmaxItemsPerRow = 0;
+    public final int mmaxLength = 0;
+    public final int mmaxLevel = 0;
+    public final int mmaxLines = 0;
+    public final int mmaxRecents = 0;
+    public final int mmaxRows = 0;
+    public final int mmaxSdkVersion = 0;
+    public final int mmaxWidth = 0;
+    public final int mmaximumAngle = 0;
+    public final int mmeasureAllChildren = 0;
+    public final int mmeasureWithLargestChild = 0;
+    public final int mmediaRouteButtonStyle = 0;
+    public final int mmediaRouteTypes = 0;
+    public final int mmenuCategory = 0;
+    public final int mmimeType = 0;
+    public final int mminDate = 0;
+    public final int mminEms = 0;
+    public final int mminHeight = 0;
+    public final int mminLevel = 0;
+    public final int mminLines = 0;
+    public final int mminResizeHeight = 0;
+    public final int mminResizeWidth = 0;
+    public final int mminSdkVersion = 0;
+    public final int mminWidth = 0;
+    public final int mminimumHorizontalAngle = 0;
+    public final int mminimumVerticalAngle = 0;
+    public final int mmipMap = 0;
+    public final int mmirrorForRtl = 0;
+    public final int mmode = 0;
+    public final int mmoreIcon = 0;
+    public final int mmultiArch = 0;
+    public final int mmultiprocess = 0;
+    public final int mname = 0;
+    public final int mnavigationBarColor = 0;
+    public final int mnavigationContentDescription = 0;
+    public final int mnavigationIcon = 0;
+    public final int mnavigationMode = 0;
+    public final int mnegativeButtonText = 0;
+    public final int mnestedScrollingEnabled = 0;
+    public final int mnextFocusDown = 0;
+    public final int mnextFocusForward = 0;
+    public final int mnextFocusLeft = 0;
+    public final int mnextFocusRight = 0;
+    public final int mnextFocusUp = 0;
+    public final int mnoHistory = 0;
+    public final int mnormalScreens = 0;
+    public final int mnotificationTimeout = 0;
+    public final int mnumColumns = 0;
+    public final int mnumStars = 0;
+    public final int mnumbersBackgroundColor = 0;
+    public final int mnumbersSelectorColor = 0;
+    public final int mnumbersTextColor = 0;
+    public final int mnumeric = 0;
+    public final int mnumericShortcut = 0;
+    public final int monClick = 0;
+    public final int moneshot = 0;
+    public final int mopacity = 0;
+    public final int morder = 0;
+    public final int morderInCategory = 0;
+    public final int mordering = 0;
+    public final int morderingFromXml = 0;
+    public final int morientation = 0;
+    public final int moutAnimation = 0;
+    public final int moutlineProvider = 0;
+    public final int moverScrollFooter = 0;
+    public final int moverScrollHeader = 0;
+    public final int moverScrollMode = 0;
+    public final int moverlapAnchor = 0;
+    public final int moverridesImplicitlyEnabledSubtype = 0;
+    public final int mpackageNames = 0;
+    public final int mpadding = 0;
+    public final int mpaddingBottom = 0;
+    public final int mpaddingEnd = 0;
+    public final int mpaddingLeft = 0;
+    public final int mpaddingMode = 0;
+    public final int mpaddingRight = 0;
+    public final int mpaddingStart = 0;
+    public final int mpaddingTop = 0;
+    public final int mpanelBackground = 0;
+    public final int mpanelColorBackground = 0;
+    public final int mpanelColorForeground = 0;
+    public final int mpanelFullBackground = 0;
+    public final int mpanelTextAppearance = 0;
+    public final int mparentActivityName = 0;
+    public final int mpassword = 0;
+    public final int mpath = 0;
+    public final int mpathData = 0;
+    public final int mpathPattern = 0;
+    public final int mpathPrefix = 0;
+    public final int mpatternPathData = 0;
+    public final int mpermission = 0;
+    public final int mpermissionFlags = 0;
+    public final int mpermissionGroup = 0;
+    public final int mpermissionGroupFlags = 0;
+    public final int mpersistableMode = 0;
+    public final int mpersistent = 0;
+    public final int mpersistentDrawingCache = 0;
+    public final int mphoneNumber = 0;
+    public final int mpivotX = 0;
+    public final int mpivotY = 0;
+    public final int mpopupAnimationStyle = 0;
+    public final int mpopupBackground = 0;
+    public final int mpopupCharacters = 0;
+    public final int mpopupElevation = 0;
+    public final int mpopupKeyboard = 0;
+    public final int mpopupLayout = 0;
+    public final int mpopupMenuStyle = 0;
+    public final int mpopupTheme = 0;
+    public final int mpopupWindowStyle = 0;
+    public final int mport = 0;
+    public final int mpositiveButtonText = 0;
+    public final int mpreferenceCategoryStyle = 0;
+    public final int mpreferenceInformationStyle = 0;
+    public final int mpreferenceLayoutChild = 0;
+    public final int mpreferenceScreenStyle = 0;
+    public final int mpreferenceStyle = 0;
+    public final int mpresentationTheme = 0;
+    public final int mpreviewImage = 0;
+    public final int mpriority = 0;
+    public final int mprivateImeOptions = 0;
+    public final int mprivate_resource_pad1 = 0;
+    public final int mprivate_resource_pad10 = 0;
+    public final int mprivate_resource_pad11 = 0;
+    public final int mprivate_resource_pad12 = 0;
+    public final int mprivate_resource_pad13 = 0;
+    public final int mprivate_resource_pad14 = 0;
+    public final int mprivate_resource_pad15 = 0;
+    public final int mprivate_resource_pad16 = 0;
+    public final int mprivate_resource_pad17 = 0;
+    public final int mprivate_resource_pad18 = 0;
+    public final int mprivate_resource_pad19 = 0;
+    public final int mprivate_resource_pad2 = 0;
+    public final int mprivate_resource_pad20 = 0;
+    public final int mprivate_resource_pad21 = 0;
+    public final int mprivate_resource_pad22 = 0;
+    public final int mprivate_resource_pad23 = 0;
+    public final int mprivate_resource_pad24 = 0;
+    public final int mprivate_resource_pad25 = 0;
+    public final int mprivate_resource_pad26 = 0;
+    public final int mprivate_resource_pad27 = 0;
+    public final int mprivate_resource_pad28 = 0;
+    public final int mprivate_resource_pad29 = 0;
+    public final int mprivate_resource_pad3 = 0;
+    public final int mprivate_resource_pad30 = 0;
+    public final int mprivate_resource_pad31 = 0;
+    public final int mprivate_resource_pad32 = 0;
+    public final int mprivate_resource_pad33 = 0;
+    public final int mprivate_resource_pad34 = 0;
+    public final int mprivate_resource_pad35 = 0;
+    public final int mprivate_resource_pad36 = 0;
+    public final int mprivate_resource_pad37 = 0;
+    public final int mprivate_resource_pad38 = 0;
+    public final int mprivate_resource_pad39 = 0;
+    public final int mprivate_resource_pad4 = 0;
+    public final int mprivate_resource_pad40 = 0;
+    public final int mprivate_resource_pad41 = 0;
+    public final int mprivate_resource_pad42 = 0;
+    public final int mprivate_resource_pad43 = 0;
+    public final int mprivate_resource_pad44 = 0;
+    public final int mprivate_resource_pad45 = 0;
+    public final int mprivate_resource_pad46 = 0;
+    public final int mprivate_resource_pad47 = 0;
+    public final int mprivate_resource_pad48 = 0;
+    public final int mprivate_resource_pad49 = 0;
+    public final int mprivate_resource_pad5 = 0;
+    public final int mprivate_resource_pad50 = 0;
+    public final int mprivate_resource_pad6 = 0;
+    public final int mprivate_resource_pad7 = 0;
+    public final int mprivate_resource_pad8 = 0;
+    public final int mprivate_resource_pad9 = 0;
+    public final int mprocess = 0;
+    public final int mprogress = 0;
+    public final int mprogressBackgroundTint = 0;
+    public final int mprogressBackgroundTintMode = 0;
+    public final int mprogressBarPadding = 0;
+    public final int mprogressBarStyle = 0;
+    public final int mprogressBarStyleHorizontal = 0;
+    public final int mprogressBarStyleInverse = 0;
+    public final int mprogressBarStyleLarge = 0;
+    public final int mprogressBarStyleLargeInverse = 0;
+    public final int mprogressBarStyleSmall = 0;
+    public final int mprogressBarStyleSmallInverse = 0;
+    public final int mprogressBarStyleSmallTitle = 0;
+    public final int mprogressDrawable = 0;
+    public final int mprogressTint = 0;
+    public final int mprogressTintMode = 0;
+    public final int mprompt = 0;
+    public final int mpropertyName = 0;
+    public final int mpropertyXName = 0;
+    public final int mpropertyYName = 0;
+    public final int mprotectionLevel = 0;
+    public final int mpublicKey = 0;
+    public final int mqueryActionMsg = 0;
+    public final int mqueryAfterZeroResults = 0;
+    public final int mqueryBackground = 0;
+    public final int mqueryHint = 0;
+    public final int mquickContactBadgeStyleSmallWindowLarge = 0;
+    public final int mquickContactBadgeStyleSmallWindowMedium = 0;
+    public final int mquickContactBadgeStyleSmallWindowSmall = 0;
+    public final int mquickContactBadgeStyleWindowLarge = 0;
+    public final int mquickContactBadgeStyleWindowMedium = 0;
+    public final int mquickContactBadgeStyleWindowSmall = 0;
+    public final int mradioButtonStyle = 0;
+    public final int mradius = 0;
+    public final int mrating = 0;
+    public final int mratingBarStyle = 0;
+    public final int mratingBarStyleIndicator = 0;
+    public final int mratingBarStyleSmall = 0;
+    public final int mreadPermission = 0;
+    public final int mrecognitionService = 0;
+    public final int mrelinquishTaskIdentity = 0;
+    public final int mreparent = 0;
+    public final int mreparentWithOverlay = 0;
+    public final int mrepeatCount = 0;
+    public final int mrepeatMode = 0;
+    public final int mreqFiveWayNav = 0;
+    public final int mreqHardKeyboard = 0;
+    public final int mreqKeyboardType = 0;
+    public final int mreqNavigation = 0;
+    public final int mreqTouchScreen = 0;
+    public final int mrequireDeviceUnlock = 0;
+    public final int mrequired = 0;
+    public final int mrequiredAccountType = 0;
+    public final int mrequiredForAllUsers = 0;
+    public final int mrequiresFadingEdge = 0;
+    public final int mrequiresSmallestWidthDp = 0;
+    public final int mresizeClip = 0;
+    public final int mresizeMode = 0;
+    public final int mresizeable = 0;
+    public final int mresource = 0;
+    public final int mrestoreAnyVersion = 0;
+    public final int mrestoreNeedsApplication = 0;
+    public final int mrestrictedAccountType = 0;
+    public final int mrestrictionType = 0;
+    public final int mresumeWhilePausing = 0;
+    public final int mreversible = 0;
+    public final int mright = 0;
+    public final int mringtonePreferenceStyle = 0;
+    public final int mringtoneType = 0;
+    public final int mrotation = 0;
+    public final int mrotationX = 0;
+    public final int mrotationY = 0;
+    public final int mrowCount = 0;
+    public final int mrowDelay = 0;
+    public final int mrowEdgeFlags = 0;
+    public final int mrowHeight = 0;
+    public final int mrowOrderPreserved = 0;
+    public final int msaveEnabled = 0;
+    public final int mscaleGravity = 0;
+    public final int mscaleHeight = 0;
+    public final int mscaleType = 0;
+    public final int mscaleWidth = 0;
+    public final int mscaleX = 0;
+    public final int mscaleY = 0;
+    public final int mscheme = 0;
+    public final int mscreenDensity = 0;
+    public final int mscreenOrientation = 0;
+    public final int mscreenSize = 0;
+    public final int mscrollHorizontally = 0;
+    public final int mscrollViewStyle = 0;
+    public final int mscrollX = 0;
+    public final int mscrollY = 0;
+    public final int mscrollbarAlwaysDrawHorizontalTrack = 0;
+    public final int mscrollbarAlwaysDrawVerticalTrack = 0;
+    public final int mscrollbarDefaultDelayBeforeFade = 0;
+    public final int mscrollbarFadeDuration = 0;
+    public final int mscrollbarSize = 0;
+    public final int mscrollbarStyle = 0;
+    public final int mscrollbarThumbHorizontal = 0;
+    public final int mscrollbarThumbVertical = 0;
+    public final int mscrollbarTrackHorizontal = 0;
+    public final int mscrollbarTrackVertical = 0;
+    public final int mscrollbars = 0;
+    public final int mscrollingCache = 0;
+    public final int msearchButtonText = 0;
+    public final int msearchIcon = 0;
+    public final int msearchKeyphrase = 0;
+    public final int msearchKeyphraseId = 0;
+    public final int msearchKeyphraseRecognitionFlags = 0;
+    public final int msearchKeyphraseSupportedLocales = 0;
+    public final int msearchMode = 0;
+    public final int msearchSettingsDescription = 0;
+    public final int msearchSuggestAuthority = 0;
+    public final int msearchSuggestIntentAction = 0;
+    public final int msearchSuggestIntentData = 0;
+    public final int msearchSuggestPath = 0;
+    public final int msearchSuggestSelection = 0;
+    public final int msearchSuggestThreshold = 0;
+    public final int msearchViewStyle = 0;
+    public final int msecondaryProgress = 0;
+    public final int msecondaryProgressTint = 0;
+    public final int msecondaryProgressTintMode = 0;
+    public final int mseekBarStyle = 0;
+    public final int msegmentedButtonStyle = 0;
+    public final int mselectAllOnFocus = 0;
+    public final int mselectable = 0;
+    public final int mselectableItemBackground = 0;
+    public final int mselectableItemBackgroundBorderless = 0;
+    public final int mselectedDateVerticalBar = 0;
+    public final int mselectedWeekBackgroundColor = 0;
+    public final int msessionService = 0;
+    public final int msettingsActivity = 0;
+    public final int msetupActivity = 0;
+    public final int mshadowColor = 0;
+    public final int mshadowDx = 0;
+    public final int mshadowDy = 0;
+    public final int mshadowRadius = 0;
+    public final int mshape = 0;
+    public final int mshareInterpolator = 0;
+    public final int msharedUserId = 0;
+    public final int msharedUserLabel = 0;
+    public final int mshouldDisableView = 0;
+    public final int mshowAsAction = 0;
+    public final int mshowDefault = 0;
+    public final int mshowDividers = 0;
+    public final int mshowOnLockScreen = 0;
+    public final int mshowSilent = 0;
+    public final int mshowText = 0;
+    public final int mshowWeekNumber = 0;
+    public final int mshownWeekCount = 0;
+    public final int mshrinkColumns = 0;
+    public final int msingleLine = 0;
+    public final int msingleUser = 0;
+    public final int mslideEdge = 0;
+    public final int msmallIcon = 0;
+    public final int msmallScreens = 0;
+    public final int msmoothScrollbar = 0;
+    public final int msolidColor = 0;
+    public final int msoundEffectsEnabled = 0;
+    public final int mspacing = 0;
+    public final int mspinnerDropDownItemStyle = 0;
+    public final int mspinnerItemStyle = 0;
+    public final int mspinnerMode = 0;
+    public final int mspinnerStyle = 0;
+    public final int mspinnersShown = 0;
+    public final int msplitMotionEvents = 0;
+    public final int msplitTrack = 0;
+    public final int mspotShadowAlpha = 0;
+    public final int msrc = 0;
+    public final int mssp = 0;
+    public final int msspPattern = 0;
+    public final int msspPrefix = 0;
+    public final int mstackFromBottom = 0;
+    public final int mstackViewStyle = 0;
+    public final int mstarStyle = 0;
+    public final int mstartColor = 0;
+    public final int mstartDelay = 0;
+    public final int mstartOffset = 0;
+    public final int mstartYear = 0;
+    public final int mstateListAnimator = 0;
+    public final int mstateNotNeeded = 0;
+    public final int mstate_above_anchor = 0;
+    public final int mstate_accelerated = 0;
+    public final int mstate_activated = 0;
+    public final int mstate_active = 0;
+    public final int mstate_checkable = 0;
+    public final int mstate_checked = 0;
+    public final int mstate_drag_can_accept = 0;
+    public final int mstate_drag_hovered = 0;
+    public final int mstate_empty = 0;
+    public final int mstate_enabled = 0;
+    public final int mstate_expanded = 0;
+    public final int mstate_first = 0;
+    public final int mstate_focused = 0;
+    public final int mstate_hovered = 0;
+    public final int mstate_last = 0;
+    public final int mstate_long_pressable = 0;
+    public final int mstate_middle = 0;
+    public final int mstate_multiline = 0;
+    public final int mstate_pressed = 0;
+    public final int mstate_selected = 0;
+    public final int mstate_single = 0;
+    public final int mstate_window_focused = 0;
+    public final int mstaticWallpaperPreview = 0;
+    public final int mstatusBarColor = 0;
+    public final int mstepSize = 0;
+    public final int mstopWithTask = 0;
+    public final int mstreamType = 0;
+    public final int mstretchColumns = 0;
+    public final int mstretchMode = 0;
+    public final int mstrokeAlpha = 0;
+    public final int mstrokeColor = 0;
+    public final int mstrokeLineCap = 0;
+    public final int mstrokeLineJoin = 0;
+    public final int mstrokeMiterLimit = 0;
+    public final int mstrokeWidth = 0;
+    public final int msubmitBackground = 0;
+    public final int msubtitle = 0;
+    public final int msubtitleTextAppearance = 0;
+    public final int msubtitleTextStyle = 0;
+    public final int msubtypeExtraValue = 0;
+    public final int msubtypeId = 0;
+    public final int msubtypeLocale = 0;
+    public final int msuggestActionMsg = 0;
+    public final int msuggestActionMsgColumn = 0;
+    public final int msuggestionRowLayout = 0;
+    public final int msummary = 0;
+    public final int msummaryColumn = 0;
+    public final int msummaryOff = 0;
+    public final int msummaryOn = 0;
+    public final int msupportsRtl = 0;
+    public final int msupportsSwitchingToNextInputMethod = 0;
+    public final int msupportsUploading = 0;
+    public final int mswitchMinWidth = 0;
+    public final int mswitchPadding = 0;
+    public final int mswitchPreferenceStyle = 0;
+    public final int mswitchStyle = 0;
+    public final int mswitchTextAppearance = 0;
+    public final int mswitchTextOff = 0;
+    public final int mswitchTextOn = 0;
+    public final int msyncable = 0;
+    public final int mtabStripEnabled = 0;
+    public final int mtabStripLeft = 0;
+    public final int mtabStripRight = 0;
+    public final int mtabWidgetStyle = 0;
+    public final int mtag = 0;
+    public final int mtargetActivity = 0;
+    public final int mtargetClass = 0;
+    public final int mtargetDescriptions = 0;
+    public final int mtargetId = 0;
+    public final int mtargetName = 0;
+    public final int mtargetPackage = 0;
+    public final int mtargetSdkVersion = 0;
+    public final int mtaskAffinity = 0;
+    public final int mtaskCloseEnterAnimation = 0;
+    public final int mtaskCloseExitAnimation = 0;
+    public final int mtaskOpenEnterAnimation = 0;
+    public final int mtaskOpenExitAnimation = 0;
+    public final int mtaskToBackEnterAnimation = 0;
+    public final int mtaskToBackExitAnimation = 0;
+    public final int mtaskToFrontEnterAnimation = 0;
+    public final int mtaskToFrontExitAnimation = 0;
+    public final int mtension = 0;
+    public final int mtestOnly = 0;
+    public final int mtext = 0;
+    public final int mtextAlignment = 0;
+    public final int mtextAllCaps = 0;
+    public final int mtextAppearance = 0;
+    public final int mtextAppearanceButton = 0;
+    public final int mtextAppearanceInverse = 0;
+    public final int mtextAppearanceLarge = 0;
+    public final int mtextAppearanceLargeInverse = 0;
+    public final int mtextAppearanceLargePopupMenu = 0;
+    public final int mtextAppearanceListItem = 0;
+    public final int mtextAppearanceListItemSecondary = 0;
+    public final int mtextAppearanceListItemSmall = 0;
+    public final int mtextAppearanceMedium = 0;
+    public final int mtextAppearanceMediumInverse = 0;
+    public final int mtextAppearanceSearchResultSubtitle = 0;
+    public final int mtextAppearanceSearchResultTitle = 0;
+    public final int mtextAppearanceSmall = 0;
+    public final int mtextAppearanceSmallInverse = 0;
+    public final int mtextAppearanceSmallPopupMenu = 0;
+    public final int mtextCheckMark = 0;
+    public final int mtextCheckMarkInverse = 0;
+    public final int mtextColor = 0;
+    public final int mtextColorAlertDialogListItem = 0;
+    public final int mtextColorHighlight = 0;
+    public final int mtextColorHighlightInverse = 0;
+    public final int mtextColorHint = 0;
+    public final int mtextColorHintInverse = 0;
+    public final int mtextColorLink = 0;
+    public final int mtextColorLinkInverse = 0;
+    public final int mtextColorPrimary = 0;
+    public final int mtextColorPrimaryDisableOnly = 0;
+    public final int mtextColorPrimaryInverse = 0;
+    public final int mtextColorPrimaryInverseDisableOnly = 0;
+    public final int mtextColorPrimaryInverseNoDisable = 0;
+    public final int mtextColorPrimaryNoDisable = 0;
+    public final int mtextColorSecondary = 0;
+    public final int mtextColorSecondaryInverse = 0;
+    public final int mtextColorSecondaryInverseNoDisable = 0;
+    public final int mtextColorSecondaryNoDisable = 0;
+    public final int mtextColorTertiary = 0;
+    public final int mtextColorTertiaryInverse = 0;
+    public final int mtextCursorDrawable = 0;
+    public final int mtextDirection = 0;
+    public final int mtextEditNoPasteWindowLayout = 0;
+    public final int mtextEditPasteWindowLayout = 0;
+    public final int mtextEditSideNoPasteWindowLayout = 0;
+    public final int mtextEditSidePasteWindowLayout = 0;
+    public final int mtextEditSuggestionItemLayout = 0;
+    public final int mtextFilterEnabled = 0;
+    public final int mtextIsSelectable = 0;
+    public final int mtextOff = 0;
+    public final int mtextOn = 0;
+    public final int mtextScaleX = 0;
+    public final int mtextSelectHandle = 0;
+    public final int mtextSelectHandleLeft = 0;
+    public final int mtextSelectHandleRight = 0;
+    public final int mtextSelectHandleWindowStyle = 0;
+    public final int mtextSize = 0;
+    public final int mtextStyle = 0;
+    public final int mtextSuggestionsWindowStyle = 0;
+    public final int mtextViewStyle = 0;
+    public final int mtheme = 0;
+    public final int mthickness = 0;
+    public final int mthicknessRatio = 0;
+    public final int mthumb = 0;
+    public final int mthumbOffset = 0;
+    public final int mthumbTextPadding = 0;
+    public final int mthumbTint = 0;
+    public final int mthumbTintMode = 0;
+    public final int mthumbnail = 0;
+    public final int mtileMode = 0;
+    public final int mtileModeX = 0;
+    public final int mtileModeY = 0;
+    public final int mtimePickerDialogTheme = 0;
+    public final int mtimePickerMode = 0;
+    public final int mtimePickerStyle = 0;
+    public final int mtimeZone = 0;
+    public final int mtint = 0;
+    public final int mtintMode = 0;
+    public final int mtitle = 0;
+    public final int mtitleCondensed = 0;
+    public final int mtitleTextAppearance = 0;
+    public final int mtitleTextStyle = 0;
+    public final int mtoAlpha = 0;
+    public final int mtoDegrees = 0;
+    public final int mtoId = 0;
+    public final int mtoScene = 0;
+    public final int mtoXDelta = 0;
+    public final int mtoXScale = 0;
+    public final int mtoYDelta = 0;
+    public final int mtoYScale = 0;
+    public final int mtoolbarStyle = 0;
+    public final int mtop = 0;
+    public final int mtopBright = 0;
+    public final int mtopDark = 0;
+    public final int mtopLeftRadius = 0;
+    public final int mtopOffset = 0;
+    public final int mtopRightRadius = 0;
+    public final int mtouchscreenBlocksFocus = 0;
+    public final int mtrack = 0;
+    public final int mtranscriptMode = 0;
+    public final int mtransformPivotX = 0;
+    public final int mtransformPivotY = 0;
+    public final int mtransition = 0;
+    public final int mtransitionGroup = 0;
+    public final int mtransitionName = 0;
+    public final int mtransitionOrdering = 0;
+    public final int mtransitionVisibilityMode = 0;
+    public final int mtranslateX = 0;
+    public final int mtranslateY = 0;
+    public final int mtranslationX = 0;
+    public final int mtranslationY = 0;
+    public final int mtranslationZ = 0;
+    public final int mtrimPathEnd = 0;
+    public final int mtrimPathOffset = 0;
+    public final int mtrimPathStart = 0;
+    public final int mtype = 0;
+    public final int mtypeface = 0;
+    public final int muiOptions = 0;
+    public final int muncertainGestureColor = 0;
+    public final int munfocusedMonthDateColor = 0;
+    public final int munselectedAlpha = 0;
+    public final int mupdatePeriodMillis = 0;
+    public final int museDefaultMargins = 0;
+    public final int museIntrinsicSizeAsMinimum = 0;
+    public final int museLevel = 0;
+    public final int muserVisible = 0;
+    public final int mvalue = 0;
+    public final int mvalueFrom = 0;
+    public final int mvalueTo = 0;
+    public final int mvalueType = 0;
+    public final int mvariablePadding = 0;
+    public final int mvendor = 0;
+    public final int mversionCode = 0;
+    public final int mversionName = 0;
+    public final int mverticalCorrection = 0;
+    public final int mverticalDivider = 0;
+    public final int mverticalGap = 0;
+    public final int mverticalScrollbarPosition = 0;
+    public final int mverticalSpacing = 0;
+    public final int mviewportHeight = 0;
+    public final int mviewportWidth = 0;
+    public final int mvisibility = 0;
+    public final int mvisible = 0;
+    public final int mvmSafeMode = 0;
+    public final int mvoiceIcon = 0;
+    public final int mvoiceLanguage = 0;
+    public final int mvoiceLanguageModel = 0;
+    public final int mvoiceMaxResults = 0;
+    public final int mvoicePromptText = 0;
+    public final int mvoiceSearchMode = 0;
+    public final int mwallpaperCloseEnterAnimation = 0;
+    public final int mwallpaperCloseExitAnimation = 0;
+    public final int mwallpaperIntraCloseEnterAnimation = 0;
+    public final int mwallpaperIntraCloseExitAnimation = 0;
+    public final int mwallpaperIntraOpenEnterAnimation = 0;
+    public final int mwallpaperIntraOpenExitAnimation = 0;
+    public final int mwallpaperOpenEnterAnimation = 0;
+    public final int mwallpaperOpenExitAnimation = 0;
+    public final int mwebTextViewStyle = 0;
+    public final int mwebViewStyle = 0;
+    public final int mweekDayTextAppearance = 0;
+    public final int mweekNumberColor = 0;
+    public final int mweekSeparatorLineColor = 0;
+    public final int mweightSum = 0;
+    public final int mwidgetCategory = 0;
+    public final int mwidgetLayout = 0;
+    public final int mwidth = 0;
+    public final int mwindowActionBar = 0;
+    public final int mwindowActionBarOverlay = 0;
+    public final int mwindowActionModeOverlay = 0;
+    public final int mwindowActivityTransitions = 0;
+    public final int mwindowAllowEnterTransitionOverlap = 0;
+    public final int mwindowAllowReturnTransitionOverlap = 0;
+    public final int mwindowAnimationStyle = 0;
+    public final int mwindowBackground = 0;
+    public final int mwindowClipToOutline = 0;
+    public final int mwindowCloseOnTouchOutside = 0;
+    public final int mwindowContentOverlay = 0;
+    public final int mwindowContentTransitionManager = 0;
+    public final int mwindowContentTransitions = 0;
+    public final int mwindowDisablePreview = 0;
+    public final int mwindowDrawsSystemBarBackgrounds = 0;
+    public final int mwindowElevation = 0;
+    public final int mwindowEnableSplitTouch = 0;
+    public final int mwindowEnterAnimation = 0;
+    public final int mwindowEnterTransition = 0;
+    public final int mwindowExitAnimation = 0;
+    public final int mwindowExitTransition = 0;
+    public final int mwindowFrame = 0;
+    public final int mwindowFullscreen = 0;
+    public final int mwindowHideAnimation = 0;
+    public final int mwindowIsFloating = 0;
+    public final int mwindowIsTranslucent = 0;
+    public final int mwindowMinWidthMajor = 0;
+    public final int mwindowMinWidthMinor = 0;
+    public final int mwindowNoDisplay = 0;
+    public final int mwindowNoTitle = 0;
+    public final int mwindowOverscan = 0;
+    public final int mwindowReenterTransition = 0;
+    public final int mwindowReturnTransition = 0;
+    public final int mwindowSharedElementEnterTransition = 0;
+    public final int mwindowSharedElementExitTransition = 0;
+    public final int mwindowSharedElementReenterTransition = 0;
+    public final int mwindowSharedElementReturnTransition = 0;
+    public final int mwindowSharedElementsUseOverlay = 0;
+    public final int mwindowShowAnimation = 0;
+    public final int mwindowShowWallpaper = 0;
+    public final int mwindowSoftInputMode = 0;
+    public final int mwindowSwipeToDismiss = 0;
+    public final int mwindowTitleBackgroundStyle = 0;
+    public final int mwindowTitleSize = 0;
+    public final int mwindowTitleStyle = 0;
+    public final int mwindowTransitionBackgroundFadeDuration = 0;
+    public final int mwindowTranslucentNavigation = 0;
+    public final int mwindowTranslucentStatus = 0;
+    public final int mwritePermission = 0;
+    public final int mx = 0;
+    public final int mxlargeScreens = 0;
+    public final int my = 0;
+    public final int myearListItemTextAppearance = 0;
+    public final int myearListSelectorColor = 0;
+    public final int myesNoPreferenceStyle = 0;
+    public final int mzAdjustment = 0;
+
+
+    public static final int absListViewStyle = 0;
+    public static final int accessibilityEventTypes = 0;
+    public static final int accessibilityFeedbackType = 0;
+    public static final int accessibilityFlags = 0;
+    public static final int accessibilityLiveRegion = 0;
+    public static final int accessibilityTraversalAfter = 0;
+    public static final int accessibilityTraversalBefore = 0;
+    public static final int accountPreferences = 0;
+    public static final int accountType = 0;
+    public static final int action = 0;
+    public static final int actionBarDivider = 0;
+    public static final int actionBarItemBackground = 0;
+    public static final int actionBarPopupTheme = 0;
+    public static final int actionBarSize = 0;
+    public static final int actionBarSplitStyle = 0;
+    public static final int actionBarStyle = 0;
+    public static final int actionBarTabBarStyle = 0;
+    public static final int actionBarTabStyle = 0;
+    public static final int actionBarTabTextStyle = 0;
+    public static final int actionBarTheme = 0;
+    public static final int actionBarWidgetTheme = 0;
+    public static final int actionButtonStyle = 0;
+    public static final int actionDropDownStyle = 0;
+    public static final int actionLayout = 0;
+    public static final int actionMenuTextAppearance = 0;
+    public static final int actionMenuTextColor = 0;
+    public static final int actionModeBackground = 0;
+    public static final int actionModeCloseButtonStyle = 0;
+    public static final int actionModeCloseDrawable = 0;
+    public static final int actionModeCopyDrawable = 0;
+    public static final int actionModeCutDrawable = 0;
+    public static final int actionModeFindDrawable = 0;
+    public static final int actionModePasteDrawable = 0;
+    public static final int actionModeSelectAllDrawable = 0;
+    public static final int actionModeShareDrawable = 0;
+    public static final int actionModeSplitBackground = 0;
+    public static final int actionModeStyle = 0;
+    public static final int actionModeWebSearchDrawable = 0;
+    public static final int actionOverflowButtonStyle = 0;
+    public static final int actionOverflowMenuStyle = 0;
+    public static final int actionProviderClass = 0;
+    public static final int actionViewClass = 0;
+    public static final int activatedBackgroundIndicator = 0;
+    public static final int activityCloseEnterAnimation = 0;
+    public static final int activityCloseExitAnimation = 0;
+    public static final int activityOpenEnterAnimation = 0;
+    public static final int activityOpenExitAnimation = 0;
+    public static final int addPrintersActivity = 0;
+    public static final int addStatesFromChildren = 0;
+    public static final int adjustViewBounds = 0;
+    public static final int advancedPrintOptionsActivity = 0;
+    public static final int alertDialogIcon = 0;
+    public static final int alertDialogStyle = 0;
+    public static final int alertDialogTheme = 0;
+    public static final int alignmentMode = 0;
+    public static final int allContactsName = 0;
+    public static final int allowBackup = 0;
+    public static final int allowClearUserData = 0;
+    public static final int allowEmbedded = 0;
+    public static final int allowParallelSyncs = 0;
+    public static final int allowSingleTap = 0;
+    public static final int allowTaskReparenting = 0;
+    public static final int alpha = 0;
+    public static final int alphabeticShortcut = 0;
+    public static final int alwaysDrawnWithCache = 0;
+    public static final int alwaysRetainTaskState = 0;
+    public static final int amPmBackgroundColor = 0;
+    public static final int amPmTextColor = 0;
+    public static final int ambientShadowAlpha = 0;
+    public static final int angle = 0;
+    public static final int animateFirstView = 0;
+    public static final int animateLayoutChanges = 0;
+    public static final int animateOnClick = 0;
+    public static final int animation = 0;
+    public static final int animationCache = 0;
+    public static final int animationDuration = 0;
+    public static final int animationOrder = 0;
+    public static final int animationResolution = 0;
+    public static final int antialias = 0;
+    public static final int anyDensity = 0;
+    public static final int apduServiceBanner = 0;
+    public static final int apiKey = 0;
+    public static final int author = 0;
+    public static final int authorities = 0;
+    public static final int autoAdvanceViewId = 0;
+    public static final int autoCompleteTextViewStyle = 0;
+    public static final int autoLink = 0;
+    public static final int autoMirrored = 0;
+    public static final int autoRemoveFromRecents = 0;
+    public static final int autoStart = 0;
+    public static final int autoText = 0;
+    public static final int autoUrlDetect = 0;
+    public static final int background = 0;
+    public static final int backgroundDimAmount = 0;
+    public static final int backgroundDimEnabled = 0;
+    public static final int backgroundSplit = 0;
+    public static final int backgroundStacked = 0;
+    public static final int backgroundTint = 0;
+    public static final int backgroundTintMode = 0;
+    public static final int backupAgent = 0;
+    public static final int banner = 0;
+    public static final int baseline = 0;
+    public static final int baselineAlignBottom = 0;
+    public static final int baselineAligned = 0;
+    public static final int baselineAlignedChildIndex = 0;
+    public static final int borderlessButtonStyle = 0;
+    public static final int bottom = 0;
+    public static final int bottomBright = 0;
+    public static final int bottomDark = 0;
+    public static final int bottomLeftRadius = 0;
+    public static final int bottomMedium = 0;
+    public static final int bottomOffset = 0;
+    public static final int bottomRightRadius = 0;
+    public static final int breadCrumbShortTitle = 0;
+    public static final int breadCrumbTitle = 0;
+    public static final int bufferType = 0;
+    public static final int button = 0;
+    public static final int buttonBarButtonStyle = 0;
+    public static final int buttonBarNegativeButtonStyle = 0;
+    public static final int buttonBarNeutralButtonStyle = 0;
+    public static final int buttonBarPositiveButtonStyle = 0;
+    public static final int buttonBarStyle = 0;
+    public static final int buttonStyle = 0;
+    public static final int buttonStyleInset = 0;
+    public static final int buttonStyleSmall = 0;
+    public static final int buttonStyleToggle = 0;
+    public static final int buttonTint = 0;
+    public static final int buttonTintMode = 0;
+    public static final int cacheColorHint = 0;
+    public static final int calendarTextColor = 0;
+    public static final int calendarViewShown = 0;
+    public static final int calendarViewStyle = 0;
+    public static final int canRequestEnhancedWebAccessibility = 0;
+    public static final int canRequestFilterKeyEvents = 0;
+    public static final int canRequestTouchExplorationMode = 0;
+    public static final int canRetrieveWindowContent = 0;
+    public static final int candidatesTextStyleSpans = 0;
+    public static final int capitalize = 0;
+    public static final int category = 0;
+    public static final int centerBright = 0;
+    public static final int centerColor = 0;
+    public static final int centerDark = 0;
+    public static final int centerMedium = 0;
+    public static final int centerX = 0;
+    public static final int centerY = 0;
+    public static final int checkBoxPreferenceStyle = 0;
+    public static final int checkMark = 0;
+    public static final int checkMarkTint = 0;
+    public static final int checkMarkTintMode = 0;
+    public static final int checkable = 0;
+    public static final int checkableBehavior = 0;
+    public static final int checkboxStyle = 0;
+    public static final int checked = 0;
+    public static final int checkedButton = 0;
+    public static final int checkedTextViewStyle = 0;
+    public static final int childDivider = 0;
+    public static final int childIndicator = 0;
+    public static final int childIndicatorEnd = 0;
+    public static final int childIndicatorLeft = 0;
+    public static final int childIndicatorRight = 0;
+    public static final int childIndicatorStart = 0;
+    public static final int choiceMode = 0;
+    public static final int clearTaskOnLaunch = 0;
+    public static final int clickable = 0;
+    public static final int clipChildren = 0;
+    public static final int clipOrientation = 0;
+    public static final int clipToPadding = 0;
+    public static final int closeIcon = 0;
+    public static final int codes = 0;
+    public static final int collapseColumns = 0;
+    public static final int collapseContentDescription = 0;
+    public static final int color = 0;
+    public static final int colorAccent = 0;
+    public static final int colorActivatedHighlight = 0;
+    public static final int colorBackground = 0;
+    public static final int colorBackgroundCacheHint = 0;
+    public static final int colorButtonNormal = 0;
+    public static final int colorControlActivated = 0;
+    public static final int colorControlHighlight = 0;
+    public static final int colorControlNormal = 0;
+    public static final int colorEdgeEffect = 0;
+    public static final int colorFocusedHighlight = 0;
+    public static final int colorForeground = 0;
+    public static final int colorForegroundInverse = 0;
+    public static final int colorLongPressedHighlight = 0;
+    public static final int colorMultiSelectHighlight = 0;
+    public static final int colorPressedHighlight = 0;
+    public static final int colorPrimary = 0;
+    public static final int colorPrimaryDark = 0;
+    public static final int columnCount = 0;
+    public static final int columnDelay = 0;
+    public static final int columnOrderPreserved = 0;
+    public static final int columnWidth = 0;
+    public static final int commitIcon = 0;
+    public static final int compatibleWidthLimitDp = 0;
+    public static final int completionHint = 0;
+    public static final int completionHintView = 0;
+    public static final int completionThreshold = 0;
+    public static final int configChanges = 0;
+    public static final int configure = 0;
+    public static final int constantSize = 0;
+    public static final int content = 0;
+    public static final int contentAgeHint = 0;
+    public static final int contentAuthority = 0;
+    public static final int contentDescription = 0;
+    public static final int contentInsetEnd = 0;
+    public static final int contentInsetLeft = 0;
+    public static final int contentInsetRight = 0;
+    public static final int contentInsetStart = 0;
+    public static final int controlX1 = 0;
+    public static final int controlX2 = 0;
+    public static final int controlY1 = 0;
+    public static final int controlY2 = 0;
+    public static final int country = 0;
+    public static final int cropToPadding = 0;
+    public static final int cursorVisible = 0;
+    public static final int customNavigationLayout = 0;
+    public static final int customTokens = 0;
+    public static final int cycles = 0;
+    public static final int dashGap = 0;
+    public static final int dashWidth = 0;
+    public static final int data = 0;
+    public static final int datePickerDialogTheme = 0;
+    public static final int datePickerMode = 0;
+    public static final int datePickerStyle = 0;
+    public static final int dateTextAppearance = 0;
+    public static final int dayOfWeekBackground = 0;
+    public static final int dayOfWeekTextAppearance = 0;
+    public static final int debuggable = 0;
+    public static final int defaultValue = 0;
+    public static final int delay = 0;
+    public static final int dependency = 0;
+    public static final int descendantFocusability = 0;
+    public static final int description = 0;
+    public static final int detachWallpaper = 0;
+    public static final int detailColumn = 0;
+    public static final int detailSocialSummary = 0;
+    public static final int detailsElementBackground = 0;
+    public static final int dial = 0;
+    public static final int dialogIcon = 0;
+    public static final int dialogLayout = 0;
+    public static final int dialogMessage = 0;
+    public static final int dialogPreferenceStyle = 0;
+    public static final int dialogPreferredPadding = 0;
+    public static final int dialogTheme = 0;
+    public static final int dialogTitle = 0;
+    public static final int digits = 0;
+    public static final int direction = 0;
+    public static final int directionDescriptions = 0;
+    public static final int directionPriority = 0;
+    public static final int disableDependentsState = 0;
+    public static final int disabledAlpha = 0;
+    public static final int displayOptions = 0;
+    public static final int dither = 0;
+    public static final int divider = 0;
+    public static final int dividerHeight = 0;
+    public static final int dividerHorizontal = 0;
+    public static final int dividerPadding = 0;
+    public static final int dividerVertical = 0;
+    public static final int documentLaunchMode = 0;
+    public static final int drawSelectorOnTop = 0;
+    public static final int drawable = 0;
+    public static final int drawableBottom = 0;
+    public static final int drawableEnd = 0;
+    public static final int drawableLeft = 0;
+    public static final int drawablePadding = 0;
+    public static final int drawableRight = 0;
+    public static final int drawableStart = 0;
+    public static final int drawableTop = 0;
+    public static final int drawingCacheQuality = 0;
+    public static final int dropDownAnchor = 0;
+    public static final int dropDownHeight = 0;
+    public static final int dropDownHintAppearance = 0;
+    public static final int dropDownHorizontalOffset = 0;
+    public static final int dropDownItemStyle = 0;
+    public static final int dropDownListViewStyle = 0;
+    public static final int dropDownSelector = 0;
+    public static final int dropDownSpinnerStyle = 0;
+    public static final int dropDownVerticalOffset = 0;
+    public static final int dropDownWidth = 0;
+    public static final int duplicateParentState = 0;
+    public static final int duration = 0;
+    public static final int editTextBackground = 0;
+    public static final int editTextColor = 0;
+    public static final int editTextPreferenceStyle = 0;
+    public static final int editTextStyle = 0;
+    public static final int editable = 0;
+    public static final int editorExtras = 0;
+    public static final int elegantTextHeight = 0;
+    public static final int elevation = 0;
+    public static final int ellipsize = 0;
+    public static final int ems = 0;
+    public static final int enabled = 0;
+    public static final int endColor = 0;
+    public static final int endYear = 0;
+    public static final int enterFadeDuration = 0;
+    public static final int entries = 0;
+    public static final int entryValues = 0;
+    public static final int eventsInterceptionEnabled = 0;
+    public static final int excludeClass = 0;
+    public static final int excludeFromRecents = 0;
+    public static final int excludeId = 0;
+    public static final int excludeName = 0;
+    public static final int exitFadeDuration = 0;
+    public static final int expandableListPreferredChildIndicatorLeft = 0;
+    public static final int expandableListPreferredChildIndicatorRight = 0;
+    public static final int expandableListPreferredChildPaddingLeft = 0;
+    public static final int expandableListPreferredItemIndicatorLeft = 0;
+    public static final int expandableListPreferredItemIndicatorRight = 0;
+    public static final int expandableListPreferredItemPaddingLeft = 0;
+    public static final int expandableListViewStyle = 0;
+    public static final int expandableListViewWhiteStyle = 0;
+    public static final int exported = 0;
+    public static final int extraTension = 0;
+    public static final int factor = 0;
+    public static final int fadeDuration = 0;
+    public static final int fadeEnabled = 0;
+    public static final int fadeOffset = 0;
+    public static final int fadeScrollbars = 0;
+    public static final int fadingEdge = 0;
+    public static final int fadingEdgeLength = 0;
+    public static final int fadingMode = 0;
+    public static final int fastScrollAlwaysVisible = 0;
+    public static final int fastScrollEnabled = 0;
+    public static final int fastScrollOverlayPosition = 0;
+    public static final int fastScrollPreviewBackgroundLeft = 0;
+    public static final int fastScrollPreviewBackgroundRight = 0;
+    public static final int fastScrollStyle = 0;
+    public static final int fastScrollTextColor = 0;
+    public static final int fastScrollThumbDrawable = 0;
+    public static final int fastScrollTrackDrawable = 0;
+    public static final int fillAfter = 0;
+    public static final int fillAlpha = 0;
+    public static final int fillBefore = 0;
+    public static final int fillColor = 0;
+    public static final int fillEnabled = 0;
+    public static final int fillViewport = 0;
+    public static final int filter = 0;
+    public static final int filterTouchesWhenObscured = 0;
+    public static final int finishOnCloseSystemDialogs = 0;
+    public static final int finishOnTaskLaunch = 0;
+    public static final int firstDayOfWeek = 0;
+    public static final int fitsSystemWindows = 0;
+    public static final int flipInterval = 0;
+    public static final int focusable = 0;
+    public static final int focusableInTouchMode = 0;
+    public static final int focusedMonthDateColor = 0;
+    public static final int fontFamily = 0;
+    public static final int fontFeatureSettings = 0;
+    public static final int footerDividersEnabled = 0;
+    public static final int foreground = 0;
+    public static final int foregroundGravity = 0;
+    public static final int foregroundTint = 0;
+    public static final int foregroundTintMode = 0;
+    public static final int format = 0;
+    public static final int format12Hour = 0;
+    public static final int format24Hour = 0;
+    public static final int fragment = 0;
+    public static final int fragmentAllowEnterTransitionOverlap = 0;
+    public static final int fragmentAllowReturnTransitionOverlap = 0;
+    public static final int fragmentCloseEnterAnimation = 0;
+    public static final int fragmentCloseExitAnimation = 0;
+    public static final int fragmentEnterTransition = 0;
+    public static final int fragmentExitTransition = 0;
+    public static final int fragmentFadeEnterAnimation = 0;
+    public static final int fragmentFadeExitAnimation = 0;
+    public static final int fragmentOpenEnterAnimation = 0;
+    public static final int fragmentOpenExitAnimation = 0;
+    public static final int fragmentReenterTransition = 0;
+    public static final int fragmentReturnTransition = 0;
+    public static final int fragmentSharedElementEnterTransition = 0;
+    public static final int fragmentSharedElementReturnTransition = 0;
+    public static final int freezesText = 0;
+    public static final int fromAlpha = 0;
+    public static final int fromDegrees = 0;
+    public static final int fromId = 0;
+    public static final int fromScene = 0;
+    public static final int fromXDelta = 0;
+    public static final int fromXScale = 0;
+    public static final int fromYDelta = 0;
+    public static final int fromYScale = 0;
+    public static final int fullBackupOnly = 0;
+    public static final int fullBright = 0;
+    public static final int fullDark = 0;
+    public static final int functionalTest = 0;
+    public static final int galleryItemBackground = 0;
+    public static final int galleryStyle = 0;
+    public static final int gestureColor = 0;
+    public static final int gestureStrokeAngleThreshold = 0;
+    public static final int gestureStrokeLengthThreshold = 0;
+    public static final int gestureStrokeSquarenessThreshold = 0;
+    public static final int gestureStrokeType = 0;
+    public static final int gestureStrokeWidth = 0;
+    public static final int glEsVersion = 0;
+    public static final int goIcon = 0;
+    public static final int gradientRadius = 0;
+    public static final int grantUriPermissions = 0;
+    public static final int gravity = 0;
+    public static final int gridViewStyle = 0;
+    public static final int groupIndicator = 0;
+    public static final int hand_hour = 0;
+    public static final int hand_minute = 0;
+    public static final int handle = 0;
+    public static final int handleProfiling = 0;
+    public static final int hapticFeedbackEnabled = 0;
+    public static final int hardwareAccelerated = 0;
+    public static final int hasCode = 0;
+    public static final int headerAmPmTextAppearance = 0;
+    public static final int headerBackground = 0;
+    public static final int headerDayOfMonthTextAppearance = 0;
+    public static final int headerDividersEnabled = 0;
+    public static final int headerMonthTextAppearance = 0;
+    public static final int headerTimeTextAppearance = 0;
+    public static final int headerYearTextAppearance = 0;
+    public static final int height = 0;
+    public static final int hideOnContentScroll = 0;
+    public static final int hint = 0;
+    public static final int homeAsUpIndicator = 0;
+    public static final int homeLayout = 0;
+    public static final int horizontalDivider = 0;
+    public static final int horizontalGap = 0;
+    public static final int horizontalScrollViewStyle = 0;
+    public static final int horizontalSpacing = 0;
+    public static final int host = 0;
+    public static final int icon = 0;
+    public static final int iconPreview = 0;
+    public static final int iconifiedByDefault = 0;
+    public static final int id = 0;
+    public static final int ignoreGravity = 0;
+    public static final int imageButtonStyle = 0;
+    public static final int imageWellStyle = 0;
+    public static final int imeActionId = 0;
+    public static final int imeActionLabel = 0;
+    public static final int imeExtractEnterAnimation = 0;
+    public static final int imeExtractExitAnimation = 0;
+    public static final int imeFullscreenBackground = 0;
+    public static final int imeOptions = 0;
+    public static final int imeSubtypeExtraValue = 0;
+    public static final int imeSubtypeLocale = 0;
+    public static final int imeSubtypeMode = 0;
+    public static final int immersive = 0;
+    public static final int importantForAccessibility = 0;
+    public static final int inAnimation = 0;
+    public static final int includeFontPadding = 0;
+    public static final int includeInGlobalSearch = 0;
+    public static final int indeterminate = 0;
+    public static final int indeterminateBehavior = 0;
+    public static final int indeterminateDrawable = 0;
+    public static final int indeterminateDuration = 0;
+    public static final int indeterminateOnly = 0;
+    public static final int indeterminateProgressStyle = 0;
+    public static final int indeterminateTint = 0;
+    public static final int indeterminateTintMode = 0;
+    public static final int indicatorEnd = 0;
+    public static final int indicatorLeft = 0;
+    public static final int indicatorRight = 0;
+    public static final int indicatorStart = 0;
+    public static final int inflatedId = 0;
+    public static final int initOrder = 0;
+    public static final int initialKeyguardLayout = 0;
+    public static final int initialLayout = 0;
+    public static final int innerRadius = 0;
+    public static final int innerRadiusRatio = 0;
+    public static final int inputMethod = 0;
+    public static final int inputType = 0;
+    public static final int inset = 0;
+    public static final int insetBottom = 0;
+    public static final int insetLeft = 0;
+    public static final int insetRight = 0;
+    public static final int insetTop = 0;
+    public static final int installLocation = 0;
+    public static final int interpolator = 0;
+    public static final int isAlwaysSyncable = 0;
+    public static final int isAsciiCapable = 0;
+    public static final int isAuxiliary = 0;
+    public static final int isDefault = 0;
+    public static final int isGame = 0;
+    public static final int isIndicator = 0;
+    public static final int isModifier = 0;
+    public static final int isRepeatable = 0;
+    public static final int isScrollContainer = 0;
+    public static final int isSticky = 0;
+    public static final int isolatedProcess = 0;
+    public static final int itemBackground = 0;
+    public static final int itemIconDisabledAlpha = 0;
+    public static final int itemPadding = 0;
+    public static final int itemTextAppearance = 0;
+    public static final int keepScreenOn = 0;
+    public static final int key = 0;
+    public static final int keyBackground = 0;
+    public static final int keyEdgeFlags = 0;
+    public static final int keyHeight = 0;
+    public static final int keyIcon = 0;
+    public static final int keyLabel = 0;
+    public static final int keyOutputText = 0;
+    public static final int keyPreviewHeight = 0;
+    public static final int keyPreviewLayout = 0;
+    public static final int keyPreviewOffset = 0;
+    public static final int keySet = 0;
+    public static final int keyTextColor = 0;
+    public static final int keyTextSize = 0;
+    public static final int keyWidth = 0;
+    public static final int keyboardLayout = 0;
+    public static final int keyboardMode = 0;
+    public static final int keycode = 0;
+    public static final int killAfterRestore = 0;
+    public static final int label = 0;
+    public static final int labelFor = 0;
+    public static final int labelTextSize = 0;
+    public static final int largeHeap = 0;
+    public static final int largeScreens = 0;
+    public static final int largestWidthLimitDp = 0;
+    public static final int launchMode = 0;
+    public static final int launchTaskBehindSourceAnimation = 0;
+    public static final int launchTaskBehindTargetAnimation = 0;
+    public static final int layerType = 0;
+    public static final int layout = 0;
+    public static final int layoutAnimation = 0;
+    public static final int layoutDirection = 0;
+    public static final int layoutMode = 0;
+    public static final int layout_above = 0;
+    public static final int layout_alignBaseline = 0;
+    public static final int layout_alignBottom = 0;
+    public static final int layout_alignEnd = 0;
+    public static final int layout_alignLeft = 0;
+    public static final int layout_alignParentBottom = 0;
+    public static final int layout_alignParentEnd = 0;
+    public static final int layout_alignParentLeft = 0;
+    public static final int layout_alignParentRight = 0;
+    public static final int layout_alignParentStart = 0;
+    public static final int layout_alignParentTop = 0;
+    public static final int layout_alignRight = 0;
+    public static final int layout_alignStart = 0;
+    public static final int layout_alignTop = 0;
+    public static final int layout_alignWithParentIfMissing = 0;
+    public static final int layout_below = 0;
+    public static final int layout_centerHorizontal = 0;
+    public static final int layout_centerInParent = 0;
+    public static final int layout_centerVertical = 0;
+    public static final int layout_column = 0;
+    public static final int layout_columnSpan = 0;
+    public static final int layout_columnWeight = 0;
+    public static final int layout_gravity = 0;
+    public static final int layout_height = 0;
+    public static final int layout_margin = 0;
+    public static final int layout_marginBottom = 0;
+    public static final int layout_marginEnd = 0;
+    public static final int layout_marginLeft = 0;
+    public static final int layout_marginRight = 0;
+    public static final int layout_marginStart = 0;
+    public static final int layout_marginTop = 0;
+    public static final int layout_row = 0;
+    public static final int layout_rowSpan = 0;
+    public static final int layout_rowWeight = 0;
+    public static final int layout_scale = 0;
+    public static final int layout_span = 0;
+    public static final int layout_toEndOf = 0;
+    public static final int layout_toLeftOf = 0;
+    public static final int layout_toRightOf = 0;
+    public static final int layout_toStartOf = 0;
+    public static final int layout_weight = 0;
+    public static final int layout_width = 0;
+    public static final int layout_x = 0;
+    public static final int layout_y = 0;
+    public static final int left = 0;
+    public static final int letterSpacing = 0;
+    public static final int lineSpacingExtra = 0;
+    public static final int lineSpacingMultiplier = 0;
+    public static final int lines = 0;
+    public static final int linksClickable = 0;
+    public static final int listChoiceBackgroundIndicator = 0;
+    public static final int listChoiceIndicatorMultiple = 0;
+    public static final int listChoiceIndicatorSingle = 0;
+    public static final int listDivider = 0;
+    public static final int listDividerAlertDialog = 0;
+    public static final int listPopupWindowStyle = 0;
+    public static final int listPreferredItemHeight = 0;
+    public static final int listPreferredItemHeightLarge = 0;
+    public static final int listPreferredItemHeightSmall = 0;
+    public static final int listPreferredItemPaddingEnd = 0;
+    public static final int listPreferredItemPaddingLeft = 0;
+    public static final int listPreferredItemPaddingRight = 0;
+    public static final int listPreferredItemPaddingStart = 0;
+    public static final int listSelector = 0;
+    public static final int listSeparatorTextViewStyle = 0;
+    public static final int listViewStyle = 0;
+    public static final int listViewWhiteStyle = 0;
+    public static final int logo = 0;
+    public static final int longClickable = 0;
+    public static final int loopViews = 0;
+    public static final int manageSpaceActivity = 0;
+    public static final int mapViewStyle = 0;
+    public static final int marqueeRepeatLimit = 0;
+    public static final int matchOrder = 0;
+    public static final int max = 0;
+    public static final int maxDate = 0;
+    public static final int maxEms = 0;
+    public static final int maxHeight = 0;
+    public static final int maxItemsPerRow = 0;
+    public static final int maxLength = 0;
+    public static final int maxLevel = 0;
+    public static final int maxLines = 0;
+    public static final int maxRecents = 0;
+    public static final int maxRows = 0;
+    public static final int maxSdkVersion = 0;
+    public static final int maxWidth = 0;
+    public static final int maximumAngle = 0;
+    public static final int measureAllChildren = 0;
+    public static final int measureWithLargestChild = 0;
+    public static final int mediaRouteButtonStyle = 0;
+    public static final int mediaRouteTypes = 0;
+    public static final int menuCategory = 0;
+    public static final int mimeType = 0;
+    public static final int minDate = 0;
+    public static final int minEms = 0;
+    public static final int minHeight = 0;
+    public static final int minLevel = 0;
+    public static final int minLines = 0;
+    public static final int minResizeHeight = 0;
+    public static final int minResizeWidth = 0;
+    public static final int minSdkVersion = 0;
+    public static final int minWidth = 0;
+    public static final int minimumHorizontalAngle = 0;
+    public static final int minimumVerticalAngle = 0;
+    public static final int mipMap = 0;
+    public static final int mirrorForRtl = 0;
+    public static final int mode = 0;
+    public static final int moreIcon = 0;
+    public static final int multiArch = 0;
+    public static final int multiprocess = 0;
+    public static final int name = 0;
+    public static final int navigationBarColor = 0;
+    public static final int navigationContentDescription = 0;
+    public static final int navigationIcon = 0;
+    public static final int navigationMode = 0;
+    public static final int negativeButtonText = 0;
+    public static final int nestedScrollingEnabled = 0;
+    public static final int nextFocusDown = 0;
+    public static final int nextFocusForward = 0;
+    public static final int nextFocusLeft = 0;
+    public static final int nextFocusRight = 0;
+    public static final int nextFocusUp = 0;
+    public static final int noHistory = 0;
+    public static final int normalScreens = 0;
+    public static final int notificationTimeout = 0;
+    public static final int numColumns = 0;
+    public static final int numStars = 0;
+    public static final int numbersBackgroundColor = 0;
+    public static final int numbersSelectorColor = 0;
+    public static final int numbersTextColor = 0;
+    public static final int numeric = 0;
+    public static final int numericShortcut = 0;
+    public static final int onClick = 0;
+    public static final int oneshot = 0;
+    public static final int opacity = 0;
+    public static final int order = 0;
+    public static final int orderInCategory = 0;
+    public static final int ordering = 0;
+    public static final int orderingFromXml = 0;
+    public static final int orientation = 0;
+    public static final int outAnimation = 0;
+    public static final int outlineProvider = 0;
+    public static final int overScrollFooter = 0;
+    public static final int overScrollHeader = 0;
+    public static final int overScrollMode = 0;
+    public static final int overlapAnchor = 0;
+    public static final int overridesImplicitlyEnabledSubtype = 0;
+    public static final int packageNames = 0;
+    public static final int padding = 0;
+    public static final int paddingBottom = 0;
+    public static final int paddingEnd = 0;
+    public static final int paddingLeft = 0;
+    public static final int paddingMode = 0;
+    public static final int paddingRight = 0;
+    public static final int paddingStart = 0;
+    public static final int paddingTop = 0;
+    public static final int panelBackground = 0;
+    public static final int panelColorBackground = 0;
+    public static final int panelColorForeground = 0;
+    public static final int panelFullBackground = 0;
+    public static final int panelTextAppearance = 0;
+    public static final int parentActivityName = 0;
+    public static final int password = 0;
+    public static final int path = 0;
+    public static final int pathData = 0;
+    public static final int pathPattern = 0;
+    public static final int pathPrefix = 0;
+    public static final int patternPathData = 0;
+    public static final int permission = 0;
+    public static final int permissionFlags = 0;
+    public static final int permissionGroup = 0;
+    public static final int permissionGroupFlags = 0;
+    public static final int persistableMode = 0;
+    public static final int persistent = 0;
+    public static final int persistentDrawingCache = 0;
+    public static final int phoneNumber = 0;
+    public static final int pivotX = 0;
+    public static final int pivotY = 0;
+    public static final int popupAnimationStyle = 0;
+    public static final int popupBackground = 0;
+    public static final int popupCharacters = 0;
+    public static final int popupElevation = 0;
+    public static final int popupKeyboard = 0;
+    public static final int popupLayout = 0;
+    public static final int popupMenuStyle = 0;
+    public static final int popupTheme = 0;
+    public static final int popupWindowStyle = 0;
+    public static final int port = 0;
+    public static final int positiveButtonText = 0;
+    public static final int preferenceCategoryStyle = 0;
+    public static final int preferenceInformationStyle = 0;
+    public static final int preferenceLayoutChild = 0;
+    public static final int preferenceScreenStyle = 0;
+    public static final int preferenceStyle = 0;
+    public static final int presentationTheme = 0;
+    public static final int previewImage = 0;
+    public static final int priority = 0;
+    public static final int privateImeOptions = 0;
+    public static final int private_resource_pad1 = 0;
+    public static final int private_resource_pad10 = 0;
+    public static final int private_resource_pad11 = 0;
+    public static final int private_resource_pad12 = 0;
+    public static final int private_resource_pad13 = 0;
+    public static final int private_resource_pad14 = 0;
+    public static final int private_resource_pad15 = 0;
+    public static final int private_resource_pad16 = 0;
+    public static final int private_resource_pad17 = 0;
+    public static final int private_resource_pad18 = 0;
+    public static final int private_resource_pad19 = 0;
+    public static final int private_resource_pad2 = 0;
+    public static final int private_resource_pad20 = 0;
+    public static final int private_resource_pad21 = 0;
+    public static final int private_resource_pad22 = 0;
+    public static final int private_resource_pad23 = 0;
+    public static final int private_resource_pad24 = 0;
+    public static final int private_resource_pad25 = 0;
+    public static final int private_resource_pad26 = 0;
+    public static final int private_resource_pad27 = 0;
+    public static final int private_resource_pad28 = 0;
+    public static final int private_resource_pad29 = 0;
+    public static final int private_resource_pad3 = 0;
+    public static final int private_resource_pad30 = 0;
+    public static final int private_resource_pad31 = 0;
+    public static final int private_resource_pad32 = 0;
+    public static final int private_resource_pad33 = 0;
+    public static final int private_resource_pad34 = 0;
+    public static final int private_resource_pad35 = 0;
+    public static final int private_resource_pad36 = 0;
+    public static final int private_resource_pad37 = 0;
+    public static final int private_resource_pad38 = 0;
+    public static final int private_resource_pad39 = 0;
+    public static final int private_resource_pad4 = 0;
+    public static final int private_resource_pad40 = 0;
+    public static final int private_resource_pad41 = 0;
+    public static final int private_resource_pad42 = 0;
+    public static final int private_resource_pad43 = 0;
+    public static final int private_resource_pad44 = 0;
+    public static final int private_resource_pad45 = 0;
+    public static final int private_resource_pad46 = 0;
+    public static final int private_resource_pad47 = 0;
+    public static final int private_resource_pad48 = 0;
+    public static final int private_resource_pad49 = 0;
+    public static final int private_resource_pad5 = 0;
+    public static final int private_resource_pad50 = 0;
+    public static final int private_resource_pad6 = 0;
+    public static final int private_resource_pad7 = 0;
+    public static final int private_resource_pad8 = 0;
+    public static final int private_resource_pad9 = 0;
+    public static final int process = 0;
+    public static final int progress = 0;
+    public static final int progressBackgroundTint = 0;
+    public static final int progressBackgroundTintMode = 0;
+    public static final int progressBarPadding = 0;
+    public static final int progressBarStyle = 0;
+    public static final int progressBarStyleHorizontal = 0;
+    public static final int progressBarStyleInverse = 0;
+    public static final int progressBarStyleLarge = 0;
+    public static final int progressBarStyleLargeInverse = 0;
+    public static final int progressBarStyleSmall = 0;
+    public static final int progressBarStyleSmallInverse = 0;
+    public static final int progressBarStyleSmallTitle = 0;
+    public static final int progressDrawable = 0;
+    public static final int progressTint = 0;
+    public static final int progressTintMode = 0;
+    public static final int prompt = 0;
+    public static final int propertyName = 0;
+    public static final int propertyXName = 0;
+    public static final int propertyYName = 0;
+    public static final int protectionLevel = 0;
+    public static final int publicKey = 0;
+    public static final int queryActionMsg = 0;
+    public static final int queryAfterZeroResults = 0;
+    public static final int queryBackground = 0;
+    public static final int queryHint = 0;
+    public static final int quickContactBadgeStyleSmallWindowLarge = 0;
+    public static final int quickContactBadgeStyleSmallWindowMedium = 0;
+    public static final int quickContactBadgeStyleSmallWindowSmall = 0;
+    public static final int quickContactBadgeStyleWindowLarge = 0;
+    public static final int quickContactBadgeStyleWindowMedium = 0;
+    public static final int quickContactBadgeStyleWindowSmall = 0;
+    public static final int radioButtonStyle = 0;
+    public static final int radius = 0;
+    public static final int rating = 0;
+    public static final int ratingBarStyle = 0;
+    public static final int ratingBarStyleIndicator = 0;
+    public static final int ratingBarStyleSmall = 0;
+    public static final int readPermission = 0;
+    public static final int recognitionService = 0;
+    public static final int relinquishTaskIdentity = 0;
+    public static final int reparent = 0;
+    public static final int reparentWithOverlay = 0;
+    public static final int repeatCount = 0;
+    public static final int repeatMode = 0;
+    public static final int reqFiveWayNav = 0;
+    public static final int reqHardKeyboard = 0;
+    public static final int reqKeyboardType = 0;
+    public static final int reqNavigation = 0;
+    public static final int reqTouchScreen = 0;
+    public static final int requireDeviceUnlock = 0;
+    public static final int required = 0;
+    public static final int requiredAccountType = 0;
+    public static final int requiredForAllUsers = 0;
+    public static final int requiresFadingEdge = 0;
+    public static final int requiresSmallestWidthDp = 0;
+    public static final int resizeClip = 0;
+    public static final int resizeMode = 0;
+    public static final int resizeable = 0;
+    public static final int resource = 0;
+    public static final int restoreAnyVersion = 0;
+    public static final int restoreNeedsApplication = 0;
+    public static final int restrictedAccountType = 0;
+    public static final int restrictionType = 0;
+    public static final int resumeWhilePausing = 0;
+    public static final int reversible = 0;
+    public static final int right = 0;
+    public static final int ringtonePreferenceStyle = 0;
+    public static final int ringtoneType = 0;
+    public static final int rotation = 0;
+    public static final int rotationX = 0;
+    public static final int rotationY = 0;
+    public static final int rowCount = 0;
+    public static final int rowDelay = 0;
+    public static final int rowEdgeFlags = 0;
+    public static final int rowHeight = 0;
+    public static final int rowOrderPreserved = 0;
+    public static final int saveEnabled = 0;
+    public static final int scaleGravity = 0;
+    public static final int scaleHeight = 0;
+    public static final int scaleType = 0;
+    public static final int scaleWidth = 0;
+    public static final int scaleX = 0;
+    public static final int scaleY = 0;
+    public static final int scheme = 0;
+    public static final int screenDensity = 0;
+    public static final int screenOrientation = 0;
+    public static final int screenSize = 0;
+    public static final int scrollHorizontally = 0;
+    public static final int scrollViewStyle = 0;
+    public static final int scrollX = 0;
+    public static final int scrollY = 0;
+    public static final int scrollbarAlwaysDrawHorizontalTrack = 0;
+    public static final int scrollbarAlwaysDrawVerticalTrack = 0;
+    public static final int scrollbarDefaultDelayBeforeFade = 0;
+    public static final int scrollbarFadeDuration = 0;
+    public static final int scrollbarSize = 0;
+    public static final int scrollbarStyle = 0;
+    public static final int scrollbarThumbHorizontal = 0;
+    public static final int scrollbarThumbVertical = 0;
+    public static final int scrollbarTrackHorizontal = 0;
+    public static final int scrollbarTrackVertical = 0;
+    public static final int scrollbars = 0;
+    public static final int scrollingCache = 0;
+    public static final int searchButtonText = 0;
+    public static final int searchIcon = 0;
+    public static final int searchKeyphrase = 0;
+    public static final int searchKeyphraseId = 0;
+    public static final int searchKeyphraseRecognitionFlags = 0;
+    public static final int searchKeyphraseSupportedLocales = 0;
+    public static final int searchMode = 0;
+    public static final int searchSettingsDescription = 0;
+    public static final int searchSuggestAuthority = 0;
+    public static final int searchSuggestIntentAction = 0;
+    public static final int searchSuggestIntentData = 0;
+    public static final int searchSuggestPath = 0;
+    public static final int searchSuggestSelection = 0;
+    public static final int searchSuggestThreshold = 0;
+    public static final int searchViewStyle = 0;
+    public static final int secondaryProgress = 0;
+    public static final int secondaryProgressTint = 0;
+    public static final int secondaryProgressTintMode = 0;
+    public static final int seekBarStyle = 0;
+    public static final int segmentedButtonStyle = 0;
+    public static final int selectAllOnFocus = 0;
+    public static final int selectable = 0;
+    public static final int selectableItemBackground = 0;
+    public static final int selectableItemBackgroundBorderless = 0;
+    public static final int selectedDateVerticalBar = 0;
+    public static final int selectedWeekBackgroundColor = 0;
+    public static final int sessionService = 0;
+    public static final int settingsActivity = 0;
+    public static final int setupActivity = 0;
+    public static final int shadowColor = 0;
+    public static final int shadowDx = 0;
+    public static final int shadowDy = 0;
+    public static final int shadowRadius = 0;
+    public static final int shape = 0;
+    public static final int shareInterpolator = 0;
+    public static final int sharedUserId = 0;
+    public static final int sharedUserLabel = 0;
+    public static final int shouldDisableView = 0;
+    public static final int showAsAction = 0;
+    public static final int showDefault = 0;
+    public static final int showDividers = 0;
+    public static final int showOnLockScreen = 0;
+    public static final int showSilent = 0;
+    public static final int showText = 0;
+    public static final int showWeekNumber = 0;
+    public static final int shownWeekCount = 0;
+    public static final int shrinkColumns = 0;
+    public static final int singleLine = 0;
+    public static final int singleUser = 0;
+    public static final int slideEdge = 0;
+    public static final int smallIcon = 0;
+    public static final int smallScreens = 0;
+    public static final int smoothScrollbar = 0;
+    public static final int solidColor = 0;
+    public static final int soundEffectsEnabled = 0;
+    public static final int spacing = 0;
+    public static final int spinnerDropDownItemStyle = 0;
+    public static final int spinnerItemStyle = 0;
+    public static final int spinnerMode = 0;
+    public static final int spinnerStyle = 0;
+    public static final int spinnersShown = 0;
+    public static final int splitMotionEvents = 0;
+    public static final int splitTrack = 0;
+    public static final int spotShadowAlpha = 0;
+    public static final int src = 0;
+    public static final int ssp = 0;
+    public static final int sspPattern = 0;
+    public static final int sspPrefix = 0;
+    public static final int stackFromBottom = 0;
+    public static final int stackViewStyle = 0;
+    public static final int starStyle = 0;
+    public static final int startColor = 0;
+    public static final int startDelay = 0;
+    public static final int startOffset = 0;
+    public static final int startYear = 0;
+    public static final int stateListAnimator = 0;
+    public static final int stateNotNeeded = 0;
+    public static final int state_above_anchor = 0;
+    public static final int state_accelerated = 0;
+    public static final int state_activated = 0;
+    public static final int state_active = 0;
+    public static final int state_checkable = 0;
+    public static final int state_checked = 0;
+    public static final int state_drag_can_accept = 0;
+    public static final int state_drag_hovered = 0;
+    public static final int state_empty = 0;
+    public static final int state_enabled = 0;
+    public static final int state_expanded = 0;
+    public static final int state_first = 0;
+    public static final int state_focused = 0;
+    public static final int state_hovered = 0;
+    public static final int state_last = 0;
+    public static final int state_long_pressable = 0;
+    public static final int state_middle = 0;
+    public static final int state_multiline = 0;
+    public static final int state_pressed = 0;
+    public static final int state_selected = 0;
+    public static final int state_single = 0;
+    public static final int state_window_focused = 0;
+    public static final int staticWallpaperPreview = 0;
+    public static final int statusBarColor = 0;
+    public static final int stepSize = 0;
+    public static final int stopWithTask = 0;
+    public static final int streamType = 0;
+    public static final int stretchColumns = 0;
+    public static final int stretchMode = 0;
+    public static final int strokeAlpha = 0;
+    public static final int strokeColor = 0;
+    public static final int strokeLineCap = 0;
+    public static final int strokeLineJoin = 0;
+    public static final int strokeMiterLimit = 0;
+    public static final int strokeWidth = 0;
+    public static final int submitBackground = 0;
+    public static final int subtitle = 0;
+    public static final int subtitleTextAppearance = 0;
+    public static final int subtitleTextStyle = 0;
+    public static final int subtypeExtraValue = 0;
+    public static final int subtypeId = 0;
+    public static final int subtypeLocale = 0;
+    public static final int suggestActionMsg = 0;
+    public static final int suggestActionMsgColumn = 0;
+    public static final int suggestionRowLayout = 0;
+    public static final int summary = 0;
+    public static final int summaryColumn = 0;
+    public static final int summaryOff = 0;
+    public static final int summaryOn = 0;
+    public static final int supportsRtl = 0;
+    public static final int supportsSwitchingToNextInputMethod = 0;
+    public static final int supportsUploading = 0;
+    public static final int switchMinWidth = 0;
+    public static final int switchPadding = 0;
+    public static final int switchPreferenceStyle = 0;
+    public static final int switchStyle = 0;
+    public static final int switchTextAppearance = 0;
+    public static final int switchTextOff = 0;
+    public static final int switchTextOn = 0;
+    public static final int syncable = 0;
+    public static final int tabStripEnabled = 0;
+    public static final int tabStripLeft = 0;
+    public static final int tabStripRight = 0;
+    public static final int tabWidgetStyle = 0;
+    public static final int tag = 0;
+    public static final int targetActivity = 0;
+    public static final int targetClass = 0;
+    public static final int targetDescriptions = 0;
+    public static final int targetId = 0;
+    public static final int targetName = 0;
+    public static final int targetPackage = 0;
+    public static final int targetSdkVersion = 0;
+    public static final int taskAffinity = 0;
+    public static final int taskCloseEnterAnimation = 0;
+    public static final int taskCloseExitAnimation = 0;
+    public static final int taskOpenEnterAnimation = 0;
+    public static final int taskOpenExitAnimation = 0;
+    public static final int taskToBackEnterAnimation = 0;
+    public static final int taskToBackExitAnimation = 0;
+    public static final int taskToFrontEnterAnimation = 0;
+    public static final int taskToFrontExitAnimation = 0;
+    public static final int tension = 0;
+    public static final int testOnly = 0;
+    public static final int text = 0;
+    public static final int textAlignment = 0;
+    public static final int textAllCaps = 0;
+    public static final int textAppearance = 0;
+    public static final int textAppearanceButton = 0;
+    public static final int textAppearanceInverse = 0;
+    public static final int textAppearanceLarge = 0;
+    public static final int textAppearanceLargeInverse = 0;
+    public static final int textAppearanceLargePopupMenu = 0;
+    public static final int textAppearanceListItem = 0;
+    public static final int textAppearanceListItemSecondary = 0;
+    public static final int textAppearanceListItemSmall = 0;
+    public static final int textAppearanceMedium = 0;
+    public static final int textAppearanceMediumInverse = 0;
+    public static final int textAppearanceSearchResultSubtitle = 0;
+    public static final int textAppearanceSearchResultTitle = 0;
+    public static final int textAppearanceSmall = 0;
+    public static final int textAppearanceSmallInverse = 0;
+    public static final int textAppearanceSmallPopupMenu = 0;
+    public static final int textCheckMark = 0;
+    public static final int textCheckMarkInverse = 0;
+    public static final int textColor = 0;
+    public static final int textColorAlertDialogListItem = 0;
+    public static final int textColorHighlight = 0;
+    public static final int textColorHighlightInverse = 0;
+    public static final int textColorHint = 0;
+    public static final int textColorHintInverse = 0;
+    public static final int textColorLink = 0;
+    public static final int textColorLinkInverse = 0;
+    public static final int textColorPrimary = 0;
+    public static final int textColorPrimaryDisableOnly = 0;
+    public static final int textColorPrimaryInverse = 0;
+    public static final int textColorPrimaryInverseDisableOnly = 0;
+    public static final int textColorPrimaryInverseNoDisable = 0;
+    public static final int textColorPrimaryNoDisable = 0;
+    public static final int textColorSecondary = 0;
+    public static final int textColorSecondaryInverse = 0;
+    public static final int textColorSecondaryInverseNoDisable = 0;
+    public static final int textColorSecondaryNoDisable = 0;
+    public static final int textColorTertiary = 0;
+    public static final int textColorTertiaryInverse = 0;
+    public static final int textCursorDrawable = 0;
+    public static final int textDirection = 0;
+    public static final int textEditNoPasteWindowLayout = 0;
+    public static final int textEditPasteWindowLayout = 0;
+    public static final int textEditSideNoPasteWindowLayout = 0;
+    public static final int textEditSidePasteWindowLayout = 0;
+    public static final int textEditSuggestionItemLayout = 0;
+    public static final int textFilterEnabled = 0;
+    public static final int textIsSelectable = 0;
+    public static final int textOff = 0;
+    public static final int textOn = 0;
+    public static final int textScaleX = 0;
+    public static final int textSelectHandle = 0;
+    public static final int textSelectHandleLeft = 0;
+    public static final int textSelectHandleRight = 0;
+    public static final int textSelectHandleWindowStyle = 0;
+    public static final int textSize = 0;
+    public static final int textStyle = 0;
+    public static final int textSuggestionsWindowStyle = 0;
+    public static final int textViewStyle = 0;
+    public static final int theme = 0;
+    public static final int thickness = 0;
+    public static final int thicknessRatio = 0;
+    public static final int thumb = 0;
+    public static final int thumbOffset = 0;
+    public static final int thumbTextPadding = 0;
+    public static final int thumbTint = 0;
+    public static final int thumbTintMode = 0;
+    public static final int thumbnail = 0;
+    public static final int tileMode = 0;
+    public static final int tileModeX = 0;
+    public static final int tileModeY = 0;
+    public static final int timePickerDialogTheme = 0;
+    public static final int timePickerMode = 0;
+    public static final int timePickerStyle = 0;
+    public static final int timeZone = 0;
+    public static final int tint = 0;
+    public static final int tintMode = 0;
+    public static final int title = 0;
+    public static final int titleCondensed = 0;
+    public static final int titleTextAppearance = 0;
+    public static final int titleTextStyle = 0;
+    public static final int toAlpha = 0;
+    public static final int toDegrees = 0;
+    public static final int toId = 0;
+    public static final int toScene = 0;
+    public static final int toXDelta = 0;
+    public static final int toXScale = 0;
+    public static final int toYDelta = 0;
+    public static final int toYScale = 0;
+    public static final int toolbarStyle = 0;
+    public static final int top = 0;
+    public static final int topBright = 0;
+    public static final int topDark = 0;
+    public static final int topLeftRadius = 0;
+    public static final int topOffset = 0;
+    public static final int topRightRadius = 0;
+    public static final int touchscreenBlocksFocus = 0;
+    public static final int track = 0;
+    public static final int transcriptMode = 0;
+    public static final int transformPivotX = 0;
+    public static final int transformPivotY = 0;
+    public static final int transition = 0;
+    public static final int transitionGroup = 0;
+    public static final int transitionName = 0;
+    public static final int transitionOrdering = 0;
+    public static final int transitionVisibilityMode = 0;
+    public static final int translateX = 0;
+    public static final int translateY = 0;
+    public static final int translationX = 0;
+    public static final int translationY = 0;
+    public static final int translationZ = 0;
+    public static final int trimPathEnd = 0;
+    public static final int trimPathOffset = 0;
+    public static final int trimPathStart = 0;
+    public static final int type = 0;
+    public static final int typeface = 0;
+    public static final int uiOptions = 0;
+    public static final int uncertainGestureColor = 0;
+    public static final int unfocusedMonthDateColor = 0;
+    public static final int unselectedAlpha = 0;
+    public static final int updatePeriodMillis = 0;
+    public static final int useDefaultMargins = 0;
+    public static final int useIntrinsicSizeAsMinimum = 0;
+    public static final int useLevel = 0;
+    public static final int userVisible = 0;
+    public static final int value = 0;
+    public static final int valueFrom = 0;
+    public static final int valueTo = 0;
+    public static final int valueType = 0;
+    public static final int variablePadding = 0;
+    public static final int vendor = 0;
+    public static final int versionCode = 0;
+    public static final int versionName = 0;
+    public static final int verticalCorrection = 0;
+    public static final int verticalDivider = 0;
+    public static final int verticalGap = 0;
+    public static final int verticalScrollbarPosition = 0;
+    public static final int verticalSpacing = 0;
+    public static final int viewportHeight = 0;
+    public static final int viewportWidth = 0;
+    public static final int visibility = 0;
+    public static final int visible = 0;
+    public static final int vmSafeMode = 0;
+    public static final int voiceIcon = 0;
+    public static final int voiceLanguage = 0;
+    public static final int voiceLanguageModel = 0;
+    public static final int voiceMaxResults = 0;
+    public static final int voicePromptText = 0;
+    public static final int voiceSearchMode = 0;
+    public static final int wallpaperCloseEnterAnimation = 0;
+    public static final int wallpaperCloseExitAnimation = 0;
+    public static final int wallpaperIntraCloseEnterAnimation = 0;
+    public static final int wallpaperIntraCloseExitAnimation = 0;
+    public static final int wallpaperIntraOpenEnterAnimation = 0;
+    public static final int wallpaperIntraOpenExitAnimation = 0;
+    public static final int wallpaperOpenEnterAnimation = 0;
+    public static final int wallpaperOpenExitAnimation = 0;
+    public static final int webTextViewStyle = 0;
+    public static final int webViewStyle = 0;
+    public static final int weekDayTextAppearance = 0;
+    public static final int weekNumberColor = 0;
+    public static final int weekSeparatorLineColor = 0;
+    public static final int weightSum = 0;
+    public static final int widgetCategory = 0;
+    public static final int widgetLayout = 0;
+    public static final int width = 0;
+    public static final int windowActionBar = 0;
+    public static final int windowActionBarOverlay = 0;
+    public static final int windowActionModeOverlay = 0;
+    public static final int windowActivityTransitions = 0;
+    public static final int windowAllowEnterTransitionOverlap = 0;
+    public static final int windowAllowReturnTransitionOverlap = 0;
+    public static final int windowAnimationStyle = 0;
+    public static final int windowBackground = 0;
+    public static final int windowClipToOutline = 0;
+    public static final int windowCloseOnTouchOutside = 0;
+    public static final int windowContentOverlay = 0;
+    public static final int windowContentTransitionManager = 0;
+    public static final int windowContentTransitions = 0;
+    public static final int windowDisablePreview = 0;
+    public static final int windowDrawsSystemBarBackgrounds = 0;
+    public static final int windowElevation = 0;
+    public static final int windowEnableSplitTouch = 0;
+    public static final int windowEnterAnimation = 0;
+    public static final int windowEnterTransition = 0;
+    public static final int windowExitAnimation = 0;
+    public static final int windowExitTransition = 0;
+    public static final int windowFrame = 0;
+    public static final int windowFullscreen = 0;
+    public static final int windowHideAnimation = 0;
+    public static final int windowIsFloating = 0;
+    public static final int windowIsTranslucent = 0;
+    public static final int windowMinWidthMajor = 0;
+    public static final int windowMinWidthMinor = 0;
+    public static final int windowNoDisplay = 0;
+    public static final int windowNoTitle = 0;
+    public static final int windowOverscan = 0;
+    public static final int windowReenterTransition = 0;
+    public static final int windowReturnTransition = 0;
+    public static final int windowSharedElementEnterTransition = 0;
+    public static final int windowSharedElementExitTransition = 0;
+    public static final int windowSharedElementReenterTransition = 0;
+    public static final int windowSharedElementReturnTransition = 0;
+    public static final int windowSharedElementsUseOverlay = 0;
+    public static final int windowShowAnimation = 0;
+    public static final int windowShowWallpaper = 0;
+    public static final int windowSoftInputMode = 0;
+    public static final int windowSwipeToDismiss = 0;
+    public static final int windowTitleBackgroundStyle = 0;
+    public static final int windowTitleSize = 0;
+    public static final int windowTitleStyle = 0;
+    public static final int windowTransitionBackgroundFadeDuration = 0;
+    public static final int windowTranslucentNavigation = 0;
+    public static final int windowTranslucentStatus = 0;
+    public static final int writePermission = 0;
+    public static final int x = 0;
+    public static final int xlargeScreens = 0;
+    public static final int y = 0;
+    public static final int yearListItemTextAppearance = 0;
+    public static final int yearListSelectorColor = 0;
+    public static final int yesNoPreferenceStyle = 0;
+    public static final int zAdjustment = 0;
+}
diff --git a/benchmarks/src/benchmarks/regression/ReflectionBenchmark.java b/benchmarks/src/benchmarks/regression/ReflectionBenchmark.java
index fe00fa2..f8f3c93 100644
--- a/benchmarks/src/benchmarks/regression/ReflectionBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/ReflectionBenchmark.java
@@ -156,6 +156,26 @@
         }
     }
 
+    public void timeGetInstanceField(int reps) throws Exception {
+        for (int rep = 0; rep < reps; ++rep) {
+            // The field here (and in timeGetStaticField) were chosen to be
+            // ~75% down the bottom of the alphabetically sorted field list.
+            // It's hard to construct a "fair" test case without resorting to
+            // a class whose field names are created algorithmically.
+            //
+            // TODO: Write a test script that generates both the classes we're
+            // reflecting on and the test case for each of its fields.
+            R.class.getField("mtextAppearanceLargePopupMenu");
+        }
+    }
+
+    public void timeGetStaticField(int reps) throws Exception {
+        for (int rep = 0; rep < reps; ++rep) {
+            R.class.getField("weekNumberColor");
+        }
+    }
+
+
     public static class C {
         public static int sf = 0;
         public int f = 0;
diff --git a/expectations/knownfailures.txt b/expectations/knownfailures.txt
index 1293b27..c5524b6 100644
--- a/expectations/knownfailures.txt
+++ b/expectations/knownfailures.txt
@@ -1506,20 +1506,5 @@
   names: [
     "libcore.java.text.DecimalFormatSymbolsTest#test_getInstance_unknown_or_invalid_locale"
   ]
-},
-{
-  description: "libcore test failures on devices with a constrained (48mb) max heap size.",
-  bug : 18256012,
-  names: [
-    "com.squareup.okhttp.internal.spdy.Http20Draft09Test#tooLargeDataFrame",
-    "com.squareup.okhttp.internal.spdy.Spdy3Test#tooLargeDataFrame",
-    "libcore.java.util.zip.GZIPInputStreamTest#testLongMessage",
-    "libcore.java.util.zip.GZIPOutputStreamTest#testLongMessage",
-    "libcore.java.util.zip.ZipFileTest#testZip64Support",
-    "libcore.java.util.zip.ZipFileTest#testZipFileWithLotsOfEntries",
-    "libcore.java.util.zip.ZipInputStreamTest#testLongMessage",
-    "libcore.java.util.zip.ZipOutputStreamTest#testLongMessage"
-  ]
 }
 ]
-
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/jar/JarFileTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/jar/JarFileTest.java
index d5d8191..0bc8920 100644
--- a/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/jar/JarFileTest.java
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/jar/JarFileTest.java
@@ -24,12 +24,27 @@
 import java.io.InputStream;
 import java.net.URL;
 import java.security.CodeSigner;
+import java.security.InvalidKeyException;
+import java.security.InvalidParameterException;
 import java.security.Permission;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.PublicKey;
+import java.security.Security;
+import java.security.SignatureException;
+import java.security.SignatureSpi;
 import java.security.cert.Certificate;
 import java.security.cert.X509Certificate;
 import java.util.Arrays;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.Vector;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 import java.util.jar.Attributes;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
@@ -89,6 +104,27 @@
 
     private final String emptyEntryJar = "EmptyEntries_signed.jar";
 
+    /*
+     * /usr/bin/openssl genrsa 2048 > root1.pem
+     * /usr/bin/openssl req -new -key root1.pem -out root1.csr -subj '/CN=root1'
+     * /usr/bin/openssl x509 -req -days 3650 -in root1.csr -signkey root1.pem -out root1.crt
+     * /usr/bin/openssl genrsa 2048 > root2.pem
+     * /usr/bin/openssl req -new -key root2.pem -out root2.csr -subj '/CN=root2'
+     * echo 4000 > root1.srl
+     * echo 8000 > root2.srl
+     * /usr/bin/openssl x509 -req -days 3650 -in root2.csr -CA root1.crt -CAkey root1.pem -out root2.crt
+     * /usr/bin/openssl x509 -req -days 3650 -in root1.csr -CA root2.crt -CAkey root2.pem -out root1.crt
+     * /usr/bin/openssl genrsa 2048 > signer.pem
+     * /usr/bin/openssl req -new -key signer.pem -out signer.csr -subj '/CN=signer'
+     * /usr/bin/openssl x509 -req -days 3650 -in signer.csr -CA root1.crt -CAkey root1.pem -out signer.crt
+     * /usr/bin/openssl pkcs12 -inkey signer.pem -in signer.crt -export -out signer.p12 -name signer -passout pass:certloop
+     * keytool -importkeystore -srckeystore signer.p12 -srcstoretype PKCS12 -destkeystore signer.jks -srcstorepass certloop -deststorepass certloop
+     * cat signer.crt root1.crt root2.crt > chain.crt
+     * zip -d hyts_certLoop.jar 'META-INF/*'
+     * jarsigner -keystore signer.jks -certchain chain.crt -storepass certloop hyts_certLoop.jar signer
+     */
+    private final String certLoopJar = "hyts_certLoop.jar";
+
     private final String emptyEntry1 = "subfolder/internalSubset01.js";
 
     private final String emptyEntry2 = "svgtest.js";
@@ -608,6 +644,9 @@
 
         // JAR with a signature that has PKCS#7 Authenticated Attributes
         checkSignedJar(authAttrsJar);
+
+        // JAR with certificates that loop
+        checkSignedJar(certLoopJar, 3);
     }
 
     /**
@@ -620,29 +659,52 @@
         checkSignedJar(jarName9);
     }
 
+    /**
+     * Checks that a JAR is signed correctly with a signature length of 1.
+     */
     private void checkSignedJar(String jarName) throws Exception {
+        checkSignedJar(jarName, 1);
+    }
+
+    /**
+     * Checks that a JAR is signed correctly with a signature length of sigLength.
+     */
+    private void checkSignedJar(String jarName, final int sigLength) throws Exception {
         Support_Resources.copyFile(resources, null, jarName);
 
-        File file = new File(resources, jarName);
-        boolean foundCerts = false;
+        final File file = new File(resources, jarName);
 
-        JarFile jarFile = new JarFile(file, true);
-        try {
-
-            Enumeration<JarEntry> e = jarFile.entries();
-            while (e.hasMoreElements()) {
-                JarEntry entry = e.nextElement();
-                InputStream is = jarFile.getInputStream(entry);
-                is.skip(100000);
-                is.close();
-                Certificate[] certs = entry.getCertificates();
-                if (certs != null && certs.length > 0) {
-                    foundCerts = true;
-                    break;
+        ExecutorService executor = Executors.newSingleThreadExecutor();
+        Future<Boolean> future = executor.submit(new Callable<Boolean>() {
+            @Override
+            public Boolean call() throws Exception {
+                JarFile jarFile = new JarFile(file, true);
+                try {
+                    Enumeration<JarEntry> e = jarFile.entries();
+                    while (e.hasMoreElements()) {
+                        JarEntry entry = e.nextElement();
+                        InputStream is = jarFile.getInputStream(entry);
+                        is.skip(100000);
+                        is.close();
+                        Certificate[] certs = entry.getCertificates();
+                        if (certs != null && certs.length > 0) {
+                            assertEquals(sigLength, certs.length);
+                            return true;
+                        }
+                    }
+                    return false;
+                } finally {
+                    jarFile.close();
                 }
             }
-        } finally {
-            jarFile.close();
+        });
+        executor.shutdown();
+        final boolean foundCerts;
+        try {
+            foundCerts = future.get(10, TimeUnit.SECONDS);
+        } catch (TimeoutException e) {
+            fail("Could not finish building chain; possibly confused by loops");
+            return; // Not actually reached.
         }
 
         assertTrue(
@@ -1014,4 +1076,73 @@
         res = jarFile.getInputStream(zipEntry).read();
         assertEquals("Wrong length of empty jar entry", -1, res);
     }
+
+    public void testJarFile_BadSignatureProvider_Success() throws Exception {
+        Security.insertProviderAt(new JarFileBadProvider(), 1);
+        try {
+            // Needs a JAR with "RSA" as digest encryption algorithm
+            checkSignedJar(jarName6);
+        } finally {
+            Security.removeProvider(JarFileBadProvider.NAME);
+        }
+    }
+
+    public static class JarFileBadProvider extends Provider {
+        public static final String NAME = "JarFileBadProvider";
+
+        public JarFileBadProvider() {
+            super(NAME, 1.0, "Bad provider for JarFileTest");
+
+            put("Signature.RSA", NotReallyASignature.class.getName());
+        }
+
+        /**
+         * This should never be instantiated, so everything throws an exception.
+         */
+        public static class NotReallyASignature extends SignatureSpi {
+            @Override
+            protected void engineInitVerify(PublicKey publicKey) throws InvalidKeyException {
+                fail("Should not call this provider");
+            }
+
+            @Override
+            protected void engineInitSign(PrivateKey privateKey) throws InvalidKeyException {
+                fail("Should not call this provider");
+            }
+
+            @Override
+            protected void engineUpdate(byte b) throws SignatureException {
+                fail("Should not call this provider");
+            }
+
+            @Override
+            protected void engineUpdate(byte[] b, int off, int len) throws SignatureException {
+                fail("Should not call this provider");
+            }
+
+            @Override
+            protected byte[] engineSign() throws SignatureException {
+                fail("Should not call this provider");
+                return null;
+            }
+
+            @Override
+            protected boolean engineVerify(byte[] sigBytes) throws SignatureException {
+                fail("Should not call this provider");
+                return false;
+            }
+
+            @Override
+            protected void engineSetParameter(String param, Object value)
+                    throws InvalidParameterException {
+                fail("Should not call this provider");
+            }
+
+            @Override
+            protected Object engineGetParameter(String param) throws InvalidParameterException {
+                fail("Should not call this provider");
+                return null;
+            }
+        }
+    }
 }
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/org/apache/harmony/kernel/dalvik/ThreadsTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/org/apache/harmony/kernel/dalvik/ThreadsTest.java
index 19c6229..c971e99 100644
--- a/harmony-tests/src/test/java/org/apache/harmony/tests/org/apache/harmony/kernel/dalvik/ThreadsTest.java
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/org/apache/harmony/kernel/dalvik/ThreadsTest.java
@@ -234,10 +234,10 @@
              * Allow a bit more slop for the maximum on "expected
              * instantaneous" results.
              */
-            long minimum = (long) ((double) expectedMillis * 0.90);
+            long minimum = (long) ((double) expectedMillis * 0.80);
             long maximum =
-                Math.max((long) ((double) expectedMillis * 1.10), 10);
-            long waitMillis = Math.max(expectedMillis * 10, 10);
+                Math.max((long) ((double) expectedMillis * 1.20), 10);
+            long waitMillis = Math.max(expectedMillis * 10, 30);
             long duration = getDurationMillis(waitMillis);
 
             if (duration < minimum) {
diff --git a/libart/src/main/java/java/lang/Class.java b/libart/src/main/java/java/lang/Class.java
index c66b01a..8833776 100644
--- a/libart/src/main/java/java/lang/Class.java
+++ b/libart/src/main/java/java/lang/Class.java
@@ -51,6 +51,7 @@
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.security.ProtectionDomain;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -137,6 +138,9 @@
      */
     private transient DexCache dexCache;
 
+    /** Short-cut to dexCache.strings */
+    private transient String[] dexCacheStrings;
+
     /** static, private, and &lt;init&gt; methods. */
     private transient ArtMethod[] directMethods;
 
@@ -166,9 +170,6 @@
      */
     private transient Object[] ifTable;
 
-    /** Interface method table (imt), for quick "invoke-interface". */
-    private transient ArtMethod[] imTable;
-
     /** Lazily computed name of this class; always prefer calling getName(). */
     private transient String name;
 
@@ -455,7 +456,6 @@
      * @hide
      */
     public String getDexCacheString(Dex dex, int dexStringIndex) {
-        String[] dexCacheStrings = dexCache.strings;
         String s = dexCacheStrings[dexStringIndex];
         if (s == null) {
             s = dex.strings().get(dexStringIndex).intern();
@@ -764,7 +764,7 @@
         int initial_size = virtualMethods == null ? 0 : virtualMethods.length;
         initial_size += directMethods == null ? 0 : directMethods.length;
         ArrayList<Method> methods = new ArrayList<Method>(initial_size);
-        getDeclaredMethods(false, methods);
+        getDeclaredMethodsUnchecked(false, methods);
         Method[] result = methods.toArray(new Method[methods.size()]);
         for (Method m : result) {
             // Throw NoClassDefFoundError if types cannot be resolved.
@@ -776,10 +776,14 @@
     }
 
     /**
-     * Returns the list of methods without performing any security checks
-     * first. If no methods exist, an empty array is returned.
+     * Populates a list of methods without performing any security or type
+     * resolution checks first. If no methods exist, the list is not modified.
+     *
+     * @param publicOnly Whether to return only public methods.
+     * @param methods A list to populate with declared methods.
+     * @hide
      */
-    private void getDeclaredMethods(boolean publicOnly, List<Method> methods) {
+    public void getDeclaredMethodsUnchecked(boolean publicOnly, List<Method> methods) {
         if (virtualMethods != null) {
             for (ArtMethod m : virtualMethods) {
                 int modifiers = m.getAccessFlags();
@@ -832,11 +836,11 @@
      * superclasses, and all implemented interfaces, including overridden methods.
      */
     private void getPublicMethodsInternal(List<Method> result) {
-        getDeclaredMethods(true, result);
+        getDeclaredMethodsUnchecked(true, result);
         if (!isInterface()) {
             // Search superclasses, for interfaces don't search java.lang.Object.
             for (Class<?> c = superClass; c != null; c = c.superClass) {
-                c.getDeclaredMethods(true, result);
+                c.getDeclaredMethodsUnchecked(true, result);
             }
         }
         // Search iftable which has a flattened and uniqued list of interfaces.
@@ -844,7 +848,7 @@
         if (iftable != null) {
             for (int i = 0; i < iftable.length; i += 2) {
                 Class<?> ifc = (Class<?>) iftable[i];
-                ifc.getDeclaredMethods(true, result);
+                ifc.getDeclaredMethodsUnchecked(true, result);
             }
         }
     }
@@ -902,7 +906,7 @@
         int initial_size = sFields == null ? 0 : sFields.length;
         initial_size += iFields == null ? 0 : iFields.length;
         ArrayList<Field> fields = new ArrayList(initial_size);
-        getDeclaredFields(false, fields);
+        getDeclaredFieldsUnchecked(false, fields);
         Field[] result = fields.toArray(new Field[fields.size()]);
         for (Field f : result) {
             f.getType();  // Throw NoClassDefFoundError if type cannot be resolved.
@@ -910,7 +914,15 @@
         return result;
     }
 
-    private void getDeclaredFields(boolean publicOnly, List<Field> fields) {
+    /**
+     * Populates a list of fields without performing any security or type
+     * resolution checks first. If no fields exist, the list is not modified.
+     *
+     * @param publicOnly Whether to return only public fields.
+     * @param fields A list to populate with declared fields.
+     * @hide
+     */
+    public void getDeclaredFieldsUnchecked(boolean publicOnly, List<Field> fields) {
         if (iFields != null) {
             for (ArtField f : iFields) {
                 if (!publicOnly || Modifier.isPublic(f.getAccessFlags())) {
@@ -932,20 +944,42 @@
      * may return a non-public member.
      */
     private Field getDeclaredFieldInternal(String name) {
+
         if (iFields != null) {
-            for (ArtField f : iFields) {
-                if (f.getName().equals(name)) {
-                    return new Field(f);
-                }
+            final ArtField matched = findByName(name, iFields);
+            if (matched != null) {
+                return new Field(matched);
             }
         }
         if (sFields != null) {
-            for (ArtField f : sFields) {
-                if (f.getName().equals(name)) {
-                    return new Field(f);
-                }
+            final ArtField matched = findByName(name, sFields);
+            if (matched != null) {
+                return new Field(matched);
             }
         }
+
+        return null;
+    }
+
+    /**
+     * Performs a binary search through {@code fields} for a field whose name
+     * is {@code name}. Returns {@code null} if no matching field exists.
+     */
+    private static ArtField findByName(String name, ArtField[] fields) {
+        int low = 0, high = fields.length - 1;
+        while (low <= high) {
+            final int mid = (low + high) >>> 1;
+            final ArtField f = fields[mid];
+            final int result = f.getName().compareTo(name);
+            if (result < 0) {
+                low = mid + 1;
+            } else if (result == 0) {
+                return f;
+            } else {
+                high = mid - 1;
+            }
+        }
+
         return null;
     }
 
@@ -1103,7 +1137,7 @@
     private void getPublicFieldsRecursive(List<Field> result) {
         // search superclasses
         for (Class<?> c = this; c != null; c = c.superClass) {
-            c.getDeclaredFields(true, result);
+            c.getDeclaredFieldsUnchecked(true, result);
         }
 
         // search iftable which has a flattened and uniqued list of interfaces
@@ -1111,7 +1145,7 @@
         if (iftable != null) {
             for (int i = 0; i < iftable.length; i += 2) {
                 Class<?> ifc = (Class<?>) iftable[i];
-                ifc.getDeclaredFields(true, result);
+                ifc.getDeclaredFieldsUnchecked(true, result);
             }
         }
     }
diff --git a/libart/src/main/java/java/lang/Daemons.java b/libart/src/main/java/java/lang/Daemons.java
index 6b3344c..485f2c9 100644
--- a/libart/src/main/java/java/lang/Daemons.java
+++ b/libart/src/main/java/java/lang/Daemons.java
@@ -20,6 +20,7 @@
 import java.lang.ref.FinalizerReference;
 import java.lang.ref.Reference;
 import java.lang.ref.ReferenceQueue;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.TimeoutException;
 import libcore.util.EmptyArray;
 
@@ -323,11 +324,16 @@
 
     private static class GCDaemon extends Daemon {
         private static final GCDaemon INSTANCE = new GCDaemon();
+        private static final AtomicBoolean atomicBoolean = new AtomicBoolean();
 
         public void requestGC() {
+            if (atomicBoolean.getAndSet(true)) {
+              return;
+            }
             synchronized (this) {
                 notify();
             }
+            atomicBoolean.set(false);
         }
 
         @Override public void run() {
diff --git a/libart/src/main/java/java/lang/reflect/ArtMethod.java b/libart/src/main/java/java/lang/reflect/ArtMethod.java
index 6d21f59..95e03c6 100644
--- a/libart/src/main/java/java/lang/reflect/ArtMethod.java
+++ b/libart/src/main/java/java/lang/reflect/ArtMethod.java
@@ -53,39 +53,6 @@
     /** Short-cut to declaringClass.dexCache.resolvedTypes */
     /* package */ Class<?>[] dexCacheResolvedTypes;
 
-    /** Short-cut to declaringClass.dexCache.strings */
-    private String[] dexCacheStrings;
-
-    /**
-     * Method dispatch from the interpreter invokes this pointer which may cause a bridge into
-     * compiled code.
-     */
-    private long entryPointFromInterpreter;
-
-    /**
-     * Pointer to JNI function registered to this method, or a function to resolve the JNI function.
-     */
-    private long entryPointFromJni;
-
-    /**
-     * Method dispatch from portable compiled code invokes this pointer which may cause bridging
-     * into quick compiled code or the interpreter.
-     * Uncomment to enable.
-     */
-    // private long entryPointFromPortableCompiledCode;
-
-    /**
-     * Method dispatch from quick compiled code invokes this pointer which may cause bridging
-     * into portable compiled code or the interpreter.
-     */
-    private long entryPointFromQuickCompiledCode;
-
-    /**
-     * Pointer to a data structure created by the compiler and used by the garbage collector to
-     * determine which registers hold live references to objects within the heap.
-     */
-    private long gcMap;
-
     /** Bits encoding access (e.g. public, private) as well as other runtime specific flags */
     private int accessFlags;
 
@@ -210,12 +177,7 @@
      * Method we can avoid one indirection.
      */
     private String getDexCacheString(Dex dex, int dexStringIndex) {
-        String s = (String) dexCacheStrings[dexStringIndex];
-        if (s == null) {
-            s = dex.strings().get(dexStringIndex).intern();
-            dexCacheStrings[dexStringIndex] = s;
-        }
-        return s;
+        return declaringClass.getDexCacheString(dex, dexStringIndex);
     }
 
     /**
diff --git a/luni/src/main/files/cacerts/04f60c28.0 b/luni/src/main/files/cacerts/04f60c28.0
new file mode 100644
index 0000000..dec2f4e
--- /dev/null
+++ b/luni/src/main/files/cacerts/04f60c28.0
@@ -0,0 +1,54 @@
+-----BEGIN CERTIFICATE-----
+MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl
+eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT
+JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx
+MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
+Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg
+VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm
+aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo
+I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng
+o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G
+A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB
+zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW
+RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
+-----END CERTIFICATE-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            5c:8b:99:c5:5a:94:c5:d2:71:56:de:cd:89:80:cc:26
+    Signature Algorithm: ecdsa-with-SHA384
+        Issuer: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust ECC Certification Authority
+        Validity
+            Not Before: Feb  1 00:00:00 2010 GMT
+            Not After : Jan 18 23:59:59 2038 GMT
+        Subject: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust ECC Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: id-ecPublicKey
+                Public-Key: (384 bit)
+                pub: 
+                    04:1a:ac:54:5a:a9:f9:68:23:e7:7a:d5:24:6f:53:
+                    c6:5a:d8:4b:ab:c6:d5:b6:d1:e6:73:71:ae:dd:9c:
+                    d6:0c:61:fd:db:a0:89:03:b8:05:14:ec:57:ce:ee:
+                    5d:3f:e2:21:b3:ce:f7:d4:8a:79:e0:a3:83:7e:2d:
+                    97:d0:61:c4:f1:99:dc:25:91:63:ab:7f:30:a3:b4:
+                    70:e2:c7:a1:33:9c:f3:bf:2e:5c:53:b1:5f:b3:7d:
+                    32:7f:8a:34:e3:79:79
+                ASN1 OID: secp384r1
+        X509v3 extensions:
+            X509v3 Subject Key Identifier: 
+                3A:E1:09:86:D4:CF:19:C2:96:76:74:49:76:DC:E0:35:C6:63:63:9A
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: ecdsa-with-SHA384
+         30:65:02:30:36:67:a1:16:08:dc:e4:97:00:41:1d:4e:be:e1:
+         63:01:cf:3b:aa:42:11:64:a0:9d:94:39:02:11:79:5c:7b:1d:
+         fa:64:b9:ee:16:42:b3:bf:8a:c2:09:c4:ec:e4:b1:4d:02:31:
+         00:e9:2a:61:47:8c:52:4a:4b:4e:18:70:f6:d6:44:d6:6e:f5:
+         83:ba:6d:58:bd:24:d9:56:48:ea:ef:c4:a2:46:81:88:6a:3a:
+         46:d1:a9:9b:4d:c9:61:da:d1:5d:57:6a:18
+SHA1 Fingerprint=D1:CB:CA:5D:B2:D5:2A:7F:69:3B:67:4D:E5:F0:5A:1D:0C:95:7D:F0
diff --git a/luni/src/main/files/cacerts/0d69c7e1.0 b/luni/src/main/files/cacerts/0d69c7e1.0
new file mode 100644
index 0000000..84c387e
--- /dev/null
+++ b/luni/src/main/files/cacerts/0d69c7e1.0
@@ -0,0 +1,47 @@
+-----BEGIN CERTIFICATE-----
+MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk
+MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH
+bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX
+DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD
+QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ
+FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F
+uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX
+kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs
+ewv4n4Q=
+-----END CERTIFICATE-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            2a:38:a4:1c:96:0a:04:de:42:b2:28:a5:0b:e8:34:98:02
+    Signature Algorithm: ecdsa-with-SHA256
+        Issuer: OU=GlobalSign ECC Root CA - R4, O=GlobalSign, CN=GlobalSign
+        Validity
+            Not Before: Nov 13 00:00:00 2012 GMT
+            Not After : Jan 19 03:14:07 2038 GMT
+        Subject: OU=GlobalSign ECC Root CA - R4, O=GlobalSign, CN=GlobalSign
+        Subject Public Key Info:
+            Public Key Algorithm: id-ecPublicKey
+                Public-Key: (256 bit)
+                pub: 
+                    04:b8:c6:79:d3:8f:6c:25:0e:9f:2e:39:19:1c:03:
+                    a4:ae:9a:e5:39:07:09:16:ca:63:b1:b9:86:f8:8a:
+                    57:c1:57:ce:42:fa:73:a1:f7:65:42:ff:1e:c1:00:
+                    b2:6e:73:0e:ff:c7:21:e5:18:a4:aa:d9:71:3f:a8:
+                    d4:b9:ce:8c:1d
+                ASN1 OID: prime256v1
+        X509v3 extensions:
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+            X509v3 Subject Key Identifier: 
+                54:B0:7B:AD:45:B8:E2:40:7F:FB:0A:6E:FB:BE:33:C9:3C:A3:84:D5
+    Signature Algorithm: ecdsa-with-SHA256
+         30:45:02:21:00:dc:92:a1:a0:13:a6:cf:03:b0:e6:c4:21:97:
+         90:fa:14:57:2d:03:ec:ee:3c:d3:6e:ca:a8:6c:76:bc:a2:de:
+         bb:02:20:27:a8:85:27:35:9b:56:c6:a3:f2:47:d2:b7:6e:1b:
+         02:00:17:aa:67:a6:15:91:de:fa:94:ec:7b:0b:f8:9f:84
+SHA1 Fingerprint=69:69:56:2E:40:80:F4:24:A1:E7:19:9F:14:BA:F3:EE:58:AB:6A:BB
diff --git a/luni/src/main/files/cacerts/2add47b6.0 b/luni/src/main/files/cacerts/2add47b6.0
new file mode 100644
index 0000000..aa88539
--- /dev/null
+++ b/luni/src/main/files/cacerts/2add47b6.0
@@ -0,0 +1,52 @@
+-----BEGIN CERTIFICATE-----
+MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk
+MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH
+bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX
+DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD
+QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc
+8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke
+hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI
+KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg
+515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO
+xwy8p2Fp8fc74SrL+SvzZpA3
+-----END CERTIFICATE-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            60:59:49:e0:26:2e:bb:55:f9:0a:77:8a:71:f9:4a:d8:6c
+    Signature Algorithm: ecdsa-with-SHA384
+        Issuer: OU=GlobalSign ECC Root CA - R5, O=GlobalSign, CN=GlobalSign
+        Validity
+            Not Before: Nov 13 00:00:00 2012 GMT
+            Not After : Jan 19 03:14:07 2038 GMT
+        Subject: OU=GlobalSign ECC Root CA - R5, O=GlobalSign, CN=GlobalSign
+        Subject Public Key Info:
+            Public Key Algorithm: id-ecPublicKey
+                Public-Key: (384 bit)
+                pub: 
+                    04:47:45:0e:96:fb:7d:5d:bf:e9:39:d1:21:f8:9f:
+                    0b:b6:d5:7b:1e:92:3a:48:59:1c:f0:62:31:2d:c0:
+                    7a:28:fe:1a:a7:5c:b3:b6:cc:97:e7:45:d4:58:fa:
+                    d1:77:6d:43:a2:c0:87:65:34:0a:1f:7a:dd:eb:3c:
+                    33:a1:c5:9d:4d:a4:6f:41:95:38:7f:c9:1e:84:eb:
+                    d1:9e:49:92:87:94:87:0c:3a:85:4a:66:9f:9d:59:
+                    93:4d:97:61:06:86:4a
+                ASN1 OID: secp384r1
+        X509v3 extensions:
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+            X509v3 Subject Key Identifier: 
+                3D:E6:29:48:9B:EA:07:CA:21:44:4A:26:DE:6E:DE:D2:83:D0:9F:59
+    Signature Algorithm: ecdsa-with-SHA384
+         30:65:02:31:00:e5:69:12:c9:6e:db:c6:31:ba:09:41:e1:97:
+         f8:fb:fd:9a:e2:7d:12:c9:ed:7c:64:d3:cb:05:25:8b:56:d9:
+         a0:e7:5e:5d:4e:0b:83:9c:5b:76:29:a0:09:26:21:6a:62:02:
+         30:71:d2:b5:8f:5c:ea:3b:e1:78:09:85:a8:75:92:3b:c8:5c:
+         fd:48:ef:0d:74:22:a8:08:e2:6e:c5:49:ce:c7:0c:bc:a7:61:
+         69:f1:f7:3b:e1:2a:cb:f9:2b:f3:66:90:37
+SHA1 Fingerprint=1F:24:C6:30:CD:A4:18:EF:20:69:FF:AD:4F:DD:5F:46:3A:1B:69:AA
diff --git a/luni/src/main/files/cacerts/35105088.0 b/luni/src/main/files/cacerts/35105088.0
new file mode 100644
index 0000000..3728c3b
--- /dev/null
+++ b/luni/src/main/files/cacerts/35105088.0
@@ -0,0 +1,123 @@
+-----BEGIN CERTIFICATE-----
+MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB
+iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
+cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
+BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw
+MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
+aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy
+dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
+AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B
+3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY
+tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/
+Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2
+VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT
+79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6
+c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT
+Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l
+c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee
+UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE
+Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
+BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G
+A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF
+Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO
+VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3
+ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs
+8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR
+iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze
+Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ
+XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/
+qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB
+VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB
+L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG
+jjxDah2nGN59PRbxYvnKkKj9
+-----END CERTIFICATE-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            01:fd:6d:30:fc:a3:ca:51:a8:1b:bc:64:0e:35:03:2d
+    Signature Algorithm: sha384WithRSAEncryption
+        Issuer: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority
+        Validity
+            Not Before: Feb  1 00:00:00 2010 GMT
+            Not After : Jan 18 23:59:59 2038 GMT
+        Subject: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (4096 bit)
+                Modulus:
+                    00:80:12:65:17:36:0e:c3:db:08:b3:d0:ac:57:0d:
+                    76:ed:cd:27:d3:4c:ad:50:83:61:e2:aa:20:4d:09:
+                    2d:64:09:dc:ce:89:9f:cc:3d:a9:ec:f6:cf:c1:dc:
+                    f1:d3:b1:d6:7b:37:28:11:2b:47:da:39:c6:bc:3a:
+                    19:b4:5f:a6:bd:7d:9d:a3:63:42:b6:76:f2:a9:3b:
+                    2b:91:f8:e2:6f:d0:ec:16:20:90:09:3e:e2:e8:74:
+                    c9:18:b4:91:d4:62:64:db:7f:a3:06:f1:88:18:6a:
+                    90:22:3c:bc:fe:13:f0:87:14:7b:f6:e4:1f:8e:d4:
+                    e4:51:c6:11:67:46:08:51:cb:86:14:54:3f:bc:33:
+                    fe:7e:6c:9c:ff:16:9d:18:bd:51:8e:35:a6:a7:66:
+                    c8:72:67:db:21:66:b1:d4:9b:78:03:c0:50:3a:e8:
+                    cc:f0:dc:bc:9e:4c:fe:af:05:96:35:1f:57:5a:b7:
+                    ff:ce:f9:3d:b7:2c:b6:f6:54:dd:c8:e7:12:3a:4d:
+                    ae:4c:8a:b7:5c:9a:b4:b7:20:3d:ca:7f:22:34:ae:
+                    7e:3b:68:66:01:44:e7:01:4e:46:53:9b:33:60:f7:
+                    94:be:53:37:90:73:43:f3:32:c3:53:ef:db:aa:fe:
+                    74:4e:69:c7:6b:8c:60:93:de:c4:c7:0c:df:e1:32:
+                    ae:cc:93:3b:51:78:95:67:8b:ee:3d:56:fe:0c:d0:
+                    69:0f:1b:0f:f3:25:26:6b:33:6d:f7:6e:47:fa:73:
+                    43:e5:7e:0e:a5:66:b1:29:7c:32:84:63:55:89:c4:
+                    0d:c1:93:54:30:19:13:ac:d3:7d:37:a7:eb:5d:3a:
+                    6c:35:5c:db:41:d7:12:da:a9:49:0b:df:d8:80:8a:
+                    09:93:62:8e:b5:66:cf:25:88:cd:84:b8:b1:3f:a4:
+                    39:0f:d9:02:9e:eb:12:4c:95:7c:f3:6b:05:a9:5e:
+                    16:83:cc:b8:67:e2:e8:13:9d:cc:5b:82:d3:4c:b3:
+                    ed:5b:ff:de:e5:73:ac:23:3b:2d:00:bf:35:55:74:
+                    09:49:d8:49:58:1a:7f:92:36:e6:51:92:0e:f3:26:
+                    7d:1c:4d:17:bc:c9:ec:43:26:d0:bf:41:5f:40:a9:
+                    44:44:f4:99:e7:57:87:9e:50:1f:57:54:a8:3e:fd:
+                    74:63:2f:b1:50:65:09:e6:58:42:2e:43:1a:4c:b4:
+                    f0:25:47:59:fa:04:1e:93:d4:26:46:4a:50:81:b2:
+                    de:be:78:b7:fc:67:15:e1:c9:57:84:1e:0f:63:d6:
+                    e9:62:ba:d6:5f:55:2e:ea:5c:c6:28:08:04:25:39:
+                    b8:0e:2b:a9:f2:4c:97:1c:07:3f:0d:52:f5:ed:ef:
+                    2f:82:0f
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Key Identifier: 
+                53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: sha384WithRSAEncryption
+         5c:d4:7c:0d:cf:f7:01:7d:41:99:65:0c:73:c5:52:9f:cb:f8:
+         cf:99:06:7f:1b:da:43:15:9f:9e:02:55:57:96:14:f1:52:3c:
+         27:87:94:28:ed:1f:3a:01:37:a2:76:fc:53:50:c0:84:9b:c6:
+         6b:4e:ba:8c:21:4f:a2:8e:55:62:91:f3:69:15:d8:bc:88:e3:
+         c4:aa:0b:fd:ef:a8:e9:4b:55:2a:06:20:6d:55:78:29:19:ee:
+         5f:30:5c:4b:24:11:55:ff:24:9a:6e:5e:2a:2b:ee:0b:4d:9f:
+         7f:f7:01:38:94:14:95:43:07:09:fb:60:a9:ee:1c:ab:12:8c:
+         a0:9a:5e:a7:98:6a:59:6d:8b:3f:08:fb:c8:d1:45:af:18:15:
+         64:90:12:0f:73:28:2e:c5:e2:24:4e:fc:58:ec:f0:f4:45:fe:
+         22:b3:eb:2f:8e:d2:d9:45:61:05:c1:97:6f:a8:76:72:8f:8b:
+         8c:36:af:bf:0d:05:ce:71:8d:e6:a6:6f:1f:6c:a6:71:62:c5:
+         d8:d0:83:72:0c:f1:67:11:89:0c:9c:13:4c:72:34:df:bc:d5:
+         71:df:aa:71:dd:e1:b9:6c:8c:3c:12:5d:65:da:bd:57:12:b6:
+         43:6b:ff:e5:de:4d:66:11:51:cf:99:ae:ec:17:b6:e8:71:91:
+         8c:de:49:fe:dd:35:71:a2:15:27:94:1c:cf:61:e3:26:bb:6f:
+         a3:67:25:21:5d:e6:dd:1d:0b:2e:68:1b:3b:82:af:ec:83:67:
+         85:d4:98:51:74:b1:b9:99:80:89:ff:7f:78:19:5c:79:4a:60:
+         2e:92:40:ae:4c:37:2a:2c:c9:c7:62:c8:0e:5d:f7:36:5b:ca:
+         e0:25:25:01:b4:dd:1a:07:9c:77:00:3f:d0:dc:d5:ec:3d:d4:
+         fa:bb:3f:cc:85:d6:6f:7f:a9:2d:df:b9:02:f7:f5:97:9a:b5:
+         35:da:c3:67:b0:87:4a:a9:28:9e:23:8e:ff:5c:27:6b:e1:b0:
+         4f:f3:07:ee:00:2e:d4:59:87:cb:52:41:95:ea:f4:47:d7:ee:
+         64:41:55:7c:8d:59:02:95:dd:62:9d:c2:b9:ee:5a:28:74:84:
+         a5:9b:b7:90:c7:0c:07:df:f5:89:36:74:32:d6:28:c1:b0:b0:
+         0b:e0:9c:4c:c3:1c:d6:fc:e3:69:b5:47:46:81:2f:a2:82:ab:
+         d3:63:44:70:c4:8d:ff:2d:33:ba:ad:8f:7b:b5:70:88:ae:3e:
+         19:cf:40:28:d8:fc:c8:90:bb:5d:99:22:f5:52:e6:58:c5:1f:
+         88:31:43:ee:88:1d:d7:c6:8e:3c:43:6a:1d:a7:18:de:7d:3d:
+         16:f1:62:f9:ca:90:a8:fd
+SHA1 Fingerprint=2B:8F:1B:57:33:0D:BB:A2:D0:7A:6C:51:F7:0E:E9:0D:DA:B9:AD:8E
diff --git a/luni/src/main/files/cacerts/d4c339cb.0 b/luni/src/main/files/cacerts/d4c339cb.0
new file mode 100644
index 0000000..3f5e924
--- /dev/null
+++ b/luni/src/main/files/cacerts/d4c339cb.0
@@ -0,0 +1,123 @@
+-----BEGIN CERTIFICATE-----
+MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB
+hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
+BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5
+MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
+EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR
+6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X
+pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC
+9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV
+/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf
+Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z
++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w
+qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah
+SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC
+u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf
+Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq
+crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
+FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB
+/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl
+wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM
+4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV
+2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna
+FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ
+CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK
+boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke
+jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL
+S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb
+QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl
+0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB
+NVOFBkpdn627G190
+-----END CERTIFICATE-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            4c:aa:f9:ca:db:63:6f:e0:1f:f7:4e:d8:5b:03:86:9d
+    Signature Algorithm: sha384WithRSAEncryption
+        Issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Certification Authority
+        Validity
+            Not Before: Jan 19 00:00:00 2010 GMT
+            Not After : Jan 18 23:59:59 2038 GMT
+        Subject: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (4096 bit)
+                Modulus:
+                    00:91:e8:54:92:d2:0a:56:b1:ac:0d:24:dd:c5:cf:
+                    44:67:74:99:2b:37:a3:7d:23:70:00:71:bc:53:df:
+                    c4:fa:2a:12:8f:4b:7f:10:56:bd:9f:70:72:b7:61:
+                    7f:c9:4b:0f:17:a7:3d:e3:b0:04:61:ee:ff:11:97:
+                    c7:f4:86:3e:0a:fa:3e:5c:f9:93:e6:34:7a:d9:14:
+                    6b:e7:9c:b3:85:a0:82:7a:76:af:71:90:d7:ec:fd:
+                    0d:fa:9c:6c:fa:df:b0:82:f4:14:7e:f9:be:c4:a6:
+                    2f:4f:7f:99:7f:b5:fc:67:43:72:bd:0c:00:d6:89:
+                    eb:6b:2c:d3:ed:8f:98:1c:14:ab:7e:e5:e3:6e:fc:
+                    d8:a8:e4:92:24:da:43:6b:62:b8:55:fd:ea:c1:bc:
+                    6c:b6:8b:f3:0e:8d:9a:e4:9b:6c:69:99:f8:78:48:
+                    30:45:d5:ad:e1:0d:3c:45:60:fc:32:96:51:27:bc:
+                    67:c3:ca:2e:b6:6b:ea:46:c7:c7:20:a0:b1:1f:65:
+                    de:48:08:ba:a4:4e:a9:f2:83:46:37:84:eb:e8:cc:
+                    81:48:43:67:4e:72:2a:9b:5c:bd:4c:1b:28:8a:5c:
+                    22:7b:b4:ab:98:d9:ee:e0:51:83:c3:09:46:4e:6d:
+                    3e:99:fa:95:17:da:7c:33:57:41:3c:8d:51:ed:0b:
+                    b6:5c:af:2c:63:1a:df:57:c8:3f:bc:e9:5d:c4:9b:
+                    af:45:99:e2:a3:5a:24:b4:ba:a9:56:3d:cf:6f:aa:
+                    ff:49:58:be:f0:a8:ff:f4:b8:ad:e9:37:fb:ba:b8:
+                    f4:0b:3a:f9:e8:43:42:1e:89:d8:84:cb:13:f1:d9:
+                    bb:e1:89:60:b8:8c:28:56:ac:14:1d:9c:0a:e7:71:
+                    eb:cf:0e:dd:3d:a9:96:a1:48:bd:3c:f7:af:b5:0d:
+                    22:4c:c0:11:81:ec:56:3b:f6:d3:a2:e2:5b:b7:b2:
+                    04:22:52:95:80:93:69:e8:8e:4c:65:f1:91:03:2d:
+                    70:74:02:ea:8b:67:15:29:69:52:02:bb:d7:df:50:
+                    6a:55:46:bf:a0:a3:28:61:7f:70:d0:c3:a2:aa:2c:
+                    21:aa:47:ce:28:9c:06:45:76:bf:82:18:27:b4:d5:
+                    ae:b4:cb:50:e6:6b:f4:4c:86:71:30:e9:a6:df:16:
+                    86:e0:d8:ff:40:dd:fb:d0:42:88:7f:a3:33:3a:2e:
+                    5c:1e:41:11:81:63:ce:18:71:6b:2b:ec:a6:8a:b7:
+                    31:5c:3a:6a:47:e0:c3:79:59:d6:20:1a:af:f2:6a:
+                    98:aa:72:bc:57:4a:d2:4b:9d:bb:10:fc:b0:4c:41:
+                    e5:ed:1d:3d:5e:28:9d:9c:cc:bf:b3:51:da:a7:47:
+                    e5:84:53
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Key Identifier: 
+                BB:AF:7E:02:3D:FA:A6:F1:3C:84:8E:AD:EE:38:98:EC:D9:32:32:D4
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: sha384WithRSAEncryption
+         0a:f1:d5:46:84:b7:ae:51:bb:6c:b2:4d:41:14:00:93:4c:9c:
+         cb:e5:c0:54:cf:a0:25:8e:02:f9:fd:b0:a2:0d:f5:20:98:3c:
+         13:2d:ac:56:a2:b0:d6:7e:11:92:e9:2e:ba:9e:2e:9a:72:b1:
+         bd:19:44:6c:61:35:a2:9a:b4:16:12:69:5a:8c:e1:d7:3e:a4:
+         1a:e8:2f:03:f4:ae:61:1d:10:1b:2a:a4:8b:7a:c5:fe:05:a6:
+         e1:c0:d6:c8:fe:9e:ae:8f:2b:ba:3d:99:f8:d8:73:09:58:46:
+         6e:a6:9c:f4:d7:27:d3:95:da:37:83:72:1c:d3:73:e0:a2:47:
+         99:03:38:5d:d5:49:79:00:29:1c:c7:ec:9b:20:1c:07:24:69:
+         57:78:b2:39:fc:3a:84:a0:b5:9c:7c:8d:bf:2e:93:62:27:b7:
+         39:da:17:18:ae:bd:3c:09:68:ff:84:9b:3c:d5:d6:0b:03:e3:
+         57:9e:14:f7:d1:eb:4f:c8:bd:87:23:b7:b6:49:43:79:85:5c:
+         ba:eb:92:0b:a1:c6:e8:68:a8:4c:16:b1:1a:99:0a:e8:53:2c:
+         92:bb:a1:09:18:75:0c:65:a8:7b:cb:23:b7:1a:c2:28:85:c3:
+         1b:ff:d0:2b:62:ef:a4:7b:09:91:98:67:8c:14:01:cd:68:06:
+         6a:63:21:75:03:80:88:8a:6e:81:c6:85:f2:a9:a4:2d:e7:f4:
+         a5:24:10:47:83:ca:cd:f4:8d:79:58:b1:06:9b:e7:1a:2a:d9:
+         9d:01:d7:94:7d:ed:03:4a:ca:f0:db:e8:a9:01:3e:f5:56:99:
+         c9:1e:8e:49:3d:bb:e5:09:b9:e0:4f:49:92:3d:16:82:40:cc:
+         cc:59:c6:e6:3a:ed:12:2e:69:3c:6c:95:b1:fd:aa:1d:7b:7f:
+         86:be:1e:0e:32:46:fb:fb:13:8f:75:7f:4c:8b:4b:46:63:fe:
+         00:34:40:70:c1:c3:b9:a1:dd:a6:70:e2:04:b3:41:bc:e9:80:
+         91:ea:64:9c:7a:e1:22:03:a9:9c:6e:6f:0e:65:4f:6c:87:87:
+         5e:f3:6e:a0:f9:75:a5:9b:40:e8:53:b2:27:9d:4a:b9:c0:77:
+         21:8d:ff:87:f2:de:bc:8c:ef:17:df:b7:49:0b:d1:f2:6e:30:
+         0b:1a:0e:4e:76:ed:11:fc:f5:e9:56:b2:7d:bf:c7:6d:0a:93:
+         8c:a5:d0:c0:b6:1d:be:3a:4e:94:a2:d7:6e:6c:0b:c2:8a:7c:
+         fa:20:f3:c4:e4:e5:cd:0d:a8:cb:91:92:b1:7c:85:ec:b5:14:
+         69:66:0e:82:e7:cd:ce:c8:2d:a6:51:7f:21:c1:35:53:85:06:
+         4a:5d:9f:ad:bb:1b:5f:74
+SHA1 Fingerprint=AF:E5:D2:44:A8:D1:19:42:30:FF:47:9F:E2:F8:97:BB:CD:7A:8C:B4
diff --git a/luni/src/main/java/android/system/Os.java b/luni/src/main/java/android/system/Os.java
index 0b80b52..9d6dc1b 100644
--- a/luni/src/main/java/android/system/Os.java
+++ b/luni/src/main/java/android/system/Os.java
@@ -16,20 +16,6 @@
 
 package android.system;
 
-import android.system.ErrnoException;
-import android.system.GaiException;
-import android.system.StructAddrinfo;
-import android.system.StructFlock;
-import android.system.StructGroupReq;
-import android.system.StructGroupSourceReq;
-import android.system.StructLinger;
-import android.system.StructPasswd;
-import android.system.StructPollfd;
-import android.system.StructStat;
-import android.system.StructStatVfs;
-import android.system.StructTimeval;
-import android.system.StructUcred;
-import android.system.StructUtsname;
 import android.util.MutableInt;
 import android.util.MutableLong;
 import java.io.FileDescriptor;
@@ -125,7 +111,7 @@
 
   /** @hide */ public static int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException { return Libcore.os.fcntlVoid(fd, cmd); }
   /** @hide */ public static int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException { return Libcore.os.fcntlLong(fd, cmd, arg); }
-  /** @hide */ public static int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException { return Libcore.os.fcntlFlock(fd, cmd, arg); }
+  /** @hide */ public static int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException, InterruptedIOException { return Libcore.os.fcntlFlock(fd, cmd, arg); }
 
   /**
    * See <a href="http://man7.org/linux/man-pages/man2/fdatasync.2.html">fdatasync(2)</a>.
diff --git a/luni/src/main/java/java/lang/System.java b/luni/src/main/java/java/lang/System.java
index 55ca762..9425894 100644
--- a/luni/src/main/java/java/lang/System.java
+++ b/luni/src/main/java/java/lang/System.java
@@ -894,7 +894,7 @@
 
     /**
      * Sets the value of a particular system property. Most system properties
-     * are read only and cannot be cleared or modified. See {@link #setProperty} for a
+     * are read only and cannot be cleared or modified. See {@link #getProperty} for a
      * list of such properties.
      *
      * @return the old value of the property or {@code null} if the property
@@ -907,7 +907,7 @@
 
     /**
      * Removes a specific system property. Most system properties
-     * are read only and cannot be cleared or modified. See {@link #setProperty} for a
+     * are read only and cannot be cleared or modified. See {@link #getProperty} for a
      * list of such properties.
      *
      * @return the property value or {@code null} if the property didn't exist.
@@ -1069,7 +1069,7 @@
     /**
      * Attempts to set all system properties. Copies all properties from
      * {@code p} and discards system properties that are read only and cannot
-     * be modified. See {@link #setProperty} for a list of such properties.
+     * be modified. See {@link #getProperty} for a list of such properties.
      */
     public static void setProperties(Properties p) {
         PropertiesWithNonOverrideableDefaults userProperties =
diff --git a/luni/src/main/java/java/net/URI.java b/luni/src/main/java/java/net/URI.java
index f206473..60bb5db 100644
--- a/luni/src/main/java/java/net/URI.java
+++ b/luni/src/main/java/java/net/URI.java
@@ -571,7 +571,10 @@
 
     private boolean isValidDomainName(String host) {
         try {
-            UriCodec.validateSimple(host, "-.");
+            // The RFCs don't permit underscores in hostnames, but URI has to because
+            // a certain large website doesn't seem to care about standards and specs.
+            // See bugs 18023709, 17579865 and 18016625.
+            UriCodec.validateSimple(host, "_-.");
         } catch (URISyntaxException e) {
             return false;
         }
diff --git a/luni/src/main/java/java/nio/DatagramChannelImpl.java b/luni/src/main/java/java/nio/DatagramChannelImpl.java
index 9008637..8dd6f29 100644
--- a/luni/src/main/java/java/nio/DatagramChannelImpl.java
+++ b/luni/src/main/java/java/nio/DatagramChannelImpl.java
@@ -274,15 +274,9 @@
     private SocketAddress receiveDirectImpl(ByteBuffer target, boolean loop) throws IOException {
         SocketAddress retAddr = null;
         DatagramPacket receivePacket = new DatagramPacket(EmptyArray.BYTE, 0);
-        int oldposition = target.position();
-        int received;
         do {
-            received = IoBridge.recvfrom(false, fd, target, 0, receivePacket, isConnected());
+            IoBridge.recvfrom(false, fd, target, 0, receivePacket, isConnected());
             if (receivePacket.getAddress() != null) {
-                // copy the data of received packet
-                if (received > 0) {
-                    target.position(oldposition + received);
-                }
                 retAddr = receivePacket.getSocketAddress();
                 break;
             }
@@ -309,11 +303,7 @@
             int sendCount = 0;
             try {
                 begin();
-                int oldPosition = source.position();
                 sendCount = IoBridge.sendto(fd, source, 0, isa.getAddress(), isa.getPort());
-                if (sendCount > 0) {
-                    source.position(oldPosition + sendCount);
-                }
                 if (!isBound) {
                     onBind(true /* updateSocketState */);
                 }
@@ -336,10 +326,6 @@
         int readCount;
         if (target.isDirect() || target.hasArray()) {
             readCount = readImpl(target);
-            if (readCount > 0) {
-                target.position(target.position() + readCount);
-            }
-
         } else {
             byte[] readArray = new byte[target.remaining()];
             ByteBuffer readBuffer = ByteBuffer.wrap(readArray);
@@ -406,11 +392,7 @@
             return 0;
         }
 
-        int writeCount = writeImpl(src);
-        if (writeCount > 0) {
-            src.position(src.position() + writeCount);
-        }
-        return writeCount;
+        return writeImpl(src);
     }
 
     /**
diff --git a/luni/src/main/java/java/nio/FileChannelImpl.java b/luni/src/main/java/java/nio/FileChannelImpl.java
index d72b9f0..b560864 100644
--- a/luni/src/main/java/java/nio/FileChannelImpl.java
+++ b/luni/src/main/java/java/nio/FileChannelImpl.java
@@ -323,9 +323,7 @@
         } finally {
             end(completed && bytesRead >= 0);
         }
-        if (bytesRead > 0) {
-            buffer.position(buffer.position() + bytesRead);
-        }
+
         return bytesRead;
     }
 
@@ -508,9 +506,6 @@
         } finally {
             end(completed);
         }
-        if (bytesWritten > 0) {
-            buffer.position(buffer.position() + bytesWritten);
-        }
         return bytesWritten;
     }
 
diff --git a/luni/src/main/java/java/nio/SocketChannelImpl.java b/luni/src/main/java/java/nio/SocketChannelImpl.java
index d5cb716c..d09aaef 100644
--- a/luni/src/main/java/java/nio/SocketChannelImpl.java
+++ b/luni/src/main/java/java/nio/SocketChannelImpl.java
@@ -340,9 +340,6 @@
                     begin();
                 }
                 readCount = IoBridge.recvfrom(true, fd, dst, 0, null, false);
-                if (readCount > 0) {
-                    dst.position(dst.position() + readCount);
-                }
             } finally {
                 if (isBlocking()) {
                     end(readCount > 0);
@@ -404,9 +401,6 @@
                     begin();
                 }
                 writeCount = IoBridge.sendto(fd, src, 0, null, 0);
-                if (writeCount > 0) {
-                    src.position(src.position() + writeCount);
-                }
             } finally {
                 if (isBlocking()) {
                     end(writeCount >= 0);
diff --git a/luni/src/main/java/java/text/DateFormat.java b/luni/src/main/java/java/text/DateFormat.java
index 3055843..ebdf73a 100644
--- a/luni/src/main/java/java/text/DateFormat.java
+++ b/luni/src/main/java/java/text/DateFormat.java
@@ -66,6 +66,13 @@
     private static final long serialVersionUID = 7218322306649953788L;
 
     /**
+     * A tri-state boolean. If we're running stand-alone this will be null.
+     * If we're running in an app, the frameworks will have told us the user preference.
+     * @hide
+     */
+    public static Boolean is24Hour;
+
+    /**
      * The calendar that this {@code DateFormat} uses to format a number
      * representing a date.
      */
@@ -466,6 +473,7 @@
      * @hide for internal use only.
      */
     public static final void set24HourTimePref(boolean is24Hour) {
+        DateFormat.is24Hour = is24Hour;
     }
 
     /**
diff --git a/luni/src/main/java/java/text/DecimalFormatSymbols.java b/luni/src/main/java/java/text/DecimalFormatSymbols.java
index fba2d6e..2f1d4f4 100644
--- a/luni/src/main/java/java/text/DecimalFormatSymbols.java
+++ b/luni/src/main/java/java/text/DecimalFormatSymbols.java
@@ -47,7 +47,7 @@
     private char decimalSeparator;
     private char groupingSeparator;
     private char patternSeparator;
-    private char percent;
+    private String percent;
     private char perMill;
     private char monetarySeparator;
     private String minusSign;
@@ -189,7 +189,7 @@
                 NaN.equals(obj.NaN) &&
                 patternSeparator == obj.patternSeparator &&
                 perMill == obj.perMill &&
-                percent == obj.percent &&
+                percent.equals(obj.percent) &&
                 zeroDigit == obj.zeroDigit;
     }
 
@@ -306,6 +306,11 @@
         return minusSign;
     }
 
+    /** @hide */
+    public String getPercentString() {
+        return percent;
+    }
+
     /**
      * Returns the character which represents the decimal point in a monetary
      * value.
@@ -341,7 +346,10 @@
      * @return the percent character.
      */
     public char getPercent() {
-        return percent;
+        if (percent.length() == 1) {
+            return percent.charAt(0);
+        }
+        throw new UnsupportedOperationException("Percent spans multiple characters: " + percent);
     }
 
     /**
@@ -378,7 +386,7 @@
         result = 31*result + decimalSeparator;
         result = 31*result + groupingSeparator;
         result = 31*result + patternSeparator;
-        result = 31*result + percent;
+        result = 31*result + percent.hashCode();
         result = 31*result + perMill;
         result = 31*result + monetarySeparator;
         result = 31*result + minusSign.hashCode();
@@ -406,9 +414,6 @@
         if (currency == null) {
             throw new NullPointerException("currency == null");
         }
-        if (currency == this.currency) {
-            return;
-        }
         this.currency = currency;
         intlCurrencySymbol = currency.getCurrencyCode();
         currencySymbol = currency.getSymbol(locale);
@@ -544,7 +549,7 @@
      *            the percent character.
      */
     public void setPercent(char value) {
-        this.percent = value;
+        this.percent = String.valueOf(value);
     }
 
     /**
diff --git a/luni/src/main/java/java/util/Timer.java b/luni/src/main/java/java/util/Timer.java
index 7192f9b..6a3b305 100644
--- a/luni/src/main/java/java/util/Timer.java
+++ b/luni/src/main/java/java/util/Timer.java
@@ -25,7 +25,7 @@
  * <p>Each timer has one thread on which tasks are executed sequentially. When
  * this thread is busy running a task, runnable tasks may be subject to delays.
  *
- * <p>One-shot are scheduled to run at an absolute time or after a relative
+ * <p>One-shot tasks are scheduled to run at an absolute time or after a relative
  * delay.
  *
  * <p>Recurring tasks are scheduled with either a fixed period or a fixed rate:
diff --git a/luni/src/main/java/libcore/icu/LocaleData.java b/luni/src/main/java/libcore/icu/LocaleData.java
index 9e07244..cca38e1 100644
--- a/luni/src/main/java/libcore/icu/LocaleData.java
+++ b/luni/src/main/java/libcore/icu/LocaleData.java
@@ -87,6 +87,12 @@
     // Used by android.text.format.DateFormat.getDateFormatStringForSetting.
     public String shortDateFormat4;
 
+    // Used by DateFormat to implement 12- and 24-hour SHORT and MEDIUM.
+    public String timeFormat_hm;
+    public String timeFormat_Hm;
+    public String timeFormat_hms;
+    public String timeFormat_Hms;
+
     // Used by android.text.format.DateFormat.getTimeFormat.
     public String timeFormat12; // "hh:mm a"
     public String timeFormat24; // "HH:mm"
@@ -96,7 +102,7 @@
     public char decimalSeparator;
     public char groupingSeparator;
     public char patternSeparator;
-    public char percent;
+    public String percent;
     public char perMill;
     public char monetarySeparator;
     public String minusSign;
@@ -175,12 +181,22 @@
     public String getTimeFormat(int style) {
         switch (style) {
         case DateFormat.SHORT:
-            return shortTimeFormat;
+            if (DateFormat.is24Hour == null) {
+                return shortTimeFormat;
+            } else {
+                return DateFormat.is24Hour ? timeFormat_Hm : timeFormat_hm;
+            }
         case DateFormat.MEDIUM:
-            return mediumTimeFormat;
+            if (DateFormat.is24Hour == null) {
+                return mediumTimeFormat;
+            } else {
+                return DateFormat.is24Hour ? timeFormat_Hms : timeFormat_hms;
+            }
         case DateFormat.LONG:
+            // CLDR doesn't really have anything we can use to obey the 12-/24-hour preference.
             return longTimeFormat;
         case DateFormat.FULL:
+            // CLDR doesn't really have anything we can use to obey the 12-/24-hour preference.
             return fullTimeFormat;
         }
         throw new AssertionError();
@@ -192,9 +208,17 @@
             throw new AssertionError("couldn't initialize LocaleData for locale " + locale);
         }
 
-        // Get the "h:mm a" and "HH:mm" 12- and 24-hour time format strings.
-        localeData.timeFormat12 = ICU.getBestDateTimePattern("hm", locale);
-        localeData.timeFormat24 = ICU.getBestDateTimePattern("Hm", locale);
+        // Get the SHORT and MEDIUM 12- and 24-hour time format strings.
+        localeData.timeFormat_hm = ICU.getBestDateTimePattern("hm", locale);
+        localeData.timeFormat_Hm = ICU.getBestDateTimePattern("Hm", locale);
+        localeData.timeFormat_hms = ICU.getBestDateTimePattern("hms", locale);
+        localeData.timeFormat_Hms = ICU.getBestDateTimePattern("Hms", locale);
+        // We could move callers over to the other fields, but these seem simpler and discourage
+        // people from shooting themselves in the foot by learning about patterns and skeletons.
+        // TODO: the right fix here is probably to move callers over to java.text.DateFormat,
+        // so nothing outside libcore references these any more.
+        localeData.timeFormat12 = localeData.timeFormat_hm;
+        localeData.timeFormat24 = localeData.timeFormat_Hm;
 
         // Fix up a couple of patterns.
         if (localeData.fullTimeFormat != null) {
diff --git a/luni/src/main/java/libcore/icu/NativeDecimalFormat.java b/luni/src/main/java/libcore/icu/NativeDecimalFormat.java
index fd179c1..cf11ac7 100644
--- a/luni/src/main/java/libcore/icu/NativeDecimalFormat.java
+++ b/luni/src/main/java/libcore/icu/NativeDecimalFormat.java
@@ -158,7 +158,7 @@
                     dfs.getGroupingSeparator(), dfs.getInfinity(),
                     dfs.getInternationalCurrencySymbol(), dfs.getMinusSignString(),
                     dfs.getMonetaryDecimalSeparator(), dfs.getNaN(), dfs.getPatternSeparator(),
-                    dfs.getPercent(), dfs.getPerMill(), dfs.getZeroDigit());
+                    dfs.getPercentString(), dfs.getPerMill(), dfs.getZeroDigit());
             this.lastPattern = pattern;
         } catch (NullPointerException npe) {
             throw npe;
@@ -269,7 +269,7 @@
                 dfs.getDigit(), dfs.getExponentSeparator(), dfs.getGroupingSeparator(),
                 dfs.getInfinity(), dfs.getInternationalCurrencySymbol(), dfs.getMinusSignString(),
                 dfs.getMonetaryDecimalSeparator(), dfs.getNaN(), dfs.getPatternSeparator(),
-                dfs.getPercent(), dfs.getPerMill(), dfs.getZeroDigit());
+                dfs.getPercentString(), dfs.getPerMill(), dfs.getZeroDigit());
     }
 
     public void setDecimalFormatSymbols(final LocaleData localeData) {
@@ -626,13 +626,13 @@
     private static native long open(String pattern, String currencySymbol,
             char decimalSeparator, char digit, String exponentSeparator, char groupingSeparator,
             String infinity, String internationalCurrencySymbol, String minusSign,
-            char monetaryDecimalSeparator, String nan, char patternSeparator, char percent,
+            char monetaryDecimalSeparator, String nan, char patternSeparator, String percent,
             char perMill, char zeroDigit);
     private static native Number parse(long addr, String string, ParsePosition position, boolean parseBigDecimal);
     private static native void setDecimalFormatSymbols(long addr, String currencySymbol,
             char decimalSeparator, char digit, String exponentSeparator, char groupingSeparator,
             String infinity, String internationalCurrencySymbol, String minusSign,
-            char monetaryDecimalSeparator, String nan, char patternSeparator, char percent,
+            char monetaryDecimalSeparator, String nan, char patternSeparator, String percent,
             char perMill, char zeroDigit);
     private static native void setSymbol(long addr, int symbol, String str);
     private static native void setAttribute(long addr, int symbol, int i);
diff --git a/luni/src/main/java/libcore/icu/NativePluralRules.java b/luni/src/main/java/libcore/icu/NativePluralRules.java
index dbcf089..f9fe74b 100644
--- a/luni/src/main/java/libcore/icu/NativePluralRules.java
+++ b/luni/src/main/java/libcore/icu/NativePluralRules.java
@@ -55,6 +55,10 @@
      * to the first rule that matches the given value.
      */
     public int quantityForInt(int value) {
+        // Pre-L compatibility. http://b/18429565.
+        if (value < 0) {
+            return OTHER;
+        }
         return quantityForIntImpl(address, value);
     }
 
diff --git a/luni/src/main/java/libcore/io/ForwardingOs.java b/luni/src/main/java/libcore/io/ForwardingOs.java
index bf4b448..584fd58 100644
--- a/luni/src/main/java/libcore/io/ForwardingOs.java
+++ b/luni/src/main/java/libcore/io/ForwardingOs.java
@@ -67,7 +67,7 @@
     public void fchown(FileDescriptor fd, int uid, int gid) throws ErrnoException { os.fchown(fd, uid, gid); }
     public int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException { return os.fcntlVoid(fd, cmd); }
     public int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException { return os.fcntlLong(fd, cmd, arg); }
-    public int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException { return os.fcntlFlock(fd, cmd, arg); }
+    public int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException, InterruptedIOException { return os.fcntlFlock(fd, cmd, arg); }
     public void fdatasync(FileDescriptor fd) throws ErrnoException { os.fdatasync(fd); }
     public StructStat fstat(FileDescriptor fd) throws ErrnoException { return os.fstat(fd); }
     public StructStatVfs fstatvfs(FileDescriptor fd) throws ErrnoException { return os.fstatvfs(fd); }
diff --git a/luni/src/main/java/libcore/io/Os.java b/luni/src/main/java/libcore/io/Os.java
index 511bb27..9f080a6 100644
--- a/luni/src/main/java/libcore/io/Os.java
+++ b/luni/src/main/java/libcore/io/Os.java
@@ -58,7 +58,7 @@
     public void fchown(FileDescriptor fd, int uid, int gid) throws ErrnoException;
     public int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException;
     public int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException;
-    public int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException;
+    public int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException, InterruptedIOException;
     public void fdatasync(FileDescriptor fd) throws ErrnoException;
     public StructStat fstat(FileDescriptor fd) throws ErrnoException;
     public StructStatVfs fstatvfs(FileDescriptor fd) throws ErrnoException;
diff --git a/luni/src/main/java/libcore/io/Posix.java b/luni/src/main/java/libcore/io/Posix.java
index f5eaaa3..5bd1b06 100644
--- a/luni/src/main/java/libcore/io/Posix.java
+++ b/luni/src/main/java/libcore/io/Posix.java
@@ -61,7 +61,7 @@
     public native void fchown(FileDescriptor fd, int uid, int gid) throws ErrnoException;
     public native int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException;
     public native int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException;
-    public native int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException;
+    public native int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException, InterruptedIOException;
     public native void fdatasync(FileDescriptor fd) throws ErrnoException;
     public native StructStat fstat(FileDescriptor fd) throws ErrnoException;
     public native StructStatVfs fstatvfs(FileDescriptor fd) throws ErrnoException;
@@ -112,11 +112,17 @@
     public native void posix_fallocate(FileDescriptor fd, long offset, long length) throws ErrnoException;
     public native int prctl(int option, long arg2, long arg3, long arg4, long arg5) throws ErrnoException;
     public int pread(FileDescriptor fd, ByteBuffer buffer, long offset) throws ErrnoException, InterruptedIOException {
+        final int bytesRead;
+        final int position = buffer.position();
+
         if (buffer.isDirect()) {
-            return preadBytes(fd, buffer, buffer.position(), buffer.remaining(), offset);
+            bytesRead = preadBytes(fd, buffer, position, buffer.remaining(), offset);
         } else {
-            return preadBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + buffer.position(), buffer.remaining(), offset);
+            bytesRead = preadBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + position, buffer.remaining(), offset);
         }
+
+        maybeUpdateBufferPosition(buffer, position, bytesRead);
+        return bytesRead;
     }
     public int pread(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount, long offset) throws ErrnoException, InterruptedIOException {
         // This indirection isn't strictly necessary, but ensures that our public interface is type safe.
@@ -124,11 +130,17 @@
     }
     private native int preadBytes(FileDescriptor fd, Object buffer, int bufferOffset, int byteCount, long offset) throws ErrnoException, InterruptedIOException;
     public int pwrite(FileDescriptor fd, ByteBuffer buffer, long offset) throws ErrnoException, InterruptedIOException {
+        final int bytesWritten;
+        final int position = buffer.position();
+
         if (buffer.isDirect()) {
-            return pwriteBytes(fd, buffer, buffer.position(), buffer.remaining(), offset);
+            bytesWritten = pwriteBytes(fd, buffer, position, buffer.remaining(), offset);
         } else {
-            return pwriteBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + buffer.position(), buffer.remaining(), offset);
+            bytesWritten = pwriteBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + position, buffer.remaining(), offset);
         }
+
+        maybeUpdateBufferPosition(buffer, position, bytesWritten);
+        return bytesWritten;
     }
     public int pwrite(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount, long offset) throws ErrnoException, InterruptedIOException {
         // This indirection isn't strictly necessary, but ensures that our public interface is type safe.
@@ -136,11 +148,17 @@
     }
     private native int pwriteBytes(FileDescriptor fd, Object buffer, int bufferOffset, int byteCount, long offset) throws ErrnoException, InterruptedIOException;
     public int read(FileDescriptor fd, ByteBuffer buffer) throws ErrnoException, InterruptedIOException {
+        final int bytesRead;
+        final int position = buffer.position();
+
         if (buffer.isDirect()) {
-            return readBytes(fd, buffer, buffer.position(), buffer.remaining());
+            bytesRead = readBytes(fd, buffer, position, buffer.remaining());
         } else {
-            return readBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + buffer.position(), buffer.remaining());
+            bytesRead = readBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + position, buffer.remaining());
         }
+
+        maybeUpdateBufferPosition(buffer, position, bytesRead);
+        return bytesRead;
     }
     public int read(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount) throws ErrnoException, InterruptedIOException {
         // This indirection isn't strictly necessary, but ensures that our public interface is type safe.
@@ -150,11 +168,17 @@
     public native String readlink(String path) throws ErrnoException;
     public native int readv(FileDescriptor fd, Object[] buffers, int[] offsets, int[] byteCounts) throws ErrnoException, InterruptedIOException;
     public int recvfrom(FileDescriptor fd, ByteBuffer buffer, int flags, InetSocketAddress srcAddress) throws ErrnoException, SocketException {
+        final int bytesReceived;
+        final int position = buffer.position();
+
         if (buffer.isDirect()) {
-            return recvfromBytes(fd, buffer, buffer.position(), buffer.remaining(), flags, srcAddress);
+            bytesReceived = recvfromBytes(fd, buffer, position, buffer.remaining(), flags, srcAddress);
         } else {
-            return recvfromBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + buffer.position(), buffer.remaining(), flags, srcAddress);
+            bytesReceived = recvfromBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + position, buffer.remaining(), flags, srcAddress);
         }
+
+        maybeUpdateBufferPosition(buffer, position, bytesReceived);
+        return bytesReceived;
     }
     public int recvfrom(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount, int flags, InetSocketAddress srcAddress) throws ErrnoException, SocketException {
         // This indirection isn't strictly necessary, but ensures that our public interface is type safe.
@@ -165,11 +189,17 @@
     public native void rename(String oldPath, String newPath) throws ErrnoException;
     public native long sendfile(FileDescriptor outFd, FileDescriptor inFd, MutableLong inOffset, long byteCount) throws ErrnoException;
     public int sendto(FileDescriptor fd, ByteBuffer buffer, int flags, InetAddress inetAddress, int port) throws ErrnoException, SocketException {
+        final int bytesSent;
+        final int position = buffer.position();
+
         if (buffer.isDirect()) {
-            return sendtoBytes(fd, buffer, buffer.position(), buffer.remaining(), flags, inetAddress, port);
+            bytesSent = sendtoBytes(fd, buffer, position, buffer.remaining(), flags, inetAddress, port);
         } else {
-            return sendtoBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + buffer.position(), buffer.remaining(), flags, inetAddress, port);
+            bytesSent = sendtoBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + position, buffer.remaining(), flags, inetAddress, port);
         }
+
+        maybeUpdateBufferPosition(buffer, position, bytesSent);
+        return bytesSent;
     }
     public int sendto(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount, int flags, InetAddress inetAddress, int port) throws ErrnoException, SocketException {
         // This indirection isn't strictly necessary, but ensures that our public interface is type safe.
@@ -212,11 +242,16 @@
     public native void unsetenv(String name) throws ErrnoException;
     public native int waitpid(int pid, MutableInt status, int options) throws ErrnoException;
     public int write(FileDescriptor fd, ByteBuffer buffer) throws ErrnoException, InterruptedIOException {
+        final int bytesWritten;
+        final int position = buffer.position();
         if (buffer.isDirect()) {
-            return writeBytes(fd, buffer, buffer.position(), buffer.remaining());
+            bytesWritten = writeBytes(fd, buffer, position, buffer.remaining());
         } else {
-            return writeBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + buffer.position(), buffer.remaining());
+            bytesWritten = writeBytes(fd, NioUtils.unsafeArray(buffer), NioUtils.unsafeArrayOffset(buffer) + position, buffer.remaining());
         }
+
+        maybeUpdateBufferPosition(buffer, position, bytesWritten);
+        return bytesWritten;
     }
     public int write(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount) throws ErrnoException, InterruptedIOException {
         // This indirection isn't strictly necessary, but ensures that our public interface is type safe.
@@ -224,4 +259,10 @@
     }
     private native int writeBytes(FileDescriptor fd, Object buffer, int offset, int byteCount) throws ErrnoException, InterruptedIOException;
     public native int writev(FileDescriptor fd, Object[] buffers, int[] offsets, int[] byteCounts) throws ErrnoException, InterruptedIOException;
+
+    private static void maybeUpdateBufferPosition(ByteBuffer buffer, int originalPosition, int bytesReadOrWritten) {
+        if (bytesReadOrWritten > 0) {
+            buffer.position(bytesReadOrWritten + originalPosition);
+        }
+    }
 }
diff --git a/luni/src/main/java/libcore/net/MimeUtils.java b/luni/src/main/java/libcore/net/MimeUtils.java
index a5a1469..125ea87 100644
--- a/luni/src/main/java/libcore/net/MimeUtils.java
+++ b/luni/src/main/java/libcore/net/MimeUtils.java
@@ -259,8 +259,9 @@
         add("image/ico", "cur");
         add("image/ico", "ico");
         add("image/ief", "ief");
-        add("image/jpeg", "jpeg");
+        // add ".jpg" first so it will be the default for guessExtensionFromMimeType
         add("image/jpeg", "jpg");
+        add("image/jpeg", "jpeg");
         add("image/jpeg", "jpe");
         add("image/pcx", "pcx");
         add("image/png", "png");
diff --git a/luni/src/main/java/libcore/util/ZoneInfoDB.java b/luni/src/main/java/libcore/util/ZoneInfoDB.java
index a9d06a4..906ec14 100644
--- a/luni/src/main/java/libcore/util/ZoneInfoDB.java
+++ b/luni/src/main/java/libcore/util/ZoneInfoDB.java
@@ -41,8 +41,7 @@
  */
 public final class ZoneInfoDB {
   private static final TzData DATA =
-      new TzData(System.getenv("ANDROID_DATA") + "/misc/zoneinfo/tzdata",
-                 System.getenv("ANDROID_ROOT") + "/usr/share/zoneinfo/tzdata");
+      new TzData(System.getenv("ANDROID_ROOT") + "/usr/share/zoneinfo/tzdata");
 
   public static class TzData {
     /**
diff --git a/luni/src/main/java/org/apache/harmony/security/utils/JarUtils.java b/luni/src/main/java/org/apache/harmony/security/utils/JarUtils.java
index e7f3596..917a3a8 100644
--- a/luni/src/main/java/org/apache/harmony/security/utils/JarUtils.java
+++ b/luni/src/main/java/org/apache/harmony/security/utils/JarUtils.java
@@ -124,28 +124,12 @@
         final String daOid = sigInfo.getDigestAlgorithm();
         final String daName = sigInfo.getDigestAlgorithmName();
         final String deaOid = sigInfo.getDigestEncryptionAlgorithm();
+        final String deaName = sigInfo.getDigestEncryptionAlgorithmName();
 
         String alg = null;
         Signature sig = null;
 
-        if (deaOid != null) {
-            alg = deaOid;
-            try {
-                sig = Signature.getInstance(alg);
-            } catch (NoSuchAlgorithmException e) {
-            }
-
-            final String deaName = sigInfo.getDigestEncryptionAlgorithmName();
-            if (sig == null && deaName != null) {
-                alg = deaName;
-                try {
-                    sig = Signature.getInstance(alg);
-                } catch (NoSuchAlgorithmException e) {
-                }
-            }
-        }
-
-        if (sig == null && daOid != null && deaOid != null) {
+        if (daOid != null && deaOid != null) {
             alg = daOid + "with" + deaOid;
             try {
                 sig = Signature.getInstance(alg);
@@ -153,8 +137,7 @@
             }
 
             // Try to convert to names instead of OID.
-            if (sig == null) {
-                final String deaName = sigInfo.getDigestEncryptionAlgorithmName();
+            if (sig == null && daName != null && deaName != null) {
                 alg = daName + "with" + deaName;
                 try {
                     sig = Signature.getInstance(alg);
@@ -163,6 +146,22 @@
             }
         }
 
+        if (sig == null && deaOid != null) {
+            alg = deaOid;
+            try {
+                sig = Signature.getInstance(alg);
+            } catch (NoSuchAlgorithmException e) {
+            }
+
+            if (sig == null) {
+                alg = deaName;
+                try {
+                    sig = Signature.getInstance(alg);
+                } catch (NoSuchAlgorithmException e) {
+                }
+            }
+        }
+
         // We couldn't find a valid Signature type.
         if (sig == null) {
             return null;
@@ -250,6 +249,10 @@
             }
             chain.add(issuerCert);
             count++;
+            /* Prevent growing infinitely if there is a loop */
+            if (count > candidates.length) {
+                break;
+            }
             issuer = issuerCert.getIssuerDN();
             if (issuerCert.getSubjectDN().equals(issuer)) {
                 break;
diff --git a/luni/src/main/java/org/apache/harmony/xml/parsers/DocumentBuilderImpl.java b/luni/src/main/java/org/apache/harmony/xml/parsers/DocumentBuilderImpl.java
index d1079c8..040a012 100644
--- a/luni/src/main/java/org/apache/harmony/xml/parsers/DocumentBuilderImpl.java
+++ b/luni/src/main/java/org/apache/harmony/xml/parsers/DocumentBuilderImpl.java
@@ -416,11 +416,13 @@
 
     private String resolveCharacterReference(String value, int base) {
         try {
-            int ch = Integer.parseInt(value, base);
-            if (ch < 0 || ch > Character.MAX_VALUE) {
-                return null;
+            int codePoint = Integer.parseInt(value, base);
+            if (Character.isBmpCodePoint(codePoint)) {
+                return String.valueOf((char) codePoint);
+            } else {
+                char[] surrogatePair = Character.toChars(codePoint);
+                return new String(surrogatePair);
             }
-            return String.valueOf((char) ch);
         } catch (NumberFormatException ex) {
             return null;
         }
diff --git a/luni/src/main/native/java_io_FileDescriptor.cpp b/luni/src/main/native/java_io_FileDescriptor.cpp
index fe7e07e..2a7820f 100644
--- a/luni/src/main/native/java_io_FileDescriptor.cpp
+++ b/luni/src/main/native/java_io_FileDescriptor.cpp
@@ -22,9 +22,11 @@
 #include <sys/types.h>
 
 static jboolean FileDescriptor_isSocket(JNIEnv*, jclass, jint fd) {
-  int error;
-  socklen_t error_length = sizeof(error);
-  return TEMP_FAILURE_RETRY(getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &error_length));
+  // If getsockopt succeeds, we know we're dealing with a socket.
+  // This is the cheapest way we know of to test whether an fd is a socket.
+  int option;
+  socklen_t option_length = sizeof(option);
+  return TEMP_FAILURE_RETRY(getsockopt(fd, SOL_SOCKET, SO_DEBUG, &option, &option_length)) == 0;
 }
 
 static JNINativeMethod gMethods[] = {
diff --git a/luni/src/main/native/java_util_jar_StrictJarFile.cpp b/luni/src/main/native/java_util_jar_StrictJarFile.cpp
index 7611749..efcc74c 100644
--- a/luni/src/main/native/java_util_jar_StrictJarFile.cpp
+++ b/luni/src/main/native/java_util_jar_StrictJarFile.cpp
@@ -32,7 +32,28 @@
   jniThrowException(env, "java/io/IOException", ErrorCodeString(errorCode));
 }
 
-static jobject newZipEntry(JNIEnv* env, const ZipEntry& entry, jstring entryName,
+// Constructs a string out of |name| with the default charset (UTF-8 on android).
+// We prefer this to JNI's NewStringUTF because the string constructor will
+// replace unmappable and malformed bytes instead of throwing. See b/18584205
+//
+// Returns |NULL| iff. we couldn't allocate the string object or its constructor
+// arguments.
+//
+// TODO: switch back to NewStringUTF after libziparchive is modified to reject
+// files whose names aren't valid UTF-8.
+static jobject constructString(JNIEnv* env, const char* name, const uint16_t nameLength) {
+  jbyteArray javaNameBytes = env->NewByteArray(nameLength);
+  if (javaNameBytes == NULL) {
+      return NULL;
+  }
+  env->SetByteArrayRegion(javaNameBytes, 0, nameLength, reinterpret_cast<const jbyte*>(name));
+
+  ScopedLocalRef<jclass> stringClass(env, env->FindClass("java/lang/String"));
+  const jmethodID stringCtor = env->GetMethodID(stringClass.get(), "<init>", "([B)V");
+  return env->NewObject(stringClass.get(), stringCtor, javaNameBytes);
+}
+
+static jobject newZipEntry(JNIEnv* env, const ZipEntry& entry, const jobject entryName,
                            const uint16_t nameLength) {
   ScopedLocalRef<jclass> zipEntryClass(env, env->FindClass("java/util/zip/ZipEntry"));
   const jmethodID zipEntryCtor = env->GetMethodID(zipEntryClass.get(), "<init>",
@@ -54,6 +75,11 @@
                         static_cast<jlong>(entry.offset));
 }
 
+static jobject newZipEntry(JNIEnv* env, const ZipEntry& entry, const char* name,
+                           const uint16_t nameLength) {
+  return newZipEntry(env, entry, constructString(env, name, nameLength), nameLength);
+}
+
 static jlong StrictJarFile_nativeOpenJarFile(JNIEnv* env, jobject, jstring fileName) {
   ScopedUtfChars fileChars(env, fileName);
   if (fileChars.c_str() == NULL) {
@@ -133,9 +159,8 @@
   UniquePtr<char[]> entryNameCString(new char[entryName.name_length + 1]);
   memcpy(entryNameCString.get(), entryName.name, entryName.name_length);
   entryNameCString[entryName.name_length] = '\0';
-  ScopedLocalRef<jstring> entryNameString(env, env->NewStringUTF(entryNameCString.get()));
 
-  return newZipEntry(env, data, entryNameString.get(), entryName.name_length);
+  return newZipEntry(env, data, entryNameCString.get(), entryName.name_length);
 }
 
 static jobject StrictJarFile_nativeFindEntry(JNIEnv* env, jobject, jlong nativeHandle,
@@ -169,5 +194,4 @@
 
 void register_java_util_jar_StrictJarFile(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/util/jar/StrictJarFile", gMethods, NELEM(gMethods));
-
 }
diff --git a/luni/src/main/native/libcore_icu_ICU.cpp b/luni/src/main/native/libcore_icu_ICU.cpp
index 1528a2d..d27b11d 100644
--- a/luni/src/main/native/libcore_icu_ICU.cpp
+++ b/luni/src/main/native/libcore_icu_ICU.cpp
@@ -406,7 +406,7 @@
     setCharField(env, obj, "decimalSeparator", dfs.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol));
     setCharField(env, obj, "groupingSeparator", dfs.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol));
     setCharField(env, obj, "patternSeparator", dfs.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol));
-    setCharField(env, obj, "percent", dfs.getSymbol(DecimalFormatSymbols::kPercentSymbol));
+    setStringField(env, obj, "percent", dfs.getSymbol(DecimalFormatSymbols::kPercentSymbol));
     setCharField(env, obj, "perMill", dfs.getSymbol(DecimalFormatSymbols::kPerMillSymbol));
     setCharField(env, obj, "monetarySeparator", dfs.getSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol));
     setStringField(env, obj, "minusSign", dfs.getSymbol(DecimalFormatSymbols:: kMinusSignSymbol));
diff --git a/luni/src/main/native/libcore_icu_NativeDecimalFormat.cpp b/luni/src/main/native/libcore_icu_NativeDecimalFormat.cpp
index c0fd42b..8e440e9 100644
--- a/luni/src/main/native/libcore_icu_NativeDecimalFormat.cpp
+++ b/luni/src/main/native/libcore_icu_NativeDecimalFormat.cpp
@@ -52,13 +52,14 @@
         jchar groupingSeparator0, jstring infinity0,
         jstring internationalCurrencySymbol0, jstring minusSign0,
         jchar monetaryDecimalSeparator, jstring nan0, jchar patternSeparator,
-        jchar percent, jchar perMill, jchar zeroDigit) {
+        jstring percent0, jchar perMill, jchar zeroDigit) {
     ScopedJavaUnicodeString currencySymbol(env, currencySymbol0);
     ScopedJavaUnicodeString exponentSeparator(env, exponentSeparator0);
     ScopedJavaUnicodeString infinity(env, infinity0);
     ScopedJavaUnicodeString internationalCurrencySymbol(env, internationalCurrencySymbol0);
     ScopedJavaUnicodeString nan(env, nan0);
     ScopedJavaUnicodeString minusSign(env, minusSign0);
+    ScopedJavaUnicodeString percent(env, percent0);
     UnicodeString groupingSeparator(groupingSeparator0);
 
     DecimalFormatSymbols* result = new DecimalFormatSymbols;
@@ -74,7 +75,7 @@
     result->setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, UnicodeString(monetaryDecimalSeparator));
     result->setSymbol(DecimalFormatSymbols::kNaNSymbol, nan.unicodeString());
     result->setSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol, UnicodeString(patternSeparator));
-    result->setSymbol(DecimalFormatSymbols::kPercentSymbol, UnicodeString(percent));
+    result->setSymbol(DecimalFormatSymbols::kPercentSymbol, percent.unicodeString());
     result->setSymbol(DecimalFormatSymbols::kPerMillSymbol, UnicodeString(perMill));
     // java.text.DecimalFormatSymbols just uses a zero digit,
     // but ICU >= 4.6 has a field for each decimal digit.
@@ -96,7 +97,7 @@
         jchar groupingSeparator, jstring infinity,
         jstring internationalCurrencySymbol, jstring minusSign,
         jchar monetaryDecimalSeparator, jstring nan, jchar patternSeparator,
-        jchar percent, jchar perMill, jchar zeroDigit) {
+        jstring percent, jchar perMill, jchar zeroDigit) {
     DecimalFormatSymbols* symbols = makeDecimalFormatSymbols(env,
             currencySymbol, decimalSeparator, digit, exponentSeparator, groupingSeparator,
             infinity, internationalCurrencySymbol, minusSign,
@@ -110,7 +111,7 @@
         jchar groupingSeparator, jstring infinity,
         jstring internationalCurrencySymbol, jstring minusSign,
         jchar monetaryDecimalSeparator, jstring nan, jchar patternSeparator,
-        jchar percent, jchar perMill, jchar zeroDigit) {
+        jstring percent, jchar perMill, jchar zeroDigit) {
     UErrorCode status = U_ZERO_ERROR;
     UParseError parseError;
     ScopedJavaUnicodeString pattern(env, pattern0);
@@ -368,10 +369,10 @@
     NATIVE_METHOD(NativeDecimalFormat, formatDigitList, "(JLjava/lang/String;Llibcore/icu/NativeDecimalFormat$FieldPositionIterator;)[C"),
     NATIVE_METHOD(NativeDecimalFormat, getAttribute, "(JI)I"),
     NATIVE_METHOD(NativeDecimalFormat, getTextAttribute, "(JI)Ljava/lang/String;"),
-    NATIVE_METHOD(NativeDecimalFormat, open, "(Ljava/lang/String;Ljava/lang/String;CCLjava/lang/String;CLjava/lang/String;Ljava/lang/String;Ljava/lang/String;CLjava/lang/String;CCCC)J"),
+    NATIVE_METHOD(NativeDecimalFormat, open, "(Ljava/lang/String;Ljava/lang/String;CCLjava/lang/String;CLjava/lang/String;Ljava/lang/String;Ljava/lang/String;CLjava/lang/String;CLjava/lang/String;CC)J"),
     NATIVE_METHOD(NativeDecimalFormat, parse, "(JLjava/lang/String;Ljava/text/ParsePosition;Z)Ljava/lang/Number;"),
     NATIVE_METHOD(NativeDecimalFormat, setAttribute, "(JII)V"),
-    NATIVE_METHOD(NativeDecimalFormat, setDecimalFormatSymbols, "(JLjava/lang/String;CCLjava/lang/String;CLjava/lang/String;Ljava/lang/String;Ljava/lang/String;CLjava/lang/String;CCCC)V"),
+    NATIVE_METHOD(NativeDecimalFormat, setDecimalFormatSymbols, "(JLjava/lang/String;CCLjava/lang/String;CLjava/lang/String;Ljava/lang/String;Ljava/lang/String;CLjava/lang/String;CLjava/lang/String;CC)V"),
     NATIVE_METHOD(NativeDecimalFormat, setRoundingMode, "(JID)V"),
     NATIVE_METHOD(NativeDecimalFormat, setSymbol, "(JILjava/lang/String;)V"),
     NATIVE_METHOD(NativeDecimalFormat, setTextAttribute, "(JILjava/lang/String;)V"),
diff --git a/luni/src/main/native/libcore_io_Posix.cpp b/luni/src/main/native/libcore_io_Posix.cpp
index e8e8efb..7e9b22e 100644
--- a/luni/src/main/native/libcore_io_Posix.cpp
+++ b/luni/src/main/native/libcore_io_Posix.cpp
@@ -127,32 +127,27 @@
  */
 #define IO_FAILURE_RETRY(jni_env, return_type, syscall_name, java_fd, ...) ({ \
     return_type _rc = -1; \
-    int _fd = jniGetFDFromFileDescriptor(jni_env, java_fd); \
-    if (_fd == -1) { \
-        jniThrowException(jni_env, "java/io/IOException", "File descriptor closed"); \
-    } else { \
-        do { \
-            bool _wasSignaled; \
-            int _syscallErrno; \
-            { \
-                int _fd = jniGetFDFromFileDescriptor(jni_env, java_fd); \
-                AsynchronousCloseMonitor _monitor(_fd); \
-                _rc = syscall_name(_fd, __VA_ARGS__); \
-                _syscallErrno = errno; \
-                _wasSignaled = _monitor.wasSignaled(); \
-            } \
-            if (_wasSignaled) { \
-                jniThrowException(jni_env, "java/io/InterruptedIOException", # syscall_name " interrupted"); \
-                _rc = -1; \
-                break; \
-            } \
-            if (_rc == -1 && _syscallErrno != EINTR) { \
-                /* TODO: with a format string we could show the arguments too, like strace(1). */ \
-                throwErrnoException(jni_env, # syscall_name); \
-                break; \
-            } \
-        } while (_rc == -1); /* && _syscallErrno == EINTR && !_wasSignaled */ \
-    } \
+    do { \
+        bool _wasSignaled; \
+        int _syscallErrno; \
+        { \
+            int _fd = jniGetFDFromFileDescriptor(jni_env, java_fd); \
+            AsynchronousCloseMonitor _monitor(_fd); \
+            _rc = syscall_name(_fd, __VA_ARGS__); \
+            _syscallErrno = errno; \
+            _wasSignaled = _monitor.wasSignaled(); \
+        } \
+        if (_wasSignaled) { \
+            jniThrowException(jni_env, "java/io/InterruptedIOException", # syscall_name " interrupted"); \
+            _rc = -1; \
+            break; \
+        } \
+        if (_rc == -1 && _syscallErrno != EINTR) { \
+            /* TODO: with a format string we could show the arguments too, like strace(1). */ \
+            throwErrnoException(jni_env, # syscall_name); \
+            break; \
+        } \
+    } while (_rc == -1); /* && _syscallErrno == EINTR && !_wasSignaled */ \
     _rc; })
 
 static void throwException(JNIEnv* env, jclass exceptionClass, jmethodID ctor3, jmethodID ctor2,
diff --git a/luni/src/test/java/com/android/org/bouncycastle/jce/provider/CertBlacklistTest.java b/luni/src/test/java/com/android/org/bouncycastle/jce/provider/CertBlacklistTest.java
index 1475a63..8627225 100644
--- a/luni/src/test/java/com/android/org/bouncycastle/jce/provider/CertBlacklistTest.java
+++ b/luni/src/test/java/com/android/org/bouncycastle/jce/provider/CertBlacklistTest.java
@@ -151,7 +151,7 @@
 
     private Set<String> getPubkeyBlacklist(String path) throws IOException {
         // set our blacklist path
-        CertBlacklist bl = new CertBlacklist(path, CertBlacklist.DEFAULT_SERIAL_BLACKLIST_PATH);
+        CertBlacklist bl = new CertBlacklist(path, "");
         // call readPubkeyBlacklist
         Set<byte[]> arr = bl.pubkeyBlacklist;
         // convert the results to a hashset of strings
@@ -164,7 +164,7 @@
 
     private Set<String> getSerialBlacklist(String path) throws IOException {
         // set our blacklist path
-        CertBlacklist bl = new CertBlacklist(CertBlacklist.DEFAULT_PUBKEY_BLACKLIST_PATH, path);
+        CertBlacklist bl = new CertBlacklist("", path);
         // call readPubkeyBlacklist
         Set<BigInteger> arr = bl.serialBlacklist;
         // convert the results to a hashset of strings
@@ -249,8 +249,7 @@
         // write that to the test blacklist
         writeBlacklist(new HashSet<String>());
         // set our blacklist path
-        CertBlacklist bl = new CertBlacklist(tmpFile.getCanonicalPath(),
-                                             CertBlacklist.DEFAULT_SERIAL_BLACKLIST_PATH);
+        CertBlacklist bl = new CertBlacklist(tmpFile.getCanonicalPath(), "");
         // check to make sure it isn't blacklisted
         assertEquals(bl.isPublicKeyBlackListed(pk), false);
     }
@@ -265,8 +264,7 @@
         testBlackList.add(hash);
         writeBlacklist(testBlackList);
         // set our blacklist path
-        CertBlacklist bl = new CertBlacklist(tmpFile.getCanonicalPath(),
-                                             CertBlacklist.DEFAULT_SERIAL_BLACKLIST_PATH);
+        CertBlacklist bl = new CertBlacklist(tmpFile.getCanonicalPath(), "");
         // check to make sure it isn't blacklited
         assertTrue(bl.isPublicKeyBlackListed(pk));
     }
diff --git a/luni/src/test/java/libcore/icu/DateIntervalFormatTest.java b/luni/src/test/java/libcore/icu/DateIntervalFormatTest.java
index bac8138..1c1296b 100644
--- a/luni/src/test/java/libcore/icu/DateIntervalFormatTest.java
+++ b/luni/src/test/java/libcore/icu/DateIntervalFormatTest.java
@@ -408,4 +408,16 @@
     assertEquals("یکشنبه د ۱۹۸۰ د فبروري ۱۰", formatDateRange(new Locale("ps"), utc, thisYear, thisYear, flags));
     assertEquals("วันอาทิตย์ 10 กุมภาพันธ์ 1980", formatDateRange(new Locale("th"), utc, thisYear, thisYear, flags));
   }
+
+  // http://b/13234532
+  public void test13234532() throws Exception {
+    Locale l = Locale.US;
+    TimeZone utc = TimeZone.getTimeZone("UTC");
+
+    int flags = FORMAT_SHOW_TIME | FORMAT_ABBREV_ALL | FORMAT_12HOUR;
+
+    assertEquals("10 – 11 AM", formatDateRange(l, utc, 10*HOUR, 11*HOUR, flags));
+    assertEquals("11 AM – 1 PM", formatDateRange(l, utc, 11*HOUR, 13*HOUR, flags));
+    assertEquals("2 – 3 PM", formatDateRange(l, utc, 14*HOUR, 15*HOUR, flags));
+  }
 }
diff --git a/luni/src/test/java/libcore/icu/NativePluralRulesTest.java b/luni/src/test/java/libcore/icu/NativePluralRulesTest.java
index 703a94a..76179b4 100644
--- a/luni/src/test/java/libcore/icu/NativePluralRulesTest.java
+++ b/luni/src/test/java/libcore/icu/NativePluralRulesTest.java
@@ -19,6 +19,24 @@
 import java.util.Locale;
 
 public class NativePluralRulesTest extends junit.framework.TestCase {
+    public void testNegatives() throws Exception {
+        // icu4c's behavior changed, but we prefer to preserve compatibility.
+        NativePluralRules en_US = NativePluralRules.forLocale(new Locale("en", "US"));
+        assertEquals(NativePluralRules.OTHER, en_US.quantityForInt(2));
+        assertEquals(NativePluralRules.ONE, en_US.quantityForInt(1));
+        assertEquals(NativePluralRules.OTHER, en_US.quantityForInt(0));
+        assertEquals(NativePluralRules.OTHER, en_US.quantityForInt(-1));
+        assertEquals(NativePluralRules.OTHER, en_US.quantityForInt(-2));
+
+        NativePluralRules ar = NativePluralRules.forLocale(new Locale("ar"));
+        assertEquals(NativePluralRules.ZERO, ar.quantityForInt(0));
+        assertEquals(NativePluralRules.OTHER, ar.quantityForInt(-1)); // Not ONE.
+        assertEquals(NativePluralRules.OTHER, ar.quantityForInt(-2)); // Not TWO.
+        assertEquals(NativePluralRules.OTHER, ar.quantityForInt(-3)); // Not FEW.
+        assertEquals(NativePluralRules.OTHER, ar.quantityForInt(-11)); // Not MANY.
+        assertEquals(NativePluralRules.OTHER, ar.quantityForInt(-100));
+    }
+
     public void testEnglish() throws Exception {
         NativePluralRules npr = NativePluralRules.forLocale(new Locale("en", "US"));
         assertEquals(NativePluralRules.OTHER, npr.quantityForInt(0));
diff --git a/luni/src/test/java/libcore/io/OsTest.java b/luni/src/test/java/libcore/io/OsTest.java
index cf28122..a0d1e5a 100644
--- a/luni/src/test/java/libcore/io/OsTest.java
+++ b/luni/src/test/java/libcore/io/OsTest.java
@@ -20,11 +20,14 @@
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.InetUnixAddress;
 import java.net.ServerSocket;
 import java.net.SocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
 import java.util.Locale;
 import junit.framework.TestCase;
 import static android.system.OsConstants.*;
@@ -77,7 +80,7 @@
           assertEquals(Libcore.os.getgid(), credentials.gid);
 
           byte[] request = new byte[256];
-          int requestLength = Libcore.os.read(clientFd, request, 0, request.length);
+          Libcore.os.read(clientFd, request, 0, request.length);
 
           String s = new String(request, "UTF-8");
           byte[] response = s.toUpperCase(Locale.ROOT).getBytes("UTF-8");
@@ -135,4 +138,120 @@
     assertEquals("Killed", Libcore.os.strsignal(9));
     assertEquals("Unknown signal -1", Libcore.os.strsignal(-1));
   }
+
+  public void test_byteBufferPositions_write_pwrite() throws Exception {
+    FileOutputStream fos = new FileOutputStream(new File("/dev/null"));
+    FileDescriptor fd = fos.getFD();
+    final byte[] contents = new String("goodbye, cruel world").getBytes(StandardCharsets.US_ASCII);
+    ByteBuffer byteBuffer = ByteBuffer.wrap(contents);
+
+    byteBuffer.position(0);
+    int written = Libcore.os.write(fd, byteBuffer);
+    assertTrue(written > 0);
+    assertEquals(written, byteBuffer.position());
+
+    byteBuffer.position(4);
+    written = Libcore.os.write(fd, byteBuffer);
+    assertTrue(written > 0);
+    assertEquals(written + 4, byteBuffer.position());
+
+    byteBuffer.position(0);
+    written = Libcore.os.pwrite(fd, byteBuffer, 64 /* offset */);
+    assertTrue(written > 0);
+    assertEquals(written, byteBuffer.position());
+
+    byteBuffer.position(4);
+    written = Libcore.os.pwrite(fd, byteBuffer, 64 /* offset */);
+    assertTrue(written > 0);
+    assertEquals(written + 4, byteBuffer.position());
+
+    fos.close();
+  }
+
+  public void test_byteBufferPositions_read_pread() throws Exception {
+    FileInputStream fis = new FileInputStream(new File("/dev/zero"));
+    FileDescriptor fd = fis.getFD();
+    ByteBuffer byteBuffer = ByteBuffer.allocate(64);
+
+    byteBuffer.position(0);
+    int read = Libcore.os.read(fd, byteBuffer);
+    assertTrue(read > 0);
+    assertEquals(read, byteBuffer.position());
+
+    byteBuffer.position(4);
+    read = Libcore.os.read(fd, byteBuffer);
+    assertTrue(read > 0);
+    assertEquals(read + 4, byteBuffer.position());
+
+    byteBuffer.position(0);
+    read = Libcore.os.pread(fd, byteBuffer, 64 /* offset */);
+    assertTrue(read > 0);
+    assertEquals(read, byteBuffer.position());
+
+    byteBuffer.position(4);
+    read = Libcore.os.pread(fd, byteBuffer, 64 /* offset */);
+    assertTrue(read > 0);
+    assertEquals(read + 4, byteBuffer.position());
+
+    fis.close();
+  }
+
+  public void test_byteBufferPositions_sendto_recvfrom() throws Exception {
+    final FileDescriptor serverFd = Libcore.os.socket(AF_INET6, SOCK_STREAM, 0);
+    Libcore.os.bind(serverFd, InetAddress.getLoopbackAddress(), 0);
+    Libcore.os.listen(serverFd, 5);
+
+    InetSocketAddress address = (InetSocketAddress) Libcore.os.getsockname(serverFd);
+
+    final Thread server = new Thread(new Runnable() {
+      public void run() {
+        try {
+          InetSocketAddress peerAddress = new InetSocketAddress();
+          FileDescriptor clientFd = Libcore.os.accept(serverFd, peerAddress);
+
+          // Attempt to receive a maximum of 24 bytes from the client, and then
+          // close the connection.
+          ByteBuffer buffer = ByteBuffer.allocate(16);
+          int received = Libcore.os.recvfrom(clientFd, buffer, 0, null);
+          assertTrue(received > 0);
+          assertEquals(received, buffer.position());
+
+          ByteBuffer buffer2 = ByteBuffer.allocate(16);
+          buffer2.position(8);
+          received = Libcore.os.recvfrom(clientFd, buffer2, 0, null);
+          assertTrue(received > 0);
+          assertEquals(received + 8, buffer.position());
+
+          Libcore.os.close(clientFd);
+        } catch (Exception ex) {
+          throw new RuntimeException(ex);
+        }
+      }
+    });
+
+
+    server.start();
+
+    FileDescriptor clientFd = Libcore.os.socket(AF_INET6, SOCK_STREAM, 0);
+    Libcore.os.connect(clientFd, address.getAddress(), address.getPort());
+
+    final byte[] bytes = "good bye, cruel black hole with fancy distortion".getBytes(StandardCharsets.US_ASCII);
+    assertTrue(bytes.length > 24);
+
+    ByteBuffer input = ByteBuffer.wrap(bytes);
+    input.position(0);
+    input.limit(16);
+
+    int sent = Libcore.os.sendto(clientFd, input, 0, address.getAddress(), address.getPort());
+    assertTrue(sent > 0);
+    assertEquals(sent, input.position());
+
+    input.position(16);
+    input.limit(24);
+    sent = Libcore.os.sendto(clientFd, input, 0, address.getAddress(), address.getPort());
+    assertTrue(sent > 0);
+    assertEquals(sent + 16, input.position());
+
+    Libcore.os.close(clientFd);
+  }
 }
diff --git a/luni/src/test/java/libcore/java/io/FileDescriptorTest.java b/luni/src/test/java/libcore/java/io/FileDescriptorTest.java
index 4315b81..39472df 100644
--- a/luni/src/test/java/libcore/java/io/FileDescriptorTest.java
+++ b/luni/src/test/java/libcore/java/io/FileDescriptorTest.java
@@ -17,14 +17,27 @@
 package libcore.java.io;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.RandomAccessFile;
+import java.net.ServerSocket;
 import junit.framework.TestCase;
 
 public class FileDescriptorTest extends TestCase {
-    public void testReadOnlyFileDescriptorSync() throws Exception {
-        File f= File.createTempFile("FileDescriptorTest", "tmp");
-        new RandomAccessFile(f, "r").getFD().sync();
-    }
+  public void testReadOnlyFileDescriptorSync() throws Exception {
+    File f= File.createTempFile("FileDescriptorTest", "tmp");
+    new RandomAccessFile(f, "r").getFD().sync();
+  }
+
+  public void test_isSocket() throws Exception {
+    File f = new File("/dev/null");
+    FileInputStream fis = new FileInputStream(f);
+    assertFalse(fis.getFD().isSocket());
+    fis.close();
+
+    ServerSocket s = new ServerSocket();
+    assertTrue(s.getImpl$().getFD$().isSocket());
+    s.close();
+  }
 }
diff --git a/luni/src/test/java/libcore/java/net/URITest.java b/luni/src/test/java/libcore/java/net/URITest.java
index 7f4c086..c87433a 100644
--- a/luni/src/test/java/libcore/java/net/URITest.java
+++ b/luni/src/test/java/libcore/java/net/URITest.java
@@ -702,11 +702,15 @@
     }
 
     // http://code.google.com/p/android/issues/detail?id=37577
+    // http://b/18023709
+    // http://b/17579865
+    // http://b/18016625
     public void testUnderscore() throws Exception {
         URI uri = new URI("http://a_b.c.d.net/");
         assertEquals("a_b.c.d.net", uri.getAuthority());
-        // The RFC's don't permit underscores in hostnames, and neither does URI (unlike URL).
-        assertNull(uri.getHost());
+        // The RFC's don't permit underscores in hostnames, but URI has to because
+        // a certain large website doesn't seem to care about standards and specs.
+        assertEquals("a_b.c.d.net", uri.getHost());
     }
 
     // Adding a new test? Consider adding an equivalent test to URLTest.java
diff --git a/luni/src/test/java/libcore/java/net/URLConnectionTest.java b/luni/src/test/java/libcore/java/net/URLConnectionTest.java
index b672b19..c09939f 100644
--- a/luni/src/test/java/libcore/java/net/URLConnectionTest.java
+++ b/luni/src/test/java/libcore/java/net/URLConnectionTest.java
@@ -53,6 +53,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.zip.GZIPInputStream;
@@ -770,7 +771,9 @@
     }
 
     public void testDisconnectedConnection() throws IOException {
-        server.enqueue(new MockResponse().setBody("ABCDEFGHIJKLMNOPQR"));
+        server.enqueue(new MockResponse()
+                .throttleBody(2, 100, TimeUnit.MILLISECONDS)
+                .setBody("ABCD"));
         server.play();
 
         HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection();
@@ -778,6 +781,9 @@
         assertEquals('A', (char) in.read());
         connection.disconnect();
         try {
+            // Reading 'B' may succeed if it's buffered.
+            in.read();
+            // But 'C' shouldn't be buffered (the response is throttled) and this should fail.
             in.read();
             fail("Expected a connection closed exception");
         } catch (IOException expected) {
@@ -2202,8 +2208,6 @@
         assertEquals("This required a 2nd handshake",
                 readAscii(connection.getInputStream(), Integer.MAX_VALUE));
 
-        RecordedRequest first = server.takeRequest();
-        assertEquals(0, first.getSequenceNumber());
         RecordedRequest retry = server.takeRequest();
         assertEquals(0, retry.getSequenceNumber());
         assertEquals("SSLv3", retry.getSslProtocol());
diff --git a/luni/src/test/java/libcore/java/nio/channels/SelectorTest.java b/luni/src/test/java/libcore/java/nio/channels/SelectorTest.java
index c5f449e..9789197 100644
--- a/luni/src/test/java/libcore/java/nio/channels/SelectorTest.java
+++ b/luni/src/test/java/libcore/java/nio/channels/SelectorTest.java
@@ -146,32 +146,43 @@
     }
 
     public void test_57456() throws Exception {
-      Selector selector = Selector.open();
-      ServerSocketChannel ssc = ServerSocketChannel.open();
+        Selector selector = Selector.open();
+        ServerSocketChannel ssc = ServerSocketChannel.open();
 
-      try {
-        // Connect.
-        ssc.configureBlocking(false);
-        ssc.socket().bind(null);
-        SocketChannel sc = SocketChannel.open();
-        sc.connect(ssc.socket().getLocalSocketAddress());
-        sc.finishConnect();
+        try {
+            // Connect.
+            ssc.configureBlocking(false);
+            ssc.socket().bind(null);
+            SocketChannel sc = SocketChannel.open();
+            sc.connect(ssc.socket().getLocalSocketAddress());
+            sc.finishConnect();
 
-        // Switch to non-blocking so we can use a Selector.
-        sc.configureBlocking(false);
+            // Switch to non-blocking so we can use a Selector.
+            sc.configureBlocking(false);
 
-        // Have the 'server' write something.
-        ssc.accept().write(ByteBuffer.allocate(128));
+            // Have the 'server' write something.
+            ssc.accept().write(ByteBuffer.allocate(128));
 
-        // At this point, the client should be able to read or write immediately.
-        // (It shouldn't be able to connect because it's already connected.)
-        SelectionKey key = sc.register(selector, SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE);
-        assertEquals(1, selector.select());
-        assertEquals(SelectionKey.OP_READ | SelectionKey.OP_WRITE, key.readyOps());
-        assertEquals(0, selector.select());
-      } finally {
+            // At this point, the client should be able to read or write immediately.
+            // (It shouldn't be able to connect because it's already connected.)
+            SelectionKey key = sc.register(selector,
+                    SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE);
+            assertEquals(1, selector.select());
+            assertEquals(SelectionKey.OP_READ | SelectionKey.OP_WRITE, key.readyOps());
+            assertEquals(0, selector.select());
+        } finally {
+            selector.close();
+            ssc.close();
+        }
+    }
+
+    // http://code.google.com/p/android/issues/detail?id=80785
+    public void test_80785() throws Exception {
+        Selector selector = Selector.open();
         selector.close();
-        ssc.close();
-      }
+
+        // Historically on android this did not throw an exception. Due to the bug it would throw
+        // an (undeclared) IOException.
+        selector.wakeup();
     }
 }
diff --git a/luni/src/test/java/libcore/java/text/DateFormatSymbolsTest.java b/luni/src/test/java/libcore/java/text/DateFormatSymbolsTest.java
index 057cd17..e6933e6 100644
--- a/luni/src/test/java/libcore/java/text/DateFormatSymbolsTest.java
+++ b/luni/src/test/java/libcore/java/text/DateFormatSymbolsTest.java
@@ -147,17 +147,17 @@
     }
 
     // http://b/7955614
-    public void test_getZoneStrings_Apia() throws Exception {
+    public void test_getZoneStrings_GMT_short_names() throws Exception {
         String[][] array = DateFormatSymbols.getInstance(Locale.US).getZoneStrings();
         for (int i = 0; i < array.length; ++i) {
             String[] row = array[i];
-            // Pacific/Apia is somewhat arbitrary; we just want a zone we have to generate
+            // America/Santiago is somewhat arbitrary; we just want a zone we have to generate
             // "GMT" strings for the short names.
-            if (row[0].equals("Pacific/Apia")) {
-                assertEquals("Samoa Standard Time", row[1]);
-                assertEquals("GMT+13:00", row[2]);
-                assertEquals("Samoa Daylight Time", row[3]);
-                assertEquals("GMT+14:00", row[4]);
+            if (row[0].equals("America/Santiago")) {
+                assertEquals("Chile Standard Time", row[1]);
+                assertEquals("GMT-03:00", row[2]);
+                assertEquals("Chile Summer Time", row[3]);
+                assertEquals("GMT-03:00", row[4]);
             }
         }
     }
diff --git a/luni/src/test/java/libcore/java/text/DecimalFormatSymbolsTest.java b/luni/src/test/java/libcore/java/text/DecimalFormatSymbolsTest.java
index 619c38e..3e0aeba 100644
--- a/luni/src/test/java/libcore/java/text/DecimalFormatSymbolsTest.java
+++ b/luni/src/test/java/libcore/java/text/DecimalFormatSymbolsTest.java
@@ -21,6 +21,7 @@
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.text.DecimalFormatSymbols;
+import java.util.Currency;
 import java.util.Locale;
 
 public class DecimalFormatSymbolsTest extends junit.framework.TestCase {
@@ -57,4 +58,32 @@
         // The two objects should claim to be equal.
         assertEquals(originalDfs, deserializedDfs);
     }
+
+    // https://code.google.com/p/android/issues/detail?id=79925
+    public void testSetSameCurrency() throws Exception {
+        DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US);
+        dfs.setCurrency(Currency.getInstance("USD"));
+        assertEquals("$", dfs.getCurrencySymbol());
+        dfs.setCurrencySymbol("poop");
+        assertEquals("poop", dfs.getCurrencySymbol());
+        dfs.setCurrency(Currency.getInstance("USD"));
+        assertEquals("$", dfs.getCurrencySymbol());
+    }
+
+    public void testSetNulInternationalCurrencySymbol() throws Exception {
+        Currency usd = Currency.getInstance("USD");
+
+        DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US);
+        dfs.setCurrency(usd);
+        assertEquals(usd, dfs.getCurrency());
+        assertEquals("$", dfs.getCurrencySymbol());
+        assertEquals("USD", dfs.getInternationalCurrencySymbol());
+
+        // Setting the international currency symbol to null sets the currency to null too,
+        // but not the currency symbol.
+        dfs.setInternationalCurrencySymbol(null);
+        assertEquals(null, dfs.getCurrency());
+        assertEquals("$", dfs.getCurrencySymbol());
+        assertEquals(null, dfs.getInternationalCurrencySymbol());
+    }
 }
diff --git a/luni/src/test/java/libcore/java/text/NumberFormatTest.java b/luni/src/test/java/libcore/java/text/NumberFormatTest.java
index 4ff063b..0678e96 100644
--- a/luni/src/test/java/libcore/java/text/NumberFormatTest.java
+++ b/luni/src/test/java/libcore/java/text/NumberFormatTest.java
@@ -22,6 +22,7 @@
 import java.text.FieldPosition;
 import java.text.NumberFormat;
 import java.text.ParsePosition;
+import java.util.Currency;
 import java.util.Locale;
 
 public class NumberFormatTest extends junit.framework.TestCase {
@@ -80,6 +81,7 @@
 
     // Formatting percentages is confusing but deliberate.
     // Ensure we don't accidentally "fix" this.
+    // https://code.google.com/p/android/issues/detail?id=10333
     public void test_10333() throws Exception {
         NumberFormat nf = NumberFormat.getPercentInstance(Locale.US);
         assertEquals("15%", nf.format(0.15));
@@ -91,6 +93,7 @@
         }
     }
 
+    // https://code.google.com/p/android/issues/detail?id=62269
     public void test_62269() throws Exception {
         NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
         try {
@@ -126,4 +129,28 @@
             fail();
         } catch (NullPointerException expected) {}
     }
+
+    // https://code.google.com/p/android/issues/detail?id=79925
+    public void test_setCurrency() throws Exception {
+        NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
+        nf.setCurrency(Currency.getInstance("AMD"));
+        assertEquals("AMD50.00", nf.format(50.0));
+
+        DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols();
+        decimalFormatSymbols.setCurrencySymbol("");
+        ((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols);
+        assertEquals("50.00", nf.format(50.0));
+
+        nf.setCurrency(Currency.getInstance("AMD"));
+        assertEquals("AMD50.00", nf.format(50.0));
+
+        nf.setCurrency(Currency.getInstance("AMD"));
+        assertEquals("AMD50.00", nf.format(50.0));
+
+        nf.setCurrency(Currency.getInstance("USD"));
+        assertEquals("$50.00", nf.format(50.0));
+
+        nf.setCurrency(Currency.getInstance("AMD"));
+        assertEquals("AMD50.00", nf.format(50.0));
+    }
 }
diff --git a/luni/src/test/java/libcore/java/text/SimpleDateFormatTest.java b/luni/src/test/java/libcore/java/text/SimpleDateFormatTest.java
index e73104d..d228dc8 100644
--- a/luni/src/test/java/libcore/java/text/SimpleDateFormatTest.java
+++ b/luni/src/test/java/libcore/java/text/SimpleDateFormatTest.java
@@ -378,4 +378,11 @@
             fail();
         } catch (NullPointerException expected) {}
     }
+
+    // http://b/17431155
+    public void test_sl_dates() throws Exception {
+        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, new Locale("sl"));
+        df.setTimeZone(TimeZone.getTimeZone("UTC"));
+        assertEquals("1. 1. 70", df.format(0L));
+    }
 }
diff --git a/luni/src/test/java/libcore/java/util/TimeZoneTest.java b/luni/src/test/java/libcore/java/util/TimeZoneTest.java
index 86a8b7f..1ca950c 100644
--- a/luni/src/test/java/libcore/java/util/TimeZoneTest.java
+++ b/luni/src/test/java/libcore/java/util/TimeZoneTest.java
@@ -74,52 +74,31 @@
     }
 
     public void testPreHistoricOffsets() throws Exception {
-        // The "Asia/Saigon" time zone has just a few transitions, and hasn't changed in a
-        // long time, which is convenient for testing:
-        //
-        // libcore.util.ZoneInfo[Asia/Saigon,mRawOffset=25200000,mUseDst=false]
-        // 0 : time=-2005974400 Fri Jun 08 16:53:20 1906 GMT+00:00 = Fri Jun 08 23:59:40 1906 ICT isDst=0 offset=  380 gmtOffset=25580
-        // 1 : time=-1855983920 Fri Mar 10 16:54:40 1911 GMT+00:00 = Fri Mar 10 23:54:40 1911 ICT isDst=0 offset=    0 gmtOffset=25200
-        // 2 : time=-1819954800 Tue Apr 30 17:00:00 1912 GMT+00:00 = Wed May 01 01:00:00 1912 ICT isDst=0 offset= 3600 gmtOffset=28800
-        // 3 : time=-1220428800 Thu Apr 30 16:00:00 1931 GMT+00:00 = Thu Apr 30 23:00:00 1931 ICT isDst=0 offset=    0 gmtOffset=25200
-        TimeZone tz = TimeZone.getTimeZone("Asia/Saigon");
+        // "Africa/Bissau" has just a few transitions and hasn't changed in a long time.
+        // 1912-01-01 00:02:19-0100 ... 1912-01-01 00:02:20-0100
+        // 1974-12-31 23:59:59-0100 ... 1975-01-01 01:00:00+0000
+        TimeZone tz = TimeZone.getTimeZone("Africa/Bissau");
 
         // Times before our first transition should assume we're still following that transition.
-        // Note: the RI reports 25600 here because it has more transitions than we do.
-        assertNonDaylightOffset(25580, -2005975000L, tz);
+        assertNonDaylightOffset(-3600, parseIsoTime("1911-01-01T00:00:00.0+0000"), tz);
 
-        assertNonDaylightOffset(25580, -2005974400L, tz); // 0
-        assertNonDaylightOffset(25580, -2005974000L, tz);
+        assertNonDaylightOffset(-3600, parseIsoTime("1912-01-01T12:00:00.0-0100"), tz);
 
-        assertNonDaylightOffset(25200, -1855983920L, tz); // 1
-        assertNonDaylightOffset(25200, -1855983900L, tz);
-
-        assertNonDaylightOffset(28800, -1819954800L, tz); // 2
-        assertNonDaylightOffset(28800, -1819954000L, tz);
-
-        assertNonDaylightOffset(25200, -1220428800L, tz); // 3
-
-        // Times after out last transition should assume we're still following that transition.
-        assertNonDaylightOffset(25200, -1220428000L, tz);
-
-        // There are plenty more examples. "Africa/Bissau" is one:
-        //
-        // libcore.util.ZoneInfo[Africa/Bissau,mRawOffset=0,mUseDst=false]
-        // 0 : time=-1849388260 Fri May 26 01:02:20 1911 GMT+00:00 = Fri May 26 00:02:20 1911 GMT isDst=0 offset=-3600 gmtOffset=-3600
-        // 1 : time=  157770000 Wed Jan 01 01:00:00 1975 GMT+00:00 = Wed Jan 01 01:00:00 1975 GMT isDst=0 offset=    0 gmtOffset=0
-        tz = TimeZone.getTimeZone("Africa/Bissau");
-        assertNonDaylightOffset(-3600, -1849388300L, tz);
-        assertNonDaylightOffset(-3600, -1849388260L, tz); // 0
-        assertNonDaylightOffset(-3600, -1849388200L, tz);
-        assertNonDaylightOffset(0, 157770000L, tz); // 1
-        assertNonDaylightOffset(0, 157780000L, tz);
+        // Times after our last transition should assume we're still following that transition.
+        assertNonDaylightOffset(0, parseIsoTime("1980-01-01T00:00:00.0+0000"), tz);
     }
 
     private static void assertNonDaylightOffset(int expectedOffsetSeconds, long epochSeconds, TimeZone tz) {
-        assertEquals(expectedOffsetSeconds * 1000, tz.getOffset(epochSeconds * 1000));
+        assertEquals(expectedOffsetSeconds, tz.getOffset(epochSeconds * 1000) / 1000);
         assertFalse(tz.inDaylightTime(new Date(epochSeconds * 1000)));
     }
 
+    private static long parseIsoTime(String isoTime) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
+        Date date = sdf.parse(isoTime);
+        return date.getTime() / 1000;
+    }
+
     public void testZeroTransitionZones() throws Exception {
         // Zones with no transitions historical or future seem ideal for testing.
         String[] ids = new String[] { "Africa/Bujumbura", "Indian/Cocos", "Pacific/Wake", "UTC" };
@@ -276,21 +255,13 @@
         assertEquals("", failures.toString());
     }
 
-    public void testSantiago() throws Exception {
+    // http://b/7955614
+    public void test_getDisplayName_GMT_short_names() throws Exception {
         TimeZone tz = TimeZone.getTimeZone("America/Santiago");
         assertEquals("Chile Summer Time", tz.getDisplayName(true, TimeZone.LONG, Locale.US));
         assertEquals("Chile Standard Time", tz.getDisplayName(false, TimeZone.LONG, Locale.US));
         assertEquals("GMT-03:00", tz.getDisplayName(true, TimeZone.SHORT, Locale.US));
-        assertEquals("GMT-04:00", tz.getDisplayName(false, TimeZone.SHORT, Locale.US));
-    }
-
-    // http://b/7955614
-    public void testApia() throws Exception {
-        TimeZone tz = TimeZone.getTimeZone("Pacific/Apia");
-        assertEquals("Samoa Daylight Time", tz.getDisplayName(true, TimeZone.LONG, Locale.US));
-        assertEquals("Samoa Standard Time", tz.getDisplayName(false, TimeZone.LONG, Locale.US));
-        assertEquals("GMT+14:00", tz.getDisplayName(true, TimeZone.SHORT, Locale.US));
-        assertEquals("GMT+13:00", tz.getDisplayName(false, TimeZone.SHORT, Locale.US));
+        assertEquals("GMT-03:00", tz.getDisplayName(false, TimeZone.SHORT, Locale.US));
     }
 
     private static boolean isGmtString(String s) {
diff --git a/luni/src/test/java/libcore/javax/net/ssl/SSLEngineTest.java b/luni/src/test/java/libcore/javax/net/ssl/SSLEngineTest.java
index fb7e0c9..df4585f 100644
--- a/luni/src/test/java/libcore/javax/net/ssl/SSLEngineTest.java
+++ b/luni/src/test/java/libcore/javax/net/ssl/SSLEngineTest.java
@@ -86,6 +86,32 @@
         test_SSLEngine_getSupportedCipherSuites_connect(testKeyStore, false);
         test_SSLEngine_getSupportedCipherSuites_connect(testKeyStore, true);
     }
+
+    // http://b/18554122
+    public void test_SSLEngine_underflowsOnEmptyBuffersDuringHandshake() throws Exception {
+        final SSLEngine sslEngine = SSLContext.getDefault().createSSLEngine();
+        sslEngine.setUseClientMode(false);
+        ByteBuffer input = ByteBuffer.allocate(1024);
+        input.flip();
+        ByteBuffer output = ByteBuffer.allocate(1024);
+        sslEngine.beginHandshake();
+        assertEquals(SSLEngineResult.HandshakeStatus.NEED_UNWRAP, sslEngine.getHandshakeStatus());
+        SSLEngineResult result = sslEngine.unwrap(input, output);
+        assertEquals(SSLEngineResult.Status.BUFFER_UNDERFLOW, result.getStatus());
+        assertEquals(SSLEngineResult.HandshakeStatus.NEED_UNWRAP, result.getHandshakeStatus());
+    }
+
+    // http://b/18554122
+    public void test_SSLEngine_underflowsOnEmptyBuffersAfterHandshake() throws Exception {
+        // Note that create performs the handshake.
+        final TestSSLEnginePair engines = TestSSLEnginePair.create(null /* hooks */);
+        ByteBuffer input = ByteBuffer.allocate(1024);
+        input.flip();
+        ByteBuffer output = ByteBuffer.allocate(1024);
+        assertEquals(SSLEngineResult.Status.BUFFER_UNDERFLOW,
+                engines.client.unwrap(input, output).getStatus());
+    }
+
     private void test_SSLEngine_getSupportedCipherSuites_connect(TestKeyStore testKeyStore,
                                                                  boolean secureRenegotiation)
             throws Exception {
diff --git a/luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java b/luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java
index 4681877..4af7f5a 100644
--- a/luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java
+++ b/luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java
@@ -26,6 +26,7 @@
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.net.SocketAddress;
 import java.net.SocketException;
 import java.net.SocketTimeoutException;
 import java.security.Principal;
@@ -43,6 +44,7 @@
 import javax.crypto.SecretKey;
 import javax.crypto.spec.SecretKeySpec;
 import javax.net.ServerSocketFactory;
+import javax.net.SocketFactory;
 import javax.net.ssl.HandshakeCompletedEvent;
 import javax.net.ssl.HandshakeCompletedListener;
 import javax.net.ssl.KeyManager;
@@ -1570,6 +1572,28 @@
         }
     }
 
+    // http://b/18428603
+    public void test_SSLSocket_getPortWithSNI() throws Exception {
+        TestSSLContext context = TestSSLContext.create();
+
+        SSLSocket client = null;
+        try {
+            client = (SSLSocket) context.clientContext.getSocketFactory().createSocket();
+            client.connect(new InetSocketAddress(context.host, context.port));
+            try {
+                // This is crucial to reproducing issue 18428603.
+                Method setHostname = client.getClass().getMethod("setHostname", String.class);
+                setHostname.invoke(client, "sslsockettest.androidcts.google.com");
+            } catch (NoSuchMethodException ignored) {
+            }
+
+            assertTrue(client.getPort() > 0);
+        } finally {
+            client.close();
+            context.close();
+        }
+    }
+
     public void test_SSLSocket_sendsTlsFallbackScsv_Fallback_Success() throws Exception {
         TestSSLContext context = TestSSLContext.create();
 
@@ -1667,6 +1691,10 @@
                         server.startHandshake();
                         fail("Should result in inappropriate fallback");
                     } catch (SSLHandshakeException expected) {
+                        Throwable cause = expected.getCause();
+                        assertEquals(SSLProtocolException.class, cause.getClass());
+                        assertTrue(cause.getMessage(),
+                                cause.getMessage().contains("inappropriate fallback"));
                     }
                     return null;
                 }
@@ -1679,6 +1707,10 @@
                         client.startHandshake();
                         fail("Should receive TLS alert inappropriate fallback");
                     } catch (SSLHandshakeException expected) {
+                        Throwable cause = expected.getCause();
+                        assertEquals(SSLProtocolException.class, cause.getClass());
+                        assertTrue(cause.getMessage(),
+                                cause.getMessage().contains("inappropriate fallback"));
                     }
                     return null;
                 }
@@ -1692,6 +1724,153 @@
         context.close();
     }
 
+    public void test_SSLSocket_ClientGetsAlertDuringHandshake_HasGoodExceptionMessage()
+            throws Exception {
+        TestSSLContext context = TestSSLContext.create();
+
+        final ServerSocket listener = ServerSocketFactory.getDefault().createServerSocket(0);
+        final SSLSocket client = (SSLSocket) context.clientContext.getSocketFactory().createSocket(
+                context.host, listener.getLocalPort());
+        final Socket server = listener.accept();
+
+        ExecutorService executor = Executors.newFixedThreadPool(2);
+        Future<Void> c = executor.submit(new Callable<Void>() {
+            public Void call() throws Exception {
+                try {
+                    client.startHandshake();
+                    fail("Should receive handshake exception");
+                } catch (SSLHandshakeException expected) {
+                    assertFalse(expected.getMessage().contains("SSL_ERROR_ZERO_RETURN"));
+                    assertFalse(expected.getMessage().contains("You should never see this."));
+                }
+                return null;
+            }
+        });
+        Future<Void> s = executor.submit(new Callable<Void>() {
+            public Void call() throws Exception {
+                // Wait until the client sends something.
+                byte[] scratch = new byte[8192];
+                server.getInputStream().read(scratch);
+
+                // Write a bogus TLS alert:
+                // TLSv1.2 Record Layer: Alert (Level: Warning, Description: Protocol Version)
+                server.getOutputStream().write(new byte[] {
+                        0x15, 0x03, 0x03, 0x00, 0x02, 0x01, 0x46
+                });
+
+                // TLSv1.2 Record Layer: Alert (Level: Warning, Description: Close Notify)
+                server.getOutputStream().write(new byte[] {
+                        0x15, 0x03, 0x03, 0x00, 0x02, 0x01, 0x00
+                });
+
+                return null;
+            }
+        });
+
+
+        executor.shutdown();
+        c.get(5, TimeUnit.SECONDS);
+        s.get(5, TimeUnit.SECONDS);
+        client.close();
+        server.close();
+        listener.close();
+        context.close();
+    }
+
+    public void test_SSLSocket_ServerGetsAlertDuringHandshake_HasGoodExceptionMessage()
+            throws Exception {
+        TestSSLContext context = TestSSLContext.create();
+
+        final Socket client = SocketFactory.getDefault().createSocket(context.host, context.port);
+        final SSLSocket server = (SSLSocket) context.serverSocket.accept();
+
+        ExecutorService executor = Executors.newFixedThreadPool(2);
+        Future<Void> s = executor.submit(new Callable<Void>() {
+            public Void call() throws Exception {
+                try {
+                    server.startHandshake();
+                    fail("Should receive handshake exception");
+                } catch (SSLHandshakeException expected) {
+                    assertFalse(expected.getMessage().contains("SSL_ERROR_ZERO_RETURN"));
+                    assertFalse(expected.getMessage().contains("You should never see this."));
+                }
+                return null;
+            }
+        });
+        Future<Void> c = executor.submit(new Callable<Void>() {
+            public Void call() throws Exception {
+                // Send bogus ClientHello:
+                // TLSv1.2 Record Layer: Handshake Protocol: Client Hello
+                client.getOutputStream().write(new byte[] {
+                        (byte) 0x16, (byte) 0x03, (byte) 0x01, (byte) 0x00, (byte) 0xb9,
+                        (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0xb5, (byte) 0x03,
+                        (byte) 0x03, (byte) 0x5a, (byte) 0x31, (byte) 0xba, (byte) 0x44,
+                        (byte) 0x24, (byte) 0xfd, (byte) 0xf0, (byte) 0x56, (byte) 0x46,
+                        (byte) 0xea, (byte) 0xee, (byte) 0x1c, (byte) 0x62, (byte) 0x8f,
+                        (byte) 0x18, (byte) 0x04, (byte) 0xbd, (byte) 0x1c, (byte) 0xbc,
+                        (byte) 0xbf, (byte) 0x6d, (byte) 0x84, (byte) 0x12, (byte) 0xe9,
+                        (byte) 0x94, (byte) 0xf5, (byte) 0x1c, (byte) 0x15, (byte) 0x3e,
+                        (byte) 0x79, (byte) 0x01, (byte) 0xe2, (byte) 0x00, (byte) 0x00,
+                        (byte) 0x28, (byte) 0xc0, (byte) 0x2b, (byte) 0xc0, (byte) 0x2c,
+                        (byte) 0xc0, (byte) 0x2f, (byte) 0xc0, (byte) 0x30, (byte) 0x00,
+                        (byte) 0x9e, (byte) 0x00, (byte) 0x9f, (byte) 0xc0, (byte) 0x09,
+                        (byte) 0xc0, (byte) 0x0a, (byte) 0xc0, (byte) 0x13, (byte) 0xc0,
+                        (byte) 0x14, (byte) 0x00, (byte) 0x33, (byte) 0x00, (byte) 0x39,
+                        (byte) 0xc0, (byte) 0x07, (byte) 0xc0, (byte) 0x11, (byte) 0x00,
+                        (byte) 0x9c, (byte) 0x00, (byte) 0x9d, (byte) 0x00, (byte) 0x2f,
+                        (byte) 0x00, (byte) 0x35, (byte) 0x00, (byte) 0x05, (byte) 0x00,
+                        (byte) 0xff, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x64,
+                        (byte) 0x00, (byte) 0x0b, (byte) 0x00, (byte) 0x04, (byte) 0x03,
+                        (byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x00, (byte) 0x0a,
+                        (byte) 0x00, (byte) 0x34, (byte) 0x00, (byte) 0x32, (byte) 0x00,
+                        (byte) 0x0e, (byte) 0x00, (byte) 0x0d, (byte) 0x00, (byte) 0x19,
+                        (byte) 0x00, (byte) 0x0b, (byte) 0x00, (byte) 0x0c, (byte) 0x00,
+                        (byte) 0x18, (byte) 0x00, (byte) 0x09, (byte) 0x00, (byte) 0x0a,
+                        (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x17, (byte) 0x00,
+                        (byte) 0x08, (byte) 0x00, (byte) 0x06, (byte) 0x00, (byte) 0x07,
+                        (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x15, (byte) 0x00,
+                        (byte) 0x04, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x12,
+                        (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x01, (byte) 0x00,
+                        (byte) 0x02, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x0f,
+                        (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x11, (byte) 0x00,
+                        (byte) 0x0d, (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x1e,
+                        (byte) 0x06, (byte) 0x01, (byte) 0x06, (byte) 0x02, (byte) 0x06,
+                        (byte) 0x03, (byte) 0x05, (byte) 0x01, (byte) 0x05, (byte) 0x02,
+                        (byte) 0x05, (byte) 0x03, (byte) 0x04, (byte) 0x01, (byte) 0x04,
+                        (byte) 0x02, (byte) 0x04, (byte) 0x03, (byte) 0x03, (byte) 0x01,
+                        (byte) 0x03, (byte) 0x02, (byte) 0x03, (byte) 0x03, (byte) 0x02,
+                        (byte) 0x01, (byte) 0x02, (byte) 0x02, (byte) 0x02, (byte) 0x03,
+                });
+
+                // Wait until the server sends something.
+                byte[] scratch = new byte[8192];
+                client.getInputStream().read(scratch);
+
+                // Write a bogus TLS alert:
+                // TLSv1.2 Record Layer: Alert (Level: Warning, Description:
+                // Protocol Version)
+                client.getOutputStream().write(new byte[] {
+                        0x15, 0x03, 0x03, 0x00, 0x02, 0x01, 0x46
+                });
+
+                // TLSv1.2 Record Layer: Alert (Level: Warning, Description:
+                // Close Notify)
+                client.getOutputStream().write(new byte[] {
+                        0x15, 0x03, 0x03, 0x00, 0x02, 0x01, 0x00
+                });
+
+                return null;
+            }
+        });
+
+        executor.shutdown();
+        c.get(5, TimeUnit.SECONDS);
+        s.get(5, TimeUnit.SECONDS);
+        client.close();
+        server.close();
+        context.close();
+    }
+
     /**
      * Not run by default by JUnit, but can be run by Vogar by
      * specifying it explicitly (or with main method below)
diff --git a/luni/src/test/java/libcore/net/MimeUtilsTest.java b/luni/src/test/java/libcore/net/MimeUtilsTest.java
index 36476e9..9bfb375 100644
--- a/luni/src/test/java/libcore/net/MimeUtilsTest.java
+++ b/luni/src/test/java/libcore/net/MimeUtilsTest.java
@@ -42,4 +42,8 @@
     assertEquals("png", MimeUtils.guessExtensionFromMimeType("image/png"));
     assertEquals("zip", MimeUtils.guessExtensionFromMimeType("application/zip"));
   }
+
+  public void test_18390752() {
+    assertEquals("jpg", MimeUtils.guessExtensionFromMimeType("image/jpeg"));
+  }
 }
diff --git a/luni/src/test/java/libcore/xml/KxmlSerializerTest.java b/luni/src/test/java/libcore/xml/KxmlSerializerTest.java
index 6a75a9b..5f68a99 100644
--- a/luni/src/test/java/libcore/xml/KxmlSerializerTest.java
+++ b/luni/src/test/java/libcore/xml/KxmlSerializerTest.java
@@ -22,7 +22,9 @@
 import junit.framework.TestCase;
 import org.kxml2.io.KXmlSerializer;
 import org.w3c.dom.Document;
+import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
 import org.xmlpull.v1.XmlSerializer;
 import static tests.support.Support_Xml.domOf;
 
@@ -87,12 +89,67 @@
         return serializer;
     }
 
+    public String fromCodePoint(int codePoint) {
+        if (codePoint > Character.MAX_VALUE) {
+            return new String(Character.toChars(codePoint));
+        }
+        return Character.toString((char) codePoint);
+    }
+
+    // http://b/17960630
+    public void testSpeakNoEvilMonkeys() throws Exception {
+        StringWriter stringWriter = new StringWriter();
+        XmlSerializer serializer = new KXmlSerializer();
+        serializer.setOutput(stringWriter);
+        serializer.startDocument("UTF-8", null);
+        serializer.startTag(NAMESPACE, "tag");
+        serializer.attribute(NAMESPACE, "attr", "a\ud83d\ude4ab");
+        serializer.text("c\ud83d\ude4ad");
+        serializer.cdsect("e\ud83d\ude4af");
+        serializer.endTag(NAMESPACE, "tag");
+        serializer.endDocument();
+        assertXmlEquals("<tag attr=\"a&#128586;b\">" +
+                        "c&#128586;d" +
+                        "<![CDATA[e]]>&#128586;<![CDATA[f]]>" +
+                        "</tag>", stringWriter.toString());
+
+        // Check we can parse what we just output.
+        Document doc = domOf(stringWriter.toString());
+        Node root = doc.getDocumentElement();
+        assertEquals("a\ud83d\ude4ab", root.getAttributes().getNamedItem("attr").getNodeValue());
+        Text text = (Text) root.getFirstChild();
+        assertEquals("c\ud83d\ude4ade\ud83d\ude4af", text.getNodeValue());
+    }
+
+    public void testBadSurrogates() throws Exception {
+        StringWriter stringWriter = new StringWriter();
+        XmlSerializer serializer = new KXmlSerializer();
+        serializer.setOutput(stringWriter);
+        serializer.startDocument("UTF-8", null);
+        serializer.startTag(NAMESPACE, "tag");
+        try {
+            serializer.attribute(NAMESPACE, "attr", "a\ud83d\u0040b");
+        } catch (IllegalArgumentException expected) {
+        }
+        try {
+            serializer.text("c\ud83d\u0040d");
+        } catch (IllegalArgumentException expected) {
+        }
+        try {
+            serializer.cdsect("e\ud83d\u0040f");
+        } catch (IllegalArgumentException expected) {
+        }
+    }
+
+    // Cover all the BMP code points plus a few that require us to use surrogates.
+    private static int MAX_TEST_CODE_POINT = 0x10008;
+
     public void testInvalidCharactersInText() throws IOException {
         XmlSerializer serializer = newSerializer();
         serializer.startTag(NAMESPACE, "root");
-        for (int ch = 0; ch <= 0xffff; ++ch) {
-            final String s = Character.toString((char) ch);
-            if (isValidXmlCodePoint(ch)) {
+        for (int c = 0; c <= MAX_TEST_CODE_POINT; ++c) {
+            final String s = fromCodePoint(c);
+            if (isValidXmlCodePoint(c)) {
                 serializer.text("a" + s + "b");
             } else {
                 try {
@@ -108,9 +165,9 @@
     public void testInvalidCharactersInAttributeValues() throws IOException {
         XmlSerializer serializer = newSerializer();
         serializer.startTag(NAMESPACE, "root");
-        for (int ch = 0; ch <= 0xffff; ++ch) {
-            final String s = Character.toString((char) ch);
-            if (isValidXmlCodePoint(ch)) {
+        for (int c = 0; c <= MAX_TEST_CODE_POINT; ++c) {
+            final String s = fromCodePoint(c);
+            if (isValidXmlCodePoint(c)) {
                 serializer.attribute(NAMESPACE, "a", "a" + s + "b");
             } else {
                 try {
@@ -126,9 +183,9 @@
     public void testInvalidCharactersInCdataSections() throws IOException {
         XmlSerializer serializer = newSerializer();
         serializer.startTag(NAMESPACE, "root");
-        for (int ch = 0; ch <= 0xffff; ++ch) {
-            final String s = Character.toString((char) ch);
-            if (isValidXmlCodePoint(ch)) {
+        for (int c = 0; c <= MAX_TEST_CODE_POINT; ++c) {
+            final String s = fromCodePoint(c);
+            if (isValidXmlCodePoint(c)) {
                 serializer.cdsect("a" + s + "b");
             } else {
                 try {
diff --git a/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java b/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java
index 5258fd1..abf06e0 100644
--- a/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java
+++ b/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java
@@ -834,8 +834,8 @@
         }
 
         @Override
-        public SocketPolicy peekSocketPolicy() {
-            return delegates.getFirst().peekSocketPolicy();
+        public MockResponse peek() {
+            return delegates.getFirst().peek();
         }
     }
 
@@ -888,8 +888,8 @@
         }
 
         @Override
-        public SocketPolicy peekSocketPolicy() {
-            return SocketPolicy.UPGRADE_TO_SSL_AT_END;
+        public MockResponse peek() {
+            return new MockResponse().setSocketPolicy(SocketPolicy.UPGRADE_TO_SSL_AT_END);
         }
 
         private void log(String msg) {
@@ -939,8 +939,8 @@
         }
 
         @Override
-        public SocketPolicy peekSocketPolicy() {
-            return SocketPolicy.DISCONNECT_AT_END;
+        public MockResponse peek() {
+            return new MockResponse().setSocketPolicy(SocketPolicy.DISCONNECT_AT_END);
         }
 
         private void log(String msg) {
diff --git a/support/src/test/java/libcore/java/security/TestKeyStore.java b/support/src/test/java/libcore/java/security/TestKeyStore.java
index 203c028..bd64360 100644
--- a/support/src/test/java/libcore/java/security/TestKeyStore.java
+++ b/support/src/test/java/libcore/java/security/TestKeyStore.java
@@ -47,6 +47,7 @@
 import java.security.PublicKey;
 import java.security.SecureRandom;
 import java.security.Security;
+import java.security.UnrecoverableEntryException;
 import java.security.UnrecoverableKeyException;
 import java.security.cert.Certificate;
 import java.security.cert.CertificateFactory;
@@ -260,6 +261,7 @@
         private X500Principal subject;
         private int keyUsage;
         private boolean ca;
+        private PrivateKeyEntry privateEntry;
         private PrivateKeyEntry signer;
         private Certificate rootCa;
         private final List<KeyPurposeId> extendedKeyUsages = new ArrayList<KeyPurposeId>();
@@ -314,6 +316,12 @@
             return this;
         }
 
+        /** a private key entry to use for the generation of the certificate */
+        public Builder privateEntry(PrivateKeyEntry privateEntry) {
+            this.privateEntry = privateEntry;
+            return this;
+        }
+
         /** a private key entry to be used for signing, otherwise self-sign */
         public Builder signer(PrivateKeyEntry signer) {
             this.signer = signer;
@@ -368,21 +376,32 @@
                     }
                 }
 
+                /*
+                 * This is not implemented for other key types because the logic
+                 * would be long to write and it's not needed currently.
+                 */
+                if (privateEntry != null
+                        && (keyAlgorithms.length != 1 || !"RSA".equals(keyAlgorithms[0]))) {
+                    throw new IllegalStateException(
+                            "Only reusing an existing key is implemented for RSA");
+                }
+
                 KeyStore keyStore = createKeyStore();
                 for (String keyAlgorithm : keyAlgorithms) {
                     String publicAlias  = aliasPrefix + "-public-"  + keyAlgorithm;
                     String privateAlias = aliasPrefix + "-private-" + keyAlgorithm;
                     if ((keyAlgorithm.equals("EC_RSA") || keyAlgorithm.equals("DH_RSA"))
                             && signer == null && rootCa == null) {
-                        createKeys(keyStore, keyAlgorithm, publicAlias, privateAlias,
-                                   privateKey(keyStore, keyPassword, "RSA", "RSA"));
+                        createKeys(keyStore, keyAlgorithm, publicAlias, privateAlias, null,
+                                privateKey(keyStore, keyPassword, "RSA", "RSA"));
                         continue;
                     } else if (keyAlgorithm.equals("DH_DSA") && signer == null && rootCa == null) {
-                        createKeys(keyStore, keyAlgorithm, publicAlias, privateAlias,
+                        createKeys(keyStore, keyAlgorithm, publicAlias, privateAlias, null,
                                 privateKey(keyStore, keyPassword, "DSA", "DSA"));
                         continue;
                     }
-                    createKeys(keyStore, keyAlgorithm, publicAlias, privateAlias, signer);
+                    createKeys(keyStore, keyAlgorithm, publicAlias, privateAlias, privateEntry,
+                            signer);
                 }
                 if (rootCa != null) {
                     keyStore.setCertificateEntry(aliasPrefix
@@ -416,6 +435,7 @@
                 String keyAlgorithm,
                 String publicAlias,
                 String privateAlias,
+                PrivateKeyEntry privateEntry,
                 PrivateKeyEntry signer) throws Exception {
             PrivateKey caKey;
             X509Certificate caCert;
@@ -430,42 +450,51 @@
                 caCertChain = (X509Certificate[])signer.getCertificateChain();
             }
 
-            PrivateKey privateKey;
+            final PrivateKey privateKey;
+            final PublicKey publicKey;
             X509Certificate x509c;
             if (publicAlias == null && privateAlias == null) {
                 // don't want anything apparently
                 privateKey = null;
+                publicKey = null;
                 x509c = null;
             } else {
-                // 1.) we make the keys
-                int keySize;
-                if (keyAlgorithm.equals("RSA")) {
-                    // 512 breaks SSL_RSA_EXPORT_* on RI and TLS_ECDHE_RSA_WITH_RC4_128_SHA for us
-                    keySize =  1024;
-                } else if (keyAlgorithm.equals("DH_RSA")) {
-                    keySize = 512;
-                    keyAlgorithm = "DH";
-                } else if (keyAlgorithm.equals("DSA")) {
-                    keySize = 512;
-                } else if (keyAlgorithm.equals("DH_DSA")) {
-                    keySize = 512;
-                    keyAlgorithm = "DH";
-                } else if (keyAlgorithm.equals("EC")) {
-                    keySize = 256;
-                } else if (keyAlgorithm.equals("EC_RSA")) {
-                    keySize = 256;
-                    keyAlgorithm = "EC";
+                if (privateEntry == null) {
+                    // 1a.) we make the keys
+                    int keySize;
+                    if (keyAlgorithm.equals("RSA")) {
+                        // 512 breaks SSL_RSA_EXPORT_* on RI and
+                        // TLS_ECDHE_RSA_WITH_RC4_128_SHA for us
+                        keySize = 1024;
+                    } else if (keyAlgorithm.equals("DH_RSA")) {
+                        keySize = 512;
+                        keyAlgorithm = "DH";
+                    } else if (keyAlgorithm.equals("DSA")) {
+                        keySize = 512;
+                    } else if (keyAlgorithm.equals("DH_DSA")) {
+                        keySize = 512;
+                        keyAlgorithm = "DH";
+                    } else if (keyAlgorithm.equals("EC")) {
+                        keySize = 256;
+                    } else if (keyAlgorithm.equals("EC_RSA")) {
+                        keySize = 256;
+                        keyAlgorithm = "EC";
+                    } else {
+                        throw new IllegalArgumentException("Unknown key algorithm " + keyAlgorithm);
+                    }
+
+                    KeyPairGenerator kpg = KeyPairGenerator.getInstance(keyAlgorithm);
+                    kpg.initialize(keySize, new SecureRandom());
+
+                    KeyPair kp = kpg.generateKeyPair();
+                    privateKey = kp.getPrivate();
+                    publicKey = kp.getPublic();
                 } else {
-                    throw new IllegalArgumentException("Unknown key algorithm " + keyAlgorithm);
+                    // 1b.) we use the previous keys
+                    privateKey = privateEntry.getPrivateKey();
+                    publicKey = privateEntry.getCertificate().getPublicKey();
                 }
 
-                KeyPairGenerator kpg = KeyPairGenerator.getInstance(keyAlgorithm);
-                kpg.initialize(keySize, new SecureRandom());
-
-                KeyPair kp = kpg.generateKeyPair();
-                privateKey = kp.getPrivate();
-                PublicKey publicKey  = kp.getPublic();
-
                 // 2.) use keys to make certificate
                 X500Principal issuer = ((caCert != null)
                                         ? caCert.getSubjectX500Principal()
@@ -820,6 +849,24 @@
     }
 
     /**
+     * Return an {@code X509Certificate that matches the given {@code alias}.
+     */
+    public KeyStore.Entry getEntryByAlias(String alias) {
+        return entryByAlias(keyStore, alias);
+    }
+
+    /**
+     * Finds an entry in the keystore by the given alias.
+     */
+    public static KeyStore.Entry entryByAlias(KeyStore keyStore, String alias) {
+        try {
+            return keyStore.getEntry(alias, null);
+        } catch (NoSuchAlgorithmException | UnrecoverableEntryException | KeyStoreException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
      * Create a client key store that only contains self-signed certificates but no private keys
      */
     public static KeyStore createClient(KeyStore caKeyStore) {
diff --git a/support/src/test/java/libcore/javax/net/ssl/TestSSLContext.java b/support/src/test/java/libcore/javax/net/ssl/TestSSLContext.java
index 8dd2085..8173e9d 100644
--- a/support/src/test/java/libcore/javax/net/ssl/TestSSLContext.java
+++ b/support/src/test/java/libcore/javax/net/ssl/TestSSLContext.java
@@ -53,7 +53,8 @@
     private static final boolean IS_RI = StandardNames.IS_RI;
     public static final int EXPECTED_DEFAULT_CLIENT_SSL_SESSION_CACHE_SIZE = (IS_RI) ? 0 : 10;
     public static final int EXPECTED_DEFAULT_SERVER_SSL_SESSION_CACHE_SIZE = (IS_RI) ? 0 : 100;
-    public static final int EXPECTED_DEFAULT_SSL_SESSION_CACHE_TIMEOUT = (IS_RI) ? 86400 : 0;
+    public static final int EXPECTED_DEFAULT_SSL_SESSION_CACHE_TIMEOUT =
+            (IS_RI) ? 24 * 3600 : 8 * 3600;
 
     /**
      * The Android SSLSocket and SSLServerSocket implementations are
diff --git a/support/src/test/java/libcore/javax/net/ssl/TestSSLEnginePair.java b/support/src/test/java/libcore/javax/net/ssl/TestSSLEnginePair.java
index 709f568..6c2c943 100644
--- a/support/src/test/java/libcore/javax/net/ssl/TestSSLEnginePair.java
+++ b/support/src/test/java/libcore/javax/net/ssl/TestSSLEnginePair.java
@@ -134,8 +134,6 @@
         void beforeBeginHandshake(SSLEngine client, SSLEngine server) {}
     }
 
-    private static final ByteBuffer EMPTY_BYTE_BUFFER = ByteBuffer.allocate(0);
-
     private static boolean handshakeCompleted(SSLEngine engine,
                                               ByteBuffer output,
                                               ByteBuffer input,
@@ -165,9 +163,12 @@
                     if (input.remaining() == 0) {
                         return false;
                     }
+                    int inputPositionBefore = input.position();
                     SSLEngineResult unwrapResult = engine.unwrap(input, scratch);
                     assertEquals(SSLEngineResult.Status.OK, unwrapResult.getStatus());
                     assertEquals(0, scratch.position());
+                    assertEquals(0, unwrapResult.bytesProduced());
+                    assertEquals(input.position() - inputPositionBefore, unwrapResult.bytesConsumed());
                     assertFinishedOnce(finished, unwrapResult);
                     return true;
                 }
@@ -177,8 +178,15 @@
                     if (output.remaining() != output.capacity()) {
                         return false;
                     }
-                    SSLEngineResult wrapResult = engine.wrap(EMPTY_BYTE_BUFFER, output);
+                    ByteBuffer emptyByteBuffer = ByteBuffer.allocate(0);
+                    int inputPositionBefore = emptyByteBuffer.position();
+                    int outputPositionBefore = output.position();
+                    SSLEngineResult wrapResult = engine.wrap(emptyByteBuffer, output);
                     assertEquals(SSLEngineResult.Status.OK, wrapResult.getStatus());
+                    assertEquals(0, wrapResult.bytesConsumed());
+                    assertEquals(inputPositionBefore, emptyByteBuffer.position());
+                    assertEquals(output.position() - outputPositionBefore,
+                            wrapResult.bytesProduced());
                     assertFinishedOnce(finished, wrapResult);
                     return true;
                 }
diff --git a/support/src/test/java/tests/resources/hyts_certLoop.jar b/support/src/test/java/tests/resources/hyts_certLoop.jar
new file mode 100644
index 0000000..cb4ebe1
--- /dev/null
+++ b/support/src/test/java/tests/resources/hyts_certLoop.jar
Binary files differ
diff --git a/xml/src/main/java/org/kxml2/io/KXmlSerializer.java b/xml/src/main/java/org/kxml2/io/KXmlSerializer.java
index 8fa2756..bfdeece 100644
--- a/xml/src/main/java/org/kxml2/io/KXmlSerializer.java
+++ b/xml/src/main/java/org/kxml2/io/KXmlSerializer.java
@@ -125,14 +125,18 @@
                     // otherwise generate.
                     // Note: tab, newline, and carriage return have already been
                     // handled above.
-                    boolean valid = (c >= 0x20 && c <= 0xd7ff) || (c >= 0xe000 && c <= 0xfffd);
-                    if (!valid) {
-                        reportInvalidCharacter(c);
-                    }
-                    if (unicode || c < 127) {
-                        writer.write(c);
+                    boolean allowedInXml = (c >= 0x20 && c <= 0xd7ff) || (c >= 0xe000 && c <= 0xfffd);
+                    if (allowedInXml) {
+                        if (unicode || c < 127) {
+                            writer.write(c);
+                        } else {
+                            writer.write("&#" + ((int) c) + ";");
+                        }
+                    } else if (Character.isHighSurrogate(c) && i < s.length() - 1) {
+                        writeSurrogate(c, s.charAt(i + 1));
+                        ++i;
                     } else {
-                        writer.write("&#" + ((int) c) + ";");
+                        reportInvalidCharacter(c);
                     }
                     // END android-changed
             }
@@ -141,7 +145,7 @@
 
     // BEGIN android-added
     private static void reportInvalidCharacter(char ch) {
-        throw new IllegalArgumentException("Illegal character (" + Integer.toHexString((int) ch) + ")");
+        throw new IllegalArgumentException("Illegal character (U+" + Integer.toHexString((int) ch) + ")");
     }
     // END android-added
 
@@ -548,22 +552,41 @@
         // BEGIN android-changed: ]]> is not allowed within a CDATA,
         // so break and start a new one when necessary.
         data = data.replace("]]>", "]]]]><![CDATA[>");
-        char[] chars = data.toCharArray();
-        // We also aren't allowed any invalid characters.
-        for (char ch : chars) {
-            boolean valid = (ch >= 0x20 && ch <= 0xd7ff) ||
+        writer.write("<![CDATA[");
+        for (int i = 0; i < data.length(); ++i) {
+            char ch = data.charAt(i);
+            boolean allowedInCdata = (ch >= 0x20 && ch <= 0xd7ff) ||
                     (ch == '\t' || ch == '\n' || ch == '\r') ||
                     (ch >= 0xe000 && ch <= 0xfffd);
-            if (!valid) {
+            if (allowedInCdata) {
+                writer.write(ch);
+            } else if (Character.isHighSurrogate(ch) && i < data.length() - 1) {
+                // Character entities aren't valid in CDATA, so break out for this.
+                writer.write("]]>");
+                writeSurrogate(ch, data.charAt(++i));
+                writer.write("<![CDATA[");
+            } else {
                 reportInvalidCharacter(ch);
             }
         }
-        writer.write("<![CDATA[");
-        writer.write(chars, 0, chars.length);
         writer.write("]]>");
         // END android-changed
     }
 
+    // BEGIN android-added
+    private void writeSurrogate(char high, char low) throws IOException {
+        if (!Character.isLowSurrogate(low)) {
+            throw new IllegalArgumentException("Bad surrogate pair (U+" + Integer.toHexString((int) high) +
+                                               " U+" + Integer.toHexString((int) low) + ")");
+        }
+        // Java-style surrogate pairs aren't allowed in XML. We could use the > 3-byte encodings, but that
+        // seems likely to upset anything expecting modified UTF-8 rather than "real" UTF-8. It seems more
+        // conservative in a Java environment to use an entity reference instead.
+        int codePoint = Character.toCodePoint(high, low);
+        writer.write("&#" + codePoint + ";");
+    }
+    // END android-added
+
     public void comment(String comment) throws IOException {
         check(false);
         writer.write("<!--");