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..d14afdc 100644
--- a/expectations/knownfailures.txt
+++ b/expectations/knownfailures.txt
@@ -1501,25 +1501,18 @@
   ]
 },
 {
+  description: "OkHttp tests that fail on Wear devices due to a lack of memory",
+  bug: 20055487,
+  names: [
+    "com.squareup.okhttp.internal.spdy.Http20Draft09Test#tooLargeDataFrame",
+    "com.squareup.okhttp.internal.spdy.Spdy3Test#tooLargeDataFrame"
+  ]
+},
+{
   description: "libcore.java.text.DecimalFormatSymbolsTest#test_getInstance_unknown_or_invalid_locale assumes fallback to locale other than en_US_POSIX.",
   bug: 17374604,
   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/net/MulticastSocketTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/net/MulticastSocketTest.java
index 828dc99..b6a5861 100644
--- a/harmony-tests/src/test/java/org/apache/harmony/tests/java/net/MulticastSocketTest.java
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/net/MulticastSocketTest.java
@@ -49,7 +49,6 @@
 
     private static InetAddress GOOD_IPv4 = lookup("224.0.0.3");
     private static InetAddress BAD_IPv4 = lookup("224.0.0.4");
-
     private static InetAddress GOOD_IPv6 = lookup("ff05::7:7");
     private static InetAddress BAD_IPv6 = lookup("ff05::7:8");
 
@@ -87,14 +86,15 @@
                     final InetAddress nextAddress = addresses.nextElement();
                     if (nextAddress instanceof Inet6Address && ipv6NetworkInterface == null) {
                         ipv6NetworkInterface = nextInterface;
-                    } else if (nextAddress instanceof Inet4Address && ipv4NetworkInterface == null) {
+                    } else if (nextAddress instanceof Inet4Address
+                            && ipv4NetworkInterface == null) {
                         ipv4NetworkInterface = nextInterface;
                     }
                 }
             }
         }
         assertTrue("Test environment must have at least one interface capable of multicast for IPv4"
-                + " and IPv6",
+                        + " and IPv6",
                 ipv4NetworkInterface != null && ipv6NetworkInterface != null);
     }
 
@@ -309,18 +309,31 @@
                 ipv6NetworkInterface, GOOD_IPv6, BAD_IPv6);
     }
 
+    public void test_joinGroupLjava_net_SocketAddressLjava_net_NetworkInterface_IPv4_nullInterface()
+            throws Exception {
+        test_joinGroupLjava_net_SocketAddressLjava_net_NetworkInterface(null, GOOD_IPv4, BAD_IPv4);
+    }
+
+    public void test_joinGroupLjava_net_SocketAddressLjava_net_NetworkInterface_IPv6_nullInterface()
+            throws Exception {
+        test_joinGroupLjava_net_SocketAddressLjava_net_NetworkInterface(null, GOOD_IPv6, BAD_IPv6);
+    }
+
     private void test_joinGroupLjava_net_SocketAddressLjava_net_NetworkInterface(
             NetworkInterface networkInterface, InetAddress group, InetAddress group2)
             throws Exception {
-        // Check that we can join a group using a null network interface.
+        // Create the sending socket and specify the interface to use as needed (otherwise use the
+        // default).
         MulticastSocket sendingSocket = new MulticastSocket(0);
-        SocketAddress groupSockAddr = new InetSocketAddress(group, sendingSocket.getLocalPort());
-        sendingSocket.joinGroup(groupSockAddr, null);
+        if (networkInterface != null) {
+            sendingSocket.setNetworkInterface(networkInterface);
+        }
         sendingSocket.setTimeToLive(2);
 
         MulticastSocket receivingSocket = createReceivingSocket(0);
         InetSocketAddress groupAddress =
                 new InetSocketAddress(group, receivingSocket.getLocalPort());
+        // Join the group. A null network interface is valid and means "use default".
         receivingSocket.joinGroup(groupAddress, networkInterface);
 
         String msg = "Hello World";
@@ -334,12 +347,19 @@
         receivingSocket.close();
         sendingSocket.close();
 
+        // Create the sending socket and specify the interface to use as needed (otherwise use the
+        // default).
+        sendingSocket = new MulticastSocket(0);
+        if (networkInterface != null) {
+            sendingSocket.setNetworkInterface(networkInterface);
+        }
+        sendingSocket.setTimeToLive(10);
+
         receivingSocket = createReceivingSocket(0);
         groupAddress = new InetSocketAddress(group, receivingSocket.getLocalPort());
+        // Join the group. A null network interface is valid and means "use default".
         receivingSocket.joinGroup(groupAddress, networkInterface);
 
-        sendingSocket = new MulticastSocket(0);
-        sendingSocket.setTimeToLive(10);
         msg = "Hello World - Different Group";
         InetSocketAddress group2Address =
                 new InetSocketAddress(group2, receivingSocket.getLocalPort());
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/MessageFormatTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/MessageFormatTest.java
index 171f247..4f99a0f 100644
--- a/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/MessageFormatTest.java
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/MessageFormatTest.java
@@ -184,6 +184,9 @@
   }
 
   public void test_parseLjava_lang_String() throws ParseException {
+    // This test assumes a default DateFormat.is24Hour setting.
+    DateFormat.is24Hour = null;
+
     String pattern = "A {3, number, currency} B {2, time} C {0, number, percent} D {4}  E {1,choice,0#off|1#on} F {0, date}";
     MessageFormat mf = new MessageFormat(pattern);
     String sToParse = "A $12,345.00 B 9:56:07 AM C 3,200% D 1/15/70 9:56 AM  E on F Jan 1, 1970";
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_MessageFormat.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_MessageFormat.java
index 8003b88..b8b0cee 100644
--- a/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_MessageFormat.java
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_MessageFormat.java
@@ -44,6 +44,8 @@
 	}
 
 	public void t_format_with_FieldPosition() {
+		// This test assumes a default DateFormat.is24Hour setting.
+		DateFormat.is24Hour = null;
 
 		String pattern = "On {4,date} at {3,time}, he ate {2,number, integer} hamburger{2,choice,1#|1<s} and drank {1, number} liters of coke. That was {0,choice,1#just enough|1<more than enough} food!";
 		MessageFormat format = new MessageFormat(pattern, Locale.US);
@@ -71,6 +73,9 @@
 	}
 
 	public void t_formatToCharacterIterator() {
+		// This test assumes a default DateFormat.is24Hour setting.
+		DateFormat.is24Hour = null;
+
 		String pattern = "On {4,date} at {3,time}, he ate {2,number, integer} hamburger{2,choice,1#|1<s} and drank {1, number} liters of coke. That was {0,choice,1#just enough|1<more than enough} food!";
 		MessageFormat format = new MessageFormat(pattern, Locale.US);
 
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/DateTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/DateTest.java
index 0ce971d..f3ad743 100644
--- a/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/DateTest.java
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/DateTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.harmony.tests.java.util;
 
+import java.text.DateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
@@ -487,18 +488,20 @@
     public void test_toLocaleString() {
         Locale loc = Locale.getDefault();
         Locale.setDefault(Locale.US);
-    TimeZone tz = TimeZone.getDefault();
-    TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
-    try {
+        TimeZone tz = TimeZone.getDefault();
+        TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
+        // This test assumes a default DateFormat.is24Hour setting.
+        DateFormat.is24Hour = null;
+        try {
             assertEquals("Did not convert epoch to GMT string correctly", "Jan 1, 1970 12:00:00 AM",
-                new Date(0).toLocaleString());
+                    new Date(0).toLocaleString());
             assertEquals("Did not convert epoch + 1yr to GMT string correctly",
-                "Jan 1, 1971 12:00:00 AM", new Date((long)365 * 24 * 60 * 60 * 1000)
-                        .toLocaleString());
-    } finally {
+                    "Jan 1, 1971 12:00:00 AM",
+                    new Date((long)365 * 24 * 60 * 60 * 1000).toLocaleString());
+        } finally {
             Locale.setDefault(loc);
-        TimeZone.setDefault(tz);
-    }
+            TimeZone.setDefault(tz);
+        }
     }
 
     static TimeZone defaultTimeZone = TimeZone.getDefault();
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 f438d1b..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;
@@ -641,42 +642,32 @@
      * Tolerate bad https proxy response when using HttpResponseCache. http://b/6754912
      */
     public void testConnectViaHttpProxyToHttpsUsingBadProxyAndHttpResponseCache() throws Exception {
-        ProxyConfig proxyConfig = ProxyConfig.PROXY_SYSTEM_PROPERTY;
-
         TestSSLContext testSSLContext = TestSSLContext.create();
 
         initResponseCache();
 
         server.useHttps(testSSLContext.serverContext.getSocketFactory(), true);
+
+        // The inclusion of a body in the response to the CONNECT is key to reproducing b/6754912.
         MockResponse badProxyResponse = new MockResponse()
                 .setSocketPolicy(SocketPolicy.UPGRADE_TO_SSL_AT_END)
                 .clearHeaders()
-                .setBody("bogus proxy connect response content"); // Key to reproducing b/6754912
+                .setBody("bogus proxy connect response content");
 
-        // We enqueue the bad response twice because the connection will
-        // be retried with TLS_MODE_COMPATIBLE after the first connection
-        // fails.
         server.enqueue(badProxyResponse);
-        server.enqueue(badProxyResponse);
+        server.enqueue(new MockResponse().setBody("response"));
 
         server.play();
 
         URL url = new URL("https://android.com/foo");
+        ProxyConfig proxyConfig = ProxyConfig.PROXY_SYSTEM_PROPERTY;
         HttpsURLConnection connection = (HttpsURLConnection) proxyConfig.connect(server, url);
         connection.setSSLSocketFactory(testSSLContext.clientContext.getSocketFactory());
-
-        try {
-            connection.connect();
-            fail();
-        } catch (SSLHandshakeException expected) {
-            // Thrown when the connect causes SSLSocket.startHandshake() to throw
-            // when it sees the "bogus proxy connect response content"
-            // instead of a ServerHello handshake message.
-        }
+        connection.setHostnameVerifier(new RecordingHostnameVerifier());
+        assertContent("response", connection);
 
         RecordedRequest connect = server.takeRequest();
-        assertEquals("Connect line failure on proxy",
-                "CONNECT android.com:443 HTTP/1.1", connect.getRequestLine());
+        assertEquals("CONNECT android.com:443 HTTP/1.1", connect.getRequestLine());
         assertContains(connect.getHeaders(), "Host: android.com");
     }
 
@@ -780,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();
@@ -788,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) {
@@ -2212,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/OldDateFormatTest.java b/luni/src/test/java/libcore/java/text/OldDateFormatTest.java
index df388d3..1bd1d0c 100644
--- a/luni/src/test/java/libcore/java/text/OldDateFormatTest.java
+++ b/luni/src/test/java/libcore/java/text/OldDateFormatTest.java
@@ -86,6 +86,8 @@
      */
     public void test_formatLjava_util_Date() {
         try {
+            // This test assumes a default DateFormat.is24Hour setting.
+            DateFormat.is24Hour = null;
             DateFormat format = DateFormat.getDateTimeInstance(
                     DateFormat.SHORT, DateFormat.SHORT, Locale.US);
             Date current = new Date();
@@ -104,6 +106,8 @@
      */
     public void test_formatLjava_lang_ObjectLjava_lang_StringBufferLjava_text_FieldPosition() {
         try {
+            // This test assumes a default DateFormat.is24Hour setting.
+            DateFormat.is24Hour = null;
             DateFormat format = DateFormat.getDateTimeInstance(
                     DateFormat.SHORT, DateFormat.SHORT, Locale.US);
             Date current = new Date();
@@ -204,6 +208,8 @@
      * java.text.DateFormat#parse(String)
      */
     public void test_parseLString() throws Exception {
+        // This test assumes a default DateFormat.is24Hour setting.
+        DateFormat.is24Hour = null;
         DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.US);
 
         try {
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 0bc02b0..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" };
@@ -277,12 +256,12 @@
     }
 
     // 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));
+    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-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("<!--");
