<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>65587</bug_id>
          
          <creation_ts>2011-08-02 18:41:11 -0700</creation_ts>
          <short_desc>Implemented skia support for caching resizes of cropped images.</short_desc>
          <delta_ts>2011-08-23 12:30:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>66798</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Bates">jbates</reporter>
          <assigned_to name="John Bates">jbates</assigned_to>
          <cc>brettw</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>reed</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>445660</commentid>
    <comment_count>0</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-02 18:41:11 -0700</bug_when>
    <thetext>Implemented skia support for caching resizes of cropped images.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445663</commentid>
    <comment_count>1</comment_count>
      <attachid>102727</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-02 18:47:08 -0700</bug_when>
    <thetext>Created attachment 102727
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445670</commentid>
    <comment_count>2</comment_count>
      <attachid>102727</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 18:56:40 -0700</bug_when>
    <thetext>Comment on attachment 102727
Patch

Attachment 102727 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9287870</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445675</commentid>
    <comment_count>3</comment_count>
      <attachid>102727</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-02 19:04:34 -0700</bug_when>
    <thetext>Comment on attachment 102727
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=102727&amp;action=review

&gt; Source/WebCore/platform/graphics/skia/ImageSkia.cpp:-167
&gt; -    // First get the subset we need. This is efficient and does not copy pixels.
&gt; -    SkBitmap subset;
&gt; -    bitmap.extractSubset(&amp;subset, srcIRect);

Moved to NativeImageSkia::resizedBitmap that is specialized to handle subset (cropped) image resizes.

&gt; Source/WebCore/platform/graphics/skia/ImageSkia.cpp:-195
&gt; -    if (srcIsFull &amp;&amp; bitmap.hasResizedBitmap(destRectTransformedRounded.width(), destRectTransformedRounded.height())) {
&gt; -        // Yay, this bitmap frame already has a resized version.
&gt; -        SkBitmap resampled = bitmap.resizedBitmap(destRectTransformedRounded.width(), destRectTransformedRounded.height());
&gt; -        canvas.drawBitmapRect(resampled, 0, destRect, &amp;paint);
&gt; -        return;
&gt; -    }

Unless destRectTransformedRounded == resizedImageRect, this code was never triggered, because hasResizedBitmap was keyed on the dimensions passed to shouldCacheResampling below. Since that used to be resizedImageRect, and this code is asking for destRectTransformedRounded, it would always be false. Actually, it looks like this code would ping-pong m_lastRequestSize between resizedImageRect and destRectTransformedRounded, causing the count-to-4-caching logic to never get triggered unless destRectTransformedRounded == resizedImageRect.

&gt; Source/WebCore/platform/graphics/skia/ImageSkia.cpp:-203
&gt; -    // visible portion for use below.
&gt; -    SkRect destBitmapSubsetSk;
&gt; -    ClipRectToCanvas(canvas, destRect, &amp;destBitmapSubsetSk);
&gt; -    SkRect destBitmapSubsetTransformed;
&gt; -    canvas.getTotalMatrix().mapRect(&amp;destBitmapSubsetTransformed, destBitmapSubsetSk);

Moved inside the else below where it was used.

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:-73
&gt; -    if (m_lastRequestSize.width() == w &amp;&amp; m_lastRequestSize.height() == h)
&gt; -        m_resizeRequests++;
&gt; -    else {
&gt; -        m_lastRequestSize = IntSize(w, h);
&gt; -        m_resizeRequests = 0;
&gt; -    }

This logic was moved to shouldCacheResampling so that there aren&apos;t multiple methods dealing with m_resizeRequests.

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:-78
&gt; -// FIXME: don&apos;t cache when image is in-progress.

Fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445678</commentid>
    <comment_count>4</comment_count>
      <attachid>102730</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-02 19:10:36 -0700</bug_when>
    <thetext>Created attachment 102730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445695</commentid>
    <comment_count>5</comment_count>
      <attachid>102730</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 19:45:03 -0700</bug_when>
    <thetext>Comment on attachment 102730
Patch

Attachment 102730 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9285917

New failing tests:
svg/custom/image-small-width-height.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448094</commentid>
    <comment_count>6</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-08-08 10:42:28 -0700</bug_when>
    <thetext>1. Do you have metrics for how this has improved/affected our decisions for caching?

2. Do we need to store the dstRect in the cache, or just the dst-width and dst-height?

3. Going forward, I think this notion (fancy filtering and caching it) should be moved lower-down, so we can
- age such caches more globally
- not perform filter if it can be done differently on a gpu
- not perform the filter (or perform it differently) when we&apos;re printing

#3 is just a note, not a comment on this CL per-se</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448109</commentid>
    <comment_count>7</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-08 11:02:51 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; 1. Do you have metrics for how this has improved/affected our decisions for caching?

I&apos;m working on this. There is a clear performance issue that this has fixed (try new tab page or new youtube interface), but some of the code paths still need testing.
 
&gt; 2. Do we need to store the dstRect in the cache, or just the dst-width and dst-height?

Not sure - the code uses all stored information AFAIK. Let me know if you have a way to optimize out some of the data.

&gt; 3. Going forward, I think this notion (fancy filtering and caching it) should be moved lower-down, so we can
&gt; - age such caches more globally
&gt; - not perform filter if it can be done differently on a gpu
&gt; - not perform the filter (or perform it differently) when we&apos;re printing
&gt; 
&gt; #3 is just a note, not a comment on this CL per-se

Yes, agreed. Would be very cool to have a shared cache for better memory utilization and control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448115</commentid>
    <comment_count>8</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-08-08 11:08:03 -0700</bug_when>
    <thetext>I believe we&apos;re using all of dstRect, but I think that is overconstrained. Two destinations of the same size, but different positions on screen should be able to use the same cached image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451253</commentid>
    <comment_count>9</comment_count>
      <attachid>103948</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-15 13:50:37 -0700</bug_when>
    <thetext>Created attachment 103948
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451271</commentid>
    <comment_count>10</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-15 14:09:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; 1. Do you have metrics for how this has improved/affected our decisions for caching?
&gt; 

There seem to be common use cases for cropping and resizing images. Even for things like page backgrounds. In these cases, when there are animations the image gets resized every time it&apos;s drawn. Two examples I know of that trigger this are the new new tab page and the new youtube page.

&gt; 2. Do we need to store the dstRect in the cache, or just the dst-width and dst-height?

The documentation for skia::ImageOperations::Resize seems to indicate that it uses the full dstRect. I&apos;m not sure how to optimize anything out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451288</commentid>
    <comment_count>11</comment_count>
      <attachid>103948</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-15 14:23:58 -0700</bug_when>
    <thetext>Comment on attachment 103948
Patch

Attachment 103948 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9359867

New failing tests:
svg/custom/image-small-width-height.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452596</commentid>
    <comment_count>12</comment_count>
      <attachid>104247</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-17 14:35:39 -0700</bug_when>
    <thetext>Created attachment 104247
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453315</commentid>
    <comment_count>13</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-18 13:39:36 -0700</bug_when>
    <thetext>This may help themed gmail scrolling perf as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453338</commentid>
    <comment_count>14</comment_count>
      <attachid>104247</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-18 14:05:29 -0700</bug_when>
    <thetext>Comment on attachment 104247
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104247&amp;action=review

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:82
&gt; +    SkBitmap resizedBitmap(int width, int height, const SkIRect&amp; srcSubset, const SkIRect&amp; destSubset, bool allowCaching) const;

style note: we tend to prefer enums for parameters like this rather that bools when the callsites are likely to pass a literal.  That way callsites look like:

resizedBitmap(..., AllowCaching)

which is a lot easier to understand than

resizedBitmap(...., true)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453418</commentid>
    <comment_count>15</comment_count>
      <attachid>104247</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-18 15:31:20 -0700</bug_when>
    <thetext>Comment on attachment 104247
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104247&amp;action=review

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:64
&gt; +NativeImageSkia::CachedImageInfo::CachedImageInfo()

nit: The CachedImageInfo definition should probably move to either the top
or the bottom of the file so as not to interrupt the flow of NativeImageSkia
method implementations.

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:110
&gt; +

it seems like you should rewrite this function to avoid duplicating the call
to ImageOperations::Resize.

since SkBitmap is internally reference counted, this should be cheap to do:

  SkBitmap result = skia::ImageOperations::Resize(*this, skia::ImageOperations::RESIZE_LANCZOS3, w, h);
  if (m_isDataComplete &amp;&amp; allowCaching)
      m_resizedImage = result;
  return result;

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:126
&gt; +        return skia::ImageOperations::Resize(subset, skia::ImageOperations::RESIZE_LANCZOS3, w, h, destSubset);

same nit

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:140
&gt; +    return shouldCacheResamplingInternal(destWidth, destHeight, destSubsetWidth, destSubsetHeight, srcSubset, destSubset);

it seems like this function could also be implemented in terms of a call
to shouldCacheResampling(destWidth, destHeight, srcSubset, destSubset).
my assumption is that we could compute destSubset given destSubsetWidth
and destSubsetHeight.  am i missing something?

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:148
&gt; +    return shouldCacheResamplingInternal(destWidth, destHeight, destWidth, destHeight, srcSubset, destSubset);

are you sure you are computing the destSubsetWidth and destSubsetHeight parameters
properly?  shouldn&apos;t they be taken from destSubset?

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:112
&gt; +

nit: nuke this new line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454026</commentid>
    <comment_count>16</comment_count>
      <attachid>104553</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-19 13:27:24 -0700</bug_when>
    <thetext>Created attachment 104553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454046</commentid>
    <comment_count>17</comment_count>
      <attachid>104247</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-19 13:44:24 -0700</bug_when>
    <thetext>Comment on attachment 104247
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104247&amp;action=review

This latest patch considerably cleans up drawResampledBitmap and addresses feedback.

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:64
&gt;&gt; +NativeImageSkia::CachedImageInfo::CachedImageInfo()
&gt; 
&gt; nit: The CachedImageInfo definition should probably move to either the top
&gt; or the bottom of the file so as not to interrupt the flow of NativeImageSkia
&gt; method implementations.

Done.

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:110
&gt;&gt; +
&gt; 
&gt; it seems like you should rewrite this function to avoid duplicating the call
&gt; to ImageOperations::Resize.
&gt; 
&gt; since SkBitmap is internally reference counted, this should be cheap to do:
&gt; 
&gt;   SkBitmap result = skia::ImageOperations::Resize(*this, skia::ImageOperations::RESIZE_LANCZOS3, w, h);
&gt;   if (m_isDataComplete &amp;&amp; allowCaching)
&gt;       m_resizedImage = result;
&gt;   return result;

Done. (I was opting for avoiding the copy, but the resize is a lot more expensive so not a big deal.)

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:140
&gt;&gt; +    return shouldCacheResamplingInternal(destWidth, destHeight, destSubsetWidth, destSubsetHeight, srcSubset, destSubset);
&gt; 
&gt; it seems like this function could also be implemented in terms of a call
&gt; to shouldCacheResampling(destWidth, destHeight, srcSubset, destSubset).
&gt; my assumption is that we could compute destSubset given destSubsetWidth
&gt; and destSubsetHeight.  am i missing something?

I added more comments to the method definitions to help explain what they are for. The skia APIs use all this data as-is. In the cropped case, destSubsetWidth/destSubsetHeight is not used. Instead, the full destSubset rect is used to crop the *resized* version of the image. (Of course, I assume the implementation only resizes the used bits.)

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:82
&gt;&gt; +    SkBitmap resizedBitmap(int width, int height, const SkIRect&amp; srcSubset, const SkIRect&amp; destSubset, bool allowCaching) const;
&gt; 
&gt; style note: we tend to prefer enums for parameters like this rather that bools when the callsites are likely to pass a literal.  That way callsites look like:
&gt; 
&gt; resizedBitmap(..., AllowCaching)
&gt; 
&gt; which is a lot easier to understand than
&gt; 
&gt; resizedBitmap(...., true)

I just named the variables where they are passed as parameters. Otherwise the non-literal callsite needs to do specify &quot;allowCaching? NativeImageSkia::AllowCaching : NativeImageSkia::DisallowCaching&quot; instead of just allowCaching, which doesn&apos;t seem like a good tradeoff.

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:112
&gt;&gt; +
&gt; 
&gt; nit: nuke this new line

Gladly. I found some structs elsewhere in webkit that used this style. The style bots don&apos;t have an opinion, so.. nuked!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454068</commentid>
    <comment_count>18</comment_count>
      <attachid>104553</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-19 14:03:50 -0700</bug_when>
    <thetext>Comment on attachment 104553
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104553&amp;action=review

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:150
&gt; +    return shouldCacheResamplingInternal(destWidth, destHeight, destWidth, destHeight, srcSubset, destSubset);

I still have the same question:

&quot;are you sure you are computing the destSubsetWidth and destSubsetHeight parameters
properly?  shouldn&apos;t they be taken from destSubset?&quot;

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:45
&gt; +    // CachedImageInfo is used to uniquely identify cached or requested image

Sorry, I explained poorly.  I thought where you placed the struct in this header file
was fine.  I was pointing out that the method implementations in the .cpp file appear
in the middle of the NativeImageSkia methods.  It is helpful when things in the .cpp
file are listed in the same order as they appear in the .h file.

I would move this back down to where you had it, and then I would just move the
methods in the .cpp file to be at the bottom of the .cpp file.

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:94
&gt; +    SkBitmap resizedBitmap(int width, int height, bool allowCaching) const;

what about jamesr&apos;s suggestion to switch allowCaching over to an enum?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454115</commentid>
    <comment_count>19</comment_count>
      <attachid>104553</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-19 14:51:18 -0700</bug_when>
    <thetext>Comment on attachment 104553
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104553&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:150
&gt;&gt; +    return shouldCacheResamplingInternal(destWidth, destHeight, destWidth, destHeight, srcSubset, destSubset);
&gt; 
&gt; I still have the same question:
&gt; 
&gt; &quot;are you sure you are computing the destSubsetWidth and destSubsetHeight parameters
&gt; properly?  shouldn&apos;t they be taken from destSubset?&quot;

Sorry, I misunderstood your original question. I was trying to reuse the common heuristic code, but the way I did it is confusing. I&apos;ve fixed it and will upload soon.

To explain (tl;dr)
In the uncropped resize case, the whole image is cached, so the last heuristic checks if more than 1/4 of the image is used (and caches if so). This avoids caching large images when only a small portion is displayed.

In the cropped caching case, only the visible subset of the image is resized. We are displaying 100% of what we resample. So in this case I was specifying destWidth as destSubsetWidth to ensure that the 1/4 heuristic was passed.

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:45
&gt;&gt; +    // CachedImageInfo is used to uniquely identify cached or requested image
&gt; 
&gt; Sorry, I explained poorly.  I thought where you placed the struct in this header file
&gt; was fine.  I was pointing out that the method implementations in the .cpp file appear
&gt; in the middle of the NativeImageSkia methods.  It is helpful when things in the .cpp
&gt; file are listed in the same order as they appear in the .h file.
&gt; 
&gt; I would move this back down to where you had it, and then I would just move the
&gt; methods in the .cpp file to be at the bottom of the .cpp file.

Ahh, I should have looked at your comment in context! Done.

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:94
&gt;&gt; +    SkBitmap resizedBitmap(int width, int height, bool allowCaching) const;
&gt; 
&gt; what about jamesr&apos;s suggestion to switch allowCaching over to an enum?

It gets a bit messy for the non-literal caller cases. (I explained in my earlier response to jamesr&apos;s comment.) I&apos;m OK with either, but the current code solves the problem of self-documented literals with less code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454282</commentid>
    <comment_count>20</comment_count>
      <attachid>104611</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-19 19:35:14 -0700</bug_when>
    <thetext>Created attachment 104611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454285</commentid>
    <comment_count>21</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-19 19:41:23 -0700</bug_when>
    <thetext>Darin and I suspected some over-complication with this code and discovered a nice simplification that just required NativeImageSkia::resizedBitmap to return the visible subset of the image in all cases. Then all the &quot;shouldCache&quot; logic can be internalized into NativeImageSkia. And the caller knows it can just render the returned image into the clipped destRect.

Definitely looks a lot simpler and cleaner all around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454290</commentid>
    <comment_count>22</comment_count>
      <attachid>104611</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-19 20:14:06 -0700</bug_when>
    <thetext>Comment on attachment 104611
Patch

Attachment 104611 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9437623

New failing tests:
svg/custom/image-small-width-height.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454307</commentid>
    <comment_count>23</comment_count>
      <attachid>104611</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-19 21:27:22 -0700</bug_when>
    <thetext>Comment on attachment 104611
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104611&amp;action=review

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:89
&gt; +    m_resizedImage.extractSubset(&amp;visibleBitmap, destVisibleSubset);

i take it that extractSubset does no work if the desired subset is everything?

this is so much clearer.  thanks!

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454348</commentid>
    <comment_count>24</comment_count>
      <attachid>104611</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-20 09:56:11 -0700</bug_when>
    <thetext>Comment on attachment 104611
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104611&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:89
&gt;&gt; +    m_resizedImage.extractSubset(&amp;visibleBitmap, destVisibleSubset);
&gt; 
&gt; i take it that extractSubset does no work if the desired subset is everything?
&gt; 
&gt; this is so much clearer.  thanks!
&gt; 
&gt; R=me

surprisingly no, extractSubset currently does not check for the subset==everything case. I was going to write the code here (just copy+ref if subset==everything), but the extractSubset implementation looks like a better place for it (and then it might speed up other uses of extractSubset). what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454362</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-20 17:06:47 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 104611 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104611&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:89
&gt; &gt;&gt; +    m_resizedImage.extractSubset(&amp;visibleBitmap, destVisibleSubset);
&gt; &gt; 
&gt; &gt; i take it that extractSubset does no work if the desired subset is everything?
&gt; &gt; 
&gt; &gt; this is so much clearer.  thanks!
&gt; &gt; 
&gt; &gt; R=me
&gt; 
&gt; surprisingly no, extractSubset currently does not check for the subset==everything case. I was going to write the code here (just copy+ref if subset==everything), but the extractSubset implementation looks like a better place for it (and then it might speed up other uses of extractSubset). what do you think?

Does extractSubset do much work?  Does it just return a view onto the existing bitmap, or does it copy and create a new bitmap of the subset size?  If the latter, then optimizing seems well worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454448</commentid>
    <comment_count>26</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-21 22:09:50 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (From update of attachment 104611 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104611&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:89
&gt; &gt; &gt;&gt; +    m_resizedImage.extractSubset(&amp;visibleBitmap, destVisibleSubset);
&gt; &gt; &gt; 
&gt; &gt; &gt; i take it that extractSubset does no work if the desired subset is everything?
&gt; &gt; &gt; 
&gt; &gt; &gt; this is so much clearer.  thanks!
&gt; &gt; &gt; 
&gt; &gt; &gt; R=me
&gt; &gt; 
&gt; &gt; surprisingly no, extractSubset currently does not check for the subset==everything case. I was going to write the code here (just copy+ref if subset==everything), but the extractSubset implementation looks like a better place for it (and then it might speed up other uses of extractSubset). what do you think?
&gt; 
&gt; Does extractSubset do much work?  Does it just return a view onto the existing bitmap, or does it copy and create a new bitmap of the subset size?  If the latter, then optimizing seems well worth it.

The source pixels are referenced rather than copied, but it appears to loop through each row of the image so it may not be completely cheap. I think it&apos;s fine for now though since the original code did an extractSubset every time as well. It&apos;s an easy fix in skia if I&apos;m reading the code correctly, so let&apos;s see what Mike thinks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454784</commentid>
    <comment_count>27</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-22 12:07:02 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; (From update of attachment 104611 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104611&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:89
&gt; &gt; &gt; &gt;&gt; +    m_resizedImage.extractSubset(&amp;visibleBitmap, destVisibleSubset);
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; i take it that extractSubset does no work if the desired subset is everything?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; this is so much clearer.  thanks!
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; R=me
&gt; &gt; &gt; 
&gt; &gt; &gt; surprisingly no, extractSubset currently does not check for the subset==everything case. I was going to write the code here (just copy+ref if subset==everything), but the extractSubset implementation looks like a better place for it (and then it might speed up other uses of extractSubset). what do you think?
&gt; &gt; 
&gt; &gt; Does extractSubset do much work?  Does it just return a view onto the existing bitmap, or does it copy and create a new bitmap of the subset size?  If the latter, then optimizing seems well worth it.
&gt; 
&gt; The source pixels are referenced rather than copied, but it appears to loop through each row of the image so it may not be completely cheap. I think it&apos;s fine for now though since the original code did an extractSubset every time as well. It&apos;s an easy fix in skia if I&apos;m reading the code correctly, so let&apos;s see what Mike thinks.

Mike says extractSubset only loops through rows in a special compressed case the chrome doesn&apos;t use. Otherwise it&apos;s trivial, so I think we&apos;re good to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454787</commentid>
    <comment_count>28</comment_count>
      <attachid>104711</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-22 12:08:50 -0700</bug_when>
    <thetext>Created attachment 104711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454819</commentid>
    <comment_count>29</comment_count>
      <attachid>104711</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-22 12:53:42 -0700</bug_when>
    <thetext>Comment on attachment 104711
Patch

Attachment 104711 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9466875

New failing tests:
svg/custom/image-small-width-height.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454877</commentid>
    <comment_count>30</comment_count>
      <attachid>104732</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-22 13:51:51 -0700</bug_when>
    <thetext>Created attachment 104732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454957</commentid>
    <comment_count>31</comment_count>
      <attachid>104732</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-22 14:56:31 -0700</bug_when>
    <thetext>Comment on attachment 104732
Patch

just added a test_expectation change for a test that&apos;s needs rebaselining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455031</commentid>
    <comment_count>32</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2011-08-22 16:09:12 -0700</bug_when>
    <thetext>This looks good as far as I can tell. It doesn&apos;t break the animation detection, right? (This is where it does a lower quality paint and then comes in later with the nicer one.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455045</commentid>
    <comment_count>33</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-22 16:32:32 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; This looks good as far as I can tell. It doesn&apos;t break the animation detection, right? (This is where it does a lower quality paint and then comes in later with the nicer one.)

It works in my tests (it doesn&apos;t do the resize until the end of a CSS animation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455196</commentid>
    <comment_count>34</comment_count>
      <attachid>104732</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-22 22:46:02 -0700</bug_when>
    <thetext>Comment on attachment 104732
Patch

Clearing flags on attachment: 104732

Committed r93580: &lt;http://trac.webkit.org/changeset/93580&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455197</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-22 22:46:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102727</attachid>
            <date>2011-08-02 18:47:08 -0700</date>
            <delta_ts>2011-08-02 19:10:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65587-20110802184706.patch</filename>
            <type>text/plain</type>
            <size>19624</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5OTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZTMzZTYxNDg1YjRhNTRk
NDQwY2NjMTE0ZGU3MmJjMzI0NGMzODljLi5mNWE0ZTZiZGE2NTY3MDU4MzY3MDQzNGE4YmY2Mzhj
MmU1NDM0NTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDgtMDIgIEpvaG4g
QmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnRlZCBza2lhIHN1
cHBvcnQgZm9yIGNhY2hpbmcgcmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTg3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgcmVzaXplcyBv
ZiBjcm9wcGVkIGltYWdlcyB3b3VsZCBub3QgYmUgY2FjaGVkLiBUaGlzIGNhdXNlcyB2YXJpb3Vz
IHdlYnNpdGVzIHRvIGhhdmUgamFua3kgQ1NTIGFuaW1hdGlvbnMgaW4gc29mdHdhcmUgY29tcG9z
aXRpbmcgbW9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZXNhbXBsZWRCaXRtYXApOiBDaGFuZ2VkIHRv
IHVzZSBuZXcgQVBJcyBmb3Igc3Vic2V0IGNhY2hpbmcuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZTo6ZHJhd1BhdHRlcm4pOiBBZGRlZCBhbGxvd0NhY2hpbmcgcGFyYW1ldGVyLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFnZUluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OmlzRXF1
YWwpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86
OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRt
YXApOiBDaGFuZ2VkIHRoaXMgbWV0aG9kIHNvIHRoYXQgaXQgZG9lcyBub3QgbW9kaWZ5IGNhY2hp
bmcgZGF0YS4gQWRkZWQgYSBzZWNvbmQgdmVyc2lvbiB1c2VkIGZvciBjcm9wcGVkIGltYWdlIHJl
c2l6ZXMuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAp
OiBBZGRlZCBwYXJhbWV0ZXIgdG8gbGV0IGNhbGxlciBzcGVjaWZ5IHdoZXRoZXIgY2FjaGluZyBp
cyBhbGxvd2VkLgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNo
ZVJlc2FtcGxpbmcpOiBBZGRlZCBhIHNlY29uZCB2ZXJzaW9uIHVzZWQgZm9yIGNyb3BwZWQgaW1h
Z2UgcmVzaXplcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2Fj
aGVSZXNhbXBsaW5nSW50ZXJuYWwpOiBCb3RoIHNob3VsZENhY2hlUmVzYW1wbGluZyBtZXRob2Rz
IGNhbGwgZG93biB0byB0aGlzIGZvciB0aGUgc2hhcmVkIGxvZ2ljLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmg6IEFkZGVkIENhY2hlZEltYWdlSW5m
byB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgY2FjaGVkIG9yIHJlcXVlc3RlZCBpbWFnZSByZXNp
emUgb3BlcmF0aW9uLgorCiAyMDExLTA3LTI4ICBMZWFuZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJv
Z3JhY2lhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggc3BlZWNoIGlucHV0IGljb24gcmVj
dCBvbiBSVEwgZGlyZWN0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCA1Mzg4OGM5YjNjM2RmMjcwODI4MmUxZGY5
NjVjODE5ZDA1MzE1ZmM5Li4zZjMxN2EwMDQ0ZmI4ZjU3ZGVkYzA1MjlkNGU2YzcxYmYyZjQ2ZTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwCkBAIC0xNjIsOSArMTYyLDYgQEAgc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1
dGVSZXNhbXBsaW5nTW9kZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQKIC8v
IGRyYW1hdGljYWxseS4KIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMm
IGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBj
b25zdCBTa0lSZWN0JiBzcmNJUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICAv
LyBGaXJzdCBnZXQgdGhlIHN1YnNldCB3ZSBuZWVkLiBUaGlzIGlzIGVmZmljaWVudCBhbmQgZG9l
cyBub3QgY29weSBwaXhlbHMuCi0gICAgU2tCaXRtYXAgc3Vic2V0OwotICAgIGJpdG1hcC5leHRy
YWN0U3Vic2V0KCZzdWJzZXQsIHNyY0lSZWN0KTsKICAgICBTa1JlY3Qgc3JjUmVjdDsKICAgICBz
cmNSZWN0LnNldChzcmNJUmVjdCk7CiAKQEAgLTE4NywyNCArMTg0LDExIEBAIHN0YXRpYyB2b2lk
IGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMmIGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNv
bnN0IE5hdGl2ZUltCiAgICAgU2tJUmVjdCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZDsKICAg
ICBkZXN0UmVjdFRyYW5zZm9ybWVkLnJvdW5kKCZkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZCk7
CiAKLSAgICBpZiAoc3JjSXNGdWxsICYmIGJpdG1hcC5oYXNSZXNpemVkQml0bWFwKGRlc3RSZWN0
VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhl
aWdodCgpKSkgewotICAgICAgICAvLyBZYXksIHRoaXMgYml0bWFwIGZyYW1lIGFscmVhZHkgaGFz
IGEgcmVzaXplZCB2ZXJzaW9uLgotICAgICAgICBTa0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAu
cmVzaXplZEJpdG1hcChkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVj
dFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSk7Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFw
UmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0LCAmcGFpbnQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgLy8gQ29tcHV0ZSB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIG91ciByZWN0Lgot
ICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb21wdXRlIHRoZSB0cmFuc2Zvcm1lZCBwb3J0aW9uIG9m
IHRoZQotICAgIC8vIHZpc2libGUgcG9ydGlvbiBmb3IgdXNlIGJlbG93LgotICAgIFNrUmVjdCBk
ZXN0Qml0bWFwU3Vic2V0U2s7Ci0gICAgQ2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RSZWN0
LCAmZGVzdEJpdG1hcFN1YnNldFNrKTsKLSAgICBTa1JlY3QgZGVzdEJpdG1hcFN1YnNldFRyYW5z
Zm9ybWVkOwotICAgIGNhbnZhcy5nZXRUb3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RCaXRtYXBT
dWJzZXRUcmFuc2Zvcm1lZCwgZGVzdEJpdG1hcFN1YnNldFNrKTsKKyAgICBTa1JlY3QgZGVzdEJp
dG1hcFN1YnNldFNrTm9PZmZzZXQ7CisgICAgQ2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RS
ZWN0LCAmZGVzdEJpdG1hcFN1YnNldFNrTm9PZmZzZXQpOworICAgIFNrUmVjdCBkZXN0Qml0bWFw
U3Vic2V0U2sgPSBkZXN0Qml0bWFwU3Vic2V0U2tOb09mZnNldDsKICAgICBkZXN0Qml0bWFwU3Vi
c2V0U2sub2Zmc2V0KC1kZXN0UmVjdC5mTGVmdCwgLWRlc3RSZWN0LmZUb3ApOwotICAgIFNrSVJl
Y3QgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZDsKLSAgICBkZXN0Qml0bWFwU3Vi
c2V0VHJhbnNmb3JtZWQucm91bmQoJmRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQp
OwotICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQub2Zmc2V0KC1kZXN0UmVj
dFRyYW5zZm9ybWVkUm91bmRlZC5mTGVmdCwgLWRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmZU
b3ApOwogCiAgICAgLy8gVGhlIG1hdHJpeCBpbnZlcnRpbmcsIGV0Yy4gY291bGQgaGF2ZSBpbnRy
b2R1Y2VkIHJvdW5kaW5nIGVycm9yIHdoaWNoCiAgICAgLy8gY2F1c2VzIHRoZSBib3VuZHMgdG8g
YmUgb3V0c2lkZSBvZiB0aGUgcmVzaXplZCBiaXRtYXAuIFdlIHJvdW5kIG91dHdhcmQKQEAgLTIx
NywyOSArMjAxLDQyIEBAIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMm
IGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgICAgIHJldHVybjsg
IC8vIFJlc2l6ZWQgaW1hZ2UgZG9lcyBub3QgaW50ZXJzZWN0LgogCiAgICAgaWYgKHNyY0lzRnVs
bCAmJiBiaXRtYXAuc2hvdWxkQ2FjaGVSZXNhbXBsaW5nKAotICAgICAgICAgICAgcmVzaXplZElt
YWdlUmVjdC53aWR0aCgpLAotICAgICAgICAgICAgcmVzaXplZEltYWdlUmVjdC5oZWlnaHQoKSwK
KyAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCisgICAgICAg
ICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSwKICAgICAgICAgICAgIGRl
c3RCaXRtYXBTdWJzZXRTa0kud2lkdGgoKSwKICAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRT
a0kuaGVpZ2h0KCkpKSB7CiAgICAgICAgIC8vIFdlJ3JlIHN1cHBvc2VkIHRvIHJlc2l6ZSB0aGUg
ZW50aXJlIGltYWdlIGFuZCBjYWNoZSBpdCwgZXZlbiB0aG91Z2gKICAgICAgICAgLy8gd2UgZG9u
J3QgbmVlZCBhbGwgb2YgaXQuCiAgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IGJpdG1hcC5y
ZXNpemVkQml0bWFwKGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNm
b3JtZWRSb3VuZGVkLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCksIHRy
dWUpOwogICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QocmVzYW1wbGVkLCAwLCBkZXN0UmVj
dCwgJnBhaW50KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSByZXNp
emUgdGhlIGV4cG9zZWQgcGFydCBvZiB0aGUgYml0bWFwIHRvIGRvIHRoZQogICAgICAgICAvLyBt
aW5pbWFsIHBvc3NpYmxlIHdvcmsuCiAKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdHJhbnNmb3Jt
ZWQgcG9ydGlvbiBvZiB0aGUgdmlzaWJsZSBwb3J0aW9uIGZvciB1c2UgYmVsb3cuCisgICAgICAg
IFNrUmVjdCBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQ7CisgICAgICAgIGNhbnZhcy5nZXRU
b3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZCwgZGVzdEJp
dG1hcFN1YnNldFNrTm9PZmZzZXQpOworICAgICAgICBTa0lSZWN0IGRlc3RCaXRtYXBTdWJzZXRU
cmFuc2Zvcm1lZFJvdW5kZWQ7CisgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZC5y
b3VuZCgmZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7CisgICAgICAgIGRlc3RC
aXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQub2Zmc2V0KC1kZXN0UmVjdFRyYW5zZm9ybWVk
Um91bmRlZC5mTGVmdCwgLWRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmZUb3ApOworCiAgICAg
ICAgIC8vIFJlc2FtcGxlIHRoZSBuZWVkZWQgcGFydCBvZiB0aGUgaW1hZ2UuCiAgICAgICAgIC8v
IFRyYW5zZm9ybXMgYWJvdmUgcGx1cyByb3VuZGluZyBtYXkgY2F1c2UgZGVzdEJpdG1hcFN1YnNl
dFRyYW5zZm9ybWVkUm91bmRlZAogICAgICAgICAvLyB0byBnbyBvdXRzaWRlIHRoZSBpbWFnZSwg
c28gbmVlZCB0byBjbGlwIHRvIGF2b2lkIHByb2JsZW1zLgogICAgICAgICBpZiAoZGVzdEJpdG1h
cFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZC5pbnRlcnNlY3QoMCwgMCwKICAgICAgICAgICAgICAg
ICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVk
Um91bmRlZC5oZWlnaHQoKSkpIHsKIAotICAgICAgICAgICAgU2tCaXRtYXAgcmVzYW1wbGVkID0g
c2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoc3Vic2V0LAotICAgICAgICAgICAgICAgIHNr
aWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLAotICAgICAgICAgICAgICAgIGRl
c3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3Vu
ZGVkLmhlaWdodCgpLAotICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1l
ZFJvdW5kZWQpOworICAgICAgICAgICAgYm9vbCBhbGxvd0NhY2hpbmdTdWJzZXQgPSAhc3JjSXNG
dWxsCisgICAgICAgICAgICAgICAgJiYgYml0bWFwLnNob3VsZENhY2hlUmVzYW1wbGluZyhkZXN0
UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNJ
UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQpOworICAgICAgICAgICAgU2tCaXRtYXAg
cmVzYW1wbGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5k
ZWQud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjSVJlY3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dDYWNoaW5nU3Vic2V0KTsKIAogICAg
ICAgICAgICAgLy8gQ29tcHV0ZSB3aGVyZSB0aGUgbmV3IGJpdG1hcCBzaG91bGQgYmUgZHJhd24u
IFNpbmNlIG91ciBuZXcgYml0bWFwCiAgICAgICAgICAgICAvLyBtYXkgYmUgc21hbGxlciB0aGFu
IHRoZSBvcmlnaW5hbCwgd2UgaGF2ZSB0byBzaGlmdCBpdCBvdmVyIGJ5IHRoZQpAQCAtMzg2LDcg
KzM4Myw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwKICAgICAgICAgICAgICYmIChiaXRtYXAtPmhhc1Jlc2l6ZWRCaXRtYXAod2lkdGgsIGhlaWdo
dCkKICAgICAgICAgICAgICAgICB8fCBiaXRtYXAtPnNob3VsZENhY2hlUmVzYW1wbGluZyh3aWR0
aCwgaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0KSkpIHsKICAgICAgICAgICAgIC8vIHJlc2l6ZWRCaXRt
YXAoKSBjYWNoZXMgcmVzaXplZCBpbWFnZS4KLSAgICAgICAgICAgIHJlc2FtcGxlZCA9IGJpdG1h
cC0+cmVzaXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIHJlc2FtcGxlZCA9
IGJpdG1hcC0+cmVzaXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHJlc2FtcGxlZCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVz
aXplKHNyY1N1YnNldCwKICAgICAgICAgICAgICAgICBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJF
U0laRV9MQU5DWk9TMywgd2lkdGgsIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggZjBm
NGFhMjE1NzBjMDVkZTdkNDQ1MTMxYWYxOGEzMjVlOTQ5YjMwZC4uYjViMjU5NWNlOTFkM2Q3ODMx
N2UyM2EwZmMyNzE3OWQ0YTQ3OWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAtNDAsNyArNDAs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VT
a2lhKCkKICAgICA6IG1faXNEYXRhQ29tcGxldGUoZmFsc2UpLAotICAgICAgbV9sYXN0UmVxdWVz
dFNpemUoMCwgMCksCiAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCiB7CiB9CkBAIC00OCw3ICs0
Nyw2IEBAIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKCkKIE5hdGl2ZUltYWdlU2tp
YTo6TmF0aXZlSW1hZ2VTa2lhKGNvbnN0IFNrQml0bWFwJiBvdGhlcikKICAgICA6IFNrQml0bWFw
KG90aGVyKSwKICAgICAgIG1faXNEYXRhQ29tcGxldGUoZmFsc2UpLAotICAgICAgbV9sYXN0UmVx
dWVzdFNpemUoMCwgMCksCiAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCiB7CiB9CkBAIC02Mywy
NSArNjEsNzEgQEAgaW50IE5hdGl2ZUltYWdlU2tpYTo6ZGVjb2RlZFNpemUoKSBjb25zdAogICAg
IHJldHVybiBnZXRTaXplKCkgKyBtX3Jlc2l6ZWRJbWFnZS5nZXRTaXplKCk7CiB9CiAKK05hdGl2
ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFnZUluZm8oKQoreworICAgIHNy
Y1N1YnNldC5zZXRFbXB0eSgpOworICAgIGRlc3RTdWJzZXQuc2V0RW1wdHkoKTsKK30KKworYm9v
bCBOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6aXNFcXVhbChpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlcXVlc3RTaXplLndpZHRoKCkgPT0gd2lk
dGgKKyAgICAgICAgJiYgcmVxdWVzdFNpemUuaGVpZ2h0KCkgPT0gaGVpZ2h0CisgICAgICAgICYm
IHNyY1N1YnNldC5pc0VtcHR5KCkKKyAgICAgICAgJiYgZGVzdFN1YnNldC5pc0VtcHR5KCk7Cit9
CisKK2Jvb2wgTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OmlzRXF1YWwoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTa0lSZWN0JiBvdGhlclNyY1N1YnNldCwgY29uc3QgU2tJ
UmVjdCYgb3RoZXJEZXN0U3Vic2V0KSBjb25zdAoreworICAgIHJldHVybiByZXF1ZXN0U2l6ZS53
aWR0aCgpID09IHdpZHRoCisgICAgICAgICYmIHJlcXVlc3RTaXplLmhlaWdodCgpID09IGhlaWdo
dAorICAgICAgICAmJiBzcmNTdWJzZXQgPT0gb3RoZXJTcmNTdWJzZXQKKyAgICAgICAgJiYgZGVz
dFN1YnNldCA9PSBvdGhlckRlc3RTdWJzZXQ7Cit9CisKK3ZvaWQgTmF0aXZlSW1hZ2VTa2lhOjpD
YWNoZWRJbWFnZUluZm86OnNldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFNrSVJlY3Qm
IG90aGVyU3JjU3Vic2V0LCBjb25zdCBTa0lSZWN0JiBvdGhlckRlc3RTdWJzZXQpCit7CisgICAg
cmVxdWVzdFNpemUuc2V0V2lkdGgod2lkdGgpOworICAgIHJlcXVlc3RTaXplLnNldEhlaWdodCho
ZWlnaHQpOworICAgIHNyY1N1YnNldCA9IG90aGVyU3JjU3Vic2V0OworICAgIGRlc3RTdWJzZXQg
PSBvdGhlckRlc3RTdWJzZXQ7Cit9CisKIGJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpoYXNSZXNpemVk
Qml0bWFwKGludCB3LCBpbnQgaCkgY29uc3QKIHsKLSAgICBpZiAobV9sYXN0UmVxdWVzdFNpemUu
d2lkdGgoKSA9PSB3ICYmIG1fbGFzdFJlcXVlc3RTaXplLmhlaWdodCgpID09IGgpCi0gICAgICAg
IG1fcmVzaXplUmVxdWVzdHMrKzsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9sYXN0UmVxdWVzdFNp
emUgPSBJbnRTaXplKHcsIGgpOwotICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKLSAgICB9
CisgICAgcmV0dXJuIG1fY2FjaGVkSW1hZ2VJbmZvLmlzRXF1YWwodywgaCkKKyAgICAgICAgICAg
JiYgbV9yZXNpemVkSW1hZ2Uud2lkdGgoKSA9PSB3ICYmIG1fcmVzaXplZEltYWdlLmhlaWdodCgp
ID09IGg7Cit9CiAKLSAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2Uud2lkdGgoKSA9PSB3ICYmIG1f
cmVzaXplZEltYWdlLmhlaWdodCgpID09IGg7Citib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVz
aXplZEJpdG1hcChpbnQgdywgaW50IGgsIGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwgY29uc3Qg
U2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRJbWFnZUlu
Zm8uaXNFcXVhbCh3LCBoLCBzcmNTdWJzZXQsIGRlc3RTdWJzZXQpCisgICAgICAgICAgICYmIG1f
cmVzaXplZEltYWdlLndpZHRoKCkgPT0gdyAmJiBtX3Jlc2l6ZWRJbWFnZS5oZWlnaHQoKSA9PSBo
OwogfQogCi0vLyBGSVhNRTogZG9uJ3QgY2FjaGUgd2hlbiBpbWFnZSBpcyBpbi1wcm9ncmVzcy4K
K1NrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChpbnQgdywgaW50IGgsIGJv
b2wgYWxsb3dDYWNoaW5nKSBjb25zdAoreworICAgIGlmIChoYXNSZXNpemVkQml0bWFwKHcsIGgp
KQorICAgICAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2U7CisKKyAgICBpZiAoIW1faXNEYXRhQ29t
cGxldGUgfHwgIWFsbG93Q2FjaGluZykKKyAgICAgICAgcmV0dXJuIHNraWE6OkltYWdlT3BlcmF0
aW9uczo6UmVzaXplKCp0aGlzLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9T
MywgdywgaCk7CiAKLVNrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChpbnQg
dywgaW50IGgpIGNvbnN0CisgICAgbV9yZXNpemVkSW1hZ2UgPSBza2lhOjpJbWFnZU9wZXJhdGlv
bnM6OlJlc2l6ZSgqdGhpcywgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMs
IHcsIGgpOworICAgIHJldHVybiBtX3Jlc2l6ZWRJbWFnZTsKK30KKworU2tCaXRtYXAgTmF0aXZl
SW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGludCB3LCBpbnQgaCwgY29uc3QgU2tJUmVjdCYgc3Jj
U3Vic2V0LCBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0LCBib29sIGFsbG93Q2FjaGluZykgY29u
c3QKIHsKLSAgICBpZiAobV9yZXNpemVkSW1hZ2Uud2lkdGgoKSAhPSB3IHx8IG1fcmVzaXplZElt
YWdlLmhlaWdodCgpICE9IGgpCi0gICAgICAgIG1fcmVzaXplZEltYWdlID0gc2tpYTo6SW1hZ2VP
cGVyYXRpb25zOjpSZXNpemUoKnRoaXMsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xB
TkNaT1MzLCB3LCBoKTsKKyAgICBpZiAoaGFzUmVzaXplZEJpdG1hcCh3LCBoLCBzcmNTdWJzZXQs
IGRlc3RTdWJzZXQpKQorICAgICAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2U7CisKKyAgICBTa0Jp
dG1hcCBzdWJzZXQ7CisgICAgZXh0cmFjdFN1YnNldCgmc3Vic2V0LCBzcmNTdWJzZXQpOworICAg
IGlmICghbV9pc0RhdGFDb21wbGV0ZSB8fCAhYWxsb3dDYWNoaW5nKQorICAgICAgICByZXR1cm4g
c2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoc3Vic2V0LCBza2lhOjpJbWFnZU9wZXJhdGlv
bnM6OlJFU0laRV9MQU5DWk9TMywgdywgaCwgZGVzdFN1YnNldCk7CiAKKyAgICBtX3Jlc2l6ZWRJ
bWFnZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwgc2tpYTo6SW1hZ2VP
cGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHcsIGgsIGRlc3RTdWJzZXQpOwogICAgIHJldHVy
biBtX3Jlc2l6ZWRJbWFnZTsKIH0KIApAQCAtOTAsNiArMTM0LDM5IEBAIGJvb2wgTmF0aXZlSW1h
Z2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRI
ZWlnaHQpIGNvbnN0CiB7CisgICAgU2tJUmVjdCBzcmNTdWJzZXQsIGRlc3RTdWJzZXQ7CisgICAg
c3JjU3Vic2V0LnNldEVtcHR5KCk7CisgICAgZGVzdFN1YnNldC5zZXRFbXB0eSgpOworICAgIHJl
dHVybiBzaG91bGRDYWNoZVJlc2FtcGxpbmdJbnRlcm5hbChkZXN0V2lkdGgsIGRlc3RIZWlnaHQs
IGRlc3RTdWJzZXRXaWR0aCwgZGVzdFN1YnNldEhlaWdodCwgc3JjU3Vic2V0LCBkZXN0U3Vic2V0
KTsKK30KKworYm9vbCBOYXRpdmVJbWFnZVNraWE6OnNob3VsZENhY2hlUmVzYW1wbGluZyhpbnQg
ZGVzdFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0KSBjb25zdAoreworICAg
IHJldHVybiBzaG91bGRDYWNoZVJlc2FtcGxpbmdJbnRlcm5hbChkZXN0V2lkdGgsIGRlc3RIZWln
aHQsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCwgc3JjU3Vic2V0LCBkZXN0U3Vic2V0KTsKK30KKwor
Ym9vbCBOYXRpdmVJbWFnZVNraWE6OnNob3VsZENhY2hlUmVzYW1wbGluZ0ludGVybmFsKGludCBk
ZXN0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRlc3RIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFN1YnNldEhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3QKK3sKKyAg
ICAvLyBDaGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgZGltZW5zaW9ucyBtYXRjaCBwcmV2aW91
cyByZXF1ZXN0LgorICAgIGJvb2wgbWF0Y2hlc1ByZXZpb3VzUmVxdWVzdCA9IG1fY2FjaGVkSW1h
Z2VJbmZvLmlzRXF1YWwoZGVzdFdpZHRoLCBkZXN0SGVpZ2h0LCBzcmNTdWJzZXQsIGRlc3RTdWJz
ZXQpOworICAgIGlmIChtYXRjaGVzUHJldmlvdXNSZXF1ZXN0KQorICAgICAgICArK21fcmVzaXpl
UmVxdWVzdHM7CisgICAgZWxzZSB7CisgICAgICAgIG1fY2FjaGVkSW1hZ2VJbmZvLnNldChkZXN0
V2lkdGgsIGRlc3RIZWlnaHQsIHNyY1N1YnNldCwgZGVzdFN1YnNldCk7CisgICAgICAgIG1fcmVz
aXplUmVxdWVzdHMgPSAwOworICAgICAgICAvLyBSZXNldCBtX3Jlc2l6ZWRJbWFnZSBub3csIGJl
Y2F1c2Ugd2UgZG9uJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKKyAgICAgICAgLy8gbGFzdCBy
ZXF1ZXN0ZWQgcmVzaXplIGluZm8gYW5kIG1fcmVzaXplZEltYWdlJ3MgcmVzaXplIGluZm8uCisg
ICAgICAgIG1fcmVzaXplZEltYWdlLnJlc2V0KCk7CisgICAgfQorCiAgICAgLy8gV2UgY2FuIG5v
dCBjYWNoZSBpbmNvbXBsZXRlIGZyYW1lcy4gVGhpcyBtaWdodCBiZSBhIGdvb2Qgb3B0aW1pemF0
aW9uIGluCiAgICAgLy8gdGhlIGZ1dHVyZSwgd2VyZSB3ZSBrbm93IGhvdyBtdWNoIG9mIHRoZSBm
cmFtZSBoYXMgYmVlbiBkZWNvZGVkLCBzbyB3aGVuCiAgICAgLy8gd2UgaW5jcmVtZW50YWxseSBk
cmF3IG1vcmUgb2YgdGhlIGltYWdlLCB3ZSBvbmx5IGhhdmUgdG8gcmVzYW1wbGUgdGhlCkBAIC0x
MDYsMTUgKzE4Myw5IEBAIGJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxp
bmcoaW50IGRlc3RXaWR0aCwKICAgICAvLyBJZiAidG9vIG1hbnkiIHJlcXVlc3RzIGhhdmUgYmVl
biBtYWRlIGZvciB0aGlzIGJpdG1hcCwgd2UgYXNzdW1lIHRoYXQKICAgICAvLyBtYW55IG1vcmUg
d2lsbCBiZSBtYWRlIGFzIHdlbGwsIGFuZCB3ZSdsbCBnbyBhaGVhZCBhbmQgY2FjaGUgaXQuCiAg
ICAgc3RhdGljIGNvbnN0IGludCBrTWFueVJlcXVlc3RUaHJlc2hvbGQgPSA0OwotICAgIGlmICht
X2xhc3RSZXF1ZXN0U2l6ZS53aWR0aCgpID09IGRlc3RXaWR0aCAmJgotICAgICAgICBtX2xhc3RS
ZXF1ZXN0U2l6ZS5oZWlnaHQoKSA9PSBkZXN0SGVpZ2h0KSB7CisgICAgaWYgKG1hdGNoZXNQcmV2
aW91c1JlcXVlc3QpIHsKICAgICAgICAgaWYgKG1fcmVzaXplUmVxdWVzdHMgPj0ga01hbnlSZXF1
ZXN0VGhyZXNob2xkKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gV2hlbiBhIGRpZmZlcmVudCBzaXplIGlzIGJlaW5nIHJlcXVlc3RlZCwgY291bnQg
dGhpcyBhcyBhIHF1ZXJ5Ci0gICAgICAgIC8vIChoYXNSZXNpemVkQml0bWFwKSBhbmQgcmVzZXQg
dGhlIGNvdW50ZXIuCi0gICAgICAgIG1fbGFzdFJlcXVlc3RTaXplID0gSW50U2l6ZShkZXN0V2lk
dGgsIGRlc3RIZWlnaHQpOwotICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKICAgICB9CiAK
ICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgaGV1cmlzdGljIHRoYXQgaWYgbW9yZSB0aGFuIDEv
NCBvZiB0aGUgaW1hZ2UgaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCmluZGV4IDAwYjBhNjg1MDY1YjQyN2RhMTFj
OTRhZGRkNjVhYTkzZTRmY2RhZDQuLjFkMTFmNWYzYjVkYzdjZDM0NWE2MGYyM2M3MmY4ZmU0Mzg0
YWEyNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TmF0aXZlSW1hZ2VTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9OYXRpdmVJbWFnZVNraWEuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBOYXRpdmVJ
bWFnZVNraWFfaAogCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDE1ICs2
NywyNyBAQCBwdWJsaWM6CiAgICAgLy8gZ2l2ZW4gaW1hZ2Ugc3Vic2V0IHdpdGggdGhlIGdpdmVu
IGRpbWVuc2lvbnMuCiAgICAgYm9vbCBoYXNSZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhl
aWdodCkgY29uc3Q7CiAKKyAgICAvLyBXZSBjYW4ga2VlcCBhIHJlc2l6ZWQgdmVyc2lvbiBvZiB0
aGUgYml0bWFwIGNhY2hlZCBvbiB0aGlzIG9iamVjdC4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHdp
bGwgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUKKyAgICAv
LyBnaXZlbiBpbWFnZSBzdWJzZXQgd2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9ucyBhbmQgc3Vic2V0
cy4KKyAgICBib29sIGhhc1Jlc2l6ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25z
dCBTa0lSZWN0JiBzcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNvbnN0Owor
CiAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBhbiBleGlzdGluZyByZXNpemVkIGltYWdlLCBvciBn
ZW5lcmF0ZSBhIG5ldyBvbmUgb2YKLSAgICAvLyB0aGUgc3BlY2lmaWVkIHNpemUgYW5kIHN0b3Jl
IGl0IGluIHRoZSBjYWNoZS4gU3Vic2V0dGVkIGltYWdlcyBjYW4gbm90Ci0gICAgLy8gYmUgY2Fj
aGVkIHVubGVzcyB0aGUgc3Vic2V0IGlzIHRoZSBlbnRpcmUgYml0bWFwLgotICAgIFNrQml0bWFw
IHJlc2l6ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKKyAgICAvLyB0aGUg
c3BlY2lmaWVkIHNpemUgYW5kIHN0b3JlIGl0IGluIHRoZSBjYWNoZSBpZiBhbGxvd0NhY2hpbmcg
aXMgdHJ1ZS4KKyAgICBTa0JpdG1hcCByZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdo
dCwgYm9vbCBhbGxvd0NhY2hpbmcpIGNvbnN0OworCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBh
biBleGlzdGluZyByZXNpemVkIGltYWdlIHN1YnNldCwgb3IgZ2VuZXJhdGUgYSBuZXcgb25lCisg
ICAgLy8gb2YgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBzdWJzZXRzIGFuZCBzdG9yZSBpdCBpbiB0
aGUgY2FjaGUgaWYKKyAgICAvLyBhbGxvd0NhY2hpbmcgaXMgdHJ1ZS4KKyAgICBTa0JpdG1hcCBy
ZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU2tJUmVjdCYgc3JjU3Vi
c2V0LCBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0LCBib29sIGFsbG93Q2FjaGluZykgY29uc3Q7
CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHJlc2l6ZSBvcGVyYXRpb24gc2hv
dWxkIGVpdGhlciByZXNpemUgdGhlIHdob2xlCiAgICAgLy8gaW1hZ2UgYW5kIGNhY2hlIGl0LCBv
ciByZXNpemUganVzdCB0aGUgcGFydCBpdCBuZWVkcyBhbmQgdGhyb3cgdGhlIHJlc3VsdAogICAg
IC8vIGF3YXkuCiAgICAgLy8KKyAgICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gbWF5IGluY3Jl
bWVudCBhIHJlcXVlc3QgY291bnQgdGhhdCBjYW4gY2hhbmdlIHRoZQorICAgIC8vIHJlc3VsdCBv
ZiBzdWJzZXF1ZW50IGNhbGxzLgorICAgIC8vCiAgICAgLy8gT24gdGhlIG9uZSBoYW5kLCBpZiBv
bmx5IGEgc21hbGwgc3Vic2V0IGlzIGRlc2lyZWQsIHRoZW4gd2Ugd2lsbCB3YXN0ZSBhCiAgICAg
Ly8gbG90IG9mIHRpbWUgcmVzYW1wbGluZyB0aGUgZW50aXJlIHRoaW5nLCBzbyB3ZSBvbmx5IHdh
bnQgdG8gZG8gZXhhY3RseQogICAgIC8vIHdoYXQncyByZXF1aXJlZC4gT24gdGhlIG90aGVyIGhh
bmQsIHJlc2FtcGxpbmcgdGhlIGVudGlyZSBiaXRtYXAgaXMKQEAgLTg2LDcgKzk5LDM3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFN1YnNldFdpZHRo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0KSBj
b25zdDsKIAorICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBmb3IgY3JvcHBlZCBpbWFnZXMuCisg
ICAgYm9vbCBzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3Q7CisKIHByaXZhdGU6
CisgICAgLy8gQ2FjaGVkSW1hZ2VJbmZvIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgY2Fj
aGVkIG9yIHJlcXVlc3RlZCBpbWFnZQorICAgIC8vIHJlc2l6ZXMuCisgICAgc3RydWN0IENhY2hl
ZEltYWdlSW5mbyB7CisKKyAgICAgICAgSW50U2l6ZSByZXF1ZXN0U2l6ZTsKKyAgICAgICAgU2tJ
UmVjdCBzcmNTdWJzZXQ7CisgICAgICAgIFNrSVJlY3QgZGVzdFN1YnNldDsKKworICAgICAgICBD
YWNoZWRJbWFnZUluZm8oKTsKKworICAgICAgICBib29sIGlzRXF1YWwoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBjb25zdCBTa0lSZWN0JiBvdGhlclNyY1N1YnNldCwgY29uc3QgU2tJUmVjdCYgb3Ro
ZXJEZXN0U3Vic2V0KSBjb25zdDsKKworICAgICAgICB2b2lkIHNldChpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOworICAgICAgICB2b2lkIHNldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFNr
SVJlY3QmIG90aGVyU3JjU3Vic2V0LCBjb25zdCBTa0lSZWN0JiBvdGhlckRlc3RTdWJzZXQpOwor
ICAgIH07CisKKyAgICAvLyBTaGFyZWQgbG9naWMgZm9yIGRlY2lkaW5nIHdoZXRoZXIgYSByZXNp
emUgb3BlcmF0aW9uIHNob3VsZCBiZSBjYWNoZWQuCisgICAgYm9vbCBzaG91bGRDYWNoZVJlc2Ft
cGxpbmdJbnRlcm5hbChpbnQgZGVzdFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGRlc3RIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGVzdFN1YnNldFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRIZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0KSBj
b25zdDsKKwogICAgIC8vIFNldCB0byB0cnVlIHdoZW4gdGhlIGRhdGEgaXMgY29tcGxldGUuIEJl
Zm9yZSB0aGUgZW50aXJlIGltYWdlIGhhcwogICAgIC8vIGxvYWRlZCwgd2UgZG8gbm90IHdhbnQg
dG8gY2FjaGUgYSByZXNpemUuCiAgICAgYm9vbCBtX2lzRGF0YUNvbXBsZXRlOwpAQCAtOTcsMTQg
KzE0MCwxNyBAQCBwcml2YXRlOgogICAgIC8vIFJlZmVyZW5jZXMgaG93IG1hbnkgdGltZXMgdGhh
dCB0aGUgaW1hZ2Ugc2l6ZSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yCiAgICAgLy8gdGhlIGxhc3Qg
c2l6ZS4KICAgICAvLwotICAgIC8vIEV2ZXJ5IHRpbWUgd2UgZ2V0IGEgcmVxdWVzdCwgaWYgaXQg
bWF0Y2hlcyB0aGUgbV9sYXN0UmVxdWVzdFNpemUsIHdlJ2xsCi0gICAgLy8gaW5jcmVtZW50IHRo
ZSBjb3VudGVyLCBhbmQgaWYgbm90LCB3ZSdsbCByZXNldCB0aGUgY291bnRlciBhbmQgc2F2ZSB0
aGUKLSAgICAvLyBzaXplLgorICAgIC8vIEV2ZXJ5IHRpbWUgd2UgZ2V0IGEgY2FsbCB0byBzaG91
bGRDYWNoZVJlc2FtcGxpbmcsIGlmIGl0IG1hdGNoZXMgdGhlCisgICAgLy8gbV9jYWNoZWRJbWFn
ZUluZm8sIHdlJ2xsIGluY3JlbWVudCB0aGUgY291bnRlciwgYW5kIGlmIG5vdCwgd2UnbGwgcmVz
ZXQKKyAgICAvLyB0aGUgY291bnRlciBhbmQgc2F2ZSB0aGUgZGltZW5zaW9ucy4KICAgICAvLwog
ICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHNlZSBpZiBtYW55IHJlcXVlc3RzIGhhdmUgYmVlbiBt
YWRlIGZvciB0aGUgc2FtZQogICAgIC8vIHJlc2l6ZWQgaW1hZ2UsIHdlIGtub3cgdGhhdCB3ZSBz
aG91bGQgcHJvYmFibHkgY2FjaGUgaXQsIGV2ZW4gaWYgYWxsIG9mCiAgICAgLy8gdGhvc2UgcmVx
dWVzdHMgaW5kaXZpZHVhbGx5IGFyZSBzbWFsbCBhbmQgd291bGQgbm90IG90aGVyd2lzZSBiZSBj
YWNoZWQuCi0gICAgbXV0YWJsZSBJbnRTaXplIG1fbGFzdFJlcXVlc3RTaXplOworICAgIC8vCisg
ICAgLy8gV2UgYWxzbyB0cmFjayB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBzdWJzZXRzIGZv
ciBjYWNoaW5nIHBhcnRpYWwKKyAgICAvLyBpbWFnZSByZXNpemVzLgorICAgIG11dGFibGUgQ2Fj
aGVkSW1hZ2VJbmZvIG1fY2FjaGVkSW1hZ2VJbmZvOwogICAgIG11dGFibGUgaW50IG1fcmVzaXpl
UmVxdWVzdHM7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102730</attachid>
            <date>2011-08-02 19:10:36 -0700</date>
            <delta_ts>2011-08-15 13:50:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65587-20110802191035.patch</filename>
            <type>text/plain</type>
            <size>19676</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5OTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZTMzZTYxNDg1YjRhNTRk
NDQwY2NjMTE0ZGU3MmJjMzI0NGMzODljLi5mNWE0ZTZiZGE2NTY3MDU4MzY3MDQzNGE4YmY2Mzhj
MmU1NDM0NTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDgtMDIgIEpvaG4g
QmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnRlZCBza2lhIHN1
cHBvcnQgZm9yIGNhY2hpbmcgcmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTg3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgcmVzaXplcyBv
ZiBjcm9wcGVkIGltYWdlcyB3b3VsZCBub3QgYmUgY2FjaGVkLiBUaGlzIGNhdXNlcyB2YXJpb3Vz
IHdlYnNpdGVzIHRvIGhhdmUgamFua3kgQ1NTIGFuaW1hdGlvbnMgaW4gc29mdHdhcmUgY29tcG9z
aXRpbmcgbW9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZXNhbXBsZWRCaXRtYXApOiBDaGFuZ2VkIHRv
IHVzZSBuZXcgQVBJcyBmb3Igc3Vic2V0IGNhY2hpbmcuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZTo6ZHJhd1BhdHRlcm4pOiBBZGRlZCBhbGxvd0NhY2hpbmcgcGFyYW1ldGVyLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFnZUluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OmlzRXF1
YWwpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86
OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRt
YXApOiBDaGFuZ2VkIHRoaXMgbWV0aG9kIHNvIHRoYXQgaXQgZG9lcyBub3QgbW9kaWZ5IGNhY2hp
bmcgZGF0YS4gQWRkZWQgYSBzZWNvbmQgdmVyc2lvbiB1c2VkIGZvciBjcm9wcGVkIGltYWdlIHJl
c2l6ZXMuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAp
OiBBZGRlZCBwYXJhbWV0ZXIgdG8gbGV0IGNhbGxlciBzcGVjaWZ5IHdoZXRoZXIgY2FjaGluZyBp
cyBhbGxvd2VkLgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNo
ZVJlc2FtcGxpbmcpOiBBZGRlZCBhIHNlY29uZCB2ZXJzaW9uIHVzZWQgZm9yIGNyb3BwZWQgaW1h
Z2UgcmVzaXplcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2Fj
aGVSZXNhbXBsaW5nSW50ZXJuYWwpOiBCb3RoIHNob3VsZENhY2hlUmVzYW1wbGluZyBtZXRob2Rz
IGNhbGwgZG93biB0byB0aGlzIGZvciB0aGUgc2hhcmVkIGxvZ2ljLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmg6IEFkZGVkIENhY2hlZEltYWdlSW5m
byB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgY2FjaGVkIG9yIHJlcXVlc3RlZCBpbWFnZSByZXNp
emUgb3BlcmF0aW9uLgorCiAyMDExLTA3LTI4ICBMZWFuZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJv
Z3JhY2lhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggc3BlZWNoIGlucHV0IGljb24gcmVj
dCBvbiBSVEwgZGlyZWN0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCA1Mzg4OGM5YjNjM2RmMjcwODI4MmUxZGY5
NjVjODE5ZDA1MzE1ZmM5Li4zZjMxN2EwMDQ0ZmI4ZjU3ZGVkYzA1MjlkNGU2YzcxYmYyZjQ2ZTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwCkBAIC0xNjIsOSArMTYyLDYgQEAgc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1
dGVSZXNhbXBsaW5nTW9kZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQKIC8v
IGRyYW1hdGljYWxseS4KIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMm
IGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBj
b25zdCBTa0lSZWN0JiBzcmNJUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICAv
LyBGaXJzdCBnZXQgdGhlIHN1YnNldCB3ZSBuZWVkLiBUaGlzIGlzIGVmZmljaWVudCBhbmQgZG9l
cyBub3QgY29weSBwaXhlbHMuCi0gICAgU2tCaXRtYXAgc3Vic2V0OwotICAgIGJpdG1hcC5leHRy
YWN0U3Vic2V0KCZzdWJzZXQsIHNyY0lSZWN0KTsKICAgICBTa1JlY3Qgc3JjUmVjdDsKICAgICBz
cmNSZWN0LnNldChzcmNJUmVjdCk7CiAKQEAgLTE4NywyNCArMTg0LDExIEBAIHN0YXRpYyB2b2lk
IGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMmIGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNv
bnN0IE5hdGl2ZUltCiAgICAgU2tJUmVjdCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZDsKICAg
ICBkZXN0UmVjdFRyYW5zZm9ybWVkLnJvdW5kKCZkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZCk7
CiAKLSAgICBpZiAoc3JjSXNGdWxsICYmIGJpdG1hcC5oYXNSZXNpemVkQml0bWFwKGRlc3RSZWN0
VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhl
aWdodCgpKSkgewotICAgICAgICAvLyBZYXksIHRoaXMgYml0bWFwIGZyYW1lIGFscmVhZHkgaGFz
IGEgcmVzaXplZCB2ZXJzaW9uLgotICAgICAgICBTa0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAu
cmVzaXplZEJpdG1hcChkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVj
dFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSk7Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFw
UmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0LCAmcGFpbnQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgLy8gQ29tcHV0ZSB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIG91ciByZWN0Lgot
ICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb21wdXRlIHRoZSB0cmFuc2Zvcm1lZCBwb3J0aW9uIG9m
IHRoZQotICAgIC8vIHZpc2libGUgcG9ydGlvbiBmb3IgdXNlIGJlbG93LgotICAgIFNrUmVjdCBk
ZXN0Qml0bWFwU3Vic2V0U2s7Ci0gICAgQ2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RSZWN0
LCAmZGVzdEJpdG1hcFN1YnNldFNrKTsKLSAgICBTa1JlY3QgZGVzdEJpdG1hcFN1YnNldFRyYW5z
Zm9ybWVkOwotICAgIGNhbnZhcy5nZXRUb3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RCaXRtYXBT
dWJzZXRUcmFuc2Zvcm1lZCwgZGVzdEJpdG1hcFN1YnNldFNrKTsKKyAgICBTa1JlY3QgZGVzdEJp
dG1hcFN1YnNldFNrTm9PZmZzZXQ7CisgICAgQ2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RS
ZWN0LCAmZGVzdEJpdG1hcFN1YnNldFNrTm9PZmZzZXQpOworICAgIFNrUmVjdCBkZXN0Qml0bWFw
U3Vic2V0U2sgPSBkZXN0Qml0bWFwU3Vic2V0U2tOb09mZnNldDsKICAgICBkZXN0Qml0bWFwU3Vi
c2V0U2sub2Zmc2V0KC1kZXN0UmVjdC5mTGVmdCwgLWRlc3RSZWN0LmZUb3ApOwotICAgIFNrSVJl
Y3QgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZDsKLSAgICBkZXN0Qml0bWFwU3Vi
c2V0VHJhbnNmb3JtZWQucm91bmQoJmRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQp
OwotICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQub2Zmc2V0KC1kZXN0UmVj
dFRyYW5zZm9ybWVkUm91bmRlZC5mTGVmdCwgLWRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmZU
b3ApOwogCiAgICAgLy8gVGhlIG1hdHJpeCBpbnZlcnRpbmcsIGV0Yy4gY291bGQgaGF2ZSBpbnRy
b2R1Y2VkIHJvdW5kaW5nIGVycm9yIHdoaWNoCiAgICAgLy8gY2F1c2VzIHRoZSBib3VuZHMgdG8g
YmUgb3V0c2lkZSBvZiB0aGUgcmVzaXplZCBiaXRtYXAuIFdlIHJvdW5kIG91dHdhcmQKQEAgLTIx
NywyOSArMjAxLDQyIEBAIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMm
IGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgICAgIHJldHVybjsg
IC8vIFJlc2l6ZWQgaW1hZ2UgZG9lcyBub3QgaW50ZXJzZWN0LgogCiAgICAgaWYgKHNyY0lzRnVs
bCAmJiBiaXRtYXAuc2hvdWxkQ2FjaGVSZXNhbXBsaW5nKAotICAgICAgICAgICAgcmVzaXplZElt
YWdlUmVjdC53aWR0aCgpLAotICAgICAgICAgICAgcmVzaXplZEltYWdlUmVjdC5oZWlnaHQoKSwK
KyAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCisgICAgICAg
ICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSwKICAgICAgICAgICAgIGRl
c3RCaXRtYXBTdWJzZXRTa0kud2lkdGgoKSwKICAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRT
a0kuaGVpZ2h0KCkpKSB7CiAgICAgICAgIC8vIFdlJ3JlIHN1cHBvc2VkIHRvIHJlc2l6ZSB0aGUg
ZW50aXJlIGltYWdlIGFuZCBjYWNoZSBpdCwgZXZlbiB0aG91Z2gKICAgICAgICAgLy8gd2UgZG9u
J3QgbmVlZCBhbGwgb2YgaXQuCiAgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IGJpdG1hcC5y
ZXNpemVkQml0bWFwKGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNm
b3JtZWRSb3VuZGVkLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCksIHRy
dWUpOwogICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QocmVzYW1wbGVkLCAwLCBkZXN0UmVj
dCwgJnBhaW50KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSByZXNp
emUgdGhlIGV4cG9zZWQgcGFydCBvZiB0aGUgYml0bWFwIHRvIGRvIHRoZQogICAgICAgICAvLyBt
aW5pbWFsIHBvc3NpYmxlIHdvcmsuCiAKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdHJhbnNmb3Jt
ZWQgcG9ydGlvbiBvZiB0aGUgdmlzaWJsZSBwb3J0aW9uIGZvciB1c2UgYmVsb3cuCisgICAgICAg
IFNrUmVjdCBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQ7CisgICAgICAgIGNhbnZhcy5nZXRU
b3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZCwgZGVzdEJp
dG1hcFN1YnNldFNrTm9PZmZzZXQpOworICAgICAgICBTa0lSZWN0IGRlc3RCaXRtYXBTdWJzZXRU
cmFuc2Zvcm1lZFJvdW5kZWQ7CisgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZC5y
b3VuZCgmZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7CisgICAgICAgIGRlc3RC
aXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQub2Zmc2V0KC1kZXN0UmVjdFRyYW5zZm9ybWVk
Um91bmRlZC5mTGVmdCwgLWRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmZUb3ApOworCiAgICAg
ICAgIC8vIFJlc2FtcGxlIHRoZSBuZWVkZWQgcGFydCBvZiB0aGUgaW1hZ2UuCiAgICAgICAgIC8v
IFRyYW5zZm9ybXMgYWJvdmUgcGx1cyByb3VuZGluZyBtYXkgY2F1c2UgZGVzdEJpdG1hcFN1YnNl
dFRyYW5zZm9ybWVkUm91bmRlZAogICAgICAgICAvLyB0byBnbyBvdXRzaWRlIHRoZSBpbWFnZSwg
c28gbmVlZCB0byBjbGlwIHRvIGF2b2lkIHByb2JsZW1zLgogICAgICAgICBpZiAoZGVzdEJpdG1h
cFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZC5pbnRlcnNlY3QoMCwgMCwKICAgICAgICAgICAgICAg
ICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVk
Um91bmRlZC5oZWlnaHQoKSkpIHsKIAotICAgICAgICAgICAgU2tCaXRtYXAgcmVzYW1wbGVkID0g
c2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoc3Vic2V0LAotICAgICAgICAgICAgICAgIHNr
aWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLAotICAgICAgICAgICAgICAgIGRl
c3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3Vu
ZGVkLmhlaWdodCgpLAotICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1l
ZFJvdW5kZWQpOworICAgICAgICAgICAgYm9vbCBhbGxvd0NhY2hpbmdTdWJzZXQgPSAhc3JjSXNG
dWxsCisgICAgICAgICAgICAgICAgJiYgYml0bWFwLnNob3VsZENhY2hlUmVzYW1wbGluZyhkZXN0
UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNJ
UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQpOworICAgICAgICAgICAgU2tCaXRtYXAg
cmVzYW1wbGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5k
ZWQud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjSVJlY3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dDYWNoaW5nU3Vic2V0KTsKIAogICAg
ICAgICAgICAgLy8gQ29tcHV0ZSB3aGVyZSB0aGUgbmV3IGJpdG1hcCBzaG91bGQgYmUgZHJhd24u
IFNpbmNlIG91ciBuZXcgYml0bWFwCiAgICAgICAgICAgICAvLyBtYXkgYmUgc21hbGxlciB0aGFu
IHRoZSBvcmlnaW5hbCwgd2UgaGF2ZSB0byBzaGlmdCBpdCBvdmVyIGJ5IHRoZQpAQCAtMzg2LDcg
KzM4Myw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwKICAgICAgICAgICAgICYmIChiaXRtYXAtPmhhc1Jlc2l6ZWRCaXRtYXAod2lkdGgsIGhlaWdo
dCkKICAgICAgICAgICAgICAgICB8fCBiaXRtYXAtPnNob3VsZENhY2hlUmVzYW1wbGluZyh3aWR0
aCwgaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0KSkpIHsKICAgICAgICAgICAgIC8vIHJlc2l6ZWRCaXRt
YXAoKSBjYWNoZXMgcmVzaXplZCBpbWFnZS4KLSAgICAgICAgICAgIHJlc2FtcGxlZCA9IGJpdG1h
cC0+cmVzaXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIHJlc2FtcGxlZCA9
IGJpdG1hcC0+cmVzaXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHJlc2FtcGxlZCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVz
aXplKHNyY1N1YnNldCwKICAgICAgICAgICAgICAgICBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJF
U0laRV9MQU5DWk9TMywgd2lkdGgsIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggZjBm
NGFhMjE1NzBjMDVkZTdkNDQ1MTMxYWYxOGEzMjVlOTQ5YjMwZC4uYjViMjU5NWNlOTFkM2Q3ODMx
N2UyM2EwZmMyNzE3OWQ0YTQ3OWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAtNDAsNyArNDAs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VT
a2lhKCkKICAgICA6IG1faXNEYXRhQ29tcGxldGUoZmFsc2UpLAotICAgICAgbV9sYXN0UmVxdWVz
dFNpemUoMCwgMCksCiAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCiB7CiB9CkBAIC00OCw3ICs0
Nyw2IEBAIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKCkKIE5hdGl2ZUltYWdlU2tp
YTo6TmF0aXZlSW1hZ2VTa2lhKGNvbnN0IFNrQml0bWFwJiBvdGhlcikKICAgICA6IFNrQml0bWFw
KG90aGVyKSwKICAgICAgIG1faXNEYXRhQ29tcGxldGUoZmFsc2UpLAotICAgICAgbV9sYXN0UmVx
dWVzdFNpemUoMCwgMCksCiAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCiB7CiB9CkBAIC02Mywy
NSArNjEsNzEgQEAgaW50IE5hdGl2ZUltYWdlU2tpYTo6ZGVjb2RlZFNpemUoKSBjb25zdAogICAg
IHJldHVybiBnZXRTaXplKCkgKyBtX3Jlc2l6ZWRJbWFnZS5nZXRTaXplKCk7CiB9CiAKK05hdGl2
ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFnZUluZm8oKQoreworICAgIHNy
Y1N1YnNldC5zZXRFbXB0eSgpOworICAgIGRlc3RTdWJzZXQuc2V0RW1wdHkoKTsKK30KKworYm9v
bCBOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6aXNFcXVhbChpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlcXVlc3RTaXplLndpZHRoKCkgPT0gd2lk
dGgKKyAgICAgICAgJiYgcmVxdWVzdFNpemUuaGVpZ2h0KCkgPT0gaGVpZ2h0CisgICAgICAgICYm
IHNyY1N1YnNldC5pc0VtcHR5KCkKKyAgICAgICAgJiYgZGVzdFN1YnNldC5pc0VtcHR5KCk7Cit9
CisKK2Jvb2wgTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OmlzRXF1YWwoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTa0lSZWN0JiBvdGhlclNyY1N1YnNldCwgY29uc3QgU2tJ
UmVjdCYgb3RoZXJEZXN0U3Vic2V0KSBjb25zdAoreworICAgIHJldHVybiByZXF1ZXN0U2l6ZS53
aWR0aCgpID09IHdpZHRoCisgICAgICAgICYmIHJlcXVlc3RTaXplLmhlaWdodCgpID09IGhlaWdo
dAorICAgICAgICAmJiBzcmNTdWJzZXQgPT0gb3RoZXJTcmNTdWJzZXQKKyAgICAgICAgJiYgZGVz
dFN1YnNldCA9PSBvdGhlckRlc3RTdWJzZXQ7Cit9CisKK3ZvaWQgTmF0aXZlSW1hZ2VTa2lhOjpD
YWNoZWRJbWFnZUluZm86OnNldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFNrSVJlY3Qm
IG90aGVyU3JjU3Vic2V0LCBjb25zdCBTa0lSZWN0JiBvdGhlckRlc3RTdWJzZXQpCit7CisgICAg
cmVxdWVzdFNpemUuc2V0V2lkdGgod2lkdGgpOworICAgIHJlcXVlc3RTaXplLnNldEhlaWdodCho
ZWlnaHQpOworICAgIHNyY1N1YnNldCA9IG90aGVyU3JjU3Vic2V0OworICAgIGRlc3RTdWJzZXQg
PSBvdGhlckRlc3RTdWJzZXQ7Cit9CisKIGJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpoYXNSZXNpemVk
Qml0bWFwKGludCB3LCBpbnQgaCkgY29uc3QKIHsKLSAgICBpZiAobV9sYXN0UmVxdWVzdFNpemUu
d2lkdGgoKSA9PSB3ICYmIG1fbGFzdFJlcXVlc3RTaXplLmhlaWdodCgpID09IGgpCi0gICAgICAg
IG1fcmVzaXplUmVxdWVzdHMrKzsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9sYXN0UmVxdWVzdFNp
emUgPSBJbnRTaXplKHcsIGgpOwotICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKLSAgICB9
CisgICAgcmV0dXJuIG1fY2FjaGVkSW1hZ2VJbmZvLmlzRXF1YWwodywgaCkKKyAgICAgICAgICAg
JiYgbV9yZXNpemVkSW1hZ2Uud2lkdGgoKSA9PSB3ICYmIG1fcmVzaXplZEltYWdlLmhlaWdodCgp
ID09IGg7Cit9CiAKLSAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2Uud2lkdGgoKSA9PSB3ICYmIG1f
cmVzaXplZEltYWdlLmhlaWdodCgpID09IGg7Citib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVz
aXplZEJpdG1hcChpbnQgdywgaW50IGgsIGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwgY29uc3Qg
U2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRJbWFnZUlu
Zm8uaXNFcXVhbCh3LCBoLCBzcmNTdWJzZXQsIGRlc3RTdWJzZXQpCisgICAgICAgICAgICYmIG1f
cmVzaXplZEltYWdlLndpZHRoKCkgPT0gdyAmJiBtX3Jlc2l6ZWRJbWFnZS5oZWlnaHQoKSA9PSBo
OwogfQogCi0vLyBGSVhNRTogZG9uJ3QgY2FjaGUgd2hlbiBpbWFnZSBpcyBpbi1wcm9ncmVzcy4K
K1NrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChpbnQgdywgaW50IGgsIGJv
b2wgYWxsb3dDYWNoaW5nKSBjb25zdAoreworICAgIGlmIChoYXNSZXNpemVkQml0bWFwKHcsIGgp
KQorICAgICAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2U7CisKKyAgICBpZiAoIW1faXNEYXRhQ29t
cGxldGUgfHwgIWFsbG93Q2FjaGluZykKKyAgICAgICAgcmV0dXJuIHNraWE6OkltYWdlT3BlcmF0
aW9uczo6UmVzaXplKCp0aGlzLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9T
MywgdywgaCk7CiAKLVNrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChpbnQg
dywgaW50IGgpIGNvbnN0CisgICAgbV9yZXNpemVkSW1hZ2UgPSBza2lhOjpJbWFnZU9wZXJhdGlv
bnM6OlJlc2l6ZSgqdGhpcywgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMs
IHcsIGgpOworICAgIHJldHVybiBtX3Jlc2l6ZWRJbWFnZTsKK30KKworU2tCaXRtYXAgTmF0aXZl
SW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGludCB3LCBpbnQgaCwgY29uc3QgU2tJUmVjdCYgc3Jj
U3Vic2V0LCBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0LCBib29sIGFsbG93Q2FjaGluZykgY29u
c3QKIHsKLSAgICBpZiAobV9yZXNpemVkSW1hZ2Uud2lkdGgoKSAhPSB3IHx8IG1fcmVzaXplZElt
YWdlLmhlaWdodCgpICE9IGgpCi0gICAgICAgIG1fcmVzaXplZEltYWdlID0gc2tpYTo6SW1hZ2VP
cGVyYXRpb25zOjpSZXNpemUoKnRoaXMsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xB
TkNaT1MzLCB3LCBoKTsKKyAgICBpZiAoaGFzUmVzaXplZEJpdG1hcCh3LCBoLCBzcmNTdWJzZXQs
IGRlc3RTdWJzZXQpKQorICAgICAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2U7CisKKyAgICBTa0Jp
dG1hcCBzdWJzZXQ7CisgICAgZXh0cmFjdFN1YnNldCgmc3Vic2V0LCBzcmNTdWJzZXQpOworICAg
IGlmICghbV9pc0RhdGFDb21wbGV0ZSB8fCAhYWxsb3dDYWNoaW5nKQorICAgICAgICByZXR1cm4g
c2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoc3Vic2V0LCBza2lhOjpJbWFnZU9wZXJhdGlv
bnM6OlJFU0laRV9MQU5DWk9TMywgdywgaCwgZGVzdFN1YnNldCk7CiAKKyAgICBtX3Jlc2l6ZWRJ
bWFnZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwgc2tpYTo6SW1hZ2VP
cGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHcsIGgsIGRlc3RTdWJzZXQpOwogICAgIHJldHVy
biBtX3Jlc2l6ZWRJbWFnZTsKIH0KIApAQCAtOTAsNiArMTM0LDM5IEBAIGJvb2wgTmF0aXZlSW1h
Z2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRI
ZWlnaHQpIGNvbnN0CiB7CisgICAgU2tJUmVjdCBzcmNTdWJzZXQsIGRlc3RTdWJzZXQ7CisgICAg
c3JjU3Vic2V0LnNldEVtcHR5KCk7CisgICAgZGVzdFN1YnNldC5zZXRFbXB0eSgpOworICAgIHJl
dHVybiBzaG91bGRDYWNoZVJlc2FtcGxpbmdJbnRlcm5hbChkZXN0V2lkdGgsIGRlc3RIZWlnaHQs
IGRlc3RTdWJzZXRXaWR0aCwgZGVzdFN1YnNldEhlaWdodCwgc3JjU3Vic2V0LCBkZXN0U3Vic2V0
KTsKK30KKworYm9vbCBOYXRpdmVJbWFnZVNraWE6OnNob3VsZENhY2hlUmVzYW1wbGluZyhpbnQg
ZGVzdFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0KSBjb25zdAoreworICAg
IHJldHVybiBzaG91bGRDYWNoZVJlc2FtcGxpbmdJbnRlcm5hbChkZXN0V2lkdGgsIGRlc3RIZWln
aHQsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCwgc3JjU3Vic2V0LCBkZXN0U3Vic2V0KTsKK30KKwor
Ym9vbCBOYXRpdmVJbWFnZVNraWE6OnNob3VsZENhY2hlUmVzYW1wbGluZ0ludGVybmFsKGludCBk
ZXN0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRlc3RIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFN1YnNldEhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3QKK3sKKyAg
ICAvLyBDaGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgZGltZW5zaW9ucyBtYXRjaCBwcmV2aW91
cyByZXF1ZXN0LgorICAgIGJvb2wgbWF0Y2hlc1ByZXZpb3VzUmVxdWVzdCA9IG1fY2FjaGVkSW1h
Z2VJbmZvLmlzRXF1YWwoZGVzdFdpZHRoLCBkZXN0SGVpZ2h0LCBzcmNTdWJzZXQsIGRlc3RTdWJz
ZXQpOworICAgIGlmIChtYXRjaGVzUHJldmlvdXNSZXF1ZXN0KQorICAgICAgICArK21fcmVzaXpl
UmVxdWVzdHM7CisgICAgZWxzZSB7CisgICAgICAgIG1fY2FjaGVkSW1hZ2VJbmZvLnNldChkZXN0
V2lkdGgsIGRlc3RIZWlnaHQsIHNyY1N1YnNldCwgZGVzdFN1YnNldCk7CisgICAgICAgIG1fcmVz
aXplUmVxdWVzdHMgPSAwOworICAgICAgICAvLyBSZXNldCBtX3Jlc2l6ZWRJbWFnZSBub3csIGJl
Y2F1c2Ugd2UgZG9uJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKKyAgICAgICAgLy8gbGFzdCBy
ZXF1ZXN0ZWQgcmVzaXplIGluZm8gYW5kIG1fcmVzaXplZEltYWdlJ3MgcmVzaXplIGluZm8uCisg
ICAgICAgIG1fcmVzaXplZEltYWdlLnJlc2V0KCk7CisgICAgfQorCiAgICAgLy8gV2UgY2FuIG5v
dCBjYWNoZSBpbmNvbXBsZXRlIGZyYW1lcy4gVGhpcyBtaWdodCBiZSBhIGdvb2Qgb3B0aW1pemF0
aW9uIGluCiAgICAgLy8gdGhlIGZ1dHVyZSwgd2VyZSB3ZSBrbm93IGhvdyBtdWNoIG9mIHRoZSBm
cmFtZSBoYXMgYmVlbiBkZWNvZGVkLCBzbyB3aGVuCiAgICAgLy8gd2UgaW5jcmVtZW50YWxseSBk
cmF3IG1vcmUgb2YgdGhlIGltYWdlLCB3ZSBvbmx5IGhhdmUgdG8gcmVzYW1wbGUgdGhlCkBAIC0x
MDYsMTUgKzE4Myw5IEBAIGJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxp
bmcoaW50IGRlc3RXaWR0aCwKICAgICAvLyBJZiAidG9vIG1hbnkiIHJlcXVlc3RzIGhhdmUgYmVl
biBtYWRlIGZvciB0aGlzIGJpdG1hcCwgd2UgYXNzdW1lIHRoYXQKICAgICAvLyBtYW55IG1vcmUg
d2lsbCBiZSBtYWRlIGFzIHdlbGwsIGFuZCB3ZSdsbCBnbyBhaGVhZCBhbmQgY2FjaGUgaXQuCiAg
ICAgc3RhdGljIGNvbnN0IGludCBrTWFueVJlcXVlc3RUaHJlc2hvbGQgPSA0OwotICAgIGlmICht
X2xhc3RSZXF1ZXN0U2l6ZS53aWR0aCgpID09IGRlc3RXaWR0aCAmJgotICAgICAgICBtX2xhc3RS
ZXF1ZXN0U2l6ZS5oZWlnaHQoKSA9PSBkZXN0SGVpZ2h0KSB7CisgICAgaWYgKG1hdGNoZXNQcmV2
aW91c1JlcXVlc3QpIHsKICAgICAgICAgaWYgKG1fcmVzaXplUmVxdWVzdHMgPj0ga01hbnlSZXF1
ZXN0VGhyZXNob2xkKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gV2hlbiBhIGRpZmZlcmVudCBzaXplIGlzIGJlaW5nIHJlcXVlc3RlZCwgY291bnQg
dGhpcyBhcyBhIHF1ZXJ5Ci0gICAgICAgIC8vIChoYXNSZXNpemVkQml0bWFwKSBhbmQgcmVzZXQg
dGhlIGNvdW50ZXIuCi0gICAgICAgIG1fbGFzdFJlcXVlc3RTaXplID0gSW50U2l6ZShkZXN0V2lk
dGgsIGRlc3RIZWlnaHQpOwotICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKICAgICB9CiAK
ICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgaGV1cmlzdGljIHRoYXQgaWYgbW9yZSB0aGFuIDEv
NCBvZiB0aGUgaW1hZ2UgaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCmluZGV4IDAwYjBhNjg1MDY1YjQyN2RhMTFj
OTRhZGRkNjVhYTkzZTRmY2RhZDQuLjE5OTNiM2RlNzIzMjMwYjhkMzgyOTI0N2FhNmZjZDNkZmFm
NjJkZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TmF0aXZlSW1hZ2VTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9OYXRpdmVJbWFnZVNraWEuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBOYXRpdmVJ
bWFnZVNraWFfaAogCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDE1ICs2
NywyNyBAQCBwdWJsaWM6CiAgICAgLy8gZ2l2ZW4gaW1hZ2Ugc3Vic2V0IHdpdGggdGhlIGdpdmVu
IGRpbWVuc2lvbnMuCiAgICAgYm9vbCBoYXNSZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhl
aWdodCkgY29uc3Q7CiAKKyAgICAvLyBXZSBjYW4ga2VlcCBhIHJlc2l6ZWQgdmVyc2lvbiBvZiB0
aGUgYml0bWFwIGNhY2hlZCBvbiB0aGlzIG9iamVjdC4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHdp
bGwgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUKKyAgICAv
LyBnaXZlbiBpbWFnZSBzdWJzZXQgd2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9ucyBhbmQgc3Vic2V0
cy4KKyAgICBib29sIGhhc1Jlc2l6ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25z
dCBTa0lSZWN0JiBzcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNvbnN0Owor
CiAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBhbiBleGlzdGluZyByZXNpemVkIGltYWdlLCBvciBn
ZW5lcmF0ZSBhIG5ldyBvbmUgb2YKLSAgICAvLyB0aGUgc3BlY2lmaWVkIHNpemUgYW5kIHN0b3Jl
IGl0IGluIHRoZSBjYWNoZS4gU3Vic2V0dGVkIGltYWdlcyBjYW4gbm90Ci0gICAgLy8gYmUgY2Fj
aGVkIHVubGVzcyB0aGUgc3Vic2V0IGlzIHRoZSBlbnRpcmUgYml0bWFwLgotICAgIFNrQml0bWFw
IHJlc2l6ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKKyAgICAvLyB0aGUg
c3BlY2lmaWVkIHNpemUgYW5kIHN0b3JlIGl0IGluIHRoZSBjYWNoZSBpZiBhbGxvd0NhY2hpbmcg
aXMgdHJ1ZS4KKyAgICBTa0JpdG1hcCByZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdo
dCwgYm9vbCBhbGxvd0NhY2hpbmcpIGNvbnN0OworCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBh
biBleGlzdGluZyByZXNpemVkIGltYWdlIHN1YnNldCwgb3IgZ2VuZXJhdGUgYSBuZXcgb25lCisg
ICAgLy8gb2YgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBzdWJzZXRzIGFuZCBzdG9yZSBpdCBpbiB0
aGUgY2FjaGUgaWYKKyAgICAvLyBhbGxvd0NhY2hpbmcgaXMgdHJ1ZS4KKyAgICBTa0JpdG1hcCBy
ZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU2tJUmVjdCYgc3JjU3Vi
c2V0LCBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0LCBib29sIGFsbG93Q2FjaGluZykgY29uc3Q7
CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHJlc2l6ZSBvcGVyYXRpb24gc2hv
dWxkIGVpdGhlciByZXNpemUgdGhlIHdob2xlCiAgICAgLy8gaW1hZ2UgYW5kIGNhY2hlIGl0LCBv
ciByZXNpemUganVzdCB0aGUgcGFydCBpdCBuZWVkcyBhbmQgdGhyb3cgdGhlIHJlc3VsdAogICAg
IC8vIGF3YXkuCiAgICAgLy8KKyAgICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gbWF5IGluY3Jl
bWVudCBhIHJlcXVlc3QgY291bnQgdGhhdCBjYW4gY2hhbmdlIHRoZQorICAgIC8vIHJlc3VsdCBv
ZiBzdWJzZXF1ZW50IGNhbGxzLgorICAgIC8vCiAgICAgLy8gT24gdGhlIG9uZSBoYW5kLCBpZiBv
bmx5IGEgc21hbGwgc3Vic2V0IGlzIGRlc2lyZWQsIHRoZW4gd2Ugd2lsbCB3YXN0ZSBhCiAgICAg
Ly8gbG90IG9mIHRpbWUgcmVzYW1wbGluZyB0aGUgZW50aXJlIHRoaW5nLCBzbyB3ZSBvbmx5IHdh
bnQgdG8gZG8gZXhhY3RseQogICAgIC8vIHdoYXQncyByZXF1aXJlZC4gT24gdGhlIG90aGVyIGhh
bmQsIHJlc2FtcGxpbmcgdGhlIGVudGlyZSBiaXRtYXAgaXMKQEAgLTg2LDcgKzk5LDM4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFN1YnNldFdpZHRo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0KSBj
b25zdDsKIAorICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBmb3IgY3JvcHBlZCBpbWFnZXMuCisg
ICAgYm9vbCBzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3Q7CisKIHByaXZhdGU6
CisgICAgLy8gQ2FjaGVkSW1hZ2VJbmZvIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgY2Fj
aGVkIG9yIHJlcXVlc3RlZCBpbWFnZQorICAgIC8vIHJlc2l6ZXMuCisgICAgc3RydWN0IENhY2hl
ZEltYWdlSW5mbyB7CisKKyAgICAgICAgSW50U2l6ZSByZXF1ZXN0U2l6ZTsKKyAgICAgICAgU2tJ
UmVjdCBzcmNTdWJzZXQ7CisgICAgICAgIFNrSVJlY3QgZGVzdFN1YnNldDsKKworICAgICAgICBD
YWNoZWRJbWFnZUluZm8oKTsKKworICAgICAgICBib29sIGlzRXF1YWwoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KSBjb25zdDsKKyAgICAgICAgYm9vbCBpc0VxdWFsKGludCB3aWR0aCwgaW50IGhlaWdo
dCwgY29uc3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIG90aGVyRGVz
dFN1YnNldCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKKyAgICAgICAgdm9pZCBzZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTa0lSZWN0
JiBvdGhlclNyY1N1YnNldCwgY29uc3QgU2tJUmVjdCYgb3RoZXJEZXN0U3Vic2V0KTsKKyAgICB9
OworCisgICAgLy8gU2hhcmVkIGxvZ2ljIGZvciBkZWNpZGluZyB3aGV0aGVyIGEgcmVzaXplIG9w
ZXJhdGlvbiBzaG91bGQgYmUgY2FjaGVkLgorICAgIGJvb2wgc2hvdWxkQ2FjaGVSZXNhbXBsaW5n
SW50ZXJuYWwoaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZXN0SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3Q7
CisKICAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIHRoZSBkYXRhIGlzIGNvbXBsZXRlLiBCZWZvcmUg
dGhlIGVudGlyZSBpbWFnZSBoYXMKICAgICAvLyBsb2FkZWQsIHdlIGRvIG5vdCB3YW50IHRvIGNh
Y2hlIGEgcmVzaXplLgogICAgIGJvb2wgbV9pc0RhdGFDb21wbGV0ZTsKQEAgLTk3LDE0ICsxNDEs
MTcgQEAgcHJpdmF0ZToKICAgICAvLyBSZWZlcmVuY2VzIGhvdyBtYW55IHRpbWVzIHRoYXQgdGhl
IGltYWdlIHNpemUgaGFzIGJlZW4gcmVxdWVzdGVkIGZvcgogICAgIC8vIHRoZSBsYXN0IHNpemUu
CiAgICAgLy8KLSAgICAvLyBFdmVyeSB0aW1lIHdlIGdldCBhIHJlcXVlc3QsIGlmIGl0IG1hdGNo
ZXMgdGhlIG1fbGFzdFJlcXVlc3RTaXplLCB3ZSdsbAotICAgIC8vIGluY3JlbWVudCB0aGUgY291
bnRlciwgYW5kIGlmIG5vdCwgd2UnbGwgcmVzZXQgdGhlIGNvdW50ZXIgYW5kIHNhdmUgdGhlCi0g
ICAgLy8gc2l6ZS4KKyAgICAvLyBFdmVyeSB0aW1lIHdlIGdldCBhIGNhbGwgdG8gc2hvdWxkQ2Fj
aGVSZXNhbXBsaW5nLCBpZiBpdCBtYXRjaGVzIHRoZQorICAgIC8vIG1fY2FjaGVkSW1hZ2VJbmZv
LCB3ZSdsbCBpbmNyZW1lbnQgdGhlIGNvdW50ZXIsIGFuZCBpZiBub3QsIHdlJ2xsIHJlc2V0Cisg
ICAgLy8gdGhlIGNvdW50ZXIgYW5kIHNhdmUgdGhlIGRpbWVuc2lvbnMuCiAgICAgLy8KICAgICAv
LyBUaGlzIGFsbG93cyB1cyB0byBzZWUgaWYgbWFueSByZXF1ZXN0cyBoYXZlIGJlZW4gbWFkZSBm
b3IgdGhlIHNhbWUKICAgICAvLyByZXNpemVkIGltYWdlLCB3ZSBrbm93IHRoYXQgd2Ugc2hvdWxk
IHByb2JhYmx5IGNhY2hlIGl0LCBldmVuIGlmIGFsbCBvZgogICAgIC8vIHRob3NlIHJlcXVlc3Rz
IGluZGl2aWR1YWxseSBhcmUgc21hbGwgYW5kIHdvdWxkIG5vdCBvdGhlcndpc2UgYmUgY2FjaGVk
LgotICAgIG11dGFibGUgSW50U2l6ZSBtX2xhc3RSZXF1ZXN0U2l6ZTsKKyAgICAvLworICAgIC8v
IFdlIGFsc28gdHJhY2sgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc3Vic2V0cyBmb3IgY2Fj
aGluZyBwYXJ0aWFsCisgICAgLy8gaW1hZ2UgcmVzaXplcy4KKyAgICBtdXRhYmxlIENhY2hlZElt
YWdlSW5mbyBtX2NhY2hlZEltYWdlSW5mbzsKICAgICBtdXRhYmxlIGludCBtX3Jlc2l6ZVJlcXVl
c3RzOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103948</attachid>
            <date>2011-08-15 13:50:37 -0700</date>
            <delta_ts>2011-08-17 14:35:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65587-20110815135036.patch</filename>
            <type>text/plain</type>
            <size>19727</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5OTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZTMzZTYxNDg1YjRhNTRk
NDQwY2NjMTE0ZGU3MmJjMzI0NGMzODljLi5mNWE0ZTZiZGE2NTY3MDU4MzY3MDQzNGE4YmY2Mzhj
MmU1NDM0NTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDgtMDIgIEpvaG4g
QmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnRlZCBza2lhIHN1
cHBvcnQgZm9yIGNhY2hpbmcgcmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTg3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgcmVzaXplcyBv
ZiBjcm9wcGVkIGltYWdlcyB3b3VsZCBub3QgYmUgY2FjaGVkLiBUaGlzIGNhdXNlcyB2YXJpb3Vz
IHdlYnNpdGVzIHRvIGhhdmUgamFua3kgQ1NTIGFuaW1hdGlvbnMgaW4gc29mdHdhcmUgY29tcG9z
aXRpbmcgbW9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZXNhbXBsZWRCaXRtYXApOiBDaGFuZ2VkIHRv
IHVzZSBuZXcgQVBJcyBmb3Igc3Vic2V0IGNhY2hpbmcuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZTo6ZHJhd1BhdHRlcm4pOiBBZGRlZCBhbGxvd0NhY2hpbmcgcGFyYW1ldGVyLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFnZUluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OmlzRXF1
YWwpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86
OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRt
YXApOiBDaGFuZ2VkIHRoaXMgbWV0aG9kIHNvIHRoYXQgaXQgZG9lcyBub3QgbW9kaWZ5IGNhY2hp
bmcgZGF0YS4gQWRkZWQgYSBzZWNvbmQgdmVyc2lvbiB1c2VkIGZvciBjcm9wcGVkIGltYWdlIHJl
c2l6ZXMuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAp
OiBBZGRlZCBwYXJhbWV0ZXIgdG8gbGV0IGNhbGxlciBzcGVjaWZ5IHdoZXRoZXIgY2FjaGluZyBp
cyBhbGxvd2VkLgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNo
ZVJlc2FtcGxpbmcpOiBBZGRlZCBhIHNlY29uZCB2ZXJzaW9uIHVzZWQgZm9yIGNyb3BwZWQgaW1h
Z2UgcmVzaXplcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2Fj
aGVSZXNhbXBsaW5nSW50ZXJuYWwpOiBCb3RoIHNob3VsZENhY2hlUmVzYW1wbGluZyBtZXRob2Rz
IGNhbGwgZG93biB0byB0aGlzIGZvciB0aGUgc2hhcmVkIGxvZ2ljLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmg6IEFkZGVkIENhY2hlZEltYWdlSW5m
byB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgY2FjaGVkIG9yIHJlcXVlc3RlZCBpbWFnZSByZXNp
emUgb3BlcmF0aW9uLgorCiAyMDExLTA3LTI4ICBMZWFuZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJv
Z3JhY2lhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggc3BlZWNoIGlucHV0IGljb24gcmVj
dCBvbiBSVEwgZGlyZWN0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCA1Mzg4OGM5YjNjM2RmMjcwODI4MmUxZGY5
NjVjODE5ZDA1MzE1ZmM5Li43OGYxOTdmNGYxYjc4ZTdhYWQ4Nzc3NzM0YjAyNTFjMWRhODc5ZDli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwCkBAIC0xNjIsOSArMTYyLDYgQEAgc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1
dGVSZXNhbXBsaW5nTW9kZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQKIC8v
IGRyYW1hdGljYWxseS4KIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMm
IGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBj
b25zdCBTa0lSZWN0JiBzcmNJUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICAv
LyBGaXJzdCBnZXQgdGhlIHN1YnNldCB3ZSBuZWVkLiBUaGlzIGlzIGVmZmljaWVudCBhbmQgZG9l
cyBub3QgY29weSBwaXhlbHMuCi0gICAgU2tCaXRtYXAgc3Vic2V0OwotICAgIGJpdG1hcC5leHRy
YWN0U3Vic2V0KCZzdWJzZXQsIHNyY0lSZWN0KTsKICAgICBTa1JlY3Qgc3JjUmVjdDsKICAgICBz
cmNSZWN0LnNldChzcmNJUmVjdCk7CiAKQEAgLTE4NywyNCArMTg0LDExIEBAIHN0YXRpYyB2b2lk
IGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMmIGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNv
bnN0IE5hdGl2ZUltCiAgICAgU2tJUmVjdCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZDsKICAg
ICBkZXN0UmVjdFRyYW5zZm9ybWVkLnJvdW5kKCZkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZCk7
CiAKLSAgICBpZiAoc3JjSXNGdWxsICYmIGJpdG1hcC5oYXNSZXNpemVkQml0bWFwKGRlc3RSZWN0
VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhl
aWdodCgpKSkgewotICAgICAgICAvLyBZYXksIHRoaXMgYml0bWFwIGZyYW1lIGFscmVhZHkgaGFz
IGEgcmVzaXplZCB2ZXJzaW9uLgotICAgICAgICBTa0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAu
cmVzaXplZEJpdG1hcChkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVj
dFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSk7Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFw
UmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0LCAmcGFpbnQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgLy8gQ29tcHV0ZSB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIG91ciByZWN0Lgot
ICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb21wdXRlIHRoZSB0cmFuc2Zvcm1lZCBwb3J0aW9uIG9m
IHRoZQotICAgIC8vIHZpc2libGUgcG9ydGlvbiBmb3IgdXNlIGJlbG93LgotICAgIFNrUmVjdCBk
ZXN0Qml0bWFwU3Vic2V0U2s7Ci0gICAgQ2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RSZWN0
LCAmZGVzdEJpdG1hcFN1YnNldFNrKTsKLSAgICBTa1JlY3QgZGVzdEJpdG1hcFN1YnNldFRyYW5z
Zm9ybWVkOwotICAgIGNhbnZhcy5nZXRUb3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RCaXRtYXBT
dWJzZXRUcmFuc2Zvcm1lZCwgZGVzdEJpdG1hcFN1YnNldFNrKTsKKyAgICBTa1JlY3QgZGVzdEJp
dG1hcFN1YnNldFNrTm9PZmZzZXQ7CisgICAgQ2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RS
ZWN0LCAmZGVzdEJpdG1hcFN1YnNldFNrTm9PZmZzZXQpOworICAgIFNrUmVjdCBkZXN0Qml0bWFw
U3Vic2V0U2sgPSBkZXN0Qml0bWFwU3Vic2V0U2tOb09mZnNldDsKICAgICBkZXN0Qml0bWFwU3Vi
c2V0U2sub2Zmc2V0KC1kZXN0UmVjdC5mTGVmdCwgLWRlc3RSZWN0LmZUb3ApOwotICAgIFNrSVJl
Y3QgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZDsKLSAgICBkZXN0Qml0bWFwU3Vi
c2V0VHJhbnNmb3JtZWQucm91bmQoJmRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQp
OwotICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQub2Zmc2V0KC1kZXN0UmVj
dFRyYW5zZm9ybWVkUm91bmRlZC5mTGVmdCwgLWRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmZU
b3ApOwogCiAgICAgLy8gVGhlIG1hdHJpeCBpbnZlcnRpbmcsIGV0Yy4gY291bGQgaGF2ZSBpbnRy
b2R1Y2VkIHJvdW5kaW5nIGVycm9yIHdoaWNoCiAgICAgLy8gY2F1c2VzIHRoZSBib3VuZHMgdG8g
YmUgb3V0c2lkZSBvZiB0aGUgcmVzaXplZCBiaXRtYXAuIFdlIHJvdW5kIG91dHdhcmQKQEAgLTIx
NywyOSArMjAxLDQzIEBAIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMm
IGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgICAgIHJldHVybjsg
IC8vIFJlc2l6ZWQgaW1hZ2UgZG9lcyBub3QgaW50ZXJzZWN0LgogCiAgICAgaWYgKHNyY0lzRnVs
bCAmJiBiaXRtYXAuc2hvdWxkQ2FjaGVSZXNhbXBsaW5nKAotICAgICAgICAgICAgcmVzaXplZElt
YWdlUmVjdC53aWR0aCgpLAotICAgICAgICAgICAgcmVzaXplZEltYWdlUmVjdC5oZWlnaHQoKSwK
KyAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCisgICAgICAg
ICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSwKICAgICAgICAgICAgIGRl
c3RCaXRtYXBTdWJzZXRTa0kud2lkdGgoKSwKICAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRT
a0kuaGVpZ2h0KCkpKSB7CiAgICAgICAgIC8vIFdlJ3JlIHN1cHBvc2VkIHRvIHJlc2l6ZSB0aGUg
ZW50aXJlIGltYWdlIGFuZCBjYWNoZSBpdCwgZXZlbiB0aG91Z2gKICAgICAgICAgLy8gd2UgZG9u
J3QgbmVlZCBhbGwgb2YgaXQuCiAgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IGJpdG1hcC5y
ZXNpemVkQml0bWFwKGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNm
b3JtZWRSb3VuZGVkLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCksIHRy
dWUpOwogICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QocmVzYW1wbGVkLCAwLCBkZXN0UmVj
dCwgJnBhaW50KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSByZXNp
emUgdGhlIGV4cG9zZWQgcGFydCBvZiB0aGUgYml0bWFwIHRvIGRvIHRoZQogICAgICAgICAvLyBt
aW5pbWFsIHBvc3NpYmxlIHdvcmsuCiAKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdHJhbnNmb3Jt
ZWQgcG9ydGlvbiBvZiB0aGUgdmlzaWJsZSBwb3J0aW9uIGZvciB1c2UgYmVsb3cuCisgICAgICAg
IFNrUmVjdCBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQ7CisgICAgICAgIGNhbnZhcy5nZXRU
b3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZCwgZGVzdEJp
dG1hcFN1YnNldFNrTm9PZmZzZXQpOworICAgICAgICBTa0lSZWN0IGRlc3RCaXRtYXBTdWJzZXRU
cmFuc2Zvcm1lZFJvdW5kZWQ7CisgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZC5y
b3VuZCgmZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7CisgICAgICAgIGRlc3RC
aXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQub2Zmc2V0KC1kZXN0UmVjdFRyYW5zZm9ybWVk
Um91bmRlZC5mTGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLWRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmZUb3ApOworCiAgICAgICAgIC8v
IFJlc2FtcGxlIHRoZSBuZWVkZWQgcGFydCBvZiB0aGUgaW1hZ2UuCiAgICAgICAgIC8vIFRyYW5z
Zm9ybXMgYWJvdmUgcGx1cyByb3VuZGluZyBtYXkgY2F1c2UgZGVzdEJpdG1hcFN1YnNldFRyYW5z
Zm9ybWVkUm91bmRlZAogICAgICAgICAvLyB0byBnbyBvdXRzaWRlIHRoZSBpbWFnZSwgc28gbmVl
ZCB0byBjbGlwIHRvIGF2b2lkIHByb2JsZW1zLgogICAgICAgICBpZiAoZGVzdEJpdG1hcFN1YnNl
dFRyYW5zZm9ybWVkUm91bmRlZC5pbnRlcnNlY3QoMCwgMCwKICAgICAgICAgICAgICAgICBkZXN0
UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRl
ZC5oZWlnaHQoKSkpIHsKIAotICAgICAgICAgICAgU2tCaXRtYXAgcmVzYW1wbGVkID0gc2tpYTo6
SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoc3Vic2V0LAotICAgICAgICAgICAgICAgIHNraWE6Oklt
YWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLAotICAgICAgICAgICAgICAgIGRlc3RSZWN0
VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhl
aWdodCgpLAotICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5k
ZWQpOworICAgICAgICAgICAgYm9vbCBhbGxvd0NhY2hpbmdTdWJzZXQgPSAhc3JjSXNGdWxsCisg
ICAgICAgICAgICAgICAgJiYgYml0bWFwLnNob3VsZENhY2hlUmVzYW1wbGluZyhkZXN0UmVjdFRy
YW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNJUmVjdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RCaXRt
YXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQpOworICAgICAgICAgICAgU2tCaXRtYXAgcmVzYW1w
bGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQud2lk
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjSVJlY3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Qml0bWFw
U3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dDYWNoaW5nU3Vic2V0KTsKIAogICAgICAgICAg
ICAgLy8gQ29tcHV0ZSB3aGVyZSB0aGUgbmV3IGJpdG1hcCBzaG91bGQgYmUgZHJhd24uIFNpbmNl
IG91ciBuZXcgYml0bWFwCiAgICAgICAgICAgICAvLyBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSBv
cmlnaW5hbCwgd2UgaGF2ZSB0byBzaGlmdCBpdCBvdmVyIGJ5IHRoZQpAQCAtMzg2LDcgKzM4NCw3
IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICAg
ICAgICAgICAgICYmIChiaXRtYXAtPmhhc1Jlc2l6ZWRCaXRtYXAod2lkdGgsIGhlaWdodCkKICAg
ICAgICAgICAgICAgICB8fCBiaXRtYXAtPnNob3VsZENhY2hlUmVzYW1wbGluZyh3aWR0aCwgaGVp
Z2h0LCB3aWR0aCwgaGVpZ2h0KSkpIHsKICAgICAgICAgICAgIC8vIHJlc2l6ZWRCaXRtYXAoKSBj
YWNoZXMgcmVzaXplZCBpbWFnZS4KLSAgICAgICAgICAgIHJlc2FtcGxlZCA9IGJpdG1hcC0+cmVz
aXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIHJlc2FtcGxlZCA9IGJpdG1h
cC0+cmVzaXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIHJlc2FtcGxlZCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHNy
Y1N1YnNldCwKICAgICAgICAgICAgICAgICBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9M
QU5DWk9TMywgd2lkdGgsIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggZjBmNGFhMjE1
NzBjMDVkZTdkNDQ1MTMxYWYxOGEzMjVlOTQ5YjMwZC4uYjViMjU5NWNlOTFkM2Q3ODMxN2UyM2Ew
ZmMyNzE3OWQ0YTQ3OWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAtNDAsNyArNDAsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKCkK
ICAgICA6IG1faXNEYXRhQ29tcGxldGUoZmFsc2UpLAotICAgICAgbV9sYXN0UmVxdWVzdFNpemUo
MCwgMCksCiAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCiB7CiB9CkBAIC00OCw3ICs0Nyw2IEBA
IE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKCkKIE5hdGl2ZUltYWdlU2tpYTo6TmF0
aXZlSW1hZ2VTa2lhKGNvbnN0IFNrQml0bWFwJiBvdGhlcikKICAgICA6IFNrQml0bWFwKG90aGVy
KSwKICAgICAgIG1faXNEYXRhQ29tcGxldGUoZmFsc2UpLAotICAgICAgbV9sYXN0UmVxdWVzdFNp
emUoMCwgMCksCiAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCiB7CiB9CkBAIC02MywyNSArNjEs
NzEgQEAgaW50IE5hdGl2ZUltYWdlU2tpYTo6ZGVjb2RlZFNpemUoKSBjb25zdAogICAgIHJldHVy
biBnZXRTaXplKCkgKyBtX3Jlc2l6ZWRJbWFnZS5nZXRTaXplKCk7CiB9CiAKK05hdGl2ZUltYWdl
U2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFnZUluZm8oKQoreworICAgIHNyY1N1YnNl
dC5zZXRFbXB0eSgpOworICAgIGRlc3RTdWJzZXQuc2V0RW1wdHkoKTsKK30KKworYm9vbCBOYXRp
dmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6aXNFcXVhbChpbnQgd2lkdGgsIGludCBoZWln
aHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlcXVlc3RTaXplLndpZHRoKCkgPT0gd2lkdGgKKyAg
ICAgICAgJiYgcmVxdWVzdFNpemUuaGVpZ2h0KCkgPT0gaGVpZ2h0CisgICAgICAgICYmIHNyY1N1
YnNldC5pc0VtcHR5KCkKKyAgICAgICAgJiYgZGVzdFN1YnNldC5pc0VtcHR5KCk7Cit9CisKK2Jv
b2wgTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OmlzRXF1YWwoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBjb25zdCBTa0lSZWN0JiBvdGhlclNyY1N1YnNldCwgY29uc3QgU2tJUmVjdCYg
b3RoZXJEZXN0U3Vic2V0KSBjb25zdAoreworICAgIHJldHVybiByZXF1ZXN0U2l6ZS53aWR0aCgp
ID09IHdpZHRoCisgICAgICAgICYmIHJlcXVlc3RTaXplLmhlaWdodCgpID09IGhlaWdodAorICAg
ICAgICAmJiBzcmNTdWJzZXQgPT0gb3RoZXJTcmNTdWJzZXQKKyAgICAgICAgJiYgZGVzdFN1YnNl
dCA9PSBvdGhlckRlc3RTdWJzZXQ7Cit9CisKK3ZvaWQgTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJ
bWFnZUluZm86OnNldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFNrSVJlY3QmIG90aGVy
U3JjU3Vic2V0LCBjb25zdCBTa0lSZWN0JiBvdGhlckRlc3RTdWJzZXQpCit7CisgICAgcmVxdWVz
dFNpemUuc2V0V2lkdGgod2lkdGgpOworICAgIHJlcXVlc3RTaXplLnNldEhlaWdodChoZWlnaHQp
OworICAgIHNyY1N1YnNldCA9IG90aGVyU3JjU3Vic2V0OworICAgIGRlc3RTdWJzZXQgPSBvdGhl
ckRlc3RTdWJzZXQ7Cit9CisKIGJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpoYXNSZXNpemVkQml0bWFw
KGludCB3LCBpbnQgaCkgY29uc3QKIHsKLSAgICBpZiAobV9sYXN0UmVxdWVzdFNpemUud2lkdGgo
KSA9PSB3ICYmIG1fbGFzdFJlcXVlc3RTaXplLmhlaWdodCgpID09IGgpCi0gICAgICAgIG1fcmVz
aXplUmVxdWVzdHMrKzsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9sYXN0UmVxdWVzdFNpemUgPSBJ
bnRTaXplKHcsIGgpOwotICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKLSAgICB9CisgICAg
cmV0dXJuIG1fY2FjaGVkSW1hZ2VJbmZvLmlzRXF1YWwodywgaCkKKyAgICAgICAgICAgJiYgbV9y
ZXNpemVkSW1hZ2Uud2lkdGgoKSA9PSB3ICYmIG1fcmVzaXplZEltYWdlLmhlaWdodCgpID09IGg7
Cit9CiAKLSAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2Uud2lkdGgoKSA9PSB3ICYmIG1fcmVzaXpl
ZEltYWdlLmhlaWdodCgpID09IGg7Citib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJp
dG1hcChpbnQgdywgaW50IGgsIGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwgY29uc3QgU2tJUmVj
dCYgZGVzdFN1YnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRJbWFnZUluZm8uaXNF
cXVhbCh3LCBoLCBzcmNTdWJzZXQsIGRlc3RTdWJzZXQpCisgICAgICAgICAgICYmIG1fcmVzaXpl
ZEltYWdlLndpZHRoKCkgPT0gdyAmJiBtX3Jlc2l6ZWRJbWFnZS5oZWlnaHQoKSA9PSBoOwogfQog
Ci0vLyBGSVhNRTogZG9uJ3QgY2FjaGUgd2hlbiBpbWFnZSBpcyBpbi1wcm9ncmVzcy4KK1NrQml0
bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChpbnQgdywgaW50IGgsIGJvb2wgYWxs
b3dDYWNoaW5nKSBjb25zdAoreworICAgIGlmIChoYXNSZXNpemVkQml0bWFwKHcsIGgpKQorICAg
ICAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2U7CisKKyAgICBpZiAoIW1faXNEYXRhQ29tcGxldGUg
fHwgIWFsbG93Q2FjaGluZykKKyAgICAgICAgcmV0dXJuIHNraWE6OkltYWdlT3BlcmF0aW9uczo6
UmVzaXplKCp0aGlzLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgdywg
aCk7CiAKLVNrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChpbnQgdywgaW50
IGgpIGNvbnN0CisgICAgbV9yZXNpemVkSW1hZ2UgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJl
c2l6ZSgqdGhpcywgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHcsIGgp
OworICAgIHJldHVybiBtX3Jlc2l6ZWRJbWFnZTsKK30KKworU2tCaXRtYXAgTmF0aXZlSW1hZ2VT
a2lhOjpyZXNpemVkQml0bWFwKGludCB3LCBpbnQgaCwgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0
LCBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0LCBib29sIGFsbG93Q2FjaGluZykgY29uc3QKIHsK
LSAgICBpZiAobV9yZXNpemVkSW1hZ2Uud2lkdGgoKSAhPSB3IHx8IG1fcmVzaXplZEltYWdlLmhl
aWdodCgpICE9IGgpCi0gICAgICAgIG1fcmVzaXplZEltYWdlID0gc2tpYTo6SW1hZ2VPcGVyYXRp
b25zOjpSZXNpemUoKnRoaXMsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1Mz
LCB3LCBoKTsKKyAgICBpZiAoaGFzUmVzaXplZEJpdG1hcCh3LCBoLCBzcmNTdWJzZXQsIGRlc3RT
dWJzZXQpKQorICAgICAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2U7CisKKyAgICBTa0JpdG1hcCBz
dWJzZXQ7CisgICAgZXh0cmFjdFN1YnNldCgmc3Vic2V0LCBzcmNTdWJzZXQpOworICAgIGlmICgh
bV9pc0RhdGFDb21wbGV0ZSB8fCAhYWxsb3dDYWNoaW5nKQorICAgICAgICByZXR1cm4gc2tpYTo6
SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoc3Vic2V0LCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJF
U0laRV9MQU5DWk9TMywgdywgaCwgZGVzdFN1YnNldCk7CiAKKyAgICBtX3Jlc2l6ZWRJbWFnZSA9
IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwgc2tpYTo6SW1hZ2VPcGVyYXRp
b25zOjpSRVNJWkVfTEFOQ1pPUzMsIHcsIGgsIGRlc3RTdWJzZXQpOwogICAgIHJldHVybiBtX3Jl
c2l6ZWRJbWFnZTsKIH0KIApAQCAtOTAsNiArMTM0LDM5IEBAIGJvb2wgTmF0aXZlSW1hZ2VTa2lh
OjpzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRIZWlnaHQp
IGNvbnN0CiB7CisgICAgU2tJUmVjdCBzcmNTdWJzZXQsIGRlc3RTdWJzZXQ7CisgICAgc3JjU3Vi
c2V0LnNldEVtcHR5KCk7CisgICAgZGVzdFN1YnNldC5zZXRFbXB0eSgpOworICAgIHJldHVybiBz
aG91bGRDYWNoZVJlc2FtcGxpbmdJbnRlcm5hbChkZXN0V2lkdGgsIGRlc3RIZWlnaHQsIGRlc3RT
dWJzZXRXaWR0aCwgZGVzdFN1YnNldEhlaWdodCwgc3JjU3Vic2V0LCBkZXN0U3Vic2V0KTsKK30K
KworYm9vbCBOYXRpdmVJbWFnZVNraWE6OnNob3VsZENhY2hlUmVzYW1wbGluZyhpbnQgZGVzdFdp
ZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVz
dEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU2tJUmVjdCYgc3JjU3Vic2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0KSBjb25zdAoreworICAgIHJldHVy
biBzaG91bGRDYWNoZVJlc2FtcGxpbmdJbnRlcm5hbChkZXN0V2lkdGgsIGRlc3RIZWlnaHQsIGRl
c3RXaWR0aCwgZGVzdEhlaWdodCwgc3JjU3Vic2V0LCBkZXN0U3Vic2V0KTsKK30KKworYm9vbCBO
YXRpdmVJbWFnZVNraWE6OnNob3VsZENhY2hlUmVzYW1wbGluZ0ludGVybmFsKGludCBkZXN0V2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRlc3RIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFN1YnNldEhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lS
ZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3QKK3sKKyAgICAvLyBD
aGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgZGltZW5zaW9ucyBtYXRjaCBwcmV2aW91cyByZXF1
ZXN0LgorICAgIGJvb2wgbWF0Y2hlc1ByZXZpb3VzUmVxdWVzdCA9IG1fY2FjaGVkSW1hZ2VJbmZv
LmlzRXF1YWwoZGVzdFdpZHRoLCBkZXN0SGVpZ2h0LCBzcmNTdWJzZXQsIGRlc3RTdWJzZXQpOwor
ICAgIGlmIChtYXRjaGVzUHJldmlvdXNSZXF1ZXN0KQorICAgICAgICArK21fcmVzaXplUmVxdWVz
dHM7CisgICAgZWxzZSB7CisgICAgICAgIG1fY2FjaGVkSW1hZ2VJbmZvLnNldChkZXN0V2lkdGgs
IGRlc3RIZWlnaHQsIHNyY1N1YnNldCwgZGVzdFN1YnNldCk7CisgICAgICAgIG1fcmVzaXplUmVx
dWVzdHMgPSAwOworICAgICAgICAvLyBSZXNldCBtX3Jlc2l6ZWRJbWFnZSBub3csIGJlY2F1c2Ug
d2UgZG9uJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKKyAgICAgICAgLy8gbGFzdCByZXF1ZXN0
ZWQgcmVzaXplIGluZm8gYW5kIG1fcmVzaXplZEltYWdlJ3MgcmVzaXplIGluZm8uCisgICAgICAg
IG1fcmVzaXplZEltYWdlLnJlc2V0KCk7CisgICAgfQorCiAgICAgLy8gV2UgY2FuIG5vdCBjYWNo
ZSBpbmNvbXBsZXRlIGZyYW1lcy4gVGhpcyBtaWdodCBiZSBhIGdvb2Qgb3B0aW1pemF0aW9uIGlu
CiAgICAgLy8gdGhlIGZ1dHVyZSwgd2VyZSB3ZSBrbm93IGhvdyBtdWNoIG9mIHRoZSBmcmFtZSBo
YXMgYmVlbiBkZWNvZGVkLCBzbyB3aGVuCiAgICAgLy8gd2UgaW5jcmVtZW50YWxseSBkcmF3IG1v
cmUgb2YgdGhlIGltYWdlLCB3ZSBvbmx5IGhhdmUgdG8gcmVzYW1wbGUgdGhlCkBAIC0xMDYsMTUg
KzE4Myw5IEBAIGJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50
IGRlc3RXaWR0aCwKICAgICAvLyBJZiAidG9vIG1hbnkiIHJlcXVlc3RzIGhhdmUgYmVlbiBtYWRl
IGZvciB0aGlzIGJpdG1hcCwgd2UgYXNzdW1lIHRoYXQKICAgICAvLyBtYW55IG1vcmUgd2lsbCBi
ZSBtYWRlIGFzIHdlbGwsIGFuZCB3ZSdsbCBnbyBhaGVhZCBhbmQgY2FjaGUgaXQuCiAgICAgc3Rh
dGljIGNvbnN0IGludCBrTWFueVJlcXVlc3RUaHJlc2hvbGQgPSA0OwotICAgIGlmIChtX2xhc3RS
ZXF1ZXN0U2l6ZS53aWR0aCgpID09IGRlc3RXaWR0aCAmJgotICAgICAgICBtX2xhc3RSZXF1ZXN0
U2l6ZS5oZWlnaHQoKSA9PSBkZXN0SGVpZ2h0KSB7CisgICAgaWYgKG1hdGNoZXNQcmV2aW91c1Jl
cXVlc3QpIHsKICAgICAgICAgaWYgKG1fcmVzaXplUmVxdWVzdHMgPj0ga01hbnlSZXF1ZXN0VGhy
ZXNob2xkKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gV2hlbiBhIGRpZmZlcmVudCBzaXplIGlzIGJlaW5nIHJlcXVlc3RlZCwgY291bnQgdGhpcyBh
cyBhIHF1ZXJ5Ci0gICAgICAgIC8vIChoYXNSZXNpemVkQml0bWFwKSBhbmQgcmVzZXQgdGhlIGNv
dW50ZXIuCi0gICAgICAgIG1fbGFzdFJlcXVlc3RTaXplID0gSW50U2l6ZShkZXN0V2lkdGgsIGRl
c3RIZWlnaHQpOwotICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKICAgICB9CiAKICAgICAv
LyBPdGhlcndpc2UsIHVzZSB0aGUgaGV1cmlzdGljIHRoYXQgaWYgbW9yZSB0aGFuIDEvNCBvZiB0
aGUgaW1hZ2UgaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvTmF0aXZlSW1hZ2VTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCmluZGV4IDAwYjBhNjg1MDY1YjQyN2RhMTFjOTRhZGRk
NjVhYTkzZTRmY2RhZDQuLjE5OTNiM2RlNzIzMjMwYjhkMzgyOTI0N2FhNmZjZDNkZmFmNjJkZDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZl
SW1hZ2VTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9O
YXRpdmVJbWFnZVNraWEuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBOYXRpdmVJbWFnZVNr
aWFfaAogCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDE1ICs2NywyNyBA
QCBwdWJsaWM6CiAgICAgLy8gZ2l2ZW4gaW1hZ2Ugc3Vic2V0IHdpdGggdGhlIGdpdmVuIGRpbWVu
c2lvbnMuCiAgICAgYm9vbCBoYXNSZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCkg
Y29uc3Q7CiAKKyAgICAvLyBXZSBjYW4ga2VlcCBhIHJlc2l6ZWQgdmVyc2lvbiBvZiB0aGUgYml0
bWFwIGNhY2hlZCBvbiB0aGlzIG9iamVjdC4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0
dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUKKyAgICAvLyBnaXZl
biBpbWFnZSBzdWJzZXQgd2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9ucyBhbmQgc3Vic2V0cy4KKyAg
ICBib29sIGhhc1Jlc2l6ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTa0lS
ZWN0JiBzcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNvbnN0OworCiAgICAg
Ly8gVGhpcyB3aWxsIHJldHVybiBhbiBleGlzdGluZyByZXNpemVkIGltYWdlLCBvciBnZW5lcmF0
ZSBhIG5ldyBvbmUgb2YKLSAgICAvLyB0aGUgc3BlY2lmaWVkIHNpemUgYW5kIHN0b3JlIGl0IGlu
IHRoZSBjYWNoZS4gU3Vic2V0dGVkIGltYWdlcyBjYW4gbm90Ci0gICAgLy8gYmUgY2FjaGVkIHVu
bGVzcyB0aGUgc3Vic2V0IGlzIHRoZSBlbnRpcmUgYml0bWFwLgotICAgIFNrQml0bWFwIHJlc2l6
ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKKyAgICAvLyB0aGUgc3BlY2lm
aWVkIHNpemUgYW5kIHN0b3JlIGl0IGluIHRoZSBjYWNoZSBpZiBhbGxvd0NhY2hpbmcgaXMgdHJ1
ZS4KKyAgICBTa0JpdG1hcCByZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9v
bCBhbGxvd0NhY2hpbmcpIGNvbnN0OworCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBhbiBleGlz
dGluZyByZXNpemVkIGltYWdlIHN1YnNldCwgb3IgZ2VuZXJhdGUgYSBuZXcgb25lCisgICAgLy8g
b2YgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBzdWJzZXRzIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2Fj
aGUgaWYKKyAgICAvLyBhbGxvd0NhY2hpbmcgaXMgdHJ1ZS4KKyAgICBTa0JpdG1hcCByZXNpemVk
Qml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LCBj
b25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0LCBib29sIGFsbG93Q2FjaGluZykgY29uc3Q7CiAKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHJlc2l6ZSBvcGVyYXRpb24gc2hvdWxkIGVp
dGhlciByZXNpemUgdGhlIHdob2xlCiAgICAgLy8gaW1hZ2UgYW5kIGNhY2hlIGl0LCBvciByZXNp
emUganVzdCB0aGUgcGFydCBpdCBuZWVkcyBhbmQgdGhyb3cgdGhlIHJlc3VsdAogICAgIC8vIGF3
YXkuCiAgICAgLy8KKyAgICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gbWF5IGluY3JlbWVudCBh
IHJlcXVlc3QgY291bnQgdGhhdCBjYW4gY2hhbmdlIHRoZQorICAgIC8vIHJlc3VsdCBvZiBzdWJz
ZXF1ZW50IGNhbGxzLgorICAgIC8vCiAgICAgLy8gT24gdGhlIG9uZSBoYW5kLCBpZiBvbmx5IGEg
c21hbGwgc3Vic2V0IGlzIGRlc2lyZWQsIHRoZW4gd2Ugd2lsbCB3YXN0ZSBhCiAgICAgLy8gbG90
IG9mIHRpbWUgcmVzYW1wbGluZyB0aGUgZW50aXJlIHRoaW5nLCBzbyB3ZSBvbmx5IHdhbnQgdG8g
ZG8gZXhhY3RseQogICAgIC8vIHdoYXQncyByZXF1aXJlZC4gT24gdGhlIG90aGVyIGhhbmQsIHJl
c2FtcGxpbmcgdGhlIGVudGlyZSBiaXRtYXAgaXMKQEAgLTg2LDcgKzk5LDM4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFN1YnNldFdpZHRoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0KSBjb25zdDsK
IAorICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBmb3IgY3JvcHBlZCBpbWFnZXMuCisgICAgYm9v
bCBzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3Q7CisKIHByaXZhdGU6CisgICAg
Ly8gQ2FjaGVkSW1hZ2VJbmZvIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgY2FjaGVkIG9y
IHJlcXVlc3RlZCBpbWFnZQorICAgIC8vIHJlc2l6ZXMuCisgICAgc3RydWN0IENhY2hlZEltYWdl
SW5mbyB7CisKKyAgICAgICAgSW50U2l6ZSByZXF1ZXN0U2l6ZTsKKyAgICAgICAgU2tJUmVjdCBz
cmNTdWJzZXQ7CisgICAgICAgIFNrSVJlY3QgZGVzdFN1YnNldDsKKworICAgICAgICBDYWNoZWRJ
bWFnZUluZm8oKTsKKworICAgICAgICBib29sIGlzRXF1YWwoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KSBjb25zdDsKKyAgICAgICAgYm9vbCBpc0VxdWFsKGludCB3aWR0aCwgaW50IGhlaWdodCwgY29u
c3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIG90aGVyRGVzdFN1YnNl
dCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAg
ICAgICAgdm9pZCBzZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTa0lSZWN0JiBvdGhl
clNyY1N1YnNldCwgY29uc3QgU2tJUmVjdCYgb3RoZXJEZXN0U3Vic2V0KTsKKyAgICB9OworCisg
ICAgLy8gU2hhcmVkIGxvZ2ljIGZvciBkZWNpZGluZyB3aGV0aGVyIGEgcmVzaXplIG9wZXJhdGlv
biBzaG91bGQgYmUgY2FjaGVkLgorICAgIGJvb2wgc2hvdWxkQ2FjaGVSZXNhbXBsaW5nSW50ZXJu
YWwoaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBkZXN0SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRlc3RTdWJzZXRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3Q7CisKICAg
ICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIHRoZSBkYXRhIGlzIGNvbXBsZXRlLiBCZWZvcmUgdGhlIGVu
dGlyZSBpbWFnZSBoYXMKICAgICAvLyBsb2FkZWQsIHdlIGRvIG5vdCB3YW50IHRvIGNhY2hlIGEg
cmVzaXplLgogICAgIGJvb2wgbV9pc0RhdGFDb21wbGV0ZTsKQEAgLTk3LDE0ICsxNDEsMTcgQEAg
cHJpdmF0ZToKICAgICAvLyBSZWZlcmVuY2VzIGhvdyBtYW55IHRpbWVzIHRoYXQgdGhlIGltYWdl
IHNpemUgaGFzIGJlZW4gcmVxdWVzdGVkIGZvcgogICAgIC8vIHRoZSBsYXN0IHNpemUuCiAgICAg
Ly8KLSAgICAvLyBFdmVyeSB0aW1lIHdlIGdldCBhIHJlcXVlc3QsIGlmIGl0IG1hdGNoZXMgdGhl
IG1fbGFzdFJlcXVlc3RTaXplLCB3ZSdsbAotICAgIC8vIGluY3JlbWVudCB0aGUgY291bnRlciwg
YW5kIGlmIG5vdCwgd2UnbGwgcmVzZXQgdGhlIGNvdW50ZXIgYW5kIHNhdmUgdGhlCi0gICAgLy8g
c2l6ZS4KKyAgICAvLyBFdmVyeSB0aW1lIHdlIGdldCBhIGNhbGwgdG8gc2hvdWxkQ2FjaGVSZXNh
bXBsaW5nLCBpZiBpdCBtYXRjaGVzIHRoZQorICAgIC8vIG1fY2FjaGVkSW1hZ2VJbmZvLCB3ZSds
bCBpbmNyZW1lbnQgdGhlIGNvdW50ZXIsIGFuZCBpZiBub3QsIHdlJ2xsIHJlc2V0CisgICAgLy8g
dGhlIGNvdW50ZXIgYW5kIHNhdmUgdGhlIGRpbWVuc2lvbnMuCiAgICAgLy8KICAgICAvLyBUaGlz
IGFsbG93cyB1cyB0byBzZWUgaWYgbWFueSByZXF1ZXN0cyBoYXZlIGJlZW4gbWFkZSBmb3IgdGhl
IHNhbWUKICAgICAvLyByZXNpemVkIGltYWdlLCB3ZSBrbm93IHRoYXQgd2Ugc2hvdWxkIHByb2Jh
Ymx5IGNhY2hlIGl0LCBldmVuIGlmIGFsbCBvZgogICAgIC8vIHRob3NlIHJlcXVlc3RzIGluZGl2
aWR1YWxseSBhcmUgc21hbGwgYW5kIHdvdWxkIG5vdCBvdGhlcndpc2UgYmUgY2FjaGVkLgotICAg
IG11dGFibGUgSW50U2l6ZSBtX2xhc3RSZXF1ZXN0U2l6ZTsKKyAgICAvLworICAgIC8vIFdlIGFs
c28gdHJhY2sgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc3Vic2V0cyBmb3IgY2FjaGluZyBw
YXJ0aWFsCisgICAgLy8gaW1hZ2UgcmVzaXplcy4KKyAgICBtdXRhYmxlIENhY2hlZEltYWdlSW5m
byBtX2NhY2hlZEltYWdlSW5mbzsKICAgICBtdXRhYmxlIGludCBtX3Jlc2l6ZVJlcXVlc3RzOwog
fTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104247</attachid>
            <date>2011-08-17 14:35:39 -0700</date>
            <delta_ts>2011-08-19 13:44:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65587-20110817143538.patch</filename>
            <type>text/plain</type>
            <size>20520</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBkZjY1ZjA3MTNiYjIzNzg0MWFl
ZDljOTViMDgzODhiZGJlZjM1ZTVlLi45ZGM1MmViNjY3NWVlODBiZmZhMGE3OWY2ZGI5ODFlODgy
YTkzYjc0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CkBAIC0zNjMzLDYgKzM2MzMsOSBAQCBCVUdXSzY1NDUzIE1BQyA6IGZh
c3QvY3NzL291dGxpbmUtYXV0by1lbXB0eS1yZWN0cy5odG1sID0gSU1BR0UKIAogQlVHV0s2NTQ2
MiBWSVNUQSA6IGh0dHAvdGVzdHMvY2FjaGUvaGlzdG9yeS1vbmx5LWNhY2hlZC1zdWJyZXNvdXJj
ZS1sb2Fkcy1tYXgtYWdlLWh0dHBzLmh0bWwgPSBQQVNTIFRJTUVPVVQKIAorLy8gTmVlZHMgbmV3
IGJhc2VsaW5lIGZvciBjaGFuZ2UgdG8gaW1hZ2UgcmVzaXplIGNhY2hpbmcgY29kZS4KK0JVR1dL
NjU1ODcgOiBzdmcvY3VzdG9tL2ltYWdlLXNtYWxsLXdpZHRoLWhlaWdodC5zdmcgPSBJTUFHRQor
CiAvLyBJbnRyb2R1Y2VkIGluIHI5MjI5OCwgd2hpY2ggbWlnaHQgY2F1c2UgYW5vdGhlciB0ZXN0
IGNyYXNoaW5nLgogQlVHWk1PIFNLSVAgOiBmYXN0L2xvYWRlci9yZWxvYWQtemVyby1ieXRlLXBs
dWdpbi5odG1sID0gRkFJTAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTgyOGNlYzAwMzIzMTc0NzFhN2E4YjE4
NzFlNTNiZTFjNWZiMTYzZi4uZjMxNzhjYWViNzkxN2YzZWY0YTA1NTA2Nzc3NTdkODk0NDVhN2Ix
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA4LTE3ICBKb2huIEJhdGVzICA8
amJhdGVzQGdvb2dsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50ZWQgc2tpYSBzdXBwb3J0IGZv
ciBjYWNoaW5nIHJlc2l6ZXMgb2YgY3JvcHBlZCBpbWFnZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTU4NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHJlc2l6ZXMgb2YgY3JvcHBl
ZCBpbWFnZXMgd291bGQgbm90IGJlIGNhY2hlZC4gVGhpcyBjYXVzZXMgdmFyaW91cyB3ZWJzaXRl
cyB0byBoYXZlIGphbmt5IENTUyBhbmltYXRpb25zIGluIHNvZnR3YXJlIGNvbXBvc2l0aW5nIG1v
ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3UmVzYW1wbGVkQml0bWFwKTogQ2hhbmdlZCB0byB1c2UgbmV3
IEFQSXMgZm9yIHN1YnNldCBjYWNoaW5nLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQ
YXR0ZXJuKTogQWRkZWQgYWxsb3dDYWNoaW5nIHBhcmFtZXRlci4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
YXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpOYXRp
dmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6Q2FjaGVkSW1hZ2VJbmZvKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjppc0VxdWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpoYXNSZXNpemVkQml0bWFwKTogQ2hh
bmdlZCB0aGlzIG1ldGhvZCBzbyB0aGF0IGl0IGRvZXMgbm90IG1vZGlmeSBjYWNoaW5nIGRhdGEu
IEFkZGVkIGEgc2Vjb25kIHZlcnNpb24gdXNlZCBmb3IgY3JvcHBlZCBpbWFnZSByZXNpemVzLgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKTogQWRkZWQg
cGFyYW1ldGVyIHRvIGxldCBjYWxsZXIgc3BlY2lmeSB3aGV0aGVyIGNhY2hpbmcgaXMgYWxsb3dl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNhbXBs
aW5nKTogQWRkZWQgYSBzZWNvbmQgdmVyc2lvbiB1c2VkIGZvciBjcm9wcGVkIGltYWdlIHJlc2l6
ZXMuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OnNob3VsZENhY2hlUmVzYW1w
bGluZ0ludGVybmFsKTogQm90aCBzaG91bGRDYWNoZVJlc2FtcGxpbmcgbWV0aG9kcyBjYWxsIGRv
d24gdG8gdGhpcyBmb3IgdGhlIHNoYXJlZCBsb2dpYy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oOiBBZGRlZCBDYWNoZWRJbWFnZUluZm8gdG8gdW5p
cXVlbHkgaWRlbnRpZnkgdGhlIGNhY2hlZCBvciByZXF1ZXN0ZWQgaW1hZ2UgcmVzaXplIG9wZXJh
dGlvbi4KKwogMjAxMS0wOC0xNiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQgQ2hyb21pdW0gV2luZG93cyBidWlsZCBmaXggYWZ0ZXIg
cjkzMTQwLiBUYWtlIDQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAKaW5kZXggYWYxYjYzN2I2OGE4NzEzMjhjODM4ZTVkM2Q4YzIz
OTBmZDdjMTI0Mi4uYjJiZTBlMWQ1OTY2ZjljNmYwMDdmYzNkODE0MTFiZWUwZjk1MzMyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcApAQCAtMTYzLDkgKzE2Myw2IEBAIHN0YXRpYyBSZXNhbXBsaW5nTW9kZSBjb21wdXRlUmVz
YW1wbGluZ01vZGUoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0CiAvLyBkcmFt
YXRpY2FsbHkuCiBzdGF0aWMgdm9pZCBkcmF3UmVzYW1wbGVkQml0bWFwKFNrQ2FudmFzJiBjYW52
YXMsIFNrUGFpbnQmIHBhaW50LCBjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgY29uc3Qg
U2tJUmVjdCYgc3JjSVJlY3QsIGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgLy8gRmly
c3QgZ2V0IHRoZSBzdWJzZXQgd2UgbmVlZC4gVGhpcyBpcyBlZmZpY2llbnQgYW5kIGRvZXMgbm90
IGNvcHkgcGl4ZWxzLgotICAgIFNrQml0bWFwIHN1YnNldDsKLSAgICBiaXRtYXAuZXh0cmFjdFN1
YnNldCgmc3Vic2V0LCBzcmNJUmVjdCk7CiAgICAgU2tSZWN0IHNyY1JlY3Q7CiAgICAgc3JjUmVj
dC5zZXQoc3JjSVJlY3QpOwogCkBAIC0xODgsMjQgKzE4NSwxMSBAQCBzdGF0aWMgdm9pZCBkcmF3
UmVzYW1wbGVkQml0bWFwKFNrQ2FudmFzJiBjYW52YXMsIFNrUGFpbnQmIHBhaW50LCBjb25zdCBO
YXRpdmVJbQogICAgIFNrSVJlY3QgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQ7CiAgICAgZGVz
dFJlY3RUcmFuc2Zvcm1lZC5yb3VuZCgmZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQpOwogCi0g
ICAgaWYgKHNyY0lzRnVsbCAmJiBiaXRtYXAuaGFzUmVzaXplZEJpdG1hcChkZXN0UmVjdFRyYW5z
Zm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQo
KSkpIHsKLSAgICAgICAgLy8gWWF5LCB0aGlzIGJpdG1hcCBmcmFtZSBhbHJlYWR5IGhhcyBhIHJl
c2l6ZWQgdmVyc2lvbi4KLSAgICAgICAgU2tCaXRtYXAgcmVzYW1wbGVkID0gYml0bWFwLnJlc2l6
ZWRCaXRtYXAoZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwgZGVzdFJlY3RUcmFu
c2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCkpOwotICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3Qo
cmVzYW1wbGVkLCAwLCBkZXN0UmVjdCwgJnBhaW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIC8vIENvbXB1dGUgdGhlIHZpc2libGUgcG9ydGlvbiBvZiBvdXIgcmVjdC4KLSAgICAv
LyBXZSBhbHNvIG5lZWQgdG8gY29tcHV0ZSB0aGUgdHJhbnNmb3JtZWQgcG9ydGlvbiBvZiB0aGUK
LSAgICAvLyB2aXNpYmxlIHBvcnRpb24gZm9yIHVzZSBiZWxvdy4KLSAgICBTa1JlY3QgZGVzdEJp
dG1hcFN1YnNldFNrOwotICAgIENsaXBSZWN0VG9DYW52YXMoY2FudmFzLCBkZXN0UmVjdCwgJmRl
c3RCaXRtYXBTdWJzZXRTayk7Ci0gICAgU2tSZWN0IGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1l
ZDsKLSAgICBjYW52YXMuZ2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZkZXN0Qml0bWFwU3Vic2V0
VHJhbnNmb3JtZWQsIGRlc3RCaXRtYXBTdWJzZXRTayk7CisgICAgU2tSZWN0IGRlc3RCaXRtYXBT
dWJzZXRTa05vT2Zmc2V0OworICAgIENsaXBSZWN0VG9DYW52YXMoY2FudmFzLCBkZXN0UmVjdCwg
JmRlc3RCaXRtYXBTdWJzZXRTa05vT2Zmc2V0KTsKKyAgICBTa1JlY3QgZGVzdEJpdG1hcFN1YnNl
dFNrID0gZGVzdEJpdG1hcFN1YnNldFNrTm9PZmZzZXQ7CiAgICAgZGVzdEJpdG1hcFN1YnNldFNr
Lm9mZnNldCgtZGVzdFJlY3QuZkxlZnQsIC1kZXN0UmVjdC5mVG9wKTsKLSAgICBTa0lSZWN0IGRl
c3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQ7Ci0gICAgZGVzdEJpdG1hcFN1YnNldFRy
YW5zZm9ybWVkLnJvdW5kKCZkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkKTsKLSAg
ICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkLm9mZnNldCgtZGVzdFJlY3RUcmFu
c2Zvcm1lZFJvdW5kZWQuZkxlZnQsIC1kZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5mVG9wKTsK
IAogICAgIC8vIFRoZSBtYXRyaXggaW52ZXJ0aW5nLCBldGMuIGNvdWxkIGhhdmUgaW50cm9kdWNl
ZCByb3VuZGluZyBlcnJvciB3aGljaAogICAgIC8vIGNhdXNlcyB0aGUgYm91bmRzIHRvIGJlIG91
dHNpZGUgb2YgdGhlIHJlc2l6ZWQgYml0bWFwLiBXZSByb3VuZCBvdXR3YXJkCkBAIC0yMTgsMjkg
KzIwMiw0MyBAQCBzdGF0aWMgdm9pZCBkcmF3UmVzYW1wbGVkQml0bWFwKFNrQ2FudmFzJiBjYW52
YXMsIFNrUGFpbnQmIHBhaW50LCBjb25zdCBOYXRpdmVJbQogICAgICAgICByZXR1cm47ICAvLyBS
ZXNpemVkIGltYWdlIGRvZXMgbm90IGludGVyc2VjdC4KIAogICAgIGlmIChzcmNJc0Z1bGwgJiYg
Yml0bWFwLnNob3VsZENhY2hlUmVzYW1wbGluZygKLSAgICAgICAgICAgIHJlc2l6ZWRJbWFnZVJl
Y3Qud2lkdGgoKSwKLSAgICAgICAgICAgIHJlc2l6ZWRJbWFnZVJlY3QuaGVpZ2h0KCksCisgICAg
ICAgICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLAorICAgICAgICAgICAg
ZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCksCiAgICAgICAgICAgICBkZXN0Qml0
bWFwU3Vic2V0U2tJLndpZHRoKCksCiAgICAgICAgICAgICBkZXN0Qml0bWFwU3Vic2V0U2tJLmhl
aWdodCgpKSkgewogICAgICAgICAvLyBXZSdyZSBzdXBwb3NlZCB0byByZXNpemUgdGhlIGVudGly
ZSBpbWFnZSBhbmQgY2FjaGUgaXQsIGV2ZW4gdGhvdWdoCiAgICAgICAgIC8vIHdlIGRvbid0IG5l
ZWQgYWxsIG9mIGl0LgogICAgICAgICBTa0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAucmVzaXpl
ZEJpdG1hcChkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5zZm9ybWVk
Um91bmRlZC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpLCB0cnVlKTsK
ICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXBSZWN0KHJlc2FtcGxlZCwgMCwgZGVzdFJlY3QsICZw
YWludCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgcmVzaXplIHRo
ZSBleHBvc2VkIHBhcnQgb2YgdGhlIGJpdG1hcCB0byBkbyB0aGUKICAgICAgICAgLy8gbWluaW1h
bCBwb3NzaWJsZSB3b3JrLgogCisgICAgICAgIC8vIENvbXB1dGUgdGhlIHRyYW5zZm9ybWVkIHBv
cnRpb24gb2YgdGhlIHZpc2libGUgcG9ydGlvbiBmb3IgdXNlIGJlbG93LgorICAgICAgICBTa1Jl
Y3QgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkOworICAgICAgICBjYW52YXMuZ2V0VG90YWxN
YXRyaXgoKS5tYXBSZWN0KCZkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQsIGRlc3RCaXRtYXBT
dWJzZXRTa05vT2Zmc2V0KTsKKyAgICAgICAgU2tJUmVjdCBkZXN0Qml0bWFwU3Vic2V0VHJhbnNm
b3JtZWRSb3VuZGVkOworICAgICAgICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQucm91bmQo
JmRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQpOworICAgICAgICBkZXN0Qml0bWFw
U3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkLm9mZnNldCgtZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5k
ZWQuZkxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1kZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5mVG9wKTsKKwogICAgICAgICAvLyBSZXNh
bXBsZSB0aGUgbmVlZGVkIHBhcnQgb2YgdGhlIGltYWdlLgogICAgICAgICAvLyBUcmFuc2Zvcm1z
IGFib3ZlIHBsdXMgcm91bmRpbmcgbWF5IGNhdXNlIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1l
ZFJvdW5kZWQKICAgICAgICAgLy8gdG8gZ28gb3V0c2lkZSB0aGUgaW1hZ2UsIHNvIG5lZWQgdG8g
Y2xpcCB0byBhdm9pZCBwcm9ibGVtcy4KICAgICAgICAgaWYgKGRlc3RCaXRtYXBTdWJzZXRUcmFu
c2Zvcm1lZFJvdW5kZWQuaW50ZXJzZWN0KDAsIDAsCiAgICAgICAgICAgICAgICAgZGVzdFJlY3RU
cmFuc2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVp
Z2h0KCkpKSB7CiAKLSAgICAgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IHNraWE6OkltYWdl
T3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwKLSAgICAgICAgICAgICAgICBza2lhOjpJbWFnZU9w
ZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywKLSAgICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5z
Zm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQo
KSwKLSAgICAgICAgICAgICAgICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkKTsK
KyAgICAgICAgICAgIGJvb2wgYWxsb3dDYWNoaW5nU3Vic2V0ID0gIXNyY0lzRnVsbAorICAgICAg
ICAgICAgICAgICYmIGJpdG1hcC5zaG91bGRDYWNoZVJlc2FtcGxpbmcoZGVzdFJlY3RUcmFuc2Zv
cm1lZFJvdW5kZWQud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjSVJlY3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Qml0bWFwU3Vi
c2V0VHJhbnNmb3JtZWRSb3VuZGVkKTsKKyAgICAgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9
IGJpdG1hcC5yZXNpemVkQml0bWFwKGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0lSZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNl
dFRyYW5zZm9ybWVkUm91bmRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFsbG93Q2FjaGluZ1N1YnNldCk7CiAKICAgICAgICAgICAgIC8v
IENvbXB1dGUgd2hlcmUgdGhlIG5ldyBiaXRtYXAgc2hvdWxkIGJlIGRyYXduLiBTaW5jZSBvdXIg
bmV3IGJpdG1hcAogICAgICAgICAgICAgLy8gbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2lu
YWwsIHdlIGhhdmUgdG8gc2hpZnQgaXQgb3ZlciBieSB0aGUKQEAgLTM4Nyw3ICszODUsNyBAQCB2
b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgICAg
ICAgICAmJiAoYml0bWFwLT5oYXNSZXNpemVkQml0bWFwKHdpZHRoLCBoZWlnaHQpCiAgICAgICAg
ICAgICAgICAgfHwgYml0bWFwLT5zaG91bGRDYWNoZVJlc2FtcGxpbmcod2lkdGgsIGhlaWdodCwg
d2lkdGgsIGhlaWdodCkpKSB7CiAgICAgICAgICAgICAvLyByZXNpemVkQml0bWFwKCkgY2FjaGVz
IHJlc2l6ZWQgaW1hZ2UuCi0gICAgICAgICAgICByZXNhbXBsZWQgPSBiaXRtYXAtPnJlc2l6ZWRC
aXRtYXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICByZXNhbXBsZWQgPSBiaXRtYXAtPnJl
c2l6ZWRCaXRtYXAod2lkdGgsIGhlaWdodCwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICByZXNhbXBsZWQgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzcmNTdWJz
ZXQsCiAgICAgICAgICAgICAgICAgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pP
UzMsIHdpZHRoLCBoZWlnaHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCmluZGV4IGYwZjRhYTIxNTcwYzA1
ZGU3ZDQ0NTEzMWFmMThhMzI1ZTk0OWIzMGQuLmI1YjI1OTVjZTkxZDNkNzgzMTdlMjNhMGZjMjcx
NzlkNGE0NzlkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKQEAgLTQwLDcgKzQwLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgpCiAgICAg
OiBtX2lzRGF0YUNvbXBsZXRlKGZhbHNlKSwKLSAgICAgIG1fbGFzdFJlcXVlc3RTaXplKDAsIDAp
LAogICAgICAgbV9yZXNpemVSZXF1ZXN0cygwKQogewogfQpAQCAtNDgsNyArNDcsNiBAQCBOYXRp
dmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgpCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUlt
YWdlU2tpYShjb25zdCBTa0JpdG1hcCYgb3RoZXIpCiAgICAgOiBTa0JpdG1hcChvdGhlciksCiAg
ICAgICBtX2lzRGF0YUNvbXBsZXRlKGZhbHNlKSwKLSAgICAgIG1fbGFzdFJlcXVlc3RTaXplKDAs
IDApLAogICAgICAgbV9yZXNpemVSZXF1ZXN0cygwKQogewogfQpAQCAtNjMsMjUgKzYxLDcxIEBA
IGludCBOYXRpdmVJbWFnZVNraWE6OmRlY29kZWRTaXplKCkgY29uc3QKICAgICByZXR1cm4gZ2V0
U2l6ZSgpICsgbV9yZXNpemVkSW1hZ2UuZ2V0U2l6ZSgpOwogfQogCitOYXRpdmVJbWFnZVNraWE6
OkNhY2hlZEltYWdlSW5mbzo6Q2FjaGVkSW1hZ2VJbmZvKCkKK3sKKyAgICBzcmNTdWJzZXQuc2V0
RW1wdHkoKTsKKyAgICBkZXN0U3Vic2V0LnNldEVtcHR5KCk7Cit9CisKK2Jvb2wgTmF0aXZlSW1h
Z2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OmlzRXF1YWwoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBj
b25zdAoreworICAgIHJldHVybiByZXF1ZXN0U2l6ZS53aWR0aCgpID09IHdpZHRoCisgICAgICAg
ICYmIHJlcXVlc3RTaXplLmhlaWdodCgpID09IGhlaWdodAorICAgICAgICAmJiBzcmNTdWJzZXQu
aXNFbXB0eSgpCisgICAgICAgICYmIGRlc3RTdWJzZXQuaXNFbXB0eSgpOworfQorCitib29sIE5h
dGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjppc0VxdWFsKGludCB3aWR0aCwgaW50IGhl
aWdodCwgY29uc3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIG90aGVy
RGVzdFN1YnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVxdWVzdFNpemUud2lkdGgoKSA9PSB3
aWR0aAorICAgICAgICAmJiByZXF1ZXN0U2l6ZS5oZWlnaHQoKSA9PSBoZWlnaHQKKyAgICAgICAg
JiYgc3JjU3Vic2V0ID09IG90aGVyU3JjU3Vic2V0CisgICAgICAgICYmIGRlc3RTdWJzZXQgPT0g
b3RoZXJEZXN0U3Vic2V0OworfQorCit2b2lkIE5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJ
bmZvOjpzZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTa0lSZWN0JiBvdGhlclNyY1N1
YnNldCwgY29uc3QgU2tJUmVjdCYgb3RoZXJEZXN0U3Vic2V0KQoreworICAgIHJlcXVlc3RTaXpl
LnNldFdpZHRoKHdpZHRoKTsKKyAgICByZXF1ZXN0U2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsKKyAg
ICBzcmNTdWJzZXQgPSBvdGhlclNyY1N1YnNldDsKKyAgICBkZXN0U3Vic2V0ID0gb3RoZXJEZXN0
U3Vic2V0OworfQorCiBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChpbnQg
dywgaW50IGgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fbGFzdFJlcXVlc3RTaXplLndpZHRoKCkgPT0g
dyAmJiBtX2xhc3RSZXF1ZXN0U2l6ZS5oZWlnaHQoKSA9PSBoKQotICAgICAgICBtX3Jlc2l6ZVJl
cXVlc3RzKys7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fbGFzdFJlcXVlc3RTaXplID0gSW50U2l6
ZSh3LCBoKTsKLSAgICAgICAgbV9yZXNpemVSZXF1ZXN0cyA9IDA7Ci0gICAgfQorICAgIHJldHVy
biBtX2NhY2hlZEltYWdlSW5mby5pc0VxdWFsKHcsIGgpCisgICAgICAgICAgICYmIG1fcmVzaXpl
ZEltYWdlLndpZHRoKCkgPT0gdyAmJiBtX3Jlc2l6ZWRJbWFnZS5oZWlnaHQoKSA9PSBoOworfQog
Ci0gICAgcmV0dXJuIG1fcmVzaXplZEltYWdlLndpZHRoKCkgPT0gdyAmJiBtX3Jlc2l6ZWRJbWFn
ZS5oZWlnaHQoKSA9PSBoOworYm9vbCBOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAo
aW50IHcsIGludCBoLCBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIGRl
c3RTdWJzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkSW1hZ2VJbmZvLmlzRXF1YWwo
dywgaCwgc3JjU3Vic2V0LCBkZXN0U3Vic2V0KQorICAgICAgICAgICAmJiBtX3Jlc2l6ZWRJbWFn
ZS53aWR0aCgpID09IHcgJiYgbV9yZXNpemVkSW1hZ2UuaGVpZ2h0KCkgPT0gaDsKIH0KIAotLy8g
RklYTUU6IGRvbid0IGNhY2hlIHdoZW4gaW1hZ2UgaXMgaW4tcHJvZ3Jlc3MuCitTa0JpdG1hcCBO
YXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoaW50IHcsIGludCBoLCBib29sIGFsbG93Q2Fj
aGluZykgY29uc3QKK3sKKyAgICBpZiAoaGFzUmVzaXplZEJpdG1hcCh3LCBoKSkKKyAgICAgICAg
cmV0dXJuIG1fcmVzaXplZEltYWdlOworCisgICAgaWYgKCFtX2lzRGF0YUNvbXBsZXRlIHx8ICFh
bGxvd0NhY2hpbmcpCisgICAgICAgIHJldHVybiBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6
ZSgqdGhpcywgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHcsIGgpOwog
Ci1Ta0JpdG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoaW50IHcsIGludCBoKSBj
b25zdAorICAgIG1fcmVzaXplZEltYWdlID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUo
KnRoaXMsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCB3LCBoKTsKKyAg
ICByZXR1cm4gbV9yZXNpemVkSW1hZ2U7Cit9CisKK1NrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6
cmVzaXplZEJpdG1hcChpbnQgdywgaW50IGgsIGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwgY29u
c3QgU2tJUmVjdCYgZGVzdFN1YnNldCwgYm9vbCBhbGxvd0NhY2hpbmcpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fcmVzaXplZEltYWdlLndpZHRoKCkgIT0gdyB8fCBtX3Jlc2l6ZWRJbWFnZS5oZWlnaHQo
KSAhPSBoKQotICAgICAgICBtX3Jlc2l6ZWRJbWFnZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6
UmVzaXplKCp0aGlzLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgdywg
aCk7CisgICAgaWYgKGhhc1Jlc2l6ZWRCaXRtYXAodywgaCwgc3JjU3Vic2V0LCBkZXN0U3Vic2V0
KSkKKyAgICAgICAgcmV0dXJuIG1fcmVzaXplZEltYWdlOworCisgICAgU2tCaXRtYXAgc3Vic2V0
OworICAgIGV4dHJhY3RTdWJzZXQoJnN1YnNldCwgc3JjU3Vic2V0KTsKKyAgICBpZiAoIW1faXNE
YXRhQ29tcGxldGUgfHwgIWFsbG93Q2FjaGluZykKKyAgICAgICAgcmV0dXJuIHNraWE6OkltYWdl
T3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVf
TEFOQ1pPUzMsIHcsIGgsIGRlc3RTdWJzZXQpOwogCisgICAgbV9yZXNpemVkSW1hZ2UgPSBza2lh
OjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzdWJzZXQsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6
UkVTSVpFX0xBTkNaT1MzLCB3LCBoLCBkZXN0U3Vic2V0KTsKICAgICByZXR1cm4gbV9yZXNpemVk
SW1hZ2U7CiB9CiAKQEAgLTkwLDYgKzEzNCwzOSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hv
dWxkQ2FjaGVSZXNhbXBsaW5nKGludCBkZXN0V2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0V2lkdGgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0KSBjb25z
dAogeworICAgIFNrSVJlY3Qgc3JjU3Vic2V0LCBkZXN0U3Vic2V0OworICAgIHNyY1N1YnNldC5z
ZXRFbXB0eSgpOworICAgIGRlc3RTdWJzZXQuc2V0RW1wdHkoKTsKKyAgICByZXR1cm4gc2hvdWxk
Q2FjaGVSZXNhbXBsaW5nSW50ZXJuYWwoZGVzdFdpZHRoLCBkZXN0SGVpZ2h0LCBkZXN0U3Vic2V0
V2lkdGgsIGRlc3RTdWJzZXRIZWlnaHQsIHNyY1N1YnNldCwgZGVzdFN1YnNldCk7Cit9CisKK2Jv
b2wgTmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RIZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNr
SVJlY3QmIHNyY1N1YnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2hv
dWxkQ2FjaGVSZXNhbXBsaW5nSW50ZXJuYWwoZGVzdFdpZHRoLCBkZXN0SGVpZ2h0LCBkZXN0V2lk
dGgsIGRlc3RIZWlnaHQsIHNyY1N1YnNldCwgZGVzdFN1YnNldCk7Cit9CisKK2Jvb2wgTmF0aXZl
SW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxpbmdJbnRlcm5hbChpbnQgZGVzdFdpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZXN0SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZXN0U3Vic2V0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRIZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYg
c3JjU3Vic2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNvbnN0Cit7CisgICAgLy8gQ2hlY2sg
d2hldGhlciB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnMgbWF0Y2ggcHJldmlvdXMgcmVxdWVzdC4K
KyAgICBib29sIG1hdGNoZXNQcmV2aW91c1JlcXVlc3QgPSBtX2NhY2hlZEltYWdlSW5mby5pc0Vx
dWFsKGRlc3RXaWR0aCwgZGVzdEhlaWdodCwgc3JjU3Vic2V0LCBkZXN0U3Vic2V0KTsKKyAgICBp
ZiAobWF0Y2hlc1ByZXZpb3VzUmVxdWVzdCkKKyAgICAgICAgKyttX3Jlc2l6ZVJlcXVlc3RzOwor
ICAgIGVsc2UgeworICAgICAgICBtX2NhY2hlZEltYWdlSW5mby5zZXQoZGVzdFdpZHRoLCBkZXN0
SGVpZ2h0LCBzcmNTdWJzZXQsIGRlc3RTdWJzZXQpOworICAgICAgICBtX3Jlc2l6ZVJlcXVlc3Rz
ID0gMDsKKyAgICAgICAgLy8gUmVzZXQgbV9yZXNpemVkSW1hZ2Ugbm93LCBiZWNhdXNlIHdlIGRv
bid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlCisgICAgICAgIC8vIGxhc3QgcmVxdWVzdGVkIHJl
c2l6ZSBpbmZvIGFuZCBtX3Jlc2l6ZWRJbWFnZSdzIHJlc2l6ZSBpbmZvLgorICAgICAgICBtX3Jl
c2l6ZWRJbWFnZS5yZXNldCgpOworICAgIH0KKwogICAgIC8vIFdlIGNhbiBub3QgY2FjaGUgaW5j
b21wbGV0ZSBmcmFtZXMuIFRoaXMgbWlnaHQgYmUgYSBnb29kIG9wdGltaXphdGlvbiBpbgogICAg
IC8vIHRoZSBmdXR1cmUsIHdlcmUgd2Uga25vdyBob3cgbXVjaCBvZiB0aGUgZnJhbWUgaGFzIGJl
ZW4gZGVjb2RlZCwgc28gd2hlbgogICAgIC8vIHdlIGluY3JlbWVudGFsbHkgZHJhdyBtb3JlIG9m
IHRoZSBpbWFnZSwgd2Ugb25seSBoYXZlIHRvIHJlc2FtcGxlIHRoZQpAQCAtMTA2LDE1ICsxODMs
OSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKGludCBkZXN0
V2lkdGgsCiAgICAgLy8gSWYgInRvbyBtYW55IiByZXF1ZXN0cyBoYXZlIGJlZW4gbWFkZSBmb3Ig
dGhpcyBiaXRtYXAsIHdlIGFzc3VtZSB0aGF0CiAgICAgLy8gbWFueSBtb3JlIHdpbGwgYmUgbWFk
ZSBhcyB3ZWxsLCBhbmQgd2UnbGwgZ28gYWhlYWQgYW5kIGNhY2hlIGl0LgogICAgIHN0YXRpYyBj
b25zdCBpbnQga01hbnlSZXF1ZXN0VGhyZXNob2xkID0gNDsKLSAgICBpZiAobV9sYXN0UmVxdWVz
dFNpemUud2lkdGgoKSA9PSBkZXN0V2lkdGggJiYKLSAgICAgICAgbV9sYXN0UmVxdWVzdFNpemUu
aGVpZ2h0KCkgPT0gZGVzdEhlaWdodCkgeworICAgIGlmIChtYXRjaGVzUHJldmlvdXNSZXF1ZXN0
KSB7CiAgICAgICAgIGlmIChtX3Jlc2l6ZVJlcXVlc3RzID49IGtNYW55UmVxdWVzdFRocmVzaG9s
ZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdo
ZW4gYSBkaWZmZXJlbnQgc2l6ZSBpcyBiZWluZyByZXF1ZXN0ZWQsIGNvdW50IHRoaXMgYXMgYSBx
dWVyeQotICAgICAgICAvLyAoaGFzUmVzaXplZEJpdG1hcCkgYW5kIHJlc2V0IHRoZSBjb3VudGVy
LgotICAgICAgICBtX2xhc3RSZXF1ZXN0U2l6ZSA9IEludFNpemUoZGVzdFdpZHRoLCBkZXN0SGVp
Z2h0KTsKLSAgICAgICAgbV9yZXNpemVSZXF1ZXN0cyA9IDA7CiAgICAgfQogCiAgICAgLy8gT3Ro
ZXJ3aXNlLCB1c2UgdGhlIGhldXJpc3RpYyB0aGF0IGlmIG1vcmUgdGhhbiAxLzQgb2YgdGhlIGlt
YWdlIGlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L05hdGl2ZUltYWdlU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9OYXRpdmVJbWFnZVNraWEuaAppbmRleCAwMGIwYTY4NTA2NWI0MjdkYTExYzk0YWRkZDY1YWE5
M2U0ZmNkYWQ0Li4xOTkzYjNkZTcyMzIzMGI4ZDM4MjkyNDdhYTZmY2QzZGZhZjYyZGQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdl
U2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZl
SW1hZ2VTa2lhLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgTmF0aXZlSW1hZ2VTa2lhX2gK
IAogI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NiwxNSArNjcsMjcgQEAgcHVi
bGljOgogICAgIC8vIGdpdmVuIGltYWdlIHN1YnNldCB3aXRoIHRoZSBnaXZlbiBkaW1lbnNpb25z
LgogICAgIGJvb2wgaGFzUmVzaXplZEJpdG1hcChpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0
OwogCisgICAgLy8gV2UgY2FuIGtlZXAgYSByZXNpemVkIHZlcnNpb24gb2YgdGhlIGJpdG1hcCBj
YWNoZWQgb24gdGhpcyBvYmplY3QuCisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0
cnVlIGlmIHRoZXJlIGlzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlCisgICAgLy8gZ2l2ZW4gaW1h
Z2Ugc3Vic2V0IHdpdGggdGhlIGdpdmVuIGRpbWVuc2lvbnMgYW5kIHN1YnNldHMuCisgICAgYm9v
bCBoYXNSZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU2tJUmVjdCYg
c3JjU3Vic2V0LCBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0KSBjb25zdDsKKwogICAgIC8vIFRo
aXMgd2lsbCByZXR1cm4gYW4gZXhpc3RpbmcgcmVzaXplZCBpbWFnZSwgb3IgZ2VuZXJhdGUgYSBu
ZXcgb25lIG9mCi0gICAgLy8gdGhlIHNwZWNpZmllZCBzaXplIGFuZCBzdG9yZSBpdCBpbiB0aGUg
Y2FjaGUuIFN1YnNldHRlZCBpbWFnZXMgY2FuIG5vdAotICAgIC8vIGJlIGNhY2hlZCB1bmxlc3Mg
dGhlIHN1YnNldCBpcyB0aGUgZW50aXJlIGJpdG1hcC4KLSAgICBTa0JpdG1hcCByZXNpemVkQml0
bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7CisgICAgLy8gdGhlIHNwZWNpZmllZCBz
aXplIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUgaWYgYWxsb3dDYWNoaW5nIGlzIHRydWUuCisg
ICAgU2tCaXRtYXAgcmVzaXplZEJpdG1hcChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgYWxs
b3dDYWNoaW5nKSBjb25zdDsKKworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gYW4gZXhpc3Rpbmcg
cmVzaXplZCBpbWFnZSBzdWJzZXQsIG9yIGdlbmVyYXRlIGEgbmV3IG9uZQorICAgIC8vIG9mIHRo
ZSBzcGVjaWZpZWQgc2l6ZSBhbmQgc3Vic2V0cyBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlIGlm
CisgICAgLy8gYWxsb3dDYWNoaW5nIGlzIHRydWUuCisgICAgU2tCaXRtYXAgcmVzaXplZEJpdG1h
cChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwgY29uc3Qg
U2tJUmVjdCYgZGVzdFN1YnNldCwgYm9vbCBhbGxvd0NhY2hpbmcpIGNvbnN0OwogCiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiByZXNpemUgb3BlcmF0aW9uIHNob3VsZCBlaXRoZXIg
cmVzaXplIHRoZSB3aG9sZQogICAgIC8vIGltYWdlIGFuZCBjYWNoZSBpdCwgb3IgcmVzaXplIGp1
c3QgdGhlIHBhcnQgaXQgbmVlZHMgYW5kIHRocm93IHRoZSByZXN1bHQKICAgICAvLyBhd2F5Lgog
ICAgIC8vCisgICAgLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG1heSBpbmNyZW1lbnQgYSByZXF1
ZXN0IGNvdW50IHRoYXQgY2FuIGNoYW5nZSB0aGUKKyAgICAvLyByZXN1bHQgb2Ygc3Vic2VxdWVu
dCBjYWxscy4KKyAgICAvLwogICAgIC8vIE9uIHRoZSBvbmUgaGFuZCwgaWYgb25seSBhIHNtYWxs
IHN1YnNldCBpcyBkZXNpcmVkLCB0aGVuIHdlIHdpbGwgd2FzdGUgYQogICAgIC8vIGxvdCBvZiB0
aW1lIHJlc2FtcGxpbmcgdGhlIGVudGlyZSB0aGluZywgc28gd2Ugb25seSB3YW50IHRvIGRvIGV4
YWN0bHkKICAgICAvLyB3aGF0J3MgcmVxdWlyZWQuIE9uIHRoZSBvdGhlciBoYW5kLCByZXNhbXBs
aW5nIHRoZSBlbnRpcmUgYml0bWFwIGlzCkBAIC04Niw3ICs5OSwzOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFN1YnNldEhlaWdodCkgY29uc3Q7CiAKKyAg
ICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgZm9yIGNyb3BwZWQgaW1hZ2VzLgorICAgIGJvb2wgc2hv
dWxkQ2FjaGVSZXNhbXBsaW5nKGludCBkZXN0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGRlc3RIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNvbnN0OworCiBwcml2YXRlOgorICAgIC8vIENh
Y2hlZEltYWdlSW5mbyBpcyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGNhY2hlZCBvciByZXF1
ZXN0ZWQgaW1hZ2UKKyAgICAvLyByZXNpemVzLgorICAgIHN0cnVjdCBDYWNoZWRJbWFnZUluZm8g
eworCisgICAgICAgIEludFNpemUgcmVxdWVzdFNpemU7CisgICAgICAgIFNrSVJlY3Qgc3JjU3Vi
c2V0OworICAgICAgICBTa0lSZWN0IGRlc3RTdWJzZXQ7CisKKyAgICAgICAgQ2FjaGVkSW1hZ2VJ
bmZvKCk7CisKKyAgICAgICAgYm9vbCBpc0VxdWFsKGludCB3aWR0aCwgaW50IGhlaWdodCkgY29u
c3Q7CisgICAgICAgIGJvb2wgaXNFcXVhbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFNr
SVJlY3QmIG90aGVyU3JjU3Vic2V0LCBjb25zdCBTa0lSZWN0JiBvdGhlckRlc3RTdWJzZXQpIGNv
bnN0OworCisgICAgICAgIHZvaWQgc2V0KGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgICAg
IHZvaWQgc2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU2tJUmVjdCYgb3RoZXJTcmNT
dWJzZXQsIGNvbnN0IFNrSVJlY3QmIG90aGVyRGVzdFN1YnNldCk7CisgICAgfTsKKworICAgIC8v
IFNoYXJlZCBsb2dpYyBmb3IgZGVjaWRpbmcgd2hldGhlciBhIHJlc2l6ZSBvcGVyYXRpb24gc2hv
dWxkIGJlIGNhY2hlZC4KKyAgICBib29sIHNob3VsZENhY2hlUmVzYW1wbGluZ0ludGVybmFsKGlu
dCBkZXN0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZXN0U3Vic2V0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVzdFN1YnNldEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNvbnN0OworCiAgICAgLy8g
U2V0IHRvIHRydWUgd2hlbiB0aGUgZGF0YSBpcyBjb21wbGV0ZS4gQmVmb3JlIHRoZSBlbnRpcmUg
aW1hZ2UgaGFzCiAgICAgLy8gbG9hZGVkLCB3ZSBkbyBub3Qgd2FudCB0byBjYWNoZSBhIHJlc2l6
ZS4KICAgICBib29sIG1faXNEYXRhQ29tcGxldGU7CkBAIC05NywxNCArMTQxLDE3IEBAIHByaXZh
dGU6CiAgICAgLy8gUmVmZXJlbmNlcyBob3cgbWFueSB0aW1lcyB0aGF0IHRoZSBpbWFnZSBzaXpl
IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IKICAgICAvLyB0aGUgbGFzdCBzaXplLgogICAgIC8vCi0g
ICAgLy8gRXZlcnkgdGltZSB3ZSBnZXQgYSByZXF1ZXN0LCBpZiBpdCBtYXRjaGVzIHRoZSBtX2xh
c3RSZXF1ZXN0U2l6ZSwgd2UnbGwKLSAgICAvLyBpbmNyZW1lbnQgdGhlIGNvdW50ZXIsIGFuZCBp
ZiBub3QsIHdlJ2xsIHJlc2V0IHRoZSBjb3VudGVyIGFuZCBzYXZlIHRoZQotICAgIC8vIHNpemUu
CisgICAgLy8gRXZlcnkgdGltZSB3ZSBnZXQgYSBjYWxsIHRvIHNob3VsZENhY2hlUmVzYW1wbGlu
ZywgaWYgaXQgbWF0Y2hlcyB0aGUKKyAgICAvLyBtX2NhY2hlZEltYWdlSW5mbywgd2UnbGwgaW5j
cmVtZW50IHRoZSBjb3VudGVyLCBhbmQgaWYgbm90LCB3ZSdsbCByZXNldAorICAgIC8vIHRoZSBj
b3VudGVyIGFuZCBzYXZlIHRoZSBkaW1lbnNpb25zLgogICAgIC8vCiAgICAgLy8gVGhpcyBhbGxv
d3MgdXMgdG8gc2VlIGlmIG1hbnkgcmVxdWVzdHMgaGF2ZSBiZWVuIG1hZGUgZm9yIHRoZSBzYW1l
CiAgICAgLy8gcmVzaXplZCBpbWFnZSwgd2Uga25vdyB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSBj
YWNoZSBpdCwgZXZlbiBpZiBhbGwgb2YKICAgICAvLyB0aG9zZSByZXF1ZXN0cyBpbmRpdmlkdWFs
bHkgYXJlIHNtYWxsIGFuZCB3b3VsZCBub3Qgb3RoZXJ3aXNlIGJlIGNhY2hlZC4KLSAgICBtdXRh
YmxlIEludFNpemUgbV9sYXN0UmVxdWVzdFNpemU7CisgICAgLy8KKyAgICAvLyBXZSBhbHNvIHRy
YWNrIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHN1YnNldHMgZm9yIGNhY2hpbmcgcGFydGlh
bAorICAgIC8vIGltYWdlIHJlc2l6ZXMuCisgICAgbXV0YWJsZSBDYWNoZWRJbWFnZUluZm8gbV9j
YWNoZWRJbWFnZUluZm87CiAgICAgbXV0YWJsZSBpbnQgbV9yZXNpemVSZXF1ZXN0czsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104553</attachid>
            <date>2011-08-19 13:27:24 -0700</date>
            <delta_ts>2011-08-19 19:35:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65587-20110819132723.patch</filename>
            <type>text/plain</type>
            <size>24008</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBkZjY1ZjA3MTNiYjIzNzg0MWFl
ZDljOTViMDgzODhiZGJlZjM1ZTVlLi4zYjM5YTEzZjFmMzc0MjliMjNhYzVlNDM4NmU3ODQzMDQw
MWZiMDg3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CkBAIC0zNjMzLDYgKzM2MzMsMTAgQEAgQlVHV0s2NTQ1MyBNQUMgOiBm
YXN0L2Nzcy9vdXRsaW5lLWF1dG8tZW1wdHktcmVjdHMuaHRtbCA9IElNQUdFCiAKIEJVR1dLNjU0
NjIgVklTVEEgOiBodHRwL3Rlc3RzL2NhY2hlL2hpc3Rvcnktb25seS1jYWNoZWQtc3VicmVzb3Vy
Y2UtbG9hZHMtbWF4LWFnZS1odHRwcy5odG1sID0gUEFTUyBUSU1FT1VUCiAKKy8vIE5lZWRzIG5l
dyBiYXNlbGluZXMgZm9yIGNoYW5nZSB0byBpbWFnZSByZXNpemUgY2FjaGluZyBjb2RlLgorQlVH
V0s2NTU4NyA6IHN2Zy9keW5hbWljLXVwZGF0ZXMvU1ZHRkVJbWFnZUVsZW1lbnQtZG9tLXByZXNl
cnZlQXNwZWN0UmF0aW8tYXR0ci5odG1sID0gSU1BR0UKK0JVR1dLNjU1ODcgOiBzdmcvZHluYW1p
Yy11cGRhdGVzL1NWR0ZFSW1hZ2VFbGVtZW50LXN2Z2RvbS1wcmVzZXJ2ZUFzcGVjdFJhdGlvLXBy
b3AuaHRtbCA9IElNQUdFCisKIC8vIEludHJvZHVjZWQgaW4gcjkyMjk4LCB3aGljaCBtaWdodCBj
YXVzZSBhbm90aGVyIHRlc3QgY3Jhc2hpbmcuCiBCVUdaTU8gU0tJUCA6IGZhc3QvbG9hZGVyL3Jl
bG9hZC16ZXJvLWJ5dGUtcGx1Z2luLmh0bWwgPSBGQUlMCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhODI4Y2Vj
MDAzMjMxNzQ3MWE3YThiMTg3MWU1M2JlMWM1ZmIxNjNmLi5mMzE3OGNhZWI3OTE3ZjNlZjRhMDU1
MDY3Nzc1N2Q4OTQ0NWE3YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDgt
MTcgIEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnRl
ZCBza2lhIHN1cHBvcnQgZm9yIGNhY2hpbmcgcmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTg3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwg
cmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcyB3b3VsZCBub3QgYmUgY2FjaGVkLiBUaGlzIGNhdXNl
cyB2YXJpb3VzIHdlYnNpdGVzIHRvIGhhdmUgamFua3kgQ1NTIGFuaW1hdGlvbnMgaW4gc29mdHdh
cmUgY29tcG9zaXRpbmcgbW9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZXNhbXBsZWRCaXRtYXApOiBD
aGFuZ2VkIHRvIHVzZSBuZXcgQVBJcyBmb3Igc3Vic2V0IGNhY2hpbmcuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOiBBZGRlZCBhbGxvd0NhY2hpbmcgcGFyYW1ldGVyLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFn
ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUlu
Zm86OmlzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJ
bWFnZUluZm86OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6Omhhc1Jl
c2l6ZWRCaXRtYXApOiBDaGFuZ2VkIHRoaXMgbWV0aG9kIHNvIHRoYXQgaXQgZG9lcyBub3QgbW9k
aWZ5IGNhY2hpbmcgZGF0YS4gQWRkZWQgYSBzZWNvbmQgdmVyc2lvbiB1c2VkIGZvciBjcm9wcGVk
IGltYWdlIHJlc2l6ZXMuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OnJlc2l6
ZWRCaXRtYXApOiBBZGRlZCBwYXJhbWV0ZXIgdG8gbGV0IGNhbGxlciBzcGVjaWZ5IHdoZXRoZXIg
Y2FjaGluZyBpcyBhbGxvd2VkLgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpz
aG91bGRDYWNoZVJlc2FtcGxpbmcpOiBBZGRlZCBhIHNlY29uZCB2ZXJzaW9uIHVzZWQgZm9yIGNy
b3BwZWQgaW1hZ2UgcmVzaXplcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6
c2hvdWxkQ2FjaGVSZXNhbXBsaW5nSW50ZXJuYWwpOiBCb3RoIHNob3VsZENhY2hlUmVzYW1wbGlu
ZyBtZXRob2RzIGNhbGwgZG93biB0byB0aGlzIGZvciB0aGUgc2hhcmVkIGxvZ2ljLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmg6IEFkZGVkIENhY2hl
ZEltYWdlSW5mbyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgY2FjaGVkIG9yIHJlcXVlc3RlZCBp
bWFnZSByZXNpemUgb3BlcmF0aW9uLgorCiAyMDExLTA4LTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxq
b2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBDaHJvbWl1bSBXaW5kb3dz
IGJ1aWxkIGZpeCBhZnRlciByOTMxNDAuIFRha2UgNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCBhZjFiNjM3YjY4YTg3
MTMyOGM4MzhlNWQzZDhjMjM5MGZkN2MxMjQyLi4xODgyNTRjNWUzMTFjN2M0YzIyZTMxYWZiNDE2
YzNiZjllZDA1OGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwCkBAIC0xNjEsMjUgKzE2MSwyMCBAQCBzdGF0aWMgUmVzYW1w
bGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRm
b3JtQ29udGV4dAogLy8gc2Nyb2xsaW5nLCBmb3IgZXhhbXBsZSwgd2UgYXJlIG9ubHkgZHJhd2lu
ZyBhIHNtYWxsIHN0cmlwIG9mIHRoZSBpbWFnZS4KIC8vIFJlc2FtcGxpbmcgdGhlIHdob2xlIGlt
YWdlIGV2ZXJ5IHRpbWUgaXMgdmVyeSBzbG93LCBzbyB0aGlzIHNwZWVkcyB1cCB0aGluZ3MKIC8v
IGRyYW1hdGljYWxseS4KLXN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMm
IGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBj
b25zdCBTa0lSZWN0JiBzcmNJUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCkKKy8vCisvLyBO
b3RlOiB0aGlzIGNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIGNhbnZhcyB0cmFuc2Zvcm1hdGlv
biBpcyBsaW1pdGVkIHRvCisvLyBzY2FsaW5nIG9yIHRyYW5zbGF0aW9uLgorc3RhdGljIHZvaWQg
ZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0NhbnZhcyYgY2FudmFzLCBTa1BhaW50JiBwYWludCwgY29u
c3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNrSVJlY3QmIHNyY0lSZWN0UmF3LCBj
b25zdCBTa1JlY3QmIGRlc3RSZWN0KQogewotICAgIC8vIEZpcnN0IGdldCB0aGUgc3Vic2V0IHdl
IG5lZWQuIFRoaXMgaXMgZWZmaWNpZW50IGFuZCBkb2VzIG5vdCBjb3B5IHBpeGVscy4KLSAgICBT
a0JpdG1hcCBzdWJzZXQ7Ci0gICAgYml0bWFwLmV4dHJhY3RTdWJzZXQoJnN1YnNldCwgc3JjSVJl
Y3QpOwotICAgIFNrUmVjdCBzcmNSZWN0OwotICAgIHNyY1JlY3Quc2V0KHNyY0lSZWN0KTsKKyAg
ICBTa0lSZWN0IHNyY0lSZWN0ID0gc3JjSVJlY3RSYXc7CisgICAgaWYgKCFzcmNJUmVjdC5pbnRl
cnNlY3QoMCwgMCwgYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSkpCisgICAgICAgIHJl
dHVybjsgLy8gVGhlIHNyY0lSZWN0IGlzIG91dHNpZGUgdGhlIGltYWdlLCBzbyBub3RoaW5nIHRv
IGRyYXcuCiAKICAgICAvLyBXaGV0aGVyIHdlJ3JlIGRvaW5nIGEgc3Vic2V0IG9yIHVzaW5nIHRo
ZSBmdWxsIHNvdXJjZSBpbWFnZS4KICAgICBib29sIHNyY0lzRnVsbCA9IHNyY0lSZWN0LmZMZWZ0
ID09IDAgJiYgc3JjSVJlY3QuZlRvcCA9PSAwCiAgICAgICAgICYmIHNyY0lSZWN0LndpZHRoKCkg
PT0gYml0bWFwLndpZHRoKCkKICAgICAgICAgJiYgc3JjSVJlY3QuaGVpZ2h0KCkgPT0gYml0bWFw
LmhlaWdodCgpOwogCi0gICAgLy8gV2Ugd2lsbCBhbHdheXMgZHJhdyBpbiBpbnRlZ2VyIHNpemVz
LCBzbyByb3VuZCB0aGUgZGVzdGluYXRpb24gcmVjdC4KLSAgICBTa0lSZWN0IGRlc3RSZWN0Um91
bmRlZDsKLSAgICBkZXN0UmVjdC5yb3VuZCgmZGVzdFJlY3RSb3VuZGVkKTsKLSAgICBTa0lSZWN0
IHJlc2l6ZWRJbWFnZVJlY3QgPSAgLy8gUmVwcmVzZW50cyB0aGUgc2l6ZSBvZiB0aGUgcmVzaXpl
ZCBpbWFnZS4KLSAgICAgICAgeyAwLCAwLCBkZXN0UmVjdFJvdW5kZWQud2lkdGgoKSwgZGVzdFJl
Y3RSb3VuZGVkLmhlaWdodCgpIH07Ci0KICAgICAvLyBBcHBseSBmb3J3YXJkIHRyYW5zZm9ybSB0
byBkZXN0UmVjdCB0byBlc3RpbWF0ZSByZXF1aXJlZCBzaXplIG9mCiAgICAgLy8gcmUtc2FtcGxl
ZCBiaXRtYXAsIGFuZCB1c2Ugb25seSBpbiBjYWxscyByZXF1aXJlZCB0byByZXNpemUsIG9yIHRo
YXQKICAgICAvLyBjaGVjayBmb3IgdGhlIHJlcXVpcmVkIHNpemUuCkBAIC0xODgsNjkgKzE4Myw1
NSBAQCBzdGF0aWMgdm9pZCBkcmF3UmVzYW1wbGVkQml0bWFwKFNrQ2FudmFzJiBjYW52YXMsIFNr
UGFpbnQmIHBhaW50LCBjb25zdCBOYXRpdmVJbQogICAgIFNrSVJlY3QgZGVzdFJlY3RUcmFuc2Zv
cm1lZFJvdW5kZWQ7CiAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZC5yb3VuZCgmZGVzdFJlY3RUcmFu
c2Zvcm1lZFJvdW5kZWQpOwogCi0gICAgaWYgKHNyY0lzRnVsbCAmJiBiaXRtYXAuaGFzUmVzaXpl
ZEJpdG1hcChkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVjdFRyYW5z
Zm9ybWVkUm91bmRlZC5oZWlnaHQoKSkpIHsKLSAgICAgICAgLy8gWWF5LCB0aGlzIGJpdG1hcCBm
cmFtZSBhbHJlYWR5IGhhcyBhIHJlc2l6ZWQgdmVyc2lvbi4KLSAgICAgICAgU2tCaXRtYXAgcmVz
YW1wbGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQu
d2lkdGgoKSwgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCkpOwotICAgICAgICBj
YW52YXMuZHJhd0JpdG1hcFJlY3QocmVzYW1wbGVkLCAwLCBkZXN0UmVjdCwgJnBhaW50KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIC8vIENvbXB1dGUgdGhlIHZpc2libGUgcG9ydGlv
biBvZiBvdXIgcmVjdC4KLSAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29tcHV0ZSB0aGUgdHJhbnNm
b3JtZWQgcG9ydGlvbiBvZiB0aGUKLSAgICAvLyB2aXNpYmxlIHBvcnRpb24gZm9yIHVzZSBiZWxv
dy4KLSAgICBTa1JlY3QgZGVzdEJpdG1hcFN1YnNldFNrOwotICAgIENsaXBSZWN0VG9DYW52YXMo
Y2FudmFzLCBkZXN0UmVjdCwgJmRlc3RCaXRtYXBTdWJzZXRTayk7Ci0gICAgU2tSZWN0IGRlc3RC
aXRtYXBTdWJzZXRUcmFuc2Zvcm1lZDsKLSAgICBjYW52YXMuZ2V0VG90YWxNYXRyaXgoKS5tYXBS
ZWN0KCZkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQsIGRlc3RCaXRtYXBTdWJzZXRTayk7Ci0g
ICAgZGVzdEJpdG1hcFN1YnNldFNrLm9mZnNldCgtZGVzdFJlY3QuZkxlZnQsIC1kZXN0UmVjdC5m
VG9wKTsKKyAgICBTa1JlY3QgZGVzdFJlY3RWaXNpYmxlU3Vic2V0OworICAgIENsaXBSZWN0VG9D
YW52YXMoY2FudmFzLCBkZXN0UmVjdCwgJmRlc3RSZWN0VmlzaWJsZVN1YnNldCk7CisgICAgLy8g
Q2xpcFJlY3RUb0NhbnZhcyBvZnRlbiBvdmVyc2hvb3RzLCByZXN1bHRpbmcgaW4gYSBsYXJnZXIg
cmVnaW9uIHRoYW4gb3VyCisgICAgLy8gb3JpZ2luYWwgZGVzdFJlY3QuIEludGVyc2VjdGluZyBn
ZXRzIHVzIGJhY2sgaW5zaWRlLgorICAgIGlmICghZGVzdFJlY3RWaXNpYmxlU3Vic2V0LmludGVy
c2VjdChkZXN0UmVjdCkpCisgICAgICAgIHJldHVybjsgLy8gTm90aGluZyB2aXNpYmxlIGluIGRl
c3RSZWN0LgorCisgICAgLy8gQ29tcHV0ZSB0aGUgdHJhbnNmb3JtZWQgKHNjcmVlbiBzcGFjZSkg
cG9ydGlvbiBvZiB0aGUgdmlzaWJsZSBwb3J0aW9uIGZvcgorICAgIC8vIHVzZSBiZWxvdy4KKyAg
ICBTa1JlY3QgZGVzdFJlY3RWaXNpYmxlU3Vic2V0VHJhbnNmb3JtZWQ7CisgICAgY2FudmFzLmdl
dFRvdGFsTWF0cml4KCkubWFwUmVjdCgmZGVzdFJlY3RWaXNpYmxlU3Vic2V0VHJhbnNmb3JtZWQs
IGRlc3RSZWN0VmlzaWJsZVN1YnNldCk7CisgICAgU2tSZWN0IGRlc3RCaXRtYXBTdWJzZXRUcmFu
c2Zvcm1lZCA9IGRlc3RSZWN0VmlzaWJsZVN1YnNldFRyYW5zZm9ybWVkOworICAgIGRlc3RCaXRt
YXBTdWJzZXRUcmFuc2Zvcm1lZC5vZmZzZXQoLWRlc3RSZWN0VHJhbnNmb3JtZWQuZkxlZnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZGVzdFJlY3RUcmFuc2Zvcm1l
ZC5mVG9wKTsKICAgICBTa0lSZWN0IGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQ7
CiAgICAgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkLnJvdW5kKCZkZXN0Qml0bWFwU3Vic2V0
VHJhbnNmb3JtZWRSb3VuZGVkKTsKLSAgICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3Vu
ZGVkLm9mZnNldCgtZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuZkxlZnQsIC1kZXN0UmVjdFRy
YW5zZm9ybWVkUm91bmRlZC5mVG9wKTsKLQotICAgIC8vIFRoZSBtYXRyaXggaW52ZXJ0aW5nLCBl
dGMuIGNvdWxkIGhhdmUgaW50cm9kdWNlZCByb3VuZGluZyBlcnJvciB3aGljaAotICAgIC8vIGNh
dXNlcyB0aGUgYm91bmRzIHRvIGJlIG91dHNpZGUgb2YgdGhlIHJlc2l6ZWQgYml0bWFwLiBXZSBy
b3VuZCBvdXR3YXJkCi0gICAgLy8gc28gd2UgYWx3YXlzIGxlYW4gdG93YXJkIGl0IGJlaW5nIGxh
cmdlciByYXRoZXIgdGhhbiBzbWFsbGVyIHRoYW4gd2UKLSAgICAvLyBuZWVkLCBhbmQgdGhlbiBj
bGFtcCB0byB0aGUgYml0bWFwIGJvdW5kcyBzbyB3ZSBkb24ndCBnZXQgYW55IGludmFsaWQKLSAg
ICAvLyBkYXRhLgotICAgIFNrSVJlY3QgZGVzdEJpdG1hcFN1YnNldFNrSTsKLSAgICBkZXN0Qml0
bWFwU3Vic2V0U2sucm91bmRPdXQoJmRlc3RCaXRtYXBTdWJzZXRTa0kpOwotICAgIGlmICghZGVz
dEJpdG1hcFN1YnNldFNrSS5pbnRlcnNlY3QocmVzaXplZEltYWdlUmVjdCkpCi0gICAgICAgIHJl
dHVybjsgIC8vIFJlc2l6ZWQgaW1hZ2UgZG9lcyBub3QgaW50ZXJzZWN0LgorCisgICAgLy8gVHJh
bnNmb3JtcyBhYm92ZSBwbHVzIHJvdW5kaW5nIG1heSBjYXVzZSBkZXN0Qml0bWFwU3Vic2V0VHJh
bnNmb3JtZWRSb3VuZGVkCisgICAgLy8gdG8gZ28gb3V0c2lkZSB0aGUgaW1hZ2UsIHNvIG5lZWQg
dG8gY2xpcCB0byBhdm9pZCBwcm9ibGVtcy4KKyAgICBpZiAoIWRlc3RCaXRtYXBTdWJzZXRUcmFu
c2Zvcm1lZFJvdW5kZWQuaW50ZXJzZWN0KAorICAgICAgICAgICAgMCwgMCwgZGVzdFJlY3RUcmFu
c2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0
KCkpKQorICAgICAgICByZXR1cm47IC8vIEltYWdlIGlzIG5vdCB2aXNpYmxlLgogCiAgICAgaWYg
KHNyY0lzRnVsbCAmJiBiaXRtYXAuc2hvdWxkQ2FjaGVSZXNhbXBsaW5nKAotICAgICAgICAgICAg
cmVzaXplZEltYWdlUmVjdC53aWR0aCgpLAotICAgICAgICAgICAgcmVzaXplZEltYWdlUmVjdC5o
ZWlnaHQoKSwKLSAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRTa0kud2lkdGgoKSwKLSAgICAg
ICAgICAgIGRlc3RCaXRtYXBTdWJzZXRTa0kuaGVpZ2h0KCkpKSB7CisgICAgICAgICAgICBkZXN0
UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLAorICAgICAgICAgICAgZGVzdFJlY3RUcmFu
c2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCksCisgICAgICAgICAgICBkZXN0Qml0bWFwU3Vic2V0VHJh
bnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCisgICAgICAgICAgICBkZXN0Qml0bWFwU3Vic2V0VHJh
bnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpKSkgewogICAgICAgICAvLyBXZSdyZSBzdXBwb3NlZCB0
byByZXNpemUgdGhlIGVudGlyZSBpbWFnZSBhbmQgY2FjaGUgaXQsIGV2ZW4gdGhvdWdoCiAgICAg
ICAgIC8vIHdlIGRvbid0IG5lZWQgYWxsIG9mIGl0LgorICAgICAgICBib29sIGFsbG93Q2FjaGlu
ZyA9IHRydWU7CiAgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IGJpdG1hcC5yZXNpemVkQml0
bWFwKGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3Vu
ZGVkLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCksIGFsbG93Q2FjaGlu
Zyk7CiAgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0
LCAmcGFpbnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IHJlc2l6
ZSB0aGUgZXhwb3NlZCBwYXJ0IG9mIHRoZSBiaXRtYXAgdG8gZG8gdGhlCiAgICAgICAgIC8vIG1p
bmltYWwgcG9zc2libGUgd29yay4KLQotICAgICAgICAvLyBSZXNhbXBsZSB0aGUgbmVlZGVkIHBh
cnQgb2YgdGhlIGltYWdlLgotICAgICAgICAvLyBUcmFuc2Zvcm1zIGFib3ZlIHBsdXMgcm91bmRp
bmcgbWF5IGNhdXNlIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQKLSAgICAgICAg
Ly8gdG8gZ28gb3V0c2lkZSB0aGUgaW1hZ2UsIHNvIG5lZWQgdG8gY2xpcCB0byBhdm9pZCBwcm9i
bGVtcy4KLSAgICAgICAgaWYgKGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQuaW50
ZXJzZWN0KDAsIDAsCi0gICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQu
d2lkdGgoKSwgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCkpKSB7Ci0KLSAgICAg
ICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXpl
KHN1YnNldCwKLSAgICAgICAgICAgICAgICBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9M
QU5DWk9TMywKLSAgICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0
aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAg
ICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkKTsKLQotICAgICAgICAgICAgLy8g
Q29tcHV0ZSB3aGVyZSB0aGUgbmV3IGJpdG1hcCBzaG91bGQgYmUgZHJhd24uIFNpbmNlIG91ciBu
ZXcgYml0bWFwCi0gICAgICAgICAgICAvLyBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5h
bCwgd2UgaGF2ZSB0byBzaGlmdCBpdCBvdmVyIGJ5IHRoZQotICAgICAgICAgICAgLy8gc2FtZSBh
bW91bnQgdGhhdCB3ZSBjdXQgb2ZmIHRoZSB0b3AgYW5kIGxlZnQuCi0gICAgICAgICAgICBkZXN0
Qml0bWFwU3Vic2V0U2tJLm9mZnNldChkZXN0UmVjdC5mTGVmdCwgZGVzdFJlY3QuZlRvcCk7Ci0g
ICAgICAgICAgICBTa1JlY3Qgb2Zmc2V0RGVzdFJlY3Q7Ci0gICAgICAgICAgICBvZmZzZXREZXN0
UmVjdC5zZXQoZGVzdEJpdG1hcFN1YnNldFNrSSk7Ci0KLSAgICAgICAgICAgIGNhbnZhcy5kcmF3
Qml0bWFwUmVjdChyZXNhbXBsZWQsIDAsIG9mZnNldERlc3RSZWN0LCAmcGFpbnQpOwotICAgICAg
ICB9CisgICAgICAgIGJvb2wgYWxsb3dDYWNoaW5nU3Vic2V0ID0gIXNyY0lzRnVsbAorICAgICAg
ICAgICAgJiYgYml0bWFwLnNob3VsZENhY2hlUmVzYW1wbGluZyhkZXN0UmVjdFRyYW5zZm9ybWVk
Um91bmRlZC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjSVJlY3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJv
dW5kZWQpOworICAgICAgICBTa0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAucmVzaXplZEJpdG1h
cChkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRl
ZC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3JjSVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93Q2FjaGluZ1N1YnNl
dCk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0
VmlzaWJsZVN1YnNldCwgJnBhaW50KTsKICAgICB9CiB9CiAKQEAgLTM4Niw4ICszNjcsOCBAQCB2
b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgICAg
ICAgICAmJiBzcmNSZWN0LmZSaWdodCA9PSBiaXRtYXAtPndpZHRoKCkgJiYgc3JjUmVjdC5mQm90
dG9tID09IGJpdG1hcC0+aGVpZ2h0KCkKICAgICAgICAgICAgICYmIChiaXRtYXAtPmhhc1Jlc2l6
ZWRCaXRtYXAod2lkdGgsIGhlaWdodCkKICAgICAgICAgICAgICAgICB8fCBiaXRtYXAtPnNob3Vs
ZENhY2hlUmVzYW1wbGluZyh3aWR0aCwgaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0KSkpIHsKLSAgICAg
ICAgICAgIC8vIHJlc2l6ZWRCaXRtYXAoKSBjYWNoZXMgcmVzaXplZCBpbWFnZS4KLSAgICAgICAg
ICAgIHJlc2FtcGxlZCA9IGJpdG1hcC0+cmVzaXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgICAgIGJvb2wgYWxsb3dDYWNoaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc2FtcGxl
ZCA9IGJpdG1hcC0+cmVzaXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0LCBhbGxvd0NhY2hpbmcpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzYW1wbGVkID0gc2tpYTo6SW1hZ2VPcGVy
YXRpb25zOjpSZXNpemUoc3JjU3Vic2V0LAogICAgICAgICAgICAgICAgIHNraWE6OkltYWdlT3Bl
cmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCB3aWR0aCwgaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNw
cAppbmRleCBmMGY0YWEyMTU3MGMwNWRlN2Q0NDUxMzFhZjE4YTMyNWU5NDliMzBkLi42MWFlMTlk
MDhmMjIyOWViMWRlYWRiZGExZThkZGVjNTIzMWJiNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCkBA
IC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTmF0aXZlSW1hZ2VTa2lhOjpO
YXRpdmVJbWFnZVNraWEoKQogICAgIDogbV9pc0RhdGFDb21wbGV0ZShmYWxzZSksCi0gICAgICBt
X2xhc3RSZXF1ZXN0U2l6ZSgwLCAwKSwKICAgICAgIG1fcmVzaXplUmVxdWVzdHMoMCkKIHsKIH0K
QEAgLTQ4LDcgKzQ3LDYgQEAgTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoKQogTmF0
aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoY29uc3QgU2tCaXRtYXAmIG90aGVyKQogICAg
IDogU2tCaXRtYXAob3RoZXIpLAogICAgICAgbV9pc0RhdGFDb21wbGV0ZShmYWxzZSksCi0gICAg
ICBtX2xhc3RSZXF1ZXN0U2l6ZSgwLCAwKSwKICAgICAgIG1fcmVzaXplUmVxdWVzdHMoMCkKIHsK
IH0KQEAgLTYzLDI1ICs2MSw3MyBAQCBpbnQgTmF0aXZlSW1hZ2VTa2lhOjpkZWNvZGVkU2l6ZSgp
IGNvbnN0CiAgICAgcmV0dXJuIGdldFNpemUoKSArIG1fcmVzaXplZEltYWdlLmdldFNpemUoKTsK
IH0KIAorTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OkNhY2hlZEltYWdlSW5mbygp
Cit7CisgICAgc3JjU3Vic2V0LnNldEVtcHR5KCk7CisgICAgZGVzdFN1YnNldC5zZXRFbXB0eSgp
OworfQorCitib29sIE5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjppc0VxdWFsKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVxdWVzdFNpemUud2lk
dGgoKSA9PSB3aWR0aAorICAgICAgICAmJiByZXF1ZXN0U2l6ZS5oZWlnaHQoKSA9PSBoZWlnaHQK
KyAgICAgICAgJiYgc3JjU3Vic2V0LmlzRW1wdHkoKQorICAgICAgICAmJiBkZXN0U3Vic2V0Lmlz
RW1wdHkoKTsKK30KKworYm9vbCBOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6aXNF
cXVhbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFNrSVJlY3QmIG90aGVyU3JjU3Vic2V0
LCBjb25zdCBTa0lSZWN0JiBvdGhlckRlc3RTdWJzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJl
cXVlc3RTaXplLndpZHRoKCkgPT0gd2lkdGgKKyAgICAgICAgJiYgcmVxdWVzdFNpemUuaGVpZ2h0
KCkgPT0gaGVpZ2h0CisgICAgICAgICYmIHNyY1N1YnNldCA9PSBvdGhlclNyY1N1YnNldAorICAg
ICAgICAmJiBkZXN0U3Vic2V0ID09IG90aGVyRGVzdFN1YnNldDsKK30KKwordm9pZCBOYXRpdmVJ
bWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6c2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgY29u
c3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIG90aGVyRGVzdFN1YnNl
dCkKK3sKKyAgICByZXF1ZXN0U2l6ZS5zZXRXaWR0aCh3aWR0aCk7CisgICAgcmVxdWVzdFNpemUu
c2V0SGVpZ2h0KGhlaWdodCk7CisgICAgc3JjU3Vic2V0ID0gb3RoZXJTcmNTdWJzZXQ7CisgICAg
ZGVzdFN1YnNldCA9IG90aGVyRGVzdFN1YnNldDsKK30KKwogYm9vbCBOYXRpdmVJbWFnZVNraWE6
Omhhc1Jlc2l6ZWRCaXRtYXAoaW50IHcsIGludCBoKSBjb25zdAogewotICAgIGlmIChtX2xhc3RS
ZXF1ZXN0U2l6ZS53aWR0aCgpID09IHcgJiYgbV9sYXN0UmVxdWVzdFNpemUuaGVpZ2h0KCkgPT0g
aCkKLSAgICAgICAgbV9yZXNpemVSZXF1ZXN0cysrOwotICAgIGVsc2UgewotICAgICAgICBtX2xh
c3RSZXF1ZXN0U2l6ZSA9IEludFNpemUodywgaCk7Ci0gICAgICAgIG1fcmVzaXplUmVxdWVzdHMg
PSAwOwotICAgIH0KKyAgICByZXR1cm4gbV9jYWNoZWRJbWFnZUluZm8uaXNFcXVhbCh3LCBoKQor
ICAgICAgICAgICAmJiBtX3Jlc2l6ZWRJbWFnZS53aWR0aCgpID09IHcgJiYgbV9yZXNpemVkSW1h
Z2UuaGVpZ2h0KCkgPT0gaDsKK30KIAotICAgIHJldHVybiBtX3Jlc2l6ZWRJbWFnZS53aWR0aCgp
ID09IHcgJiYgbV9yZXNpemVkSW1hZ2UuaGVpZ2h0KCkgPT0gaDsKK2Jvb2wgTmF0aXZlSW1hZ2VT
a2lhOjpoYXNSZXNpemVkQml0bWFwKGludCB3LCBpbnQgaCwgY29uc3QgU2tJUmVjdCYgc3JjU3Vi
c2V0LCBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0KSBjb25zdAoreworICAgIHJldHVybiBtX2Nh
Y2hlZEltYWdlSW5mby5pc0VxdWFsKHcsIGgsIHNyY1N1YnNldCwgZGVzdFN1YnNldCkKKyAgICAg
ICAgICAgJiYgbV9yZXNpemVkSW1hZ2Uud2lkdGgoKSA9PSB3ICYmIG1fcmVzaXplZEltYWdlLmhl
aWdodCgpID09IGg7CiB9CiAKLS8vIEZJWE1FOiBkb24ndCBjYWNoZSB3aGVuIGltYWdlIGlzIGlu
LXByb2dyZXNzLgorU2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGludCB3
LCBpbnQgaCwgYm9vbCBhbGxvd0NhY2hpbmcpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Jlc2l6ZWRC
aXRtYXAodywgaCkpCisgICAgICAgIHJldHVybiBtX3Jlc2l6ZWRJbWFnZTsKKworICAgIFNrQml0
bWFwIHJlc2l6ZWRJbWFnZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKCp0aGlzLCBz
a2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgdywgaCk7CisgICAgaWYgKCFt
X2lzRGF0YUNvbXBsZXRlIHx8ICFhbGxvd0NhY2hpbmcpCisgICAgICAgIHJldHVybiByZXNpemVk
SW1hZ2U7CiAKLVNrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChpbnQgdywg
aW50IGgpIGNvbnN0CisgICAgbV9yZXNpemVkSW1hZ2UgPSByZXNpemVkSW1hZ2U7CisgICAgcmV0
dXJuIG1fcmVzaXplZEltYWdlOworfQorCitTa0JpdG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6
ZWRCaXRtYXAoaW50IHcsIGludCBoLCBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGNvbnN0IFNr
SVJlY3QmIGRlc3RTdWJzZXQsIGJvb2wgYWxsb3dDYWNoaW5nKSBjb25zdAogewotICAgIGlmICht
X3Jlc2l6ZWRJbWFnZS53aWR0aCgpICE9IHcgfHwgbV9yZXNpemVkSW1hZ2UuaGVpZ2h0KCkgIT0g
aCkKLSAgICAgICAgbV9yZXNpemVkSW1hZ2UgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6
ZSgqdGhpcywgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHcsIGgpOwor
ICAgIGlmIChoYXNSZXNpemVkQml0bWFwKHcsIGgsIHNyY1N1YnNldCwgZGVzdFN1YnNldCkpCisg
ICAgICAgIHJldHVybiBtX3Jlc2l6ZWRJbWFnZTsKIAorICAgIFNrQml0bWFwIHN1YnNldDsKKyAg
ICBleHRyYWN0U3Vic2V0KCZzdWJzZXQsIHNyY1N1YnNldCk7CisgICAgU2tCaXRtYXAgcmVzaXpl
ZEltYWdlID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoc3Vic2V0LCBza2lhOjpJbWFn
ZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgdywgaCwgZGVzdFN1YnNldCk7CisgICAgaWYg
KCFtX2lzRGF0YUNvbXBsZXRlIHx8ICFhbGxvd0NhY2hpbmcpCisgICAgICAgIHJldHVybiByZXNp
emVkSW1hZ2U7CisKKyAgICBtX3Jlc2l6ZWRJbWFnZSA9IHJlc2l6ZWRJbWFnZTsKICAgICByZXR1
cm4gbV9yZXNpemVkSW1hZ2U7CiB9CiAKQEAgLTkwLDYgKzEzNiwzOSBAQCBib29sIE5hdGl2ZUlt
YWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKGludCBkZXN0V2lkdGgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0V2lkdGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0
SGVpZ2h0KSBjb25zdAogeworICAgIFNrSVJlY3Qgc3JjU3Vic2V0LCBkZXN0U3Vic2V0OworICAg
IHNyY1N1YnNldC5zZXRFbXB0eSgpOworICAgIGRlc3RTdWJzZXQuc2V0RW1wdHkoKTsKKyAgICBy
ZXR1cm4gc2hvdWxkQ2FjaGVSZXNhbXBsaW5nSW50ZXJuYWwoZGVzdFdpZHRoLCBkZXN0SGVpZ2h0
LCBkZXN0U3Vic2V0V2lkdGgsIGRlc3RTdWJzZXRIZWlnaHQsIHNyY1N1YnNldCwgZGVzdFN1YnNl
dCk7Cit9CisKK2Jvb2wgTmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50
IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRlc3RIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc2hvdWxkQ2FjaGVSZXNhbXBsaW5nSW50ZXJuYWwoZGVzdFdpZHRoLCBkZXN0SGVp
Z2h0LCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQsIHNyY1N1YnNldCwgZGVzdFN1YnNldCk7Cit9CisK
K2Jvb2wgTmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxpbmdJbnRlcm5hbChpbnQg
ZGVzdFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZXN0SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0V2lkdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRIZWlnaHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU2tJUmVjdCYgc3JjU3Vic2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNvbnN0Cit7Cisg
ICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnMgbWF0Y2ggcHJldmlv
dXMgcmVxdWVzdC4KKyAgICBib29sIG1hdGNoZXNQcmV2aW91c1JlcXVlc3QgPSBtX2NhY2hlZElt
YWdlSW5mby5pc0VxdWFsKGRlc3RXaWR0aCwgZGVzdEhlaWdodCwgc3JjU3Vic2V0LCBkZXN0U3Vi
c2V0KTsKKyAgICBpZiAobWF0Y2hlc1ByZXZpb3VzUmVxdWVzdCkKKyAgICAgICAgKyttX3Jlc2l6
ZVJlcXVlc3RzOworICAgIGVsc2UgeworICAgICAgICBtX2NhY2hlZEltYWdlSW5mby5zZXQoZGVz
dFdpZHRoLCBkZXN0SGVpZ2h0LCBzcmNTdWJzZXQsIGRlc3RTdWJzZXQpOworICAgICAgICBtX3Jl
c2l6ZVJlcXVlc3RzID0gMDsKKyAgICAgICAgLy8gUmVzZXQgbV9yZXNpemVkSW1hZ2Ugbm93LCBi
ZWNhdXNlIHdlIGRvbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlCisgICAgICAgIC8vIGxhc3Qg
cmVxdWVzdGVkIHJlc2l6ZSBpbmZvIGFuZCBtX3Jlc2l6ZWRJbWFnZSdzIHJlc2l6ZSBpbmZvLgor
ICAgICAgICBtX3Jlc2l6ZWRJbWFnZS5yZXNldCgpOworICAgIH0KKwogICAgIC8vIFdlIGNhbiBu
b3QgY2FjaGUgaW5jb21wbGV0ZSBmcmFtZXMuIFRoaXMgbWlnaHQgYmUgYSBnb29kIG9wdGltaXph
dGlvbiBpbgogICAgIC8vIHRoZSBmdXR1cmUsIHdlcmUgd2Uga25vdyBob3cgbXVjaCBvZiB0aGUg
ZnJhbWUgaGFzIGJlZW4gZGVjb2RlZCwgc28gd2hlbgogICAgIC8vIHdlIGluY3JlbWVudGFsbHkg
ZHJhdyBtb3JlIG9mIHRoZSBpbWFnZSwgd2Ugb25seSBoYXZlIHRvIHJlc2FtcGxlIHRoZQpAQCAt
MTA2LDE2ICsxODUsOCBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNhbXBs
aW5nKGludCBkZXN0V2lkdGgsCiAgICAgLy8gSWYgInRvbyBtYW55IiByZXF1ZXN0cyBoYXZlIGJl
ZW4gbWFkZSBmb3IgdGhpcyBiaXRtYXAsIHdlIGFzc3VtZSB0aGF0CiAgICAgLy8gbWFueSBtb3Jl
IHdpbGwgYmUgbWFkZSBhcyB3ZWxsLCBhbmQgd2UnbGwgZ28gYWhlYWQgYW5kIGNhY2hlIGl0Lgog
ICAgIHN0YXRpYyBjb25zdCBpbnQga01hbnlSZXF1ZXN0VGhyZXNob2xkID0gNDsKLSAgICBpZiAo
bV9sYXN0UmVxdWVzdFNpemUud2lkdGgoKSA9PSBkZXN0V2lkdGggJiYKLSAgICAgICAgbV9sYXN0
UmVxdWVzdFNpemUuaGVpZ2h0KCkgPT0gZGVzdEhlaWdodCkgewotICAgICAgICBpZiAobV9yZXNp
emVSZXF1ZXN0cyA+PSBrTWFueVJlcXVlc3RUaHJlc2hvbGQpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXaGVuIGEgZGlmZmVyZW50IHNpemUgaXMg
YmVpbmcgcmVxdWVzdGVkLCBjb3VudCB0aGlzIGFzIGEgcXVlcnkKLSAgICAgICAgLy8gKGhhc1Jl
c2l6ZWRCaXRtYXApIGFuZCByZXNldCB0aGUgY291bnRlci4KLSAgICAgICAgbV9sYXN0UmVxdWVz
dFNpemUgPSBJbnRTaXplKGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7Ci0gICAgICAgIG1fcmVzaXpl
UmVxdWVzdHMgPSAwOwotICAgIH0KKyAgICBpZiAobV9yZXNpemVSZXF1ZXN0cyA+PSBrTWFueVJl
cXVlc3RUaHJlc2hvbGQpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gT3RoZXJ3aXNl
LCB1c2UgdGhlIGhldXJpc3RpYyB0aGF0IGlmIG1vcmUgdGhhbiAxLzQgb2YgdGhlIGltYWdlIGlz
CiAgICAgLy8gcmVxdWVzdGVkLCBpdCdzIHdvcnRoIGNhY2hpbmcuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuaAppbmRl
eCAwMGIwYTY4NTA2NWI0MjdkYTExYzk0YWRkZDY1YWE5M2U0ZmNkYWQ0Li5lMGM3YzNmM2M1OWZi
ODljMjYwOGNhMmE0YTNhYmZiNzY1NDE5Y2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgKQEAgLTMyLDYgKzMy
LDcgQEAKICNkZWZpbmUgTmF0aXZlSW1hZ2VTa2lhX2gKIAogI2luY2x1ZGUgIlNrQml0bWFwLmgi
CisjaW5jbHVkZSAiU2tSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00MCw2ICs0MSwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyAiTmF0
aXZlSW1hZ2VQdHIiLCBpdCBpcyBhIHBvaW50ZXIgdG8gdGhpcyB0eXBlLiBJdCBpcyBhbiBTa0Jp
dG1hcCwgYnV0IGFsc28KIC8vIHN0b3JlcyBhIGNhY2hlZCByZXNpemVkIGltYWdlLgogY2xhc3Mg
TmF0aXZlSW1hZ2VTa2lhIDogcHVibGljIFNrQml0bWFwIHsKK3ByaXZhdGU6CisgICAgLy8gQ2Fj
aGVkSW1hZ2VJbmZvIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgY2FjaGVkIG9yIHJlcXVl
c3RlZCBpbWFnZQorICAgIC8vIHJlc2l6ZXMuCisgICAgc3RydWN0IENhY2hlZEltYWdlSW5mbyB7
CisgICAgICAgIEludFNpemUgcmVxdWVzdFNpemU7CisgICAgICAgIFNrSVJlY3Qgc3JjU3Vic2V0
OworICAgICAgICBTa0lSZWN0IGRlc3RTdWJzZXQ7CisKKyAgICAgICAgQ2FjaGVkSW1hZ2VJbmZv
KCk7CisKKyAgICAgICAgYm9vbCBpc0VxdWFsKGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7
CisgICAgICAgIGJvb2wgaXNFcXVhbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFNrSVJl
Y3QmIG90aGVyU3JjU3Vic2V0LCBjb25zdCBTa0lSZWN0JiBvdGhlckRlc3RTdWJzZXQpIGNvbnN0
OworCisgICAgICAgIHZvaWQgc2V0KGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgICAgIHZv
aWQgc2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJz
ZXQsIGNvbnN0IFNrSVJlY3QmIG90aGVyRGVzdFN1YnNldCk7CisgICAgfTsKKwogcHVibGljOgog
ICAgIE5hdGl2ZUltYWdlU2tpYSgpOwogICAgIH5OYXRpdmVJbWFnZVNraWEoKTsKQEAgLTY2LDE1
ICs4NCwzMiBAQCBwdWJsaWM6CiAgICAgLy8gZ2l2ZW4gaW1hZ2Ugc3Vic2V0IHdpdGggdGhlIGdp
dmVuIGRpbWVuc2lvbnMuCiAgICAgYm9vbCBoYXNSZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50
IGhlaWdodCkgY29uc3Q7CiAKKyAgICAvLyBXZSBjYW4ga2VlcCBhIHJlc2l6ZWQgdmVyc2lvbiBv
ZiB0aGUgYml0bWFwIGNhY2hlZCBvbiB0aGlzIG9iamVjdC4KKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUKKyAg
ICAvLyBnaXZlbiBpbWFnZSBzdWJzZXQgd2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9ucyBhbmQgc3Vi
c2V0cy4KKyAgICBib29sIGhhc1Jlc2l6ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBj
b25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNvbnN0
OworCiAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBhbiBleGlzdGluZyByZXNpemVkIGltYWdlLCBv
ciBnZW5lcmF0ZSBhIG5ldyBvbmUgb2YKLSAgICAvLyB0aGUgc3BlY2lmaWVkIHNpemUgYW5kIHN0
b3JlIGl0IGluIHRoZSBjYWNoZS4gU3Vic2V0dGVkIGltYWdlcyBjYW4gbm90Ci0gICAgLy8gYmUg
Y2FjaGVkIHVubGVzcyB0aGUgc3Vic2V0IGlzIHRoZSBlbnRpcmUgYml0bWFwLgotICAgIFNrQml0
bWFwIHJlc2l6ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKKyAgICAvLyB0
aGUgc3BlY2lmaWVkIHNpemUgYW5kIHN0b3JlIGl0IGluIHRoZSBjYWNoZSBpZiBhbGxvd0NhY2hp
bmcgaXMgdHJ1ZS4KKyAgICBTa0JpdG1hcCByZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhl
aWdodCwgYm9vbCBhbGxvd0NhY2hpbmcpIGNvbnN0OworCisgICAgLy8gVGhpcyB3aWxsIHJldHVy
biBhbiBleGlzdGluZyByZXNpemVkIGltYWdlIHN1YnNldCwgb3IgZ2VuZXJhdGUgYSBuZXcgb25l
CisgICAgLy8gb2YgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBzdWJzZXRzIGFuZCBzdG9yZSBpdCBp
biB0aGUgY2FjaGUgaWYKKyAgICAvLyBhbGxvd0NhY2hpbmcgaXMgdHJ1ZS4KKyAgICAvLyBzcmNT
dWJzZXQgaXMgdGhlIHN1YnNldCBvZiB0aGUgaW1hZ2UgdG8gcmVzaXplIGluIGltYWdlIHNwYWNl
LgorICAgIC8vIGRlc3RTdWJzZXQgaXMgdGhlIHN1YnNldCBvZiB0aGUgcmVzaXplZCBpbWFnZS4g
SW4gb3RoZXIgd29yZHM6CisgICAgLy8gLSBjcm9wIGltYWdlIGJ5IHNyY1N1YnNldCAtPiBpbWFn
ZVN1YnNldC4KKyAgICAvLyAtIHJlc2l6ZSBpbWFnZVN1YnNldCB0byBkZXN0V2lkdGggeCBkZXN0
SGVpZ2h0IC0+IGRlc3RJbWFnZS4KKyAgICAvLyAtIHJldHVybiBkZXN0SW1hZ2UgY3JvcHBlZCBi
eSBkZXN0U3Vic2V0LgorICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJz
ZXQsIGJvb2wgYWxsb3dDYWNoaW5nKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZ2l2ZW4gcmVzaXplIG9wZXJhdGlvbiBzaG91bGQgZWl0aGVyIHJlc2l6ZSB0aGUgd2hvbGUK
ICAgICAvLyBpbWFnZSBhbmQgY2FjaGUgaXQsIG9yIHJlc2l6ZSBqdXN0IHRoZSBwYXJ0IGl0IG5l
ZWRzIGFuZCB0aHJvdyB0aGUgcmVzdWx0CiAgICAgLy8gYXdheS4KICAgICAvLworICAgIC8vIENh
bGxpbmcgdGhpcyBmdW5jdGlvbiBtYXkgaW5jcmVtZW50IGEgcmVxdWVzdCBjb3VudCB0aGF0IGNh
biBjaGFuZ2UgdGhlCisgICAgLy8gcmVzdWx0IG9mIHN1YnNlcXVlbnQgY2FsbHMuCisgICAgLy8K
ICAgICAvLyBPbiB0aGUgb25lIGhhbmQsIGlmIG9ubHkgYSBzbWFsbCBzdWJzZXQgaXMgZGVzaXJl
ZCwgdGhlbiB3ZSB3aWxsIHdhc3RlIGEKICAgICAvLyBsb3Qgb2YgdGltZSByZXNhbXBsaW5nIHRo
ZSBlbnRpcmUgdGhpbmcsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBleGFjdGx5CiAgICAgLy8gd2hh
dCdzIHJlcXVpcmVkLiBPbiB0aGUgb3RoZXIgaGFuZCwgcmVzYW1wbGluZyB0aGUgZW50aXJlIGJp
dG1hcCBpcwpAQCAtODYsNyArMTIxLDIzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGVzdFN1YnNldFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0KSBjb25zdDsKIAorICAgIC8vIFNhbWUgYXMgYWJv
dmUsIGJ1dCBmb3IgY3JvcHBlZCBpbWFnZXMuCisgICAgLy8gc3JjU3Vic2V0IGlzIHRoZSBzdWJz
ZXQgb2YgdGhlIGltYWdlIHRvIHJlc2l6ZSBpbiBpbWFnZSBzcGFjZS4KKyAgICAvLyBkZXN0U3Vi
c2V0IGlzIHRoZSBzdWJzZXQgb2YgdGhlIHJlc2l6ZWQgaW1hZ2UgdGhhdCB3aWxsIGJlIHVzZWQu
CisgICAgYm9vbCBzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3Q7CisKIHByaXZh
dGU6CisgICAgLy8gU2hhcmVkIGxvZ2ljIGZvciBkZWNpZGluZyB3aGV0aGVyIGEgcmVzaXplIG9w
ZXJhdGlvbiBzaG91bGQgYmUgY2FjaGVkLgorICAgIGJvb2wgc2hvdWxkQ2FjaGVSZXNhbXBsaW5n
SW50ZXJuYWwoaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZXN0SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3Q7
CisKICAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIHRoZSBkYXRhIGlzIGNvbXBsZXRlLiBCZWZvcmUg
dGhlIGVudGlyZSBpbWFnZSBoYXMKICAgICAvLyBsb2FkZWQsIHdlIGRvIG5vdCB3YW50IHRvIGNh
Y2hlIGEgcmVzaXplLgogICAgIGJvb2wgbV9pc0RhdGFDb21wbGV0ZTsKQEAgLTk3LDE0ICsxNDgs
MTcgQEAgcHJpdmF0ZToKICAgICAvLyBSZWZlcmVuY2VzIGhvdyBtYW55IHRpbWVzIHRoYXQgdGhl
IGltYWdlIHNpemUgaGFzIGJlZW4gcmVxdWVzdGVkIGZvcgogICAgIC8vIHRoZSBsYXN0IHNpemUu
CiAgICAgLy8KLSAgICAvLyBFdmVyeSB0aW1lIHdlIGdldCBhIHJlcXVlc3QsIGlmIGl0IG1hdGNo
ZXMgdGhlIG1fbGFzdFJlcXVlc3RTaXplLCB3ZSdsbAotICAgIC8vIGluY3JlbWVudCB0aGUgY291
bnRlciwgYW5kIGlmIG5vdCwgd2UnbGwgcmVzZXQgdGhlIGNvdW50ZXIgYW5kIHNhdmUgdGhlCi0g
ICAgLy8gc2l6ZS4KKyAgICAvLyBFdmVyeSB0aW1lIHdlIGdldCBhIGNhbGwgdG8gc2hvdWxkQ2Fj
aGVSZXNhbXBsaW5nLCBpZiBpdCBtYXRjaGVzIHRoZQorICAgIC8vIG1fY2FjaGVkSW1hZ2VJbmZv
LCB3ZSdsbCBpbmNyZW1lbnQgdGhlIGNvdW50ZXIsIGFuZCBpZiBub3QsIHdlJ2xsIHJlc2V0Cisg
ICAgLy8gdGhlIGNvdW50ZXIgYW5kIHNhdmUgdGhlIGRpbWVuc2lvbnMuCiAgICAgLy8KICAgICAv
LyBUaGlzIGFsbG93cyB1cyB0byBzZWUgaWYgbWFueSByZXF1ZXN0cyBoYXZlIGJlZW4gbWFkZSBm
b3IgdGhlIHNhbWUKICAgICAvLyByZXNpemVkIGltYWdlLCB3ZSBrbm93IHRoYXQgd2Ugc2hvdWxk
IHByb2JhYmx5IGNhY2hlIGl0LCBldmVuIGlmIGFsbCBvZgogICAgIC8vIHRob3NlIHJlcXVlc3Rz
IGluZGl2aWR1YWxseSBhcmUgc21hbGwgYW5kIHdvdWxkIG5vdCBvdGhlcndpc2UgYmUgY2FjaGVk
LgotICAgIG11dGFibGUgSW50U2l6ZSBtX2xhc3RSZXF1ZXN0U2l6ZTsKKyAgICAvLworICAgIC8v
IFdlIGFsc28gdHJhY2sgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc3Vic2V0cyBmb3IgY2Fj
aGluZyBwYXJ0aWFsCisgICAgLy8gaW1hZ2UgcmVzaXplcy4KKyAgICBtdXRhYmxlIENhY2hlZElt
YWdlSW5mbyBtX2NhY2hlZEltYWdlSW5mbzsKICAgICBtdXRhYmxlIGludCBtX3Jlc2l6ZVJlcXVl
c3RzOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104611</attachid>
            <date>2011-08-19 19:35:14 -0700</date>
            <delta_ts>2011-08-22 12:08:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65587-20110819193512.patch</filename>
            <type>text/plain</type>
            <size>24335</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBkZjY1ZjA3MTNiYjIzNzg0MWFl
ZDljOTViMDgzODhiZGJlZjM1ZTVlLi4zYjM5YTEzZjFmMzc0MjliMjNhYzVlNDM4NmU3ODQzMDQw
MWZiMDg3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CkBAIC0zNjMzLDYgKzM2MzMsMTAgQEAgQlVHV0s2NTQ1MyBNQUMgOiBm
YXN0L2Nzcy9vdXRsaW5lLWF1dG8tZW1wdHktcmVjdHMuaHRtbCA9IElNQUdFCiAKIEJVR1dLNjU0
NjIgVklTVEEgOiBodHRwL3Rlc3RzL2NhY2hlL2hpc3Rvcnktb25seS1jYWNoZWQtc3VicmVzb3Vy
Y2UtbG9hZHMtbWF4LWFnZS1odHRwcy5odG1sID0gUEFTUyBUSU1FT1VUCiAKKy8vIE5lZWRzIG5l
dyBiYXNlbGluZXMgZm9yIGNoYW5nZSB0byBpbWFnZSByZXNpemUgY2FjaGluZyBjb2RlLgorQlVH
V0s2NTU4NyA6IHN2Zy9keW5hbWljLXVwZGF0ZXMvU1ZHRkVJbWFnZUVsZW1lbnQtZG9tLXByZXNl
cnZlQXNwZWN0UmF0aW8tYXR0ci5odG1sID0gSU1BR0UKK0JVR1dLNjU1ODcgOiBzdmcvZHluYW1p
Yy11cGRhdGVzL1NWR0ZFSW1hZ2VFbGVtZW50LXN2Z2RvbS1wcmVzZXJ2ZUFzcGVjdFJhdGlvLXBy
b3AuaHRtbCA9IElNQUdFCisKIC8vIEludHJvZHVjZWQgaW4gcjkyMjk4LCB3aGljaCBtaWdodCBj
YXVzZSBhbm90aGVyIHRlc3QgY3Jhc2hpbmcuCiBCVUdaTU8gU0tJUCA6IGZhc3QvbG9hZGVyL3Jl
bG9hZC16ZXJvLWJ5dGUtcGx1Z2luLmh0bWwgPSBGQUlMCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhODI4Y2Vj
MDAzMjMxNzQ3MWE3YThiMTg3MWU1M2JlMWM1ZmIxNjNmLi5mMzE3OGNhZWI3OTE3ZjNlZjRhMDU1
MDY3Nzc1N2Q4OTQ0NWE3YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDgt
MTcgIEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnRl
ZCBza2lhIHN1cHBvcnQgZm9yIGNhY2hpbmcgcmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTg3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwg
cmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcyB3b3VsZCBub3QgYmUgY2FjaGVkLiBUaGlzIGNhdXNl
cyB2YXJpb3VzIHdlYnNpdGVzIHRvIGhhdmUgamFua3kgQ1NTIGFuaW1hdGlvbnMgaW4gc29mdHdh
cmUgY29tcG9zaXRpbmcgbW9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZXNhbXBsZWRCaXRtYXApOiBD
aGFuZ2VkIHRvIHVzZSBuZXcgQVBJcyBmb3Igc3Vic2V0IGNhY2hpbmcuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOiBBZGRlZCBhbGxvd0NhY2hpbmcgcGFyYW1ldGVyLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFn
ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUlu
Zm86OmlzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJ
bWFnZUluZm86OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6Omhhc1Jl
c2l6ZWRCaXRtYXApOiBDaGFuZ2VkIHRoaXMgbWV0aG9kIHNvIHRoYXQgaXQgZG9lcyBub3QgbW9k
aWZ5IGNhY2hpbmcgZGF0YS4gQWRkZWQgYSBzZWNvbmQgdmVyc2lvbiB1c2VkIGZvciBjcm9wcGVk
IGltYWdlIHJlc2l6ZXMuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OnJlc2l6
ZWRCaXRtYXApOiBBZGRlZCBwYXJhbWV0ZXIgdG8gbGV0IGNhbGxlciBzcGVjaWZ5IHdoZXRoZXIg
Y2FjaGluZyBpcyBhbGxvd2VkLgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpz
aG91bGRDYWNoZVJlc2FtcGxpbmcpOiBBZGRlZCBhIHNlY29uZCB2ZXJzaW9uIHVzZWQgZm9yIGNy
b3BwZWQgaW1hZ2UgcmVzaXplcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6
c2hvdWxkQ2FjaGVSZXNhbXBsaW5nSW50ZXJuYWwpOiBCb3RoIHNob3VsZENhY2hlUmVzYW1wbGlu
ZyBtZXRob2RzIGNhbGwgZG93biB0byB0aGlzIGZvciB0aGUgc2hhcmVkIGxvZ2ljLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmg6IEFkZGVkIENhY2hl
ZEltYWdlSW5mbyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgY2FjaGVkIG9yIHJlcXVlc3RlZCBp
bWFnZSByZXNpemUgb3BlcmF0aW9uLgorCiAyMDExLTA4LTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxq
b2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBDaHJvbWl1bSBXaW5kb3dz
IGJ1aWxkIGZpeCBhZnRlciByOTMxNDAuIFRha2UgNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCBhZjFiNjM3YjY4YTg3
MTMyOGM4MzhlNWQzZDhjMjM5MGZkN2MxMjQyLi45MzliYWM2ZmM1M2M4OTk4YzUwM2Q1NTJkNTU5
M2M1MmU5YTk5OTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwCkBAIC0xNjEsMjUgKzE2MSwxMSBAQCBzdGF0aWMgUmVzYW1w
bGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRm
b3JtQ29udGV4dAogLy8gc2Nyb2xsaW5nLCBmb3IgZXhhbXBsZSwgd2UgYXJlIG9ubHkgZHJhd2lu
ZyBhIHNtYWxsIHN0cmlwIG9mIHRoZSBpbWFnZS4KIC8vIFJlc2FtcGxpbmcgdGhlIHdob2xlIGlt
YWdlIGV2ZXJ5IHRpbWUgaXMgdmVyeSBzbG93LCBzbyB0aGlzIHNwZWVkcyB1cCB0aGluZ3MKIC8v
IGRyYW1hdGljYWxseS4KKy8vCisvLyBOb3RlOiB0aGlzIGNvZGUgaXMgb25seSB1c2VkIHdoZW4g
dGhlIGNhbnZhcyB0cmFuc2Zvcm1hdGlvbiBpcyBsaW1pdGVkIHRvCisvLyBzY2FsaW5nIG9yIHRy
YW5zbGF0aW9uLgogc3RhdGljIHZvaWQgZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0NhbnZhcyYgY2Fu
dmFzLCBTa1BhaW50JiBwYWludCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0
IFNrSVJlY3QmIHNyY0lSZWN0LCBjb25zdCBTa1JlY3QmIGRlc3RSZWN0KQogewotICAgIC8vIEZp
cnN0IGdldCB0aGUgc3Vic2V0IHdlIG5lZWQuIFRoaXMgaXMgZWZmaWNpZW50IGFuZCBkb2VzIG5v
dCBjb3B5IHBpeGVscy4KLSAgICBTa0JpdG1hcCBzdWJzZXQ7Ci0gICAgYml0bWFwLmV4dHJhY3RT
dWJzZXQoJnN1YnNldCwgc3JjSVJlY3QpOwotICAgIFNrUmVjdCBzcmNSZWN0OwotICAgIHNyY1Jl
Y3Quc2V0KHNyY0lSZWN0KTsKLQotICAgIC8vIFdoZXRoZXIgd2UncmUgZG9pbmcgYSBzdWJzZXQg
b3IgdXNpbmcgdGhlIGZ1bGwgc291cmNlIGltYWdlLgotICAgIGJvb2wgc3JjSXNGdWxsID0gc3Jj
SVJlY3QuZkxlZnQgPT0gMCAmJiBzcmNJUmVjdC5mVG9wID09IDAKLSAgICAgICAgJiYgc3JjSVJl
Y3Qud2lkdGgoKSA9PSBiaXRtYXAud2lkdGgoKQotICAgICAgICAmJiBzcmNJUmVjdC5oZWlnaHQo
KSA9PSBiaXRtYXAuaGVpZ2h0KCk7Ci0KLSAgICAvLyBXZSB3aWxsIGFsd2F5cyBkcmF3IGluIGlu
dGVnZXIgc2l6ZXMsIHNvIHJvdW5kIHRoZSBkZXN0aW5hdGlvbiByZWN0LgotICAgIFNrSVJlY3Qg
ZGVzdFJlY3RSb3VuZGVkOwotICAgIGRlc3RSZWN0LnJvdW5kKCZkZXN0UmVjdFJvdW5kZWQpOwot
ICAgIFNrSVJlY3QgcmVzaXplZEltYWdlUmVjdCA9ICAvLyBSZXByZXNlbnRzIHRoZSBzaXplIG9m
IHRoZSByZXNpemVkIGltYWdlLgotICAgICAgICB7IDAsIDAsIGRlc3RSZWN0Um91bmRlZC53aWR0
aCgpLCBkZXN0UmVjdFJvdW5kZWQuaGVpZ2h0KCkgfTsKLQogICAgIC8vIEFwcGx5IGZvcndhcmQg
dHJhbnNmb3JtIHRvIGRlc3RSZWN0IHRvIGVzdGltYXRlIHJlcXVpcmVkIHNpemUgb2YKICAgICAv
LyByZS1zYW1wbGVkIGJpdG1hcCwgYW5kIHVzZSBvbmx5IGluIGNhbGxzIHJlcXVpcmVkIHRvIHJl
c2l6ZSwgb3IgdGhhdAogICAgIC8vIGNoZWNrIGZvciB0aGUgcmVxdWlyZWQgc2l6ZS4KQEAgLTE4
OCw3MCArMTc0LDM1IEBAIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMm
IGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgU2tJUmVjdCBkZXN0
UmVjdFRyYW5zZm9ybWVkUm91bmRlZDsKICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkLnJvdW5kKCZk
ZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZCk7CiAKLSAgICBpZiAoc3JjSXNGdWxsICYmIGJpdG1h
cC5oYXNSZXNpemVkQml0bWFwKGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRl
c3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpKSkgewotICAgICAgICAvLyBZYXksIHRo
aXMgYml0bWFwIGZyYW1lIGFscmVhZHkgaGFzIGEgcmVzaXplZCB2ZXJzaW9uLgotICAgICAgICBT
a0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAucmVzaXplZEJpdG1hcChkZXN0UmVjdFRyYW5zZm9y
bWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSk7
Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0LCAm
cGFpbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gQ29tcHV0ZSB0aGUgdmlz
aWJsZSBwb3J0aW9uIG9mIG91ciByZWN0LgotICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb21wdXRl
IHRoZSB0cmFuc2Zvcm1lZCBwb3J0aW9uIG9mIHRoZQotICAgIC8vIHZpc2libGUgcG9ydGlvbiBm
b3IgdXNlIGJlbG93LgotICAgIFNrUmVjdCBkZXN0Qml0bWFwU3Vic2V0U2s7Ci0gICAgQ2xpcFJl
Y3RUb0NhbnZhcyhjYW52YXMsIGRlc3RSZWN0LCAmZGVzdEJpdG1hcFN1YnNldFNrKTsKLSAgICBT
a1JlY3QgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkOwotICAgIGNhbnZhcy5nZXRUb3RhbE1h
dHJpeCgpLm1hcFJlY3QoJmRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZCwgZGVzdEJpdG1hcFN1
YnNldFNrKTsKLSAgICBkZXN0Qml0bWFwU3Vic2V0U2sub2Zmc2V0KC1kZXN0UmVjdC5mTGVmdCwg
LWRlc3RSZWN0LmZUb3ApOworICAgIFNrUmVjdCBkZXN0UmVjdFZpc2libGVTdWJzZXQ7CisgICAg
Q2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RSZWN0LCAmZGVzdFJlY3RWaXNpYmxlU3Vic2V0
KTsKKyAgICAvLyBDbGlwUmVjdFRvQ2FudmFzIG9mdGVuIG92ZXJzaG9vdHMsIHJlc3VsdGluZyBp
biBhIGxhcmdlciByZWdpb24gdGhhbiBvdXIKKyAgICAvLyBvcmlnaW5hbCBkZXN0UmVjdC4gSW50
ZXJzZWN0aW5nIGdldHMgdXMgYmFjayBpbnNpZGUuCisgICAgaWYgKCFkZXN0UmVjdFZpc2libGVT
dWJzZXQuaW50ZXJzZWN0KGRlc3RSZWN0KSkKKyAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHZp
c2libGUgaW4gZGVzdFJlY3QuCisKKyAgICAvLyBDb21wdXRlIHRoZSB0cmFuc2Zvcm1lZCAoc2Ny
ZWVuIHNwYWNlKSBwb3J0aW9uIG9mIHRoZSB2aXNpYmxlIHBvcnRpb24gZm9yCisgICAgLy8gdXNl
IGJlbG93LgorICAgIFNrUmVjdCBkZXN0UmVjdFZpc2libGVTdWJzZXRUcmFuc2Zvcm1lZDsKKyAg
ICBjYW52YXMuZ2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZkZXN0UmVjdFZpc2libGVTdWJzZXRU
cmFuc2Zvcm1lZCwgZGVzdFJlY3RWaXNpYmxlU3Vic2V0KTsKKyAgICBTa1JlY3QgZGVzdEJpdG1h
cFN1YnNldFRyYW5zZm9ybWVkID0gZGVzdFJlY3RWaXNpYmxlU3Vic2V0VHJhbnNmb3JtZWQ7Cisg
ICAgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkLm9mZnNldCgtZGVzdFJlY3RUcmFuc2Zvcm1l
ZC5mTGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1kZXN0UmVj
dFRyYW5zZm9ybWVkLmZUb3ApOwogICAgIFNrSVJlY3QgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9y
bWVkUm91bmRlZDsKICAgICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQucm91bmQoJmRlc3RC
aXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQpOwotICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFu
c2Zvcm1lZFJvdW5kZWQub2Zmc2V0KC1kZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5mTGVmdCwg
LWRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmZUb3ApOwotCi0gICAgLy8gVGhlIG1hdHJpeCBp
bnZlcnRpbmcsIGV0Yy4gY291bGQgaGF2ZSBpbnRyb2R1Y2VkIHJvdW5kaW5nIGVycm9yIHdoaWNo
Ci0gICAgLy8gY2F1c2VzIHRoZSBib3VuZHMgdG8gYmUgb3V0c2lkZSBvZiB0aGUgcmVzaXplZCBi
aXRtYXAuIFdlIHJvdW5kIG91dHdhcmQKLSAgICAvLyBzbyB3ZSBhbHdheXMgbGVhbiB0b3dhcmQg
aXQgYmVpbmcgbGFyZ2VyIHJhdGhlciB0aGFuIHNtYWxsZXIgdGhhbiB3ZQotICAgIC8vIG5lZWQs
IGFuZCB0aGVuIGNsYW1wIHRvIHRoZSBiaXRtYXAgYm91bmRzIHNvIHdlIGRvbid0IGdldCBhbnkg
aW52YWxpZAotICAgIC8vIGRhdGEuCi0gICAgU2tJUmVjdCBkZXN0Qml0bWFwU3Vic2V0U2tJOwot
ICAgIGRlc3RCaXRtYXBTdWJzZXRTay5yb3VuZE91dCgmZGVzdEJpdG1hcFN1YnNldFNrSSk7Ci0g
ICAgaWYgKCFkZXN0Qml0bWFwU3Vic2V0U2tJLmludGVyc2VjdChyZXNpemVkSW1hZ2VSZWN0KSkK
LSAgICAgICAgcmV0dXJuOyAgLy8gUmVzaXplZCBpbWFnZSBkb2VzIG5vdCBpbnRlcnNlY3QuCi0K
LSAgICBpZiAoc3JjSXNGdWxsICYmIGJpdG1hcC5zaG91bGRDYWNoZVJlc2FtcGxpbmcoCi0gICAg
ICAgICAgICByZXNpemVkSW1hZ2VSZWN0LndpZHRoKCksCi0gICAgICAgICAgICByZXNpemVkSW1h
Z2VSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNldFNrSS53aWR0aCgp
LAotICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNldFNrSS5oZWlnaHQoKSkpIHsKLSAgICAgICAg
Ly8gV2UncmUgc3VwcG9zZWQgdG8gcmVzaXplIHRoZSBlbnRpcmUgaW1hZ2UgYW5kIGNhY2hlIGl0
LCBldmVuIHRob3VnaAotICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIGFsbCBvZiBpdC4KLSAgICAg
ICAgU2tCaXRtYXAgcmVzYW1wbGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoZGVzdFJlY3RUcmFu
c2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCkpOwot
ICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QocmVzYW1wbGVkLCAwLCBkZXN0UmVjdCwgJnBh
aW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBzaG91bGQgb25seSByZXNpemUgdGhl
IGV4cG9zZWQgcGFydCBvZiB0aGUgYml0bWFwIHRvIGRvIHRoZQotICAgICAgICAvLyBtaW5pbWFs
IHBvc3NpYmxlIHdvcmsuCi0KLSAgICAgICAgLy8gUmVzYW1wbGUgdGhlIG5lZWRlZCBwYXJ0IG9m
IHRoZSBpbWFnZS4KLSAgICAgICAgLy8gVHJhbnNmb3JtcyBhYm92ZSBwbHVzIHJvdW5kaW5nIG1h
eSBjYXVzZSBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkCi0gICAgICAgIC8vIHRv
IGdvIG91dHNpZGUgdGhlIGltYWdlLCBzbyBuZWVkIHRvIGNsaXAgdG8gYXZvaWQgcHJvYmxlbXMu
Ci0gICAgICAgIGlmIChkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkLmludGVyc2Vj
dCgwLCAwLAotICAgICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRo
KCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpKSkgewotCi0gICAgICAgICAg
ICBTa0JpdG1hcCByZXNhbXBsZWQgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzdWJz
ZXQsCi0gICAgICAgICAgICAgICAgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pP
UzMsCi0gICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwg
ZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgZGVz
dEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7Ci0KLSAgICAgICAgICAgIC8vIENvbXB1
dGUgd2hlcmUgdGhlIG5ldyBiaXRtYXAgc2hvdWxkIGJlIGRyYXduLiBTaW5jZSBvdXIgbmV3IGJp
dG1hcAotICAgICAgICAgICAgLy8gbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2luYWwsIHdl
IGhhdmUgdG8gc2hpZnQgaXQgb3ZlciBieSB0aGUKLSAgICAgICAgICAgIC8vIHNhbWUgYW1vdW50
IHRoYXQgd2UgY3V0IG9mZiB0aGUgdG9wIGFuZCBsZWZ0LgotICAgICAgICAgICAgZGVzdEJpdG1h
cFN1YnNldFNrSS5vZmZzZXQoZGVzdFJlY3QuZkxlZnQsIGRlc3RSZWN0LmZUb3ApOwotICAgICAg
ICAgICAgU2tSZWN0IG9mZnNldERlc3RSZWN0OwotICAgICAgICAgICAgb2Zmc2V0RGVzdFJlY3Qu
c2V0KGRlc3RCaXRtYXBTdWJzZXRTa0kpOwotCi0gICAgICAgICAgICBjYW52YXMuZHJhd0JpdG1h
cFJlY3QocmVzYW1wbGVkLCAwLCBvZmZzZXREZXN0UmVjdCwgJnBhaW50KTsKLSAgICAgICAgfQot
ICAgIH0KKworICAgIC8vIFRyYW5zZm9ybXMgYWJvdmUgcGx1cyByb3VuZGluZyBtYXkgY2F1c2Ug
ZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZAorICAgIC8vIHRvIGdvIG91dHNpZGUg
dGhlIGltYWdlLCBzbyBuZWVkIHRvIGNsaXAgdG8gYXZvaWQgcHJvYmxlbXMuCisgICAgaWYgKCFk
ZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkLmludGVyc2VjdCgKKyAgICAgICAgICAg
IDAsIDAsIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNm
b3JtZWRSb3VuZGVkLmhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuOyAvLyBJbWFnZSBpcyBub3Qg
dmlzaWJsZS4KKworICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IGJpdG1hcC5yZXNpemVkQml0bWFw
KHNyY0lSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7CisgICAgY2FudmFzLmRyYXdCaXRtYXBS
ZWN0KHJlc2FtcGxlZCwgMCwgZGVzdFJlY3RWaXNpYmxlU3Vic2V0LCAmcGFpbnQpOwogfQogCiBz
dGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29u
dGV4dCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNrSVJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QsIGNvbnN0IFNrWGZlcm1vZGU6Ok1vZGUmIGNvbXBP
cCkKQEAgLTM0MCw1OCArMjkxLDM3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwKIHsKICAgICBGbG9hdFJlY3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxp
emVSZWN0KGZsb2F0U3JjUmVjdCk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBub3Jt
U3JjUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsgIC8vIG5vdGhpbmcgdG8gZHJhdwor
ICAgICAgICByZXR1cm47IC8vIG5vdGhpbmcgdG8gZHJhdwogCiAgICAgTmF0aXZlSW1hZ2VTa2lh
KiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghYml0bWFw
KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBUaGlzIGlzIGEgdmVyeSBpbmV4cGVuc2l2ZSBv
cGVyYXRpb24uIEl0IHdpbGwgZ2VuZXJhdGUgYSBuZXcgYml0bWFwIGJ1dAotICAgIC8vIGl0IHdp
bGwgaW50ZXJuYWxseSByZWZlcmVuY2UgdGhlIG9sZCBiaXRtYXAncyBwaXhlbHMsIGFkanVzdGlu
ZyB0aGUgcm93Ci0gICAgLy8gc3RyaWRlIHNvIHRoZSBleHRyYSBwaXhlbHMgYXBwZWFyIGFzIHBh
ZGRpbmcgdG8gdGhlIHN1YnNldHRlZCBiaXRtYXAuCi0gICAgU2tCaXRtYXAgc3JjU3Vic2V0Owog
ICAgIFNrSVJlY3Qgc3JjUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qobm9ybVNyY1JlY3QpOwotICAg
IGJpdG1hcC0+ZXh0cmFjdFN1YnNldCgmc3JjU3Vic2V0LCBzcmNSZWN0KTsKLQotICAgIFNrQml0
bWFwIHJlc2FtcGxlZDsKLSAgICBTa1NoYWRlciogc2hhZGVyOwogCiAgICAgLy8gRmlndXJlIG91
dCB3aGF0IHNpemUgdGhlIGJpdG1hcCB3aWxsIGJlIGluIHRoZSBkZXN0aW5hdGlvbi4gVGhlCiAg
ICAgLy8gZGVzdGluYXRpb24gcmVjdCBpcyB0aGUgYm91bmRzIG9mIHRoZSBwYXR0ZXJuLCB3ZSBu
ZWVkIHRvIHVzZSB0aGUKLSAgICAvLyBtYXRyaXggdG8gc2VlIGhvdyBiaXQgaXQgd2lsbCBiZS4K
KyAgICAvLyBtYXRyaXggdG8gc2VlIGhvdyBiaWcgaXQgd2lsbCBiZS4KICAgICBmbG9hdCBkZXN0
Qml0bWFwV2lkdGgsIGRlc3RCaXRtYXBIZWlnaHQ7CiAgICAgVHJhbnNmb3JtRGltZW5zaW9ucyhw
YXR0ZXJuVHJhbnNmb3JtLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmZGVzdEJpdG1hcFdpZHRoLCAmZGVzdEJpdG1hcEhlaWdodCk7
CiAKICAgICAvLyBDb21wdXRlIHRoZSByZXNhbXBsaW5nIG1vZGUuCiAgICAgUmVzYW1wbGluZ01v
ZGUgcmVzYW1wbGluZzsKLSAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmlzQWNj
ZWxlcmF0ZWQoKSkKKyAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmlzQWNjZWxl
cmF0ZWQoKSB8fCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cHJpbnRpbmcoKSkKICAgICAg
ICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYg
KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmludGluZygpKQotICAgICAgICAgICAgcmVz
YW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVz
YW1wbGluZyA9IGNvbXB1dGVSZXNhbXBsaW5nTW9kZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgKmJpdG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCBkZXN0Qml0bWFw
V2lkdGgsIGRlc3RCaXRtYXBIZWlnaHQpOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJlc2Ft
cGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCks
ICpiaXRtYXAsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgZGVzdEJpdG1hcFdp
ZHRoLCBkZXN0Qml0bWFwSGVpZ2h0KTsKIAogICAgIC8vIExvYWQgdGhlIHRyYW5zZm9ybSBXZWJL
aXQgcmVxdWVzdGVkLgogICAgIFNrTWF0cml4IG1hdHJpeChwYXR0ZXJuVHJhbnNmb3JtKTsKIAor
ICAgIFNrU2hhZGVyKiBzaGFkZXI7CiAgICAgaWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdF
U09NRSkgewogICAgICAgICAvLyBEbyBuaWNlIHJlc2FtcGxpbmcuCi0gICAgICAgIFNrQml0bWFw
IHJlc2FtcGxlZDsKICAgICAgICAgaW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihkZXN0Qml0
bWFwV2lkdGgpOwogICAgICAgICBpbnQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihkZXN0Qml0
bWFwSGVpZ2h0KTsKLSAgICAgICAgaWYgKCFzcmNSZWN0LmZMZWZ0ICYmICFzcmNSZWN0LmZUb3AK
LSAgICAgICAgICAgICYmIHNyY1JlY3QuZlJpZ2h0ID09IGJpdG1hcC0+d2lkdGgoKSAmJiBzcmNS
ZWN0LmZCb3R0b20gPT0gYml0bWFwLT5oZWlnaHQoKQotICAgICAgICAgICAgJiYgKGJpdG1hcC0+
aGFzUmVzaXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0KQotICAgICAgICAgICAgICAgIHx8IGJpdG1h
cC0+c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKHdpZHRoLCBoZWlnaHQsIHdpZHRoLCBoZWlnaHQpKSkg
ewotICAgICAgICAgICAgLy8gcmVzaXplZEJpdG1hcCgpIGNhY2hlcyByZXNpemVkIGltYWdlLgot
ICAgICAgICAgICAgcmVzYW1wbGVkID0gYml0bWFwLT5yZXNpemVkQml0bWFwKHdpZHRoLCBoZWln
aHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzYW1wbGVkID0gc2tpYTo6SW1h
Z2VPcGVyYXRpb25zOjpSZXNpemUoc3JjU3Vic2V0LAotICAgICAgICAgICAgICAgIHNraWE6Oklt
YWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
fQorICAgICAgICBTa0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAtPnJlc2l6ZWRCaXRtYXAoc3Jj
UmVjdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIHNoYWRlciA9IFNrU2hhZGVyOjpDcmVhdGVC
aXRtYXBTaGFkZXIocmVzYW1wbGVkLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFk
ZXI6OmtSZXBlYXRfVGlsZU1vZGUpOwogCiAgICAgICAgIC8vIFNpbmNlIHdlIGp1c3QgcmVzaXpl
ZCB0aGUgYml0bWFwLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNjYWxlIHNldCBpbgpAQCAtNDAwLDYg
KzMzMCw4IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwKICAgICAgICAgbWF0cml4LnNldFNjYWxlWShTa0ludFRvU2NhbGFyKDEpKTsKICAgICB9IGVs
c2UgewogICAgICAgICAvLyBObyBuZWVkIHRvIGRvIG5pY2UgcmVzYW1wbGluZy4KKyAgICAgICAg
U2tCaXRtYXAgc3JjU3Vic2V0OworICAgICAgICBiaXRtYXAtPmV4dHJhY3RTdWJzZXQoJnNyY1N1
YnNldCwgc3JjUmVjdCk7CiAgICAgICAgIHNoYWRlciA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBT
aGFkZXIoc3JjU3Vic2V0LCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFkZXI6OmtS
ZXBlYXRfVGlsZU1vZGUpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCmluZGV4IGYwZjRhYTIx
NTcwYzA1ZGU3ZDQ0NTEzMWFmMThhMzI1ZTk0OWIzMGQuLjhmZTExYTM3MjJjYmIyNjJjMTA4MmY1
Njk3ODE3YTIxMzQ0Mzc3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKQEAgLTQwLDcgKzQwLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgp
CiAgICAgOiBtX2lzRGF0YUNvbXBsZXRlKGZhbHNlKSwKLSAgICAgIG1fbGFzdFJlcXVlc3RTaXpl
KDAsIDApLAogICAgICAgbV9yZXNpemVSZXF1ZXN0cygwKQogewogfQpAQCAtNDgsMTIgKzQ3LDEw
IEBAIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKCkKIE5hdGl2ZUltYWdlU2tpYTo6
TmF0aXZlSW1hZ2VTa2lhKGNvbnN0IFNrQml0bWFwJiBvdGhlcikKICAgICA6IFNrQml0bWFwKG90
aGVyKSwKICAgICAgIG1faXNEYXRhQ29tcGxldGUoZmFsc2UpLAotICAgICAgbV9sYXN0UmVxdWVz
dFNpemUoMCwgMCksCiAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCiB7CiB9CiAKLQogTmF0aXZl
SW1hZ2VTa2lhOjp+TmF0aXZlSW1hZ2VTa2lhKCkKIHsKIH0KQEAgLTYzLDMzICs2MCw1MyBAQCBp
bnQgTmF0aXZlSW1hZ2VTa2lhOjpkZWNvZGVkU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGdldFNp
emUoKSArIG1fcmVzaXplZEltYWdlLmdldFNpemUoKTsKIH0KIAotYm9vbCBOYXRpdmVJbWFnZVNr
aWE6Omhhc1Jlc2l6ZWRCaXRtYXAoaW50IHcsIGludCBoKSBjb25zdAorYm9vbCBOYXRpdmVJbWFn
ZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LCBpbnQgZGVz
dFdpZHRoLCBpbnQgZGVzdEhlaWdodCkgY29uc3QKIHsKLSAgICBpZiAobV9sYXN0UmVxdWVzdFNp
emUud2lkdGgoKSA9PSB3ICYmIG1fbGFzdFJlcXVlc3RTaXplLmhlaWdodCgpID09IGgpCi0gICAg
ICAgIG1fcmVzaXplUmVxdWVzdHMrKzsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9sYXN0UmVxdWVz
dFNpemUgPSBJbnRTaXplKHcsIGgpOwotICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2Uud2lkdGgoKSA9PSB3ICYmIG1fcmVzaXpl
ZEltYWdlLmhlaWdodCgpID09IGg7CisgICAgcmV0dXJuIG1fY2FjaGVkSW1hZ2VJbmZvLmlzRXF1
YWwoc3JjU3Vic2V0LCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQpICYmICFtX3Jlc2l6ZWRJbWFnZS5l
bXB0eSgpOwogfQogCi0vLyBGSVhNRTogZG9uJ3QgY2FjaGUgd2hlbiBpbWFnZSBpcyBpbi1wcm9n
cmVzcy4KLQotU2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGludCB3LCBp
bnQgaCkgY29uc3QKK1NrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChjb25z
dCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTa0lSZWN0JiBkZXN0VmlzaWJsZVN1YnNldCkgY29uc3QKIHsKLSAgICBpZiAo
bV9yZXNpemVkSW1hZ2Uud2lkdGgoKSAhPSB3IHx8IG1fcmVzaXplZEltYWdlLmhlaWdodCgpICE9
IGgpCi0gICAgICAgIG1fcmVzaXplZEltYWdlID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNp
emUoKnRoaXMsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCB3LCBoKTsK
KyAgICBpZiAoIWhhc1Jlc2l6ZWRCaXRtYXAoc3JjU3Vic2V0LCBkZXN0V2lkdGgsIGRlc3RIZWln
aHQpKSB7CisgICAgICAgIGJvb2wgc2hvdWxkQ2FjaGUgPSBtX2lzRGF0YUNvbXBsZXRlCisgICAg
ICAgICAgICAmJiBzaG91bGRDYWNoZVJlc2FtcGxpbmcoc3JjU3Vic2V0LCBkZXN0V2lkdGgsIGRl
c3RIZWlnaHQsIGRlc3RWaXNpYmxlU3Vic2V0KTsKKworICAgICAgICBTa0JpdG1hcCBzdWJzZXQ7
CisgICAgICAgIGV4dHJhY3RTdWJzZXQoJnN1YnNldCwgc3JjU3Vic2V0KTsKKyAgICAgICAgaWYg
KCFzaG91bGRDYWNoZSkgeworICAgICAgICAgICAgLy8gSnVzdCByZXNpemUgdGhlIHZpc2libGUg
c3Vic2V0IGFuZCByZXR1cm4gaXQuCisgICAgICAgICAgICBTa0JpdG1hcCByZXNpemVkSW1hZ2Ug
PSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzdWJzZXQsIHNraWE6OkltYWdlT3BlcmF0
aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQsIGRlc3RWaXNpYmxl
U3Vic2V0KTsKKyAgICAgICAgICAgIHJldHVybiByZXNpemVkSW1hZ2U7CisgICAgICAgIH0KKwor
ICAgICAgICBtX3Jlc2l6ZWRJbWFnZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHN1
YnNldCwgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIGRlc3RXaWR0aCwg
ZGVzdEhlaWdodCk7CisgICAgfQogCi0gICAgcmV0dXJuIG1fcmVzaXplZEltYWdlOworICAgIFNr
Qml0bWFwIHZpc2libGVCaXRtYXA7CisgICAgbV9yZXNpemVkSW1hZ2UuZXh0cmFjdFN1YnNldCgm
dmlzaWJsZUJpdG1hcCwgZGVzdFZpc2libGVTdWJzZXQpOworICAgIHJldHVybiB2aXNpYmxlQml0
bWFwOwogfQogCi1ib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKGlu
dCBkZXN0V2lkdGgsCitib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNhbXBsaW5n
KGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGRlc3RXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRlc3RIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0V2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0KSBjb25z
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lS
ZWN0JiBkZXN0VmlzaWJsZVN1YnNldCkgY29uc3QKIHsKKyAgICAvLyBDaGVjayB3aGV0aGVyIHRo
ZSByZXF1ZXN0ZWQgZGltZW5zaW9ucyBtYXRjaCBwcmV2aW91cyByZXF1ZXN0LgorICAgIGJvb2wg
bWF0Y2hlc1ByZXZpb3VzUmVxdWVzdCA9IG1fY2FjaGVkSW1hZ2VJbmZvLmlzRXF1YWwoc3JjU3Vi
c2V0LCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQpOworICAgIGlmIChtYXRjaGVzUHJldmlvdXNSZXF1
ZXN0KQorICAgICAgICArK21fcmVzaXplUmVxdWVzdHM7CisgICAgZWxzZSB7CisgICAgICAgIG1f
Y2FjaGVkSW1hZ2VJbmZvLnNldChzcmNTdWJzZXQsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7Cisg
ICAgICAgIG1fcmVzaXplUmVxdWVzdHMgPSAwOworICAgICAgICAvLyBSZXNldCBtX3Jlc2l6ZWRJ
bWFnZSBub3csIGJlY2F1c2Ugd2UgZG9uJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKKyAgICAg
ICAgLy8gbGFzdCByZXF1ZXN0ZWQgcmVzaXplIGluZm8gYW5kIG1fcmVzaXplZEltYWdlJ3MgcmVz
aXplIGluZm8uCisgICAgICAgIG1fcmVzaXplZEltYWdlLnJlc2V0KCk7CisgICAgfQorCiAgICAg
Ly8gV2UgY2FuIG5vdCBjYWNoZSBpbmNvbXBsZXRlIGZyYW1lcy4gVGhpcyBtaWdodCBiZSBhIGdv
b2Qgb3B0aW1pemF0aW9uIGluCiAgICAgLy8gdGhlIGZ1dHVyZSwgd2VyZSB3ZSBrbm93IGhvdyBt
dWNoIG9mIHRoZSBmcmFtZSBoYXMgYmVlbiBkZWNvZGVkLCBzbyB3aGVuCiAgICAgLy8gd2UgaW5j
cmVtZW50YWxseSBkcmF3IG1vcmUgb2YgdGhlIGltYWdlLCB3ZSBvbmx5IGhhdmUgdG8gcmVzYW1w
bGUgdGhlCkBAIC0xMDYsMjIgKzEyMywzMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hvdWxk
Q2FjaGVSZXNhbXBsaW5nKGludCBkZXN0V2lkdGgsCiAgICAgLy8gSWYgInRvbyBtYW55IiByZXF1
ZXN0cyBoYXZlIGJlZW4gbWFkZSBmb3IgdGhpcyBiaXRtYXAsIHdlIGFzc3VtZSB0aGF0CiAgICAg
Ly8gbWFueSBtb3JlIHdpbGwgYmUgbWFkZSBhcyB3ZWxsLCBhbmQgd2UnbGwgZ28gYWhlYWQgYW5k
IGNhY2hlIGl0LgogICAgIHN0YXRpYyBjb25zdCBpbnQga01hbnlSZXF1ZXN0VGhyZXNob2xkID0g
NDsKLSAgICBpZiAobV9sYXN0UmVxdWVzdFNpemUud2lkdGgoKSA9PSBkZXN0V2lkdGggJiYKLSAg
ICAgICAgbV9sYXN0UmVxdWVzdFNpemUuaGVpZ2h0KCkgPT0gZGVzdEhlaWdodCkgewotICAgICAg
ICBpZiAobV9yZXNpemVSZXF1ZXN0cyA+PSBrTWFueVJlcXVlc3RUaHJlc2hvbGQpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXaGVuIGEgZGlmZmVy
ZW50IHNpemUgaXMgYmVpbmcgcmVxdWVzdGVkLCBjb3VudCB0aGlzIGFzIGEgcXVlcnkKLSAgICAg
ICAgLy8gKGhhc1Jlc2l6ZWRCaXRtYXApIGFuZCByZXNldCB0aGUgY291bnRlci4KLSAgICAgICAg
bV9sYXN0UmVxdWVzdFNpemUgPSBJbnRTaXplKGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7Ci0gICAg
ICAgIG1fcmVzaXplUmVxdWVzdHMgPSAwOwotICAgIH0KKyAgICBpZiAobV9yZXNpemVSZXF1ZXN0
cyA+PSBrTWFueVJlcXVlc3RUaHJlc2hvbGQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gSWYgbW9yZSB0aGFuIDEvNCBvZiB0aGUgcmVzaXplZCBpbWFnZSBpcyB2aXNpYmxlLCBpdCdz
IHdvcnRoIGNhY2hpbmcuCisgICAgaW50IGRlc3RWaXNpYmxlU2l6ZSA9IGRlc3RWaXNpYmxlU3Vi
c2V0LndpZHRoKCkgKiBkZXN0VmlzaWJsZVN1YnNldC5oZWlnaHQoKTsKKyAgICByZXR1cm4gKGRl
c3RWaXNpYmxlU2l6ZSA+IChkZXN0V2lkdGggKiBkZXN0SGVpZ2h0KSAvIDQpOworfQogCi0gICAg
Ly8gT3RoZXJ3aXNlLCB1c2UgdGhlIGhldXJpc3RpYyB0aGF0IGlmIG1vcmUgdGhhbiAxLzQgb2Yg
dGhlIGltYWdlIGlzCi0gICAgLy8gcmVxdWVzdGVkLCBpdCdzIHdvcnRoIGNhY2hpbmcuCi0gICAg
aW50IGRlc3RTaXplID0gZGVzdFdpZHRoICogZGVzdEhlaWdodDsKLSAgICBpbnQgZGVzdFN1YnNl
dFNpemUgPSBkZXN0U3Vic2V0V2lkdGggKiBkZXN0U3Vic2V0SGVpZ2h0OwotICAgIHJldHVybiBk
ZXN0U2l6ZSAvIDQgPCBkZXN0U3Vic2V0U2l6ZTsKK05hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1h
Z2VJbmZvOjpDYWNoZWRJbWFnZUluZm8oKQoreworICAgIHNyY1N1YnNldC5zZXRFbXB0eSgpOwor
fQorCitib29sIE5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjppc0VxdWFsKGNvbnN0
IFNrSVJlY3QmIG90aGVyU3JjU3Vic2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNyY1N1YnNldCA9PSBvdGhlclNyY1N1YnNldAorICAgICAgICAmJiByZXF1
ZXN0U2l6ZS53aWR0aCgpID09IHdpZHRoCisgICAgICAgICYmIHJlcXVlc3RTaXplLmhlaWdodCgp
ID09IGhlaWdodDsKK30KKwordm9pZCBOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6
c2V0KGNvbnN0IFNrSVJlY3QmIG90aGVyU3JjU3Vic2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
Cit7CisgICAgc3JjU3Vic2V0ID0gb3RoZXJTcmNTdWJzZXQ7CisgICAgcmVxdWVzdFNpemUuc2V0
V2lkdGgod2lkdGgpOworICAgIHJlcXVlc3RTaXplLnNldEhlaWdodChoZWlnaHQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuaAppbmRleCAwMGIwYTY4NTA2NWI0Mjdk
YTExYzk0YWRkZDY1YWE5M2U0ZmNkYWQ0Li5lMTEzNWVhOGFiNTRiNTYwYjVkOTI4YjhlZWQwMzRl
NDJiMGQwYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL05hdGl2ZUltYWdlU2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgTmF0
aXZlSW1hZ2VTa2lhX2gKIAogI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tSZWN0
LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Mywz
MCArNjQsNTggQEAgcHVibGljOgogCiAgICAgLy8gV2UgY2FuIGtlZXAgYSByZXNpemVkIHZlcnNp
b24gb2YgdGhlIGJpdG1hcCBjYWNoZWQgb24gdGhpcyBvYmplY3QuCiAgICAgLy8gVGhpcyBmdW5j
dGlvbiB3aWxsIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhl
Ci0gICAgLy8gZ2l2ZW4gaW1hZ2Ugc3Vic2V0IHdpdGggdGhlIGdpdmVuIGRpbWVuc2lvbnMuCi0g
ICAgYm9vbCBoYXNSZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7Cisg
ICAgLy8gZ2l2ZW4gaW1hZ2Ugc3Vic2V0IHdpdGggdGhlIGdpdmVuIGRpbWVuc2lvbnMgYW5kIHN1
YnNldHMuCisgICAgYm9vbCBoYXNSZXNpemVkQml0bWFwKGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNl
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKKworICAgIC8vIFRoaXMgd2lsbCByZXR1
cm4gYW4gZXhpc3RpbmcgcmVzaXplZCBpbWFnZSBzdWJzZXQsIG9yIGdlbmVyYXRlIGEgbmV3IG9u
ZQorICAgIC8vIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgc3Vic2V0cyBhbmQgcG9zc2libHkg
Y2FjaGUgaXQuCisgICAgLy8gc3JjU3Vic2V0IGlzIHRoZSBzdWJzZXQgb2YgdGhlIGltYWdlIHRv
IHJlc2l6ZSBpbiBpbWFnZSBzcGFjZS4KKyAgICBTa0JpdG1hcCByZXNpemVkQml0bWFwKGNvbnN0
IFNrSVJlY3QmIHNyY1N1YnNldCwgaW50IGRlc3RXaWR0aCwgaW50IGRlc3RIZWlnaHQpIGNvbnN0
CisgICAgeworICAgICAgICBTa0lSZWN0IGRlc3RWaXNpYmxlU3Vic2V0ID0gezAsIDAsIGRlc3RX
aWR0aCwgZGVzdEhlaWdodH07CisgICAgICAgIHJldHVybiByZXNpemVkQml0bWFwKHNyY1N1YnNl
dCwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0LCBkZXN0VmlzaWJsZVN1YnNldCk7CisgICAgfQorCisg
ICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHJldHVybnMgYSBzdWJzZXQgb2YgdGhlIGRlc3RpbmF0
aW9uIGltYWdlIChpZTogdGhlCisgICAgLy8gdmlzaWJsZSBzdWJzZXQpLiBkZXN0VmlzaWJsZVN1
YnNldCBpcyB0aGUgc3Vic2V0IG9mIHRoZSByZXNpemVkCisgICAgLy8gKGRlc3RXaWR0aCB4IGRl
c3RIZWlnaHQpIGltYWdlLgorICAgIC8vIEluIG90aGVyIHdvcmRzOgorICAgIC8vIC0gY3JvcCBp
bWFnZSBieSBzcmNTdWJzZXQgLT4gaW1hZ2VTdWJzZXQuCisgICAgLy8gLSByZXNpemUgaW1hZ2VT
dWJzZXQgdG8gZGVzdFdpZHRoIHggZGVzdEhlaWdodCAtPiBkZXN0SW1hZ2UuCisgICAgLy8gLSBy
ZXR1cm4gZGVzdEltYWdlIGNyb3BwZWQgYnkgZGVzdFZpc2libGVTdWJzZXQuCisgICAgU2tCaXRt
YXAgcmVzaXplZEJpdG1hcChjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGludCBkZXN0V2lkdGgs
IGludCBkZXN0SGVpZ2h0LCBjb25zdCBTa0lSZWN0JiBkZXN0VmlzaWJsZVN1YnNldCkgY29uc3Q7
CiAKLSAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIGFuIGV4aXN0aW5nIHJlc2l6ZWQgaW1hZ2UsIG9y
IGdlbmVyYXRlIGEgbmV3IG9uZSBvZgotICAgIC8vIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgc3Rv
cmUgaXQgaW4gdGhlIGNhY2hlLiBTdWJzZXR0ZWQgaW1hZ2VzIGNhbiBub3QKLSAgICAvLyBiZSBj
YWNoZWQgdW5sZXNzIHRoZSBzdWJzZXQgaXMgdGhlIGVudGlyZSBiaXRtYXAuCi0gICAgU2tCaXRt
YXAgcmVzaXplZEJpdG1hcChpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OworcHJpdmF0ZToK
KyAgICAvLyBDYWNoZWRJbWFnZUluZm8gaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBjYWNo
ZWQgb3IgcmVxdWVzdGVkIGltYWdlCisgICAgLy8gcmVzaXplcy4KKyAgICBzdHJ1Y3QgQ2FjaGVk
SW1hZ2VJbmZvIHsKKyAgICAgICAgSW50U2l6ZSByZXF1ZXN0U2l6ZTsKKyAgICAgICAgU2tJUmVj
dCBzcmNTdWJzZXQ7CisKKyAgICAgICAgQ2FjaGVkSW1hZ2VJbmZvKCk7CisKKyAgICAgICAgYm9v
bCBpc0VxdWFsKGNvbnN0IFNrSVJlY3QmIG90aGVyU3JjU3Vic2V0LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpIGNvbnN0OworICAgICAgICB2b2lkIHNldChjb25zdCBTa0lSZWN0JiBvdGhlclNyY1N1
YnNldCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICB9OwogCiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBnaXZlbiByZXNpemUgb3BlcmF0aW9uIHNob3VsZCBlaXRoZXIgcmVzaXplIHRo
ZSB3aG9sZQogICAgIC8vIGltYWdlIGFuZCBjYWNoZSBpdCwgb3IgcmVzaXplIGp1c3QgdGhlIHBh
cnQgaXQgbmVlZHMgYW5kIHRocm93IHRoZSByZXN1bHQKICAgICAvLyBhd2F5LgogICAgIC8vCisg
ICAgLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG1heSBpbmNyZW1lbnQgYSByZXF1ZXN0IGNvdW50
IHRoYXQgY2FuIGNoYW5nZSB0aGUKKyAgICAvLyByZXN1bHQgb2Ygc3Vic2VxdWVudCBjYWxscy4K
KyAgICAvLwogICAgIC8vIE9uIHRoZSBvbmUgaGFuZCwgaWYgb25seSBhIHNtYWxsIHN1YnNldCBp
cyBkZXNpcmVkLCB0aGVuIHdlIHdpbGwgd2FzdGUgYQogICAgIC8vIGxvdCBvZiB0aW1lIHJlc2Ft
cGxpbmcgdGhlIGVudGlyZSB0aGluZywgc28gd2Ugb25seSB3YW50IHRvIGRvIGV4YWN0bHkKICAg
ICAvLyB3aGF0J3MgcmVxdWlyZWQuIE9uIHRoZSBvdGhlciBoYW5kLCByZXNhbXBsaW5nIHRoZSBl
bnRpcmUgYml0bWFwIGlzCiAgICAgLy8gYmV0dGVyIGlmIHdlJ3JlIGdvaW5nIHRvIGJlIHVzaW5n
IGl0IG1vcmUgdGhhbiBvbmNlIChsaWtlIGEgYml0bWFwCiAgICAgLy8gc2Nyb2xsaW5nIG9uIGFu
ZCBvZmYgdGhlIHNjcmVlbi4gU2luY2Ugd2Ugb25seSBjYWNoZSB3aGVuIGRvaW5nIHRoZQogICAg
IC8vIGVudGlyZSB0aGluZywgaXQncyBiZXN0IHRvIGp1c3QgZG8gaXQgdXAgZnJvbnQuCi0gICAg
Ym9vbCBzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKKyAgICBib29sIHNob3Vs
ZENhY2hlUmVzYW1wbGluZyhjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRlc3RXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZGVzdEhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVzdFN1YnNldFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZXN0U3Vic2V0SGVpZ2h0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0KSBjb25zdDsKIAotcHJpdmF0ZToKICAgICAvLyBTZXQg
dG8gdHJ1ZSB3aGVuIHRoZSBkYXRhIGlzIGNvbXBsZXRlLiBCZWZvcmUgdGhlIGVudGlyZSBpbWFn
ZSBoYXMKICAgICAvLyBsb2FkZWQsIHdlIGRvIG5vdCB3YW50IHRvIGNhY2hlIGEgcmVzaXplLgog
ICAgIGJvb2wgbV9pc0RhdGFDb21wbGV0ZTsKQEAgLTk3LDE0ICsxMjYsMTcgQEAgcHJpdmF0ZToK
ICAgICAvLyBSZWZlcmVuY2VzIGhvdyBtYW55IHRpbWVzIHRoYXQgdGhlIGltYWdlIHNpemUgaGFz
IGJlZW4gcmVxdWVzdGVkIGZvcgogICAgIC8vIHRoZSBsYXN0IHNpemUuCiAgICAgLy8KLSAgICAv
LyBFdmVyeSB0aW1lIHdlIGdldCBhIHJlcXVlc3QsIGlmIGl0IG1hdGNoZXMgdGhlIG1fbGFzdFJl
cXVlc3RTaXplLCB3ZSdsbAotICAgIC8vIGluY3JlbWVudCB0aGUgY291bnRlciwgYW5kIGlmIG5v
dCwgd2UnbGwgcmVzZXQgdGhlIGNvdW50ZXIgYW5kIHNhdmUgdGhlCi0gICAgLy8gc2l6ZS4KKyAg
ICAvLyBFdmVyeSB0aW1lIHdlIGdldCBhIGNhbGwgdG8gc2hvdWxkQ2FjaGVSZXNhbXBsaW5nLCBp
ZiBpdCBtYXRjaGVzIHRoZQorICAgIC8vIG1fY2FjaGVkSW1hZ2VJbmZvLCB3ZSdsbCBpbmNyZW1l
bnQgdGhlIGNvdW50ZXIsIGFuZCBpZiBub3QsIHdlJ2xsIHJlc2V0CisgICAgLy8gdGhlIGNvdW50
ZXIgYW5kIHNhdmUgdGhlIGRpbWVuc2lvbnMuCiAgICAgLy8KICAgICAvLyBUaGlzIGFsbG93cyB1
cyB0byBzZWUgaWYgbWFueSByZXF1ZXN0cyBoYXZlIGJlZW4gbWFkZSBmb3IgdGhlIHNhbWUKICAg
ICAvLyByZXNpemVkIGltYWdlLCB3ZSBrbm93IHRoYXQgd2Ugc2hvdWxkIHByb2JhYmx5IGNhY2hl
IGl0LCBldmVuIGlmIGFsbCBvZgogICAgIC8vIHRob3NlIHJlcXVlc3RzIGluZGl2aWR1YWxseSBh
cmUgc21hbGwgYW5kIHdvdWxkIG5vdCBvdGhlcndpc2UgYmUgY2FjaGVkLgotICAgIG11dGFibGUg
SW50U2l6ZSBtX2xhc3RSZXF1ZXN0U2l6ZTsKKyAgICAvLworICAgIC8vIFdlIGFsc28gdHJhY2sg
dGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc3Vic2V0cyBmb3IgY2FjaGluZyBwYXJ0aWFsCisg
ICAgLy8gaW1hZ2UgcmVzaXplcy4KKyAgICBtdXRhYmxlIENhY2hlZEltYWdlSW5mbyBtX2NhY2hl
ZEltYWdlSW5mbzsKICAgICBtdXRhYmxlIGludCBtX3Jlc2l6ZVJlcXVlc3RzOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104711</attachid>
            <date>2011-08-22 12:08:50 -0700</date>
            <delta_ts>2011-08-22 13:51:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65587-20110822120848.patch</filename>
            <type>text/plain</type>
            <size>24335</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBkZjY1ZjA3MTNiYjIzNzg0MWFl
ZDljOTViMDgzODhiZGJlZjM1ZTVlLi4zYjM5YTEzZjFmMzc0MjliMjNhYzVlNDM4NmU3ODQzMDQw
MWZiMDg3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CkBAIC0zNjMzLDYgKzM2MzMsMTAgQEAgQlVHV0s2NTQ1MyBNQUMgOiBm
YXN0L2Nzcy9vdXRsaW5lLWF1dG8tZW1wdHktcmVjdHMuaHRtbCA9IElNQUdFCiAKIEJVR1dLNjU0
NjIgVklTVEEgOiBodHRwL3Rlc3RzL2NhY2hlL2hpc3Rvcnktb25seS1jYWNoZWQtc3VicmVzb3Vy
Y2UtbG9hZHMtbWF4LWFnZS1odHRwcy5odG1sID0gUEFTUyBUSU1FT1VUCiAKKy8vIE5lZWRzIG5l
dyBiYXNlbGluZXMgZm9yIGNoYW5nZSB0byBpbWFnZSByZXNpemUgY2FjaGluZyBjb2RlLgorQlVH
V0s2NTU4NyA6IHN2Zy9keW5hbWljLXVwZGF0ZXMvU1ZHRkVJbWFnZUVsZW1lbnQtZG9tLXByZXNl
cnZlQXNwZWN0UmF0aW8tYXR0ci5odG1sID0gSU1BR0UKK0JVR1dLNjU1ODcgOiBzdmcvZHluYW1p
Yy11cGRhdGVzL1NWR0ZFSW1hZ2VFbGVtZW50LXN2Z2RvbS1wcmVzZXJ2ZUFzcGVjdFJhdGlvLXBy
b3AuaHRtbCA9IElNQUdFCisKIC8vIEludHJvZHVjZWQgaW4gcjkyMjk4LCB3aGljaCBtaWdodCBj
YXVzZSBhbm90aGVyIHRlc3QgY3Jhc2hpbmcuCiBCVUdaTU8gU0tJUCA6IGZhc3QvbG9hZGVyL3Jl
bG9hZC16ZXJvLWJ5dGUtcGx1Z2luLmh0bWwgPSBGQUlMCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhODI4Y2Vj
MDAzMjMxNzQ3MWE3YThiMTg3MWU1M2JlMWM1ZmIxNjNmLi5mMzE3OGNhZWI3OTE3ZjNlZjRhMDU1
MDY3Nzc1N2Q4OTQ0NWE3YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDgt
MTcgIEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnRl
ZCBza2lhIHN1cHBvcnQgZm9yIGNhY2hpbmcgcmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTg3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwg
cmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcyB3b3VsZCBub3QgYmUgY2FjaGVkLiBUaGlzIGNhdXNl
cyB2YXJpb3VzIHdlYnNpdGVzIHRvIGhhdmUgamFua3kgQ1NTIGFuaW1hdGlvbnMgaW4gc29mdHdh
cmUgY29tcG9zaXRpbmcgbW9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZXNhbXBsZWRCaXRtYXApOiBD
aGFuZ2VkIHRvIHVzZSBuZXcgQVBJcyBmb3Igc3Vic2V0IGNhY2hpbmcuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOiBBZGRlZCBhbGxvd0NhY2hpbmcgcGFyYW1ldGVyLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFn
ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUlu
Zm86OmlzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJ
bWFnZUluZm86OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6Omhhc1Jl
c2l6ZWRCaXRtYXApOiBDaGFuZ2VkIHRoaXMgbWV0aG9kIHNvIHRoYXQgaXQgZG9lcyBub3QgbW9k
aWZ5IGNhY2hpbmcgZGF0YS4gQWRkZWQgYSBzZWNvbmQgdmVyc2lvbiB1c2VkIGZvciBjcm9wcGVk
IGltYWdlIHJlc2l6ZXMuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OnJlc2l6
ZWRCaXRtYXApOiBBZGRlZCBwYXJhbWV0ZXIgdG8gbGV0IGNhbGxlciBzcGVjaWZ5IHdoZXRoZXIg
Y2FjaGluZyBpcyBhbGxvd2VkLgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpz
aG91bGRDYWNoZVJlc2FtcGxpbmcpOiBBZGRlZCBhIHNlY29uZCB2ZXJzaW9uIHVzZWQgZm9yIGNy
b3BwZWQgaW1hZ2UgcmVzaXplcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6
c2hvdWxkQ2FjaGVSZXNhbXBsaW5nSW50ZXJuYWwpOiBCb3RoIHNob3VsZENhY2hlUmVzYW1wbGlu
ZyBtZXRob2RzIGNhbGwgZG93biB0byB0aGlzIGZvciB0aGUgc2hhcmVkIGxvZ2ljLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmg6IEFkZGVkIENhY2hl
ZEltYWdlSW5mbyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgY2FjaGVkIG9yIHJlcXVlc3RlZCBp
bWFnZSByZXNpemUgb3BlcmF0aW9uLgorCiAyMDExLTA4LTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxq
b2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBDaHJvbWl1bSBXaW5kb3dz
IGJ1aWxkIGZpeCBhZnRlciByOTMxNDAuIFRha2UgNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCBhZjFiNjM3YjY4YTg3
MTMyOGM4MzhlNWQzZDhjMjM5MGZkN2MxMjQyLi45MzliYWM2ZmM1M2M4OTk4YzUwM2Q1NTJkNTU5
M2M1MmU5YTk5OTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwCkBAIC0xNjEsMjUgKzE2MSwxMSBAQCBzdGF0aWMgUmVzYW1w
bGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRm
b3JtQ29udGV4dAogLy8gc2Nyb2xsaW5nLCBmb3IgZXhhbXBsZSwgd2UgYXJlIG9ubHkgZHJhd2lu
ZyBhIHNtYWxsIHN0cmlwIG9mIHRoZSBpbWFnZS4KIC8vIFJlc2FtcGxpbmcgdGhlIHdob2xlIGlt
YWdlIGV2ZXJ5IHRpbWUgaXMgdmVyeSBzbG93LCBzbyB0aGlzIHNwZWVkcyB1cCB0aGluZ3MKIC8v
IGRyYW1hdGljYWxseS4KKy8vCisvLyBOb3RlOiB0aGlzIGNvZGUgaXMgb25seSB1c2VkIHdoZW4g
dGhlIGNhbnZhcyB0cmFuc2Zvcm1hdGlvbiBpcyBsaW1pdGVkIHRvCisvLyBzY2FsaW5nIG9yIHRy
YW5zbGF0aW9uLgogc3RhdGljIHZvaWQgZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0NhbnZhcyYgY2Fu
dmFzLCBTa1BhaW50JiBwYWludCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0
IFNrSVJlY3QmIHNyY0lSZWN0LCBjb25zdCBTa1JlY3QmIGRlc3RSZWN0KQogewotICAgIC8vIEZp
cnN0IGdldCB0aGUgc3Vic2V0IHdlIG5lZWQuIFRoaXMgaXMgZWZmaWNpZW50IGFuZCBkb2VzIG5v
dCBjb3B5IHBpeGVscy4KLSAgICBTa0JpdG1hcCBzdWJzZXQ7Ci0gICAgYml0bWFwLmV4dHJhY3RT
dWJzZXQoJnN1YnNldCwgc3JjSVJlY3QpOwotICAgIFNrUmVjdCBzcmNSZWN0OwotICAgIHNyY1Jl
Y3Quc2V0KHNyY0lSZWN0KTsKLQotICAgIC8vIFdoZXRoZXIgd2UncmUgZG9pbmcgYSBzdWJzZXQg
b3IgdXNpbmcgdGhlIGZ1bGwgc291cmNlIGltYWdlLgotICAgIGJvb2wgc3JjSXNGdWxsID0gc3Jj
SVJlY3QuZkxlZnQgPT0gMCAmJiBzcmNJUmVjdC5mVG9wID09IDAKLSAgICAgICAgJiYgc3JjSVJl
Y3Qud2lkdGgoKSA9PSBiaXRtYXAud2lkdGgoKQotICAgICAgICAmJiBzcmNJUmVjdC5oZWlnaHQo
KSA9PSBiaXRtYXAuaGVpZ2h0KCk7Ci0KLSAgICAvLyBXZSB3aWxsIGFsd2F5cyBkcmF3IGluIGlu
dGVnZXIgc2l6ZXMsIHNvIHJvdW5kIHRoZSBkZXN0aW5hdGlvbiByZWN0LgotICAgIFNrSVJlY3Qg
ZGVzdFJlY3RSb3VuZGVkOwotICAgIGRlc3RSZWN0LnJvdW5kKCZkZXN0UmVjdFJvdW5kZWQpOwot
ICAgIFNrSVJlY3QgcmVzaXplZEltYWdlUmVjdCA9ICAvLyBSZXByZXNlbnRzIHRoZSBzaXplIG9m
IHRoZSByZXNpemVkIGltYWdlLgotICAgICAgICB7IDAsIDAsIGRlc3RSZWN0Um91bmRlZC53aWR0
aCgpLCBkZXN0UmVjdFJvdW5kZWQuaGVpZ2h0KCkgfTsKLQogICAgIC8vIEFwcGx5IGZvcndhcmQg
dHJhbnNmb3JtIHRvIGRlc3RSZWN0IHRvIGVzdGltYXRlIHJlcXVpcmVkIHNpemUgb2YKICAgICAv
LyByZS1zYW1wbGVkIGJpdG1hcCwgYW5kIHVzZSBvbmx5IGluIGNhbGxzIHJlcXVpcmVkIHRvIHJl
c2l6ZSwgb3IgdGhhdAogICAgIC8vIGNoZWNrIGZvciB0aGUgcmVxdWlyZWQgc2l6ZS4KQEAgLTE4
OCw3MCArMTc0LDM1IEBAIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMm
IGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgU2tJUmVjdCBkZXN0
UmVjdFRyYW5zZm9ybWVkUm91bmRlZDsKICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkLnJvdW5kKCZk
ZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZCk7CiAKLSAgICBpZiAoc3JjSXNGdWxsICYmIGJpdG1h
cC5oYXNSZXNpemVkQml0bWFwKGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRl
c3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpKSkgewotICAgICAgICAvLyBZYXksIHRo
aXMgYml0bWFwIGZyYW1lIGFscmVhZHkgaGFzIGEgcmVzaXplZCB2ZXJzaW9uLgotICAgICAgICBT
a0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAucmVzaXplZEJpdG1hcChkZXN0UmVjdFRyYW5zZm9y
bWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSk7
Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0LCAm
cGFpbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gQ29tcHV0ZSB0aGUgdmlz
aWJsZSBwb3J0aW9uIG9mIG91ciByZWN0LgotICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb21wdXRl
IHRoZSB0cmFuc2Zvcm1lZCBwb3J0aW9uIG9mIHRoZQotICAgIC8vIHZpc2libGUgcG9ydGlvbiBm
b3IgdXNlIGJlbG93LgotICAgIFNrUmVjdCBkZXN0Qml0bWFwU3Vic2V0U2s7Ci0gICAgQ2xpcFJl
Y3RUb0NhbnZhcyhjYW52YXMsIGRlc3RSZWN0LCAmZGVzdEJpdG1hcFN1YnNldFNrKTsKLSAgICBT
a1JlY3QgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkOwotICAgIGNhbnZhcy5nZXRUb3RhbE1h
dHJpeCgpLm1hcFJlY3QoJmRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZCwgZGVzdEJpdG1hcFN1
YnNldFNrKTsKLSAgICBkZXN0Qml0bWFwU3Vic2V0U2sub2Zmc2V0KC1kZXN0UmVjdC5mTGVmdCwg
LWRlc3RSZWN0LmZUb3ApOworICAgIFNrUmVjdCBkZXN0UmVjdFZpc2libGVTdWJzZXQ7CisgICAg
Q2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RSZWN0LCAmZGVzdFJlY3RWaXNpYmxlU3Vic2V0
KTsKKyAgICAvLyBDbGlwUmVjdFRvQ2FudmFzIG9mdGVuIG92ZXJzaG9vdHMsIHJlc3VsdGluZyBp
biBhIGxhcmdlciByZWdpb24gdGhhbiBvdXIKKyAgICAvLyBvcmlnaW5hbCBkZXN0UmVjdC4gSW50
ZXJzZWN0aW5nIGdldHMgdXMgYmFjayBpbnNpZGUuCisgICAgaWYgKCFkZXN0UmVjdFZpc2libGVT
dWJzZXQuaW50ZXJzZWN0KGRlc3RSZWN0KSkKKyAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHZp
c2libGUgaW4gZGVzdFJlY3QuCisKKyAgICAvLyBDb21wdXRlIHRoZSB0cmFuc2Zvcm1lZCAoc2Ny
ZWVuIHNwYWNlKSBwb3J0aW9uIG9mIHRoZSB2aXNpYmxlIHBvcnRpb24gZm9yCisgICAgLy8gdXNl
IGJlbG93LgorICAgIFNrUmVjdCBkZXN0UmVjdFZpc2libGVTdWJzZXRUcmFuc2Zvcm1lZDsKKyAg
ICBjYW52YXMuZ2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZkZXN0UmVjdFZpc2libGVTdWJzZXRU
cmFuc2Zvcm1lZCwgZGVzdFJlY3RWaXNpYmxlU3Vic2V0KTsKKyAgICBTa1JlY3QgZGVzdEJpdG1h
cFN1YnNldFRyYW5zZm9ybWVkID0gZGVzdFJlY3RWaXNpYmxlU3Vic2V0VHJhbnNmb3JtZWQ7Cisg
ICAgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkLm9mZnNldCgtZGVzdFJlY3RUcmFuc2Zvcm1l
ZC5mTGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1kZXN0UmVj
dFRyYW5zZm9ybWVkLmZUb3ApOwogICAgIFNrSVJlY3QgZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9y
bWVkUm91bmRlZDsKICAgICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQucm91bmQoJmRlc3RC
aXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQpOwotICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFu
c2Zvcm1lZFJvdW5kZWQub2Zmc2V0KC1kZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5mTGVmdCwg
LWRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmZUb3ApOwotCi0gICAgLy8gVGhlIG1hdHJpeCBp
bnZlcnRpbmcsIGV0Yy4gY291bGQgaGF2ZSBpbnRyb2R1Y2VkIHJvdW5kaW5nIGVycm9yIHdoaWNo
Ci0gICAgLy8gY2F1c2VzIHRoZSBib3VuZHMgdG8gYmUgb3V0c2lkZSBvZiB0aGUgcmVzaXplZCBi
aXRtYXAuIFdlIHJvdW5kIG91dHdhcmQKLSAgICAvLyBzbyB3ZSBhbHdheXMgbGVhbiB0b3dhcmQg
aXQgYmVpbmcgbGFyZ2VyIHJhdGhlciB0aGFuIHNtYWxsZXIgdGhhbiB3ZQotICAgIC8vIG5lZWQs
IGFuZCB0aGVuIGNsYW1wIHRvIHRoZSBiaXRtYXAgYm91bmRzIHNvIHdlIGRvbid0IGdldCBhbnkg
aW52YWxpZAotICAgIC8vIGRhdGEuCi0gICAgU2tJUmVjdCBkZXN0Qml0bWFwU3Vic2V0U2tJOwot
ICAgIGRlc3RCaXRtYXBTdWJzZXRTay5yb3VuZE91dCgmZGVzdEJpdG1hcFN1YnNldFNrSSk7Ci0g
ICAgaWYgKCFkZXN0Qml0bWFwU3Vic2V0U2tJLmludGVyc2VjdChyZXNpemVkSW1hZ2VSZWN0KSkK
LSAgICAgICAgcmV0dXJuOyAgLy8gUmVzaXplZCBpbWFnZSBkb2VzIG5vdCBpbnRlcnNlY3QuCi0K
LSAgICBpZiAoc3JjSXNGdWxsICYmIGJpdG1hcC5zaG91bGRDYWNoZVJlc2FtcGxpbmcoCi0gICAg
ICAgICAgICByZXNpemVkSW1hZ2VSZWN0LndpZHRoKCksCi0gICAgICAgICAgICByZXNpemVkSW1h
Z2VSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNldFNrSS53aWR0aCgp
LAotICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNldFNrSS5oZWlnaHQoKSkpIHsKLSAgICAgICAg
Ly8gV2UncmUgc3VwcG9zZWQgdG8gcmVzaXplIHRoZSBlbnRpcmUgaW1hZ2UgYW5kIGNhY2hlIGl0
LCBldmVuIHRob3VnaAotICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIGFsbCBvZiBpdC4KLSAgICAg
ICAgU2tCaXRtYXAgcmVzYW1wbGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoZGVzdFJlY3RUcmFu
c2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCkpOwot
ICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QocmVzYW1wbGVkLCAwLCBkZXN0UmVjdCwgJnBh
aW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBzaG91bGQgb25seSByZXNpemUgdGhl
IGV4cG9zZWQgcGFydCBvZiB0aGUgYml0bWFwIHRvIGRvIHRoZQotICAgICAgICAvLyBtaW5pbWFs
IHBvc3NpYmxlIHdvcmsuCi0KLSAgICAgICAgLy8gUmVzYW1wbGUgdGhlIG5lZWRlZCBwYXJ0IG9m
IHRoZSBpbWFnZS4KLSAgICAgICAgLy8gVHJhbnNmb3JtcyBhYm92ZSBwbHVzIHJvdW5kaW5nIG1h
eSBjYXVzZSBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkCi0gICAgICAgIC8vIHRv
IGdvIG91dHNpZGUgdGhlIGltYWdlLCBzbyBuZWVkIHRvIGNsaXAgdG8gYXZvaWQgcHJvYmxlbXMu
Ci0gICAgICAgIGlmIChkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkLmludGVyc2Vj
dCgwLCAwLAotICAgICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRo
KCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpKSkgewotCi0gICAgICAgICAg
ICBTa0JpdG1hcCByZXNhbXBsZWQgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzdWJz
ZXQsCi0gICAgICAgICAgICAgICAgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pP
UzMsCi0gICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwg
ZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgZGVz
dEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7Ci0KLSAgICAgICAgICAgIC8vIENvbXB1
dGUgd2hlcmUgdGhlIG5ldyBiaXRtYXAgc2hvdWxkIGJlIGRyYXduLiBTaW5jZSBvdXIgbmV3IGJp
dG1hcAotICAgICAgICAgICAgLy8gbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2luYWwsIHdl
IGhhdmUgdG8gc2hpZnQgaXQgb3ZlciBieSB0aGUKLSAgICAgICAgICAgIC8vIHNhbWUgYW1vdW50
IHRoYXQgd2UgY3V0IG9mZiB0aGUgdG9wIGFuZCBsZWZ0LgotICAgICAgICAgICAgZGVzdEJpdG1h
cFN1YnNldFNrSS5vZmZzZXQoZGVzdFJlY3QuZkxlZnQsIGRlc3RSZWN0LmZUb3ApOwotICAgICAg
ICAgICAgU2tSZWN0IG9mZnNldERlc3RSZWN0OwotICAgICAgICAgICAgb2Zmc2V0RGVzdFJlY3Qu
c2V0KGRlc3RCaXRtYXBTdWJzZXRTa0kpOwotCi0gICAgICAgICAgICBjYW52YXMuZHJhd0JpdG1h
cFJlY3QocmVzYW1wbGVkLCAwLCBvZmZzZXREZXN0UmVjdCwgJnBhaW50KTsKLSAgICAgICAgfQot
ICAgIH0KKworICAgIC8vIFRyYW5zZm9ybXMgYWJvdmUgcGx1cyByb3VuZGluZyBtYXkgY2F1c2Ug
ZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZAorICAgIC8vIHRvIGdvIG91dHNpZGUg
dGhlIGltYWdlLCBzbyBuZWVkIHRvIGNsaXAgdG8gYXZvaWQgcHJvYmxlbXMuCisgICAgaWYgKCFk
ZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkLmludGVyc2VjdCgKKyAgICAgICAgICAg
IDAsIDAsIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNm
b3JtZWRSb3VuZGVkLmhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuOyAvLyBJbWFnZSBpcyBub3Qg
dmlzaWJsZS4KKworICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IGJpdG1hcC5yZXNpemVkQml0bWFw
KHNyY0lSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7CisgICAgY2FudmFzLmRyYXdCaXRtYXBS
ZWN0KHJlc2FtcGxlZCwgMCwgZGVzdFJlY3RWaXNpYmxlU3Vic2V0LCAmcGFpbnQpOwogfQogCiBz
dGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29u
dGV4dCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNrSVJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QsIGNvbnN0IFNrWGZlcm1vZGU6Ok1vZGUmIGNvbXBP
cCkKQEAgLTM0MCw1OCArMjkxLDM3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwKIHsKICAgICBGbG9hdFJlY3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxp
emVSZWN0KGZsb2F0U3JjUmVjdCk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBub3Jt
U3JjUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsgIC8vIG5vdGhpbmcgdG8gZHJhdwor
ICAgICAgICByZXR1cm47IC8vIG5vdGhpbmcgdG8gZHJhdwogCiAgICAgTmF0aXZlSW1hZ2VTa2lh
KiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghYml0bWFw
KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBUaGlzIGlzIGEgdmVyeSBpbmV4cGVuc2l2ZSBv
cGVyYXRpb24uIEl0IHdpbGwgZ2VuZXJhdGUgYSBuZXcgYml0bWFwIGJ1dAotICAgIC8vIGl0IHdp
bGwgaW50ZXJuYWxseSByZWZlcmVuY2UgdGhlIG9sZCBiaXRtYXAncyBwaXhlbHMsIGFkanVzdGlu
ZyB0aGUgcm93Ci0gICAgLy8gc3RyaWRlIHNvIHRoZSBleHRyYSBwaXhlbHMgYXBwZWFyIGFzIHBh
ZGRpbmcgdG8gdGhlIHN1YnNldHRlZCBiaXRtYXAuCi0gICAgU2tCaXRtYXAgc3JjU3Vic2V0Owog
ICAgIFNrSVJlY3Qgc3JjUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qobm9ybVNyY1JlY3QpOwotICAg
IGJpdG1hcC0+ZXh0cmFjdFN1YnNldCgmc3JjU3Vic2V0LCBzcmNSZWN0KTsKLQotICAgIFNrQml0
bWFwIHJlc2FtcGxlZDsKLSAgICBTa1NoYWRlciogc2hhZGVyOwogCiAgICAgLy8gRmlndXJlIG91
dCB3aGF0IHNpemUgdGhlIGJpdG1hcCB3aWxsIGJlIGluIHRoZSBkZXN0aW5hdGlvbi4gVGhlCiAg
ICAgLy8gZGVzdGluYXRpb24gcmVjdCBpcyB0aGUgYm91bmRzIG9mIHRoZSBwYXR0ZXJuLCB3ZSBu
ZWVkIHRvIHVzZSB0aGUKLSAgICAvLyBtYXRyaXggdG8gc2VlIGhvdyBiaXQgaXQgd2lsbCBiZS4K
KyAgICAvLyBtYXRyaXggdG8gc2VlIGhvdyBiaWcgaXQgd2lsbCBiZS4KICAgICBmbG9hdCBkZXN0
Qml0bWFwV2lkdGgsIGRlc3RCaXRtYXBIZWlnaHQ7CiAgICAgVHJhbnNmb3JtRGltZW5zaW9ucyhw
YXR0ZXJuVHJhbnNmb3JtLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmZGVzdEJpdG1hcFdpZHRoLCAmZGVzdEJpdG1hcEhlaWdodCk7
CiAKICAgICAvLyBDb21wdXRlIHRoZSByZXNhbXBsaW5nIG1vZGUuCiAgICAgUmVzYW1wbGluZ01v
ZGUgcmVzYW1wbGluZzsKLSAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmlzQWNj
ZWxlcmF0ZWQoKSkKKyAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmlzQWNjZWxl
cmF0ZWQoKSB8fCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cHJpbnRpbmcoKSkKICAgICAg
ICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYg
KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmludGluZygpKQotICAgICAgICAgICAgcmVz
YW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVz
YW1wbGluZyA9IGNvbXB1dGVSZXNhbXBsaW5nTW9kZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgKmJpdG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCBkZXN0Qml0bWFw
V2lkdGgsIGRlc3RCaXRtYXBIZWlnaHQpOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJlc2Ft
cGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCks
ICpiaXRtYXAsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgZGVzdEJpdG1hcFdp
ZHRoLCBkZXN0Qml0bWFwSGVpZ2h0KTsKIAogICAgIC8vIExvYWQgdGhlIHRyYW5zZm9ybSBXZWJL
aXQgcmVxdWVzdGVkLgogICAgIFNrTWF0cml4IG1hdHJpeChwYXR0ZXJuVHJhbnNmb3JtKTsKIAor
ICAgIFNrU2hhZGVyKiBzaGFkZXI7CiAgICAgaWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdF
U09NRSkgewogICAgICAgICAvLyBEbyBuaWNlIHJlc2FtcGxpbmcuCi0gICAgICAgIFNrQml0bWFw
IHJlc2FtcGxlZDsKICAgICAgICAgaW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihkZXN0Qml0
bWFwV2lkdGgpOwogICAgICAgICBpbnQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihkZXN0Qml0
bWFwSGVpZ2h0KTsKLSAgICAgICAgaWYgKCFzcmNSZWN0LmZMZWZ0ICYmICFzcmNSZWN0LmZUb3AK
LSAgICAgICAgICAgICYmIHNyY1JlY3QuZlJpZ2h0ID09IGJpdG1hcC0+d2lkdGgoKSAmJiBzcmNS
ZWN0LmZCb3R0b20gPT0gYml0bWFwLT5oZWlnaHQoKQotICAgICAgICAgICAgJiYgKGJpdG1hcC0+
aGFzUmVzaXplZEJpdG1hcCh3aWR0aCwgaGVpZ2h0KQotICAgICAgICAgICAgICAgIHx8IGJpdG1h
cC0+c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKHdpZHRoLCBoZWlnaHQsIHdpZHRoLCBoZWlnaHQpKSkg
ewotICAgICAgICAgICAgLy8gcmVzaXplZEJpdG1hcCgpIGNhY2hlcyByZXNpemVkIGltYWdlLgot
ICAgICAgICAgICAgcmVzYW1wbGVkID0gYml0bWFwLT5yZXNpemVkQml0bWFwKHdpZHRoLCBoZWln
aHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzYW1wbGVkID0gc2tpYTo6SW1h
Z2VPcGVyYXRpb25zOjpSZXNpemUoc3JjU3Vic2V0LAotICAgICAgICAgICAgICAgIHNraWE6Oklt
YWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
fQorICAgICAgICBTa0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAtPnJlc2l6ZWRCaXRtYXAoc3Jj
UmVjdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIHNoYWRlciA9IFNrU2hhZGVyOjpDcmVhdGVC
aXRtYXBTaGFkZXIocmVzYW1wbGVkLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFk
ZXI6OmtSZXBlYXRfVGlsZU1vZGUpOwogCiAgICAgICAgIC8vIFNpbmNlIHdlIGp1c3QgcmVzaXpl
ZCB0aGUgYml0bWFwLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNjYWxlIHNldCBpbgpAQCAtNDAwLDYg
KzMzMCw4IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwKICAgICAgICAgbWF0cml4LnNldFNjYWxlWShTa0ludFRvU2NhbGFyKDEpKTsKICAgICB9IGVs
c2UgewogICAgICAgICAvLyBObyBuZWVkIHRvIGRvIG5pY2UgcmVzYW1wbGluZy4KKyAgICAgICAg
U2tCaXRtYXAgc3JjU3Vic2V0OworICAgICAgICBiaXRtYXAtPmV4dHJhY3RTdWJzZXQoJnNyY1N1
YnNldCwgc3JjUmVjdCk7CiAgICAgICAgIHNoYWRlciA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBT
aGFkZXIoc3JjU3Vic2V0LCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFkZXI6OmtS
ZXBlYXRfVGlsZU1vZGUpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCmluZGV4IGYwZjRhYTIx
NTcwYzA1ZGU3ZDQ0NTEzMWFmMThhMzI1ZTk0OWIzMGQuLjhmZTExYTM3MjJjYmIyNjJjMTA4MmY1
Njk3ODE3YTIxMzQ0Mzc3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKQEAgLTQwLDcgKzQwLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgp
CiAgICAgOiBtX2lzRGF0YUNvbXBsZXRlKGZhbHNlKSwKLSAgICAgIG1fbGFzdFJlcXVlc3RTaXpl
KDAsIDApLAogICAgICAgbV9yZXNpemVSZXF1ZXN0cygwKQogewogfQpAQCAtNDgsMTIgKzQ3LDEw
IEBAIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKCkKIE5hdGl2ZUltYWdlU2tpYTo6
TmF0aXZlSW1hZ2VTa2lhKGNvbnN0IFNrQml0bWFwJiBvdGhlcikKICAgICA6IFNrQml0bWFwKG90
aGVyKSwKICAgICAgIG1faXNEYXRhQ29tcGxldGUoZmFsc2UpLAotICAgICAgbV9sYXN0UmVxdWVz
dFNpemUoMCwgMCksCiAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCiB7CiB9CiAKLQogTmF0aXZl
SW1hZ2VTa2lhOjp+TmF0aXZlSW1hZ2VTa2lhKCkKIHsKIH0KQEAgLTYzLDMzICs2MCw1MyBAQCBp
bnQgTmF0aXZlSW1hZ2VTa2lhOjpkZWNvZGVkU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGdldFNp
emUoKSArIG1fcmVzaXplZEltYWdlLmdldFNpemUoKTsKIH0KIAotYm9vbCBOYXRpdmVJbWFnZVNr
aWE6Omhhc1Jlc2l6ZWRCaXRtYXAoaW50IHcsIGludCBoKSBjb25zdAorYm9vbCBOYXRpdmVJbWFn
ZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LCBpbnQgZGVz
dFdpZHRoLCBpbnQgZGVzdEhlaWdodCkgY29uc3QKIHsKLSAgICBpZiAobV9sYXN0UmVxdWVzdFNp
emUud2lkdGgoKSA9PSB3ICYmIG1fbGFzdFJlcXVlc3RTaXplLmhlaWdodCgpID09IGgpCi0gICAg
ICAgIG1fcmVzaXplUmVxdWVzdHMrKzsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9sYXN0UmVxdWVz
dFNpemUgPSBJbnRTaXplKHcsIGgpOwotICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2Uud2lkdGgoKSA9PSB3ICYmIG1fcmVzaXpl
ZEltYWdlLmhlaWdodCgpID09IGg7CisgICAgcmV0dXJuIG1fY2FjaGVkSW1hZ2VJbmZvLmlzRXF1
YWwoc3JjU3Vic2V0LCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQpICYmICFtX3Jlc2l6ZWRJbWFnZS5l
bXB0eSgpOwogfQogCi0vLyBGSVhNRTogZG9uJ3QgY2FjaGUgd2hlbiBpbWFnZSBpcyBpbi1wcm9n
cmVzcy4KLQotU2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGludCB3LCBp
bnQgaCkgY29uc3QKK1NrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChjb25z
dCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTa0lSZWN0JiBkZXN0VmlzaWJsZVN1YnNldCkgY29uc3QKIHsKLSAgICBpZiAo
bV9yZXNpemVkSW1hZ2Uud2lkdGgoKSAhPSB3IHx8IG1fcmVzaXplZEltYWdlLmhlaWdodCgpICE9
IGgpCi0gICAgICAgIG1fcmVzaXplZEltYWdlID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNp
emUoKnRoaXMsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCB3LCBoKTsK
KyAgICBpZiAoIWhhc1Jlc2l6ZWRCaXRtYXAoc3JjU3Vic2V0LCBkZXN0V2lkdGgsIGRlc3RIZWln
aHQpKSB7CisgICAgICAgIGJvb2wgc2hvdWxkQ2FjaGUgPSBtX2lzRGF0YUNvbXBsZXRlCisgICAg
ICAgICAgICAmJiBzaG91bGRDYWNoZVJlc2FtcGxpbmcoc3JjU3Vic2V0LCBkZXN0V2lkdGgsIGRl
c3RIZWlnaHQsIGRlc3RWaXNpYmxlU3Vic2V0KTsKKworICAgICAgICBTa0JpdG1hcCBzdWJzZXQ7
CisgICAgICAgIGV4dHJhY3RTdWJzZXQoJnN1YnNldCwgc3JjU3Vic2V0KTsKKyAgICAgICAgaWYg
KCFzaG91bGRDYWNoZSkgeworICAgICAgICAgICAgLy8gSnVzdCByZXNpemUgdGhlIHZpc2libGUg
c3Vic2V0IGFuZCByZXR1cm4gaXQuCisgICAgICAgICAgICBTa0JpdG1hcCByZXNpemVkSW1hZ2Ug
PSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzdWJzZXQsIHNraWE6OkltYWdlT3BlcmF0
aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQsIGRlc3RWaXNpYmxl
U3Vic2V0KTsKKyAgICAgICAgICAgIHJldHVybiByZXNpemVkSW1hZ2U7CisgICAgICAgIH0KKwor
ICAgICAgICBtX3Jlc2l6ZWRJbWFnZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHN1
YnNldCwgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIGRlc3RXaWR0aCwg
ZGVzdEhlaWdodCk7CisgICAgfQogCi0gICAgcmV0dXJuIG1fcmVzaXplZEltYWdlOworICAgIFNr
Qml0bWFwIHZpc2libGVCaXRtYXA7CisgICAgbV9yZXNpemVkSW1hZ2UuZXh0cmFjdFN1YnNldCgm
dmlzaWJsZUJpdG1hcCwgZGVzdFZpc2libGVTdWJzZXQpOworICAgIHJldHVybiB2aXNpYmxlQml0
bWFwOwogfQogCi1ib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKGlu
dCBkZXN0V2lkdGgsCitib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNhbXBsaW5n
KGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGRlc3RXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRlc3RIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0V2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0KSBjb25z
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lS
ZWN0JiBkZXN0VmlzaWJsZVN1YnNldCkgY29uc3QKIHsKKyAgICAvLyBDaGVjayB3aGV0aGVyIHRo
ZSByZXF1ZXN0ZWQgZGltZW5zaW9ucyBtYXRjaCBwcmV2aW91cyByZXF1ZXN0LgorICAgIGJvb2wg
bWF0Y2hlc1ByZXZpb3VzUmVxdWVzdCA9IG1fY2FjaGVkSW1hZ2VJbmZvLmlzRXF1YWwoc3JjU3Vi
c2V0LCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQpOworICAgIGlmIChtYXRjaGVzUHJldmlvdXNSZXF1
ZXN0KQorICAgICAgICArK21fcmVzaXplUmVxdWVzdHM7CisgICAgZWxzZSB7CisgICAgICAgIG1f
Y2FjaGVkSW1hZ2VJbmZvLnNldChzcmNTdWJzZXQsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7Cisg
ICAgICAgIG1fcmVzaXplUmVxdWVzdHMgPSAwOworICAgICAgICAvLyBSZXNldCBtX3Jlc2l6ZWRJ
bWFnZSBub3csIGJlY2F1c2Ugd2UgZG9uJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKKyAgICAg
ICAgLy8gbGFzdCByZXF1ZXN0ZWQgcmVzaXplIGluZm8gYW5kIG1fcmVzaXplZEltYWdlJ3MgcmVz
aXplIGluZm8uCisgICAgICAgIG1fcmVzaXplZEltYWdlLnJlc2V0KCk7CisgICAgfQorCiAgICAg
Ly8gV2UgY2FuIG5vdCBjYWNoZSBpbmNvbXBsZXRlIGZyYW1lcy4gVGhpcyBtaWdodCBiZSBhIGdv
b2Qgb3B0aW1pemF0aW9uIGluCiAgICAgLy8gdGhlIGZ1dHVyZSwgd2VyZSB3ZSBrbm93IGhvdyBt
dWNoIG9mIHRoZSBmcmFtZSBoYXMgYmVlbiBkZWNvZGVkLCBzbyB3aGVuCiAgICAgLy8gd2UgaW5j
cmVtZW50YWxseSBkcmF3IG1vcmUgb2YgdGhlIGltYWdlLCB3ZSBvbmx5IGhhdmUgdG8gcmVzYW1w
bGUgdGhlCkBAIC0xMDYsMjIgKzEyMywzMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hvdWxk
Q2FjaGVSZXNhbXBsaW5nKGludCBkZXN0V2lkdGgsCiAgICAgLy8gSWYgInRvbyBtYW55IiByZXF1
ZXN0cyBoYXZlIGJlZW4gbWFkZSBmb3IgdGhpcyBiaXRtYXAsIHdlIGFzc3VtZSB0aGF0CiAgICAg
Ly8gbWFueSBtb3JlIHdpbGwgYmUgbWFkZSBhcyB3ZWxsLCBhbmQgd2UnbGwgZ28gYWhlYWQgYW5k
IGNhY2hlIGl0LgogICAgIHN0YXRpYyBjb25zdCBpbnQga01hbnlSZXF1ZXN0VGhyZXNob2xkID0g
NDsKLSAgICBpZiAobV9sYXN0UmVxdWVzdFNpemUud2lkdGgoKSA9PSBkZXN0V2lkdGggJiYKLSAg
ICAgICAgbV9sYXN0UmVxdWVzdFNpemUuaGVpZ2h0KCkgPT0gZGVzdEhlaWdodCkgewotICAgICAg
ICBpZiAobV9yZXNpemVSZXF1ZXN0cyA+PSBrTWFueVJlcXVlc3RUaHJlc2hvbGQpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXaGVuIGEgZGlmZmVy
ZW50IHNpemUgaXMgYmVpbmcgcmVxdWVzdGVkLCBjb3VudCB0aGlzIGFzIGEgcXVlcnkKLSAgICAg
ICAgLy8gKGhhc1Jlc2l6ZWRCaXRtYXApIGFuZCByZXNldCB0aGUgY291bnRlci4KLSAgICAgICAg
bV9sYXN0UmVxdWVzdFNpemUgPSBJbnRTaXplKGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7Ci0gICAg
ICAgIG1fcmVzaXplUmVxdWVzdHMgPSAwOwotICAgIH0KKyAgICBpZiAobV9yZXNpemVSZXF1ZXN0
cyA+PSBrTWFueVJlcXVlc3RUaHJlc2hvbGQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gSWYgbW9yZSB0aGFuIDEvNCBvZiB0aGUgcmVzaXplZCBpbWFnZSBpcyB2aXNpYmxlLCBpdCdz
IHdvcnRoIGNhY2hpbmcuCisgICAgaW50IGRlc3RWaXNpYmxlU2l6ZSA9IGRlc3RWaXNpYmxlU3Vi
c2V0LndpZHRoKCkgKiBkZXN0VmlzaWJsZVN1YnNldC5oZWlnaHQoKTsKKyAgICByZXR1cm4gKGRl
c3RWaXNpYmxlU2l6ZSA+IChkZXN0V2lkdGggKiBkZXN0SGVpZ2h0KSAvIDQpOworfQogCi0gICAg
Ly8gT3RoZXJ3aXNlLCB1c2UgdGhlIGhldXJpc3RpYyB0aGF0IGlmIG1vcmUgdGhhbiAxLzQgb2Yg
dGhlIGltYWdlIGlzCi0gICAgLy8gcmVxdWVzdGVkLCBpdCdzIHdvcnRoIGNhY2hpbmcuCi0gICAg
aW50IGRlc3RTaXplID0gZGVzdFdpZHRoICogZGVzdEhlaWdodDsKLSAgICBpbnQgZGVzdFN1YnNl
dFNpemUgPSBkZXN0U3Vic2V0V2lkdGggKiBkZXN0U3Vic2V0SGVpZ2h0OwotICAgIHJldHVybiBk
ZXN0U2l6ZSAvIDQgPCBkZXN0U3Vic2V0U2l6ZTsKK05hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1h
Z2VJbmZvOjpDYWNoZWRJbWFnZUluZm8oKQoreworICAgIHNyY1N1YnNldC5zZXRFbXB0eSgpOwor
fQorCitib29sIE5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjppc0VxdWFsKGNvbnN0
IFNrSVJlY3QmIG90aGVyU3JjU3Vic2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNyY1N1YnNldCA9PSBvdGhlclNyY1N1YnNldAorICAgICAgICAmJiByZXF1
ZXN0U2l6ZS53aWR0aCgpID09IHdpZHRoCisgICAgICAgICYmIHJlcXVlc3RTaXplLmhlaWdodCgp
ID09IGhlaWdodDsKK30KKwordm9pZCBOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6
c2V0KGNvbnN0IFNrSVJlY3QmIG90aGVyU3JjU3Vic2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
Cit7CisgICAgc3JjU3Vic2V0ID0gb3RoZXJTcmNTdWJzZXQ7CisgICAgcmVxdWVzdFNpemUuc2V0
V2lkdGgod2lkdGgpOworICAgIHJlcXVlc3RTaXplLnNldEhlaWdodChoZWlnaHQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuaAppbmRleCAwMGIwYTY4NTA2NWI0Mjdk
YTExYzk0YWRkZDY1YWE5M2U0ZmNkYWQ0Li5lMTEzNWVhOGFiNTRiNTYwYjVkOTI4YjhlZWQwMzRl
NDJiMGQwYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL05hdGl2ZUltYWdlU2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgTmF0
aXZlSW1hZ2VTa2lhX2gKIAogI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tSZWN0
LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Mywz
MCArNjQsNTggQEAgcHVibGljOgogCiAgICAgLy8gV2UgY2FuIGtlZXAgYSByZXNpemVkIHZlcnNp
b24gb2YgdGhlIGJpdG1hcCBjYWNoZWQgb24gdGhpcyBvYmplY3QuCiAgICAgLy8gVGhpcyBmdW5j
dGlvbiB3aWxsIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhl
Ci0gICAgLy8gZ2l2ZW4gaW1hZ2Ugc3Vic2V0IHdpdGggdGhlIGdpdmVuIGRpbWVuc2lvbnMuCi0g
ICAgYm9vbCBoYXNSZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7Cisg
ICAgLy8gZ2l2ZW4gaW1hZ2Ugc3Vic2V0IHdpdGggdGhlIGdpdmVuIGRpbWVuc2lvbnMgYW5kIHN1
YnNldHMuCisgICAgYm9vbCBoYXNSZXNpemVkQml0bWFwKGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNl
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKKworICAgIC8vIFRoaXMgd2lsbCByZXR1
cm4gYW4gZXhpc3RpbmcgcmVzaXplZCBpbWFnZSBzdWJzZXQsIG9yIGdlbmVyYXRlIGEgbmV3IG9u
ZQorICAgIC8vIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgc3Vic2V0cyBhbmQgcG9zc2libHkg
Y2FjaGUgaXQuCisgICAgLy8gc3JjU3Vic2V0IGlzIHRoZSBzdWJzZXQgb2YgdGhlIGltYWdlIHRv
IHJlc2l6ZSBpbiBpbWFnZSBzcGFjZS4KKyAgICBTa0JpdG1hcCByZXNpemVkQml0bWFwKGNvbnN0
IFNrSVJlY3QmIHNyY1N1YnNldCwgaW50IGRlc3RXaWR0aCwgaW50IGRlc3RIZWlnaHQpIGNvbnN0
CisgICAgeworICAgICAgICBTa0lSZWN0IGRlc3RWaXNpYmxlU3Vic2V0ID0gezAsIDAsIGRlc3RX
aWR0aCwgZGVzdEhlaWdodH07CisgICAgICAgIHJldHVybiByZXNpemVkQml0bWFwKHNyY1N1YnNl
dCwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0LCBkZXN0VmlzaWJsZVN1YnNldCk7CisgICAgfQorCisg
ICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHJldHVybnMgYSBzdWJzZXQgb2YgdGhlIGRlc3RpbmF0
aW9uIGltYWdlIChpZTogdGhlCisgICAgLy8gdmlzaWJsZSBzdWJzZXQpLiBkZXN0VmlzaWJsZVN1
YnNldCBpcyB0aGUgc3Vic2V0IG9mIHRoZSByZXNpemVkCisgICAgLy8gKGRlc3RXaWR0aCB4IGRl
c3RIZWlnaHQpIGltYWdlLgorICAgIC8vIEluIG90aGVyIHdvcmRzOgorICAgIC8vIC0gY3JvcCBp
bWFnZSBieSBzcmNTdWJzZXQgLT4gaW1hZ2VTdWJzZXQuCisgICAgLy8gLSByZXNpemUgaW1hZ2VT
dWJzZXQgdG8gZGVzdFdpZHRoIHggZGVzdEhlaWdodCAtPiBkZXN0SW1hZ2UuCisgICAgLy8gLSBy
ZXR1cm4gZGVzdEltYWdlIGNyb3BwZWQgYnkgZGVzdFZpc2libGVTdWJzZXQuCisgICAgU2tCaXRt
YXAgcmVzaXplZEJpdG1hcChjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGludCBkZXN0V2lkdGgs
IGludCBkZXN0SGVpZ2h0LCBjb25zdCBTa0lSZWN0JiBkZXN0VmlzaWJsZVN1YnNldCkgY29uc3Q7
CiAKLSAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIGFuIGV4aXN0aW5nIHJlc2l6ZWQgaW1hZ2UsIG9y
IGdlbmVyYXRlIGEgbmV3IG9uZSBvZgotICAgIC8vIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgc3Rv
cmUgaXQgaW4gdGhlIGNhY2hlLiBTdWJzZXR0ZWQgaW1hZ2VzIGNhbiBub3QKLSAgICAvLyBiZSBj
YWNoZWQgdW5sZXNzIHRoZSBzdWJzZXQgaXMgdGhlIGVudGlyZSBiaXRtYXAuCi0gICAgU2tCaXRt
YXAgcmVzaXplZEJpdG1hcChpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OworcHJpdmF0ZToK
KyAgICAvLyBDYWNoZWRJbWFnZUluZm8gaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBjYWNo
ZWQgb3IgcmVxdWVzdGVkIGltYWdlCisgICAgLy8gcmVzaXplcy4KKyAgICBzdHJ1Y3QgQ2FjaGVk
SW1hZ2VJbmZvIHsKKyAgICAgICAgSW50U2l6ZSByZXF1ZXN0U2l6ZTsKKyAgICAgICAgU2tJUmVj
dCBzcmNTdWJzZXQ7CisKKyAgICAgICAgQ2FjaGVkSW1hZ2VJbmZvKCk7CisKKyAgICAgICAgYm9v
bCBpc0VxdWFsKGNvbnN0IFNrSVJlY3QmIG90aGVyU3JjU3Vic2V0LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpIGNvbnN0OworICAgICAgICB2b2lkIHNldChjb25zdCBTa0lSZWN0JiBvdGhlclNyY1N1
YnNldCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICB9OwogCiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBnaXZlbiByZXNpemUgb3BlcmF0aW9uIHNob3VsZCBlaXRoZXIgcmVzaXplIHRo
ZSB3aG9sZQogICAgIC8vIGltYWdlIGFuZCBjYWNoZSBpdCwgb3IgcmVzaXplIGp1c3QgdGhlIHBh
cnQgaXQgbmVlZHMgYW5kIHRocm93IHRoZSByZXN1bHQKICAgICAvLyBhd2F5LgogICAgIC8vCisg
ICAgLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG1heSBpbmNyZW1lbnQgYSByZXF1ZXN0IGNvdW50
IHRoYXQgY2FuIGNoYW5nZSB0aGUKKyAgICAvLyByZXN1bHQgb2Ygc3Vic2VxdWVudCBjYWxscy4K
KyAgICAvLwogICAgIC8vIE9uIHRoZSBvbmUgaGFuZCwgaWYgb25seSBhIHNtYWxsIHN1YnNldCBp
cyBkZXNpcmVkLCB0aGVuIHdlIHdpbGwgd2FzdGUgYQogICAgIC8vIGxvdCBvZiB0aW1lIHJlc2Ft
cGxpbmcgdGhlIGVudGlyZSB0aGluZywgc28gd2Ugb25seSB3YW50IHRvIGRvIGV4YWN0bHkKICAg
ICAvLyB3aGF0J3MgcmVxdWlyZWQuIE9uIHRoZSBvdGhlciBoYW5kLCByZXNhbXBsaW5nIHRoZSBl
bnRpcmUgYml0bWFwIGlzCiAgICAgLy8gYmV0dGVyIGlmIHdlJ3JlIGdvaW5nIHRvIGJlIHVzaW5n
IGl0IG1vcmUgdGhhbiBvbmNlIChsaWtlIGEgYml0bWFwCiAgICAgLy8gc2Nyb2xsaW5nIG9uIGFu
ZCBvZmYgdGhlIHNjcmVlbi4gU2luY2Ugd2Ugb25seSBjYWNoZSB3aGVuIGRvaW5nIHRoZQogICAg
IC8vIGVudGlyZSB0aGluZywgaXQncyBiZXN0IHRvIGp1c3QgZG8gaXQgdXAgZnJvbnQuCi0gICAg
Ym9vbCBzaG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKKyAgICBib29sIHNob3Vs
ZENhY2hlUmVzYW1wbGluZyhjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRlc3RXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZGVzdEhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVzdFN1YnNldFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZXN0U3Vic2V0SGVpZ2h0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0KSBjb25zdDsKIAotcHJpdmF0ZToKICAgICAvLyBTZXQg
dG8gdHJ1ZSB3aGVuIHRoZSBkYXRhIGlzIGNvbXBsZXRlLiBCZWZvcmUgdGhlIGVudGlyZSBpbWFn
ZSBoYXMKICAgICAvLyBsb2FkZWQsIHdlIGRvIG5vdCB3YW50IHRvIGNhY2hlIGEgcmVzaXplLgog
ICAgIGJvb2wgbV9pc0RhdGFDb21wbGV0ZTsKQEAgLTk3LDE0ICsxMjYsMTcgQEAgcHJpdmF0ZToK
ICAgICAvLyBSZWZlcmVuY2VzIGhvdyBtYW55IHRpbWVzIHRoYXQgdGhlIGltYWdlIHNpemUgaGFz
IGJlZW4gcmVxdWVzdGVkIGZvcgogICAgIC8vIHRoZSBsYXN0IHNpemUuCiAgICAgLy8KLSAgICAv
LyBFdmVyeSB0aW1lIHdlIGdldCBhIHJlcXVlc3QsIGlmIGl0IG1hdGNoZXMgdGhlIG1fbGFzdFJl
cXVlc3RTaXplLCB3ZSdsbAotICAgIC8vIGluY3JlbWVudCB0aGUgY291bnRlciwgYW5kIGlmIG5v
dCwgd2UnbGwgcmVzZXQgdGhlIGNvdW50ZXIgYW5kIHNhdmUgdGhlCi0gICAgLy8gc2l6ZS4KKyAg
ICAvLyBFdmVyeSB0aW1lIHdlIGdldCBhIGNhbGwgdG8gc2hvdWxkQ2FjaGVSZXNhbXBsaW5nLCBp
ZiBpdCBtYXRjaGVzIHRoZQorICAgIC8vIG1fY2FjaGVkSW1hZ2VJbmZvLCB3ZSdsbCBpbmNyZW1l
bnQgdGhlIGNvdW50ZXIsIGFuZCBpZiBub3QsIHdlJ2xsIHJlc2V0CisgICAgLy8gdGhlIGNvdW50
ZXIgYW5kIHNhdmUgdGhlIGRpbWVuc2lvbnMuCiAgICAgLy8KICAgICAvLyBUaGlzIGFsbG93cyB1
cyB0byBzZWUgaWYgbWFueSByZXF1ZXN0cyBoYXZlIGJlZW4gbWFkZSBmb3IgdGhlIHNhbWUKICAg
ICAvLyByZXNpemVkIGltYWdlLCB3ZSBrbm93IHRoYXQgd2Ugc2hvdWxkIHByb2JhYmx5IGNhY2hl
IGl0LCBldmVuIGlmIGFsbCBvZgogICAgIC8vIHRob3NlIHJlcXVlc3RzIGluZGl2aWR1YWxseSBh
cmUgc21hbGwgYW5kIHdvdWxkIG5vdCBvdGhlcndpc2UgYmUgY2FjaGVkLgotICAgIG11dGFibGUg
SW50U2l6ZSBtX2xhc3RSZXF1ZXN0U2l6ZTsKKyAgICAvLworICAgIC8vIFdlIGFsc28gdHJhY2sg
dGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc3Vic2V0cyBmb3IgY2FjaGluZyBwYXJ0aWFsCisg
ICAgLy8gaW1hZ2UgcmVzaXplcy4KKyAgICBtdXRhYmxlIENhY2hlZEltYWdlSW5mbyBtX2NhY2hl
ZEltYWdlSW5mbzsKICAgICBtdXRhYmxlIGludCBtX3Jlc2l6ZVJlcXVlc3RzOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104732</attachid>
            <date>2011-08-22 13:51:51 -0700</date>
            <delta_ts>2011-08-22 22:46:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65587-20110822135150.patch</filename>
            <type>text/plain</type>
            <size>24397</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBkZjY1ZjA3MTNiYjIzNzg0MWFl
ZDljOTViMDgzODhiZGJlZjM1ZTVlLi4yMWJmY2NiMzI5YTA1ODViNDM0ODZkODJiNTQzYjcyOTc2
MzRiMzA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CkBAIC0zNjMzLDYgKzM2MzMsMTEgQEAgQlVHV0s2NTQ1MyBNQUMgOiBm
YXN0L2Nzcy9vdXRsaW5lLWF1dG8tZW1wdHktcmVjdHMuaHRtbCA9IElNQUdFCiAKIEJVR1dLNjU0
NjIgVklTVEEgOiBodHRwL3Rlc3RzL2NhY2hlL2hpc3Rvcnktb25seS1jYWNoZWQtc3VicmVzb3Vy
Y2UtbG9hZHMtbWF4LWFnZS1odHRwcy5odG1sID0gUEFTUyBUSU1FT1VUCiAKKy8vIE5lZWRzIG5l
dyBiYXNlbGluZXMgZm9yIGNoYW5nZSB0byBpbWFnZSByZXNpemUgY2FjaGluZyBjb2RlLgorQlVH
V0s2NTU4NyA6IHN2Zy9keW5hbWljLXVwZGF0ZXMvU1ZHRkVJbWFnZUVsZW1lbnQtZG9tLXByZXNl
cnZlQXNwZWN0UmF0aW8tYXR0ci5odG1sID0gSU1BR0UKK0JVR1dLNjU1ODcgOiBzdmcvZHluYW1p
Yy11cGRhdGVzL1NWR0ZFSW1hZ2VFbGVtZW50LXN2Z2RvbS1wcmVzZXJ2ZUFzcGVjdFJhdGlvLXBy
b3AuaHRtbCA9IElNQUdFCitCVUdXSzY1NTg3IDogc3ZnL2N1c3RvbS9pbWFnZS1zbWFsbC13aWR0
aC1oZWlnaHQuc3ZnID0gSU1BR0UKKwogLy8gSW50cm9kdWNlZCBpbiByOTIyOTgsIHdoaWNoIG1p
Z2h0IGNhdXNlIGFub3RoZXIgdGVzdCBjcmFzaGluZy4KIEJVR1pNTyBTS0lQIDogZmFzdC9sb2Fk
ZXIvcmVsb2FkLXplcm8tYnl0ZS1wbHVnaW4uaHRtbCA9IEZBSUwKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE4
MjhjZWMwMDMyMzE3NDcxYTdhOGIxODcxZTUzYmUxYzVmYjE2M2YuLmYzMTc4Y2FlYjc5MTdmM2Vm
NGEwNTUwNjc3NzU3ZDg5NDQ1YTdiMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAx
MS0wOC0xNyAgSm9obiBCYXRlcyAgPGpiYXRlc0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudGVkIHNraWEgc3VwcG9ydCBmb3IgY2FjaGluZyByZXNpemVzIG9mIGNyb3BwZWQgaW1hZ2Vz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU1ODcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91
c2x5LCByZXNpemVzIG9mIGNyb3BwZWQgaW1hZ2VzIHdvdWxkIG5vdCBiZSBjYWNoZWQuIFRoaXMg
Y2F1c2VzIHZhcmlvdXMgd2Vic2l0ZXMgdG8gaGF2ZSBqYW5reSBDU1MgYW5pbWF0aW9ucyBpbiBz
b2Z0d2FyZSBjb21wb3NpdGluZyBtb2RlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1Jlc2FtcGxlZEJpdG1h
cCk6IENoYW5nZWQgdG8gdXNlIG5ldyBBUElzIGZvciBzdWJzZXQgY2FjaGluZy4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6IEFkZGVkIGFsbG93Q2FjaGluZyBwYXJhbWV0
ZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEpOgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OkNhY2hl
ZEltYWdlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OkNhY2hlZElt
YWdlSW5mbzo6aXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OkNh
Y2hlZEltYWdlSW5mbzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6
aGFzUmVzaXplZEJpdG1hcCk6IENoYW5nZWQgdGhpcyBtZXRob2Qgc28gdGhhdCBpdCBkb2VzIG5v
dCBtb2RpZnkgY2FjaGluZyBkYXRhLiBBZGRlZCBhIHNlY29uZCB2ZXJzaW9uIHVzZWQgZm9yIGNy
b3BwZWQgaW1hZ2UgcmVzaXplcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6
cmVzaXplZEJpdG1hcCk6IEFkZGVkIHBhcmFtZXRlciB0byBsZXQgY2FsbGVyIHNwZWNpZnkgd2hl
dGhlciBjYWNoaW5nIGlzIGFsbG93ZWQuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNr
aWE6OnNob3VsZENhY2hlUmVzYW1wbGluZyk6IEFkZGVkIGEgc2Vjb25kIHZlcnNpb24gdXNlZCBm
b3IgY3JvcHBlZCBpbWFnZSByZXNpemVzLgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VT
a2lhOjpzaG91bGRDYWNoZVJlc2FtcGxpbmdJbnRlcm5hbCk6IEJvdGggc2hvdWxkQ2FjaGVSZXNh
bXBsaW5nIG1ldGhvZHMgY2FsbCBkb3duIHRvIHRoaXMgZm9yIHRoZSBzaGFyZWQgbG9naWMuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuaDogQWRkZWQg
Q2FjaGVkSW1hZ2VJbmZvIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjYWNoZWQgb3IgcmVxdWVz
dGVkIGltYWdlIHJlc2l6ZSBvcGVyYXRpb24uCisKIDIwMTEtMDgtMTYgIEpvc2VwaCBQZWNvcmFy
byAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIENocm9taXVtIFdp
bmRvd3MgYnVpbGQgZml4IGFmdGVyIHI5MzE0MC4gVGFrZSA0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IGFmMWI2Mzdi
NjhhODcxMzI4YzgzOGU1ZDNkOGMyMzkwZmQ3YzEyNDIuLjkzOWJhYzZmYzUzYzg5OThjNTAzZDU1
MmQ1NTkzYzUyZTlhOTk5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTE2MSwyNSArMTYxLDExIEBAIHN0YXRpYyBS
ZXNhbXBsaW5nTW9kZSBjb21wdXRlUmVzYW1wbGluZ01vZGUoUGxhdGZvcm1Db250ZXh0U2tpYSog
cGxhdGZvcm1Db250ZXh0CiAvLyBzY3JvbGxpbmcsIGZvciBleGFtcGxlLCB3ZSBhcmUgb25seSBk
cmF3aW5nIGEgc21hbGwgc3RyaXAgb2YgdGhlIGltYWdlLgogLy8gUmVzYW1wbGluZyB0aGUgd2hv
bGUgaW1hZ2UgZXZlcnkgdGltZSBpcyB2ZXJ5IHNsb3csIHNvIHRoaXMgc3BlZWRzIHVwIHRoaW5n
cwogLy8gZHJhbWF0aWNhbGx5LgorLy8KKy8vIE5vdGU6IHRoaXMgY29kZSBpcyBvbmx5IHVzZWQg
d2hlbiB0aGUgY2FudmFzIHRyYW5zZm9ybWF0aW9uIGlzIGxpbWl0ZWQgdG8KKy8vIHNjYWxpbmcg
b3IgdHJhbnNsYXRpb24uCiBzdGF0aWMgdm9pZCBkcmF3UmVzYW1wbGVkQml0bWFwKFNrQ2FudmFz
JiBjYW52YXMsIFNrUGFpbnQmIHBhaW50LCBjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwg
Y29uc3QgU2tJUmVjdCYgc3JjSVJlY3QsIGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAg
Ly8gRmlyc3QgZ2V0IHRoZSBzdWJzZXQgd2UgbmVlZC4gVGhpcyBpcyBlZmZpY2llbnQgYW5kIGRv
ZXMgbm90IGNvcHkgcGl4ZWxzLgotICAgIFNrQml0bWFwIHN1YnNldDsKLSAgICBiaXRtYXAuZXh0
cmFjdFN1YnNldCgmc3Vic2V0LCBzcmNJUmVjdCk7Ci0gICAgU2tSZWN0IHNyY1JlY3Q7Ci0gICAg
c3JjUmVjdC5zZXQoc3JjSVJlY3QpOwotCi0gICAgLy8gV2hldGhlciB3ZSdyZSBkb2luZyBhIHN1
YnNldCBvciB1c2luZyB0aGUgZnVsbCBzb3VyY2UgaW1hZ2UuCi0gICAgYm9vbCBzcmNJc0Z1bGwg
PSBzcmNJUmVjdC5mTGVmdCA9PSAwICYmIHNyY0lSZWN0LmZUb3AgPT0gMAotICAgICAgICAmJiBz
cmNJUmVjdC53aWR0aCgpID09IGJpdG1hcC53aWR0aCgpCi0gICAgICAgICYmIHNyY0lSZWN0Lmhl
aWdodCgpID09IGJpdG1hcC5oZWlnaHQoKTsKLQotICAgIC8vIFdlIHdpbGwgYWx3YXlzIGRyYXcg
aW4gaW50ZWdlciBzaXplcywgc28gcm91bmQgdGhlIGRlc3RpbmF0aW9uIHJlY3QuCi0gICAgU2tJ
UmVjdCBkZXN0UmVjdFJvdW5kZWQ7Ci0gICAgZGVzdFJlY3Qucm91bmQoJmRlc3RSZWN0Um91bmRl
ZCk7Ci0gICAgU2tJUmVjdCByZXNpemVkSW1hZ2VSZWN0ID0gIC8vIFJlcHJlc2VudHMgdGhlIHNp
emUgb2YgdGhlIHJlc2l6ZWQgaW1hZ2UuCi0gICAgICAgIHsgMCwgMCwgZGVzdFJlY3RSb3VuZGVk
LndpZHRoKCksIGRlc3RSZWN0Um91bmRlZC5oZWlnaHQoKSB9OwotCiAgICAgLy8gQXBwbHkgZm9y
d2FyZCB0cmFuc2Zvcm0gdG8gZGVzdFJlY3QgdG8gZXN0aW1hdGUgcmVxdWlyZWQgc2l6ZSBvZgog
ICAgIC8vIHJlLXNhbXBsZWQgYml0bWFwLCBhbmQgdXNlIG9ubHkgaW4gY2FsbHMgcmVxdWlyZWQg
dG8gcmVzaXplLCBvciB0aGF0CiAgICAgLy8gY2hlY2sgZm9yIHRoZSByZXF1aXJlZCBzaXplLgpA
QCAtMTg4LDcwICsxNzQsMzUgQEAgc3RhdGljIHZvaWQgZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0Nh
bnZhcyYgY2FudmFzLCBTa1BhaW50JiBwYWludCwgY29uc3QgTmF0aXZlSW0KICAgICBTa0lSZWN0
IGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkOwogICAgIGRlc3RSZWN0VHJhbnNmb3JtZWQucm91
bmQoJmRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkKTsKIAotICAgIGlmIChzcmNJc0Z1bGwgJiYg
Yml0bWFwLmhhc1Jlc2l6ZWRCaXRtYXAoZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQud2lkdGgo
KSwgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCkpKSB7Ci0gICAgICAgIC8vIFlh
eSwgdGhpcyBiaXRtYXAgZnJhbWUgYWxyZWFkeSBoYXMgYSByZXNpemVkIHZlcnNpb24uCi0gICAg
ICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IGJpdG1hcC5yZXNpemVkQml0bWFwKGRlc3RSZWN0VHJh
bnNmb3JtZWRSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdo
dCgpKTsKLSAgICAgICAgY2FudmFzLmRyYXdCaXRtYXBSZWN0KHJlc2FtcGxlZCwgMCwgZGVzdFJl
Y3QsICZwYWludCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBDb21wdXRlIHRo
ZSB2aXNpYmxlIHBvcnRpb24gb2Ygb3VyIHJlY3QuCi0gICAgLy8gV2UgYWxzbyBuZWVkIHRvIGNv
bXB1dGUgdGhlIHRyYW5zZm9ybWVkIHBvcnRpb24gb2YgdGhlCi0gICAgLy8gdmlzaWJsZSBwb3J0
aW9uIGZvciB1c2UgYmVsb3cuCi0gICAgU2tSZWN0IGRlc3RCaXRtYXBTdWJzZXRTazsKLSAgICBD
bGlwUmVjdFRvQ2FudmFzKGNhbnZhcywgZGVzdFJlY3QsICZkZXN0Qml0bWFwU3Vic2V0U2spOwot
ICAgIFNrUmVjdCBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQ7Ci0gICAgY2FudmFzLmdldFRv
dGFsTWF0cml4KCkubWFwUmVjdCgmZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkLCBkZXN0Qml0
bWFwU3Vic2V0U2spOwotICAgIGRlc3RCaXRtYXBTdWJzZXRTay5vZmZzZXQoLWRlc3RSZWN0LmZM
ZWZ0LCAtZGVzdFJlY3QuZlRvcCk7CisgICAgU2tSZWN0IGRlc3RSZWN0VmlzaWJsZVN1YnNldDsK
KyAgICBDbGlwUmVjdFRvQ2FudmFzKGNhbnZhcywgZGVzdFJlY3QsICZkZXN0UmVjdFZpc2libGVT
dWJzZXQpOworICAgIC8vIENsaXBSZWN0VG9DYW52YXMgb2Z0ZW4gb3ZlcnNob290cywgcmVzdWx0
aW5nIGluIGEgbGFyZ2VyIHJlZ2lvbiB0aGFuIG91cgorICAgIC8vIG9yaWdpbmFsIGRlc3RSZWN0
LiBJbnRlcnNlY3RpbmcgZ2V0cyB1cyBiYWNrIGluc2lkZS4KKyAgICBpZiAoIWRlc3RSZWN0Vmlz
aWJsZVN1YnNldC5pbnRlcnNlY3QoZGVzdFJlY3QpKQorICAgICAgICByZXR1cm47IC8vIE5vdGhp
bmcgdmlzaWJsZSBpbiBkZXN0UmVjdC4KKworICAgIC8vIENvbXB1dGUgdGhlIHRyYW5zZm9ybWVk
IChzY3JlZW4gc3BhY2UpIHBvcnRpb24gb2YgdGhlIHZpc2libGUgcG9ydGlvbiBmb3IKKyAgICAv
LyB1c2UgYmVsb3cuCisgICAgU2tSZWN0IGRlc3RSZWN0VmlzaWJsZVN1YnNldFRyYW5zZm9ybWVk
OworICAgIGNhbnZhcy5nZXRUb3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RSZWN0VmlzaWJsZVN1
YnNldFRyYW5zZm9ybWVkLCBkZXN0UmVjdFZpc2libGVTdWJzZXQpOworICAgIFNrUmVjdCBkZXN0
Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQgPSBkZXN0UmVjdFZpc2libGVTdWJzZXRUcmFuc2Zvcm1l
ZDsKKyAgICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQub2Zmc2V0KC1kZXN0UmVjdFRyYW5z
Zm9ybWVkLmZMZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWRl
c3RSZWN0VHJhbnNmb3JtZWQuZlRvcCk7CiAgICAgU2tJUmVjdCBkZXN0Qml0bWFwU3Vic2V0VHJh
bnNmb3JtZWRSb3VuZGVkOwogICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZC5yb3VuZCgm
ZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7Ci0gICAgZGVzdEJpdG1hcFN1YnNl
dFRyYW5zZm9ybWVkUm91bmRlZC5vZmZzZXQoLWRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmZM
ZWZ0LCAtZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuZlRvcCk7Ci0KLSAgICAvLyBUaGUgbWF0
cml4IGludmVydGluZywgZXRjLiBjb3VsZCBoYXZlIGludHJvZHVjZWQgcm91bmRpbmcgZXJyb3Ig
d2hpY2gKLSAgICAvLyBjYXVzZXMgdGhlIGJvdW5kcyB0byBiZSBvdXRzaWRlIG9mIHRoZSByZXNp
emVkIGJpdG1hcC4gV2Ugcm91bmQgb3V0d2FyZAotICAgIC8vIHNvIHdlIGFsd2F5cyBsZWFuIHRv
d2FyZCBpdCBiZWluZyBsYXJnZXIgcmF0aGVyIHRoYW4gc21hbGxlciB0aGFuIHdlCi0gICAgLy8g
bmVlZCwgYW5kIHRoZW4gY2xhbXAgdG8gdGhlIGJpdG1hcCBib3VuZHMgc28gd2UgZG9uJ3QgZ2V0
IGFueSBpbnZhbGlkCi0gICAgLy8gZGF0YS4KLSAgICBTa0lSZWN0IGRlc3RCaXRtYXBTdWJzZXRT
a0k7Ci0gICAgZGVzdEJpdG1hcFN1YnNldFNrLnJvdW5kT3V0KCZkZXN0Qml0bWFwU3Vic2V0U2tJ
KTsKLSAgICBpZiAoIWRlc3RCaXRtYXBTdWJzZXRTa0kuaW50ZXJzZWN0KHJlc2l6ZWRJbWFnZVJl
Y3QpKQotICAgICAgICByZXR1cm47ICAvLyBSZXNpemVkIGltYWdlIGRvZXMgbm90IGludGVyc2Vj
dC4KLQotICAgIGlmIChzcmNJc0Z1bGwgJiYgYml0bWFwLnNob3VsZENhY2hlUmVzYW1wbGluZygK
LSAgICAgICAgICAgIHJlc2l6ZWRJbWFnZVJlY3Qud2lkdGgoKSwKLSAgICAgICAgICAgIHJlc2l6
ZWRJbWFnZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICBkZXN0Qml0bWFwU3Vic2V0U2tJLndp
ZHRoKCksCi0gICAgICAgICAgICBkZXN0Qml0bWFwU3Vic2V0U2tJLmhlaWdodCgpKSkgewotICAg
ICAgICAvLyBXZSdyZSBzdXBwb3NlZCB0byByZXNpemUgdGhlIGVudGlyZSBpbWFnZSBhbmQgY2Fj
aGUgaXQsIGV2ZW4gdGhvdWdoCi0gICAgICAgIC8vIHdlIGRvbid0IG5lZWQgYWxsIG9mIGl0Lgot
ICAgICAgICBTa0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAucmVzaXplZEJpdG1hcChkZXN0UmVj
dFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQo
KSk7Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0
LCAmcGFpbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IHJlc2l6
ZSB0aGUgZXhwb3NlZCBwYXJ0IG9mIHRoZSBiaXRtYXAgdG8gZG8gdGhlCi0gICAgICAgIC8vIG1p
bmltYWwgcG9zc2libGUgd29yay4KLQotICAgICAgICAvLyBSZXNhbXBsZSB0aGUgbmVlZGVkIHBh
cnQgb2YgdGhlIGltYWdlLgotICAgICAgICAvLyBUcmFuc2Zvcm1zIGFib3ZlIHBsdXMgcm91bmRp
bmcgbWF5IGNhdXNlIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQKLSAgICAgICAg
Ly8gdG8gZ28gb3V0c2lkZSB0aGUgaW1hZ2UsIHNvIG5lZWQgdG8gY2xpcCB0byBhdm9pZCBwcm9i
bGVtcy4KLSAgICAgICAgaWYgKGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQuaW50
ZXJzZWN0KDAsIDAsCi0gICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQu
d2lkdGgoKSwgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCkpKSB7Ci0KLSAgICAg
ICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXpl
KHN1YnNldCwKLSAgICAgICAgICAgICAgICBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9M
QU5DWk9TMywKLSAgICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0
aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAg
ICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkKTsKLQotICAgICAgICAgICAgLy8g
Q29tcHV0ZSB3aGVyZSB0aGUgbmV3IGJpdG1hcCBzaG91bGQgYmUgZHJhd24uIFNpbmNlIG91ciBu
ZXcgYml0bWFwCi0gICAgICAgICAgICAvLyBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5h
bCwgd2UgaGF2ZSB0byBzaGlmdCBpdCBvdmVyIGJ5IHRoZQotICAgICAgICAgICAgLy8gc2FtZSBh
bW91bnQgdGhhdCB3ZSBjdXQgb2ZmIHRoZSB0b3AgYW5kIGxlZnQuCi0gICAgICAgICAgICBkZXN0
Qml0bWFwU3Vic2V0U2tJLm9mZnNldChkZXN0UmVjdC5mTGVmdCwgZGVzdFJlY3QuZlRvcCk7Ci0g
ICAgICAgICAgICBTa1JlY3Qgb2Zmc2V0RGVzdFJlY3Q7Ci0gICAgICAgICAgICBvZmZzZXREZXN0
UmVjdC5zZXQoZGVzdEJpdG1hcFN1YnNldFNrSSk7Ci0KLSAgICAgICAgICAgIGNhbnZhcy5kcmF3
Qml0bWFwUmVjdChyZXNhbXBsZWQsIDAsIG9mZnNldERlc3RSZWN0LCAmcGFpbnQpOwotICAgICAg
ICB9Ci0gICAgfQorCisgICAgLy8gVHJhbnNmb3JtcyBhYm92ZSBwbHVzIHJvdW5kaW5nIG1heSBj
YXVzZSBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkCisgICAgLy8gdG8gZ28gb3V0
c2lkZSB0aGUgaW1hZ2UsIHNvIG5lZWQgdG8gY2xpcCB0byBhdm9pZCBwcm9ibGVtcy4KKyAgICBp
ZiAoIWRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQuaW50ZXJzZWN0KAorICAgICAg
ICAgICAgMCwgMCwgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwgZGVzdFJlY3RU
cmFuc2Zvcm1lZFJvdW5kZWQuaGVpZ2h0KCkpKQorICAgICAgICByZXR1cm47IC8vIEltYWdlIGlz
IG5vdCB2aXNpYmxlLgorCisgICAgU2tCaXRtYXAgcmVzYW1wbGVkID0gYml0bWFwLnJlc2l6ZWRC
aXRtYXAoc3JjSVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRl
ZC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkKTsKKyAgICBjYW52YXMuZHJhd0Jp
dG1hcFJlY3QocmVzYW1wbGVkLCAwLCBkZXN0UmVjdFZpc2libGVTdWJzZXQsICZwYWludCk7CiB9
CiAKIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgY29uc3QgU2tJUmVjdCYg
c3JjUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCwgY29uc3QgU2tYZmVybW9kZTo6TW9kZSYg
Y29tcE9wKQpAQCAtMzQwLDU4ICsyOTEsMzcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LAogewogICAgIEZsb2F0UmVjdCBub3JtU3JjUmVjdCA9IG5v
cm1hbGl6ZVJlY3QoZmxvYXRTcmNSZWN0KTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8
IG5vcm1TcmNSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOyAgLy8gbm90aGluZyB0byBk
cmF3CisgICAgICAgIHJldHVybjsgLy8gbm90aGluZyB0byBkcmF3CiAKICAgICBOYXRpdmVJbWFn
ZVNraWEqIGJpdG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFi
aXRtYXApCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFRoaXMgaXMgYSB2ZXJ5IGluZXhwZW5z
aXZlIG9wZXJhdGlvbi4gSXQgd2lsbCBnZW5lcmF0ZSBhIG5ldyBiaXRtYXAgYnV0Ci0gICAgLy8g
aXQgd2lsbCBpbnRlcm5hbGx5IHJlZmVyZW5jZSB0aGUgb2xkIGJpdG1hcCdzIHBpeGVscywgYWRq
dXN0aW5nIHRoZSByb3cKLSAgICAvLyBzdHJpZGUgc28gdGhlIGV4dHJhIHBpeGVscyBhcHBlYXIg
YXMgcGFkZGluZyB0byB0aGUgc3Vic2V0dGVkIGJpdG1hcC4KLSAgICBTa0JpdG1hcCBzcmNTdWJz
ZXQ7CiAgICAgU2tJUmVjdCBzcmNSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChub3JtU3JjUmVjdCk7
Ci0gICAgYml0bWFwLT5leHRyYWN0U3Vic2V0KCZzcmNTdWJzZXQsIHNyY1JlY3QpOwotCi0gICAg
U2tCaXRtYXAgcmVzYW1wbGVkOwotICAgIFNrU2hhZGVyKiBzaGFkZXI7CiAKICAgICAvLyBGaWd1
cmUgb3V0IHdoYXQgc2l6ZSB0aGUgYml0bWFwIHdpbGwgYmUgaW4gdGhlIGRlc3RpbmF0aW9uLiBU
aGUKICAgICAvLyBkZXN0aW5hdGlvbiByZWN0IGlzIHRoZSBib3VuZHMgb2YgdGhlIHBhdHRlcm4s
IHdlIG5lZWQgdG8gdXNlIHRoZQotICAgIC8vIG1hdHJpeCB0byBzZWUgaG93IGJpdCBpdCB3aWxs
IGJlLgorICAgIC8vIG1hdHJpeCB0byBzZWUgaG93IGJpZyBpdCB3aWxsIGJlLgogICAgIGZsb2F0
IGRlc3RCaXRtYXBXaWR0aCwgZGVzdEJpdG1hcEhlaWdodDsKICAgICBUcmFuc2Zvcm1EaW1lbnNp
b25zKHBhdHRlcm5UcmFuc2Zvcm0sIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICZkZXN0Qml0bWFwV2lkdGgsICZkZXN0Qml0bWFwSGVp
Z2h0KTsKIAogICAgIC8vIENvbXB1dGUgdGhlIHJlc2FtcGxpbmcgbW9kZS4KICAgICBSZXNhbXBs
aW5nTW9kZSByZXNhbXBsaW5nOwotICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
aXNBY2NlbGVyYXRlZCgpKQorICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZCgpIHx8IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmludGluZygpKQog
ICAgICAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByaW50aW5nKCkpCi0gICAgICAgICAg
ICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLCAqYml0bWFwLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIGRlc3RC
aXRtYXBXaWR0aCwgZGVzdEJpdG1hcEhlaWdodCk7Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAg
cmVzYW1wbGluZyA9IGNvbXB1dGVSZXNhbXBsaW5nTW9kZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgKmJpdG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCBkZXN0Qml0
bWFwV2lkdGgsIGRlc3RCaXRtYXBIZWlnaHQpOwogCiAgICAgLy8gTG9hZCB0aGUgdHJhbnNmb3Jt
IFdlYktpdCByZXF1ZXN0ZWQuCiAgICAgU2tNYXRyaXggbWF0cml4KHBhdHRlcm5UcmFuc2Zvcm0p
OwogCisgICAgU2tTaGFkZXIqIHNoYWRlcjsKICAgICBpZiAocmVzYW1wbGluZyA9PSBSRVNBTVBM
RV9BV0VTT01FKSB7CiAgICAgICAgIC8vIERvIG5pY2UgcmVzYW1wbGluZy4KLSAgICAgICAgU2tC
aXRtYXAgcmVzYW1wbGVkOwogICAgICAgICBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGRl
c3RCaXRtYXBXaWR0aCk7CiAgICAgICAgIGludCBoZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGRl
c3RCaXRtYXBIZWlnaHQpOwotICAgICAgICBpZiAoIXNyY1JlY3QuZkxlZnQgJiYgIXNyY1JlY3Qu
ZlRvcAotICAgICAgICAgICAgJiYgc3JjUmVjdC5mUmlnaHQgPT0gYml0bWFwLT53aWR0aCgpICYm
IHNyY1JlY3QuZkJvdHRvbSA9PSBiaXRtYXAtPmhlaWdodCgpCi0gICAgICAgICAgICAmJiAoYml0
bWFwLT5oYXNSZXNpemVkQml0bWFwKHdpZHRoLCBoZWlnaHQpCi0gICAgICAgICAgICAgICAgfHwg
Yml0bWFwLT5zaG91bGRDYWNoZVJlc2FtcGxpbmcod2lkdGgsIGhlaWdodCwgd2lkdGgsIGhlaWdo
dCkpKSB7Ci0gICAgICAgICAgICAvLyByZXNpemVkQml0bWFwKCkgY2FjaGVzIHJlc2l6ZWQgaW1h
Z2UuCi0gICAgICAgICAgICByZXNhbXBsZWQgPSBiaXRtYXAtPnJlc2l6ZWRCaXRtYXAod2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXNhbXBsZWQgPSBza2lh
OjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzcmNTdWJzZXQsCi0gICAgICAgICAgICAgICAgc2tp
YTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICB9CisgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IGJpdG1hcC0+cmVzaXplZEJpdG1h
cChzcmNSZWN0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgc2hhZGVyID0gU2tTaGFkZXI6OkNy
ZWF0ZUJpdG1hcFNoYWRlcihyZXNhbXBsZWQsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlLCBT
a1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSk7CiAKICAgICAgICAgLy8gU2luY2Ugd2UganVzdCBy
ZXNpemVkIHRoZSBiaXRtYXAsIHdlIG5lZWQgdG8gdW5kbyB0aGUgc2NhbGUgc2V0IGluCkBAIC00
MDAsNiArMzMwLDggQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LAogICAgICAgICBtYXRyaXguc2V0U2NhbGVZKFNrSW50VG9TY2FsYXIoMSkpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIE5vIG5lZWQgdG8gZG8gbmljZSByZXNhbXBsaW5nLgorICAg
ICAgICBTa0JpdG1hcCBzcmNTdWJzZXQ7CisgICAgICAgIGJpdG1hcC0+ZXh0cmFjdFN1YnNldCgm
c3JjU3Vic2V0LCBzcmNSZWN0KTsKICAgICAgICAgc2hhZGVyID0gU2tTaGFkZXI6OkNyZWF0ZUJp
dG1hcFNoYWRlcihzcmNTdWJzZXQsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlLCBTa1NoYWRl
cjo6a1JlcGVhdF9UaWxlTW9kZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggZjBm
NGFhMjE1NzBjMDVkZTdkNDQ1MTMxYWYxOGEzMjVlOTQ5YjMwZC4uOGZlMTFhMzcyMmNiYjI2MmMx
MDgyZjU2OTc4MTdhMjEzNDQzNzcyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAtNDAsNyArNDAs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VT
a2lhKCkKICAgICA6IG1faXNEYXRhQ29tcGxldGUoZmFsc2UpLAotICAgICAgbV9sYXN0UmVxdWVz
dFNpemUoMCwgMCksCiAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCiB7CiB9CkBAIC00OCwxMiAr
NDcsMTAgQEAgTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoKQogTmF0aXZlSW1hZ2VT
a2lhOjpOYXRpdmVJbWFnZVNraWEoY29uc3QgU2tCaXRtYXAmIG90aGVyKQogICAgIDogU2tCaXRt
YXAob3RoZXIpLAogICAgICAgbV9pc0RhdGFDb21wbGV0ZShmYWxzZSksCi0gICAgICBtX2xhc3RS
ZXF1ZXN0U2l6ZSgwLCAwKSwKICAgICAgIG1fcmVzaXplUmVxdWVzdHMoMCkKIHsKIH0KIAotCiBO
YXRpdmVJbWFnZVNraWE6On5OYXRpdmVJbWFnZVNraWEoKQogewogfQpAQCAtNjMsMzMgKzYwLDUz
IEBAIGludCBOYXRpdmVJbWFnZVNraWE6OmRlY29kZWRTaXplKCkgY29uc3QKICAgICByZXR1cm4g
Z2V0U2l6ZSgpICsgbV9yZXNpemVkSW1hZ2UuZ2V0U2l6ZSgpOwogfQogCi1ib29sIE5hdGl2ZUlt
YWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChpbnQgdywgaW50IGgpIGNvbnN0Citib29sIE5hdGl2
ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGlu
dCBkZXN0V2lkdGgsIGludCBkZXN0SGVpZ2h0KSBjb25zdAogewotICAgIGlmIChtX2xhc3RSZXF1
ZXN0U2l6ZS53aWR0aCgpID09IHcgJiYgbV9sYXN0UmVxdWVzdFNpemUuaGVpZ2h0KCkgPT0gaCkK
LSAgICAgICAgbV9yZXNpemVSZXF1ZXN0cysrOwotICAgIGVsc2UgewotICAgICAgICBtX2xhc3RS
ZXF1ZXN0U2l6ZSA9IEludFNpemUodywgaCk7Ci0gICAgICAgIG1fcmVzaXplUmVxdWVzdHMgPSAw
OwotICAgIH0KLQotICAgIHJldHVybiBtX3Jlc2l6ZWRJbWFnZS53aWR0aCgpID09IHcgJiYgbV9y
ZXNpemVkSW1hZ2UuaGVpZ2h0KCkgPT0gaDsKKyAgICByZXR1cm4gbV9jYWNoZWRJbWFnZUluZm8u
aXNFcXVhbChzcmNTdWJzZXQsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCkgJiYgIW1fcmVzaXplZElt
YWdlLmVtcHR5KCk7CiB9CiAKLS8vIEZJWE1FOiBkb24ndCBjYWNoZSB3aGVuIGltYWdlIGlzIGlu
LXByb2dyZXNzLgotCi1Ta0JpdG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoaW50
IHcsIGludCBoKSBjb25zdAorU2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFw
KGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGVzdFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBkZXN0SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFNrSVJlY3QmIGRlc3RWaXNpYmxlU3Vic2V0KSBjb25zdAogewotICAg
IGlmIChtX3Jlc2l6ZWRJbWFnZS53aWR0aCgpICE9IHcgfHwgbV9yZXNpemVkSW1hZ2UuaGVpZ2h0
KCkgIT0gaCkKLSAgICAgICAgbV9yZXNpemVkSW1hZ2UgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6
OlJlc2l6ZSgqdGhpcywgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHcs
IGgpOworICAgIGlmICghaGFzUmVzaXplZEJpdG1hcChzcmNTdWJzZXQsIGRlc3RXaWR0aCwgZGVz
dEhlaWdodCkpIHsKKyAgICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IG1faXNEYXRhQ29tcGxldGUK
KyAgICAgICAgICAgICYmIHNob3VsZENhY2hlUmVzYW1wbGluZyhzcmNTdWJzZXQsIGRlc3RXaWR0
aCwgZGVzdEhlaWdodCwgZGVzdFZpc2libGVTdWJzZXQpOworCisgICAgICAgIFNrQml0bWFwIHN1
YnNldDsKKyAgICAgICAgZXh0cmFjdFN1YnNldCgmc3Vic2V0LCBzcmNTdWJzZXQpOworICAgICAg
ICBpZiAoIXNob3VsZENhY2hlKSB7CisgICAgICAgICAgICAvLyBKdXN0IHJlc2l6ZSB0aGUgdmlz
aWJsZSBzdWJzZXQgYW5kIHJldHVybiBpdC4KKyAgICAgICAgICAgIFNrQml0bWFwIHJlc2l6ZWRJ
bWFnZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwgc2tpYTo6SW1hZ2VP
cGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCwgZGVzdFZp
c2libGVTdWJzZXQpOworICAgICAgICAgICAgcmV0dXJuIHJlc2l6ZWRJbWFnZTsKKyAgICAgICAg
fQorCisgICAgICAgIG1fcmVzaXplZEltYWdlID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNp
emUoc3Vic2V0LCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgZGVzdFdp
ZHRoLCBkZXN0SGVpZ2h0KTsKKyAgICB9CiAKLSAgICByZXR1cm4gbV9yZXNpemVkSW1hZ2U7Cisg
ICAgU2tCaXRtYXAgdmlzaWJsZUJpdG1hcDsKKyAgICBtX3Jlc2l6ZWRJbWFnZS5leHRyYWN0U3Vi
c2V0KCZ2aXNpYmxlQml0bWFwLCBkZXN0VmlzaWJsZVN1YnNldCk7CisgICAgcmV0dXJuIHZpc2li
bGVCaXRtYXA7CiB9CiAKLWJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxp
bmcoaW50IGRlc3RXaWR0aCwKK2Jvb2wgTmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2Ft
cGxpbmcoY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdEhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRXaWR0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RTdWJzZXRIZWlnaHQp
IGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNrSVJlY3QmIGRlc3RWaXNpYmxlU3Vic2V0KSBjb25zdAogeworICAgIC8vIENoZWNrIHdoZXRo
ZXIgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zIG1hdGNoIHByZXZpb3VzIHJlcXVlc3QuCisgICAg
Ym9vbCBtYXRjaGVzUHJldmlvdXNSZXF1ZXN0ID0gbV9jYWNoZWRJbWFnZUluZm8uaXNFcXVhbChz
cmNTdWJzZXQsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7CisgICAgaWYgKG1hdGNoZXNQcmV2aW91
c1JlcXVlc3QpCisgICAgICAgICsrbV9yZXNpemVSZXF1ZXN0czsKKyAgICBlbHNlIHsKKyAgICAg
ICAgbV9jYWNoZWRJbWFnZUluZm8uc2V0KHNyY1N1YnNldCwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0
KTsKKyAgICAgICAgbV9yZXNpemVSZXF1ZXN0cyA9IDA7CisgICAgICAgIC8vIFJlc2V0IG1fcmVz
aXplZEltYWdlIG5vdywgYmVjYXVzZSB3ZSBkb24ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZQor
ICAgICAgICAvLyBsYXN0IHJlcXVlc3RlZCByZXNpemUgaW5mbyBhbmQgbV9yZXNpemVkSW1hZ2Un
cyByZXNpemUgaW5mby4KKyAgICAgICAgbV9yZXNpemVkSW1hZ2UucmVzZXQoKTsKKyAgICB9CisK
ICAgICAvLyBXZSBjYW4gbm90IGNhY2hlIGluY29tcGxldGUgZnJhbWVzLiBUaGlzIG1pZ2h0IGJl
IGEgZ29vZCBvcHRpbWl6YXRpb24gaW4KICAgICAvLyB0aGUgZnV0dXJlLCB3ZXJlIHdlIGtub3cg
aG93IG11Y2ggb2YgdGhlIGZyYW1lIGhhcyBiZWVuIGRlY29kZWQsIHNvIHdoZW4KICAgICAvLyB3
ZSBpbmNyZW1lbnRhbGx5IGRyYXcgbW9yZSBvZiB0aGUgaW1hZ2UsIHdlIG9ubHkgaGF2ZSB0byBy
ZXNhbXBsZSB0aGUKQEAgLTEwNiwyMiArMTIzLDMxIEBAIGJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpz
aG91bGRDYWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKICAgICAvLyBJZiAidG9vIG1hbnki
IHJlcXVlc3RzIGhhdmUgYmVlbiBtYWRlIGZvciB0aGlzIGJpdG1hcCwgd2UgYXNzdW1lIHRoYXQK
ICAgICAvLyBtYW55IG1vcmUgd2lsbCBiZSBtYWRlIGFzIHdlbGwsIGFuZCB3ZSdsbCBnbyBhaGVh
ZCBhbmQgY2FjaGUgaXQuCiAgICAgc3RhdGljIGNvbnN0IGludCBrTWFueVJlcXVlc3RUaHJlc2hv
bGQgPSA0OwotICAgIGlmIChtX2xhc3RSZXF1ZXN0U2l6ZS53aWR0aCgpID09IGRlc3RXaWR0aCAm
JgotICAgICAgICBtX2xhc3RSZXF1ZXN0U2l6ZS5oZWlnaHQoKSA9PSBkZXN0SGVpZ2h0KSB7Ci0g
ICAgICAgIGlmIChtX3Jlc2l6ZVJlcXVlc3RzID49IGtNYW55UmVxdWVzdFRocmVzaG9sZCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdoZW4gYSBk
aWZmZXJlbnQgc2l6ZSBpcyBiZWluZyByZXF1ZXN0ZWQsIGNvdW50IHRoaXMgYXMgYSBxdWVyeQot
ICAgICAgICAvLyAoaGFzUmVzaXplZEJpdG1hcCkgYW5kIHJlc2V0IHRoZSBjb3VudGVyLgotICAg
ICAgICBtX2xhc3RSZXF1ZXN0U2l6ZSA9IEludFNpemUoZGVzdFdpZHRoLCBkZXN0SGVpZ2h0KTsK
LSAgICAgICAgbV9yZXNpemVSZXF1ZXN0cyA9IDA7Ci0gICAgfQorICAgIGlmIChtX3Jlc2l6ZVJl
cXVlc3RzID49IGtNYW55UmVxdWVzdFRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyBJZiBtb3JlIHRoYW4gMS80IG9mIHRoZSByZXNpemVkIGltYWdlIGlzIHZpc2libGUs
IGl0J3Mgd29ydGggY2FjaGluZy4KKyAgICBpbnQgZGVzdFZpc2libGVTaXplID0gZGVzdFZpc2li
bGVTdWJzZXQud2lkdGgoKSAqIGRlc3RWaXNpYmxlU3Vic2V0LmhlaWdodCgpOworICAgIHJldHVy
biAoZGVzdFZpc2libGVTaXplID4gKGRlc3RXaWR0aCAqIGRlc3RIZWlnaHQpIC8gNCk7Cit9CiAK
LSAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgaGV1cmlzdGljIHRoYXQgaWYgbW9yZSB0aGFuIDEv
NCBvZiB0aGUgaW1hZ2UgaXMKLSAgICAvLyByZXF1ZXN0ZWQsIGl0J3Mgd29ydGggY2FjaGluZy4K
LSAgICBpbnQgZGVzdFNpemUgPSBkZXN0V2lkdGggKiBkZXN0SGVpZ2h0OwotICAgIGludCBkZXN0
U3Vic2V0U2l6ZSA9IGRlc3RTdWJzZXRXaWR0aCAqIGRlc3RTdWJzZXRIZWlnaHQ7Ci0gICAgcmV0
dXJuIGRlc3RTaXplIC8gNCA8IGRlc3RTdWJzZXRTaXplOworTmF0aXZlSW1hZ2VTa2lhOjpDYWNo
ZWRJbWFnZUluZm86OkNhY2hlZEltYWdlSW5mbygpCit7CisgICAgc3JjU3Vic2V0LnNldEVtcHR5
KCk7Cit9CisKK2Jvb2wgTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OmlzRXF1YWwo
Y29uc3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJzZXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3JjU3Vic2V0ID09IG90aGVyU3JjU3Vic2V0CisgICAgICAgICYm
IHJlcXVlc3RTaXplLndpZHRoKCkgPT0gd2lkdGgKKyAgICAgICAgJiYgcmVxdWVzdFNpemUuaGVp
Z2h0KCkgPT0gaGVpZ2h0OworfQorCit2b2lkIE5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJ
bmZvOjpzZXQoY29uc3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJzZXQsIGludCB3aWR0aCwgaW50IGhl
aWdodCkKK3sKKyAgICBzcmNTdWJzZXQgPSBvdGhlclNyY1N1YnNldDsKKyAgICByZXF1ZXN0U2l6
ZS5zZXRXaWR0aCh3aWR0aCk7CisgICAgcmVxdWVzdFNpemUuc2V0SGVpZ2h0KGhlaWdodCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCmluZGV4IDAwYjBhNjg1MDY1
YjQyN2RhMTFjOTRhZGRkNjVhYTkzZTRmY2RhZDQuLmUxMTM1ZWE4YWI1NGI1NjBiNWQ5MjhiOGVl
ZDAzNGU0MmIwZDBiYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmlu
ZSBOYXRpdmVJbWFnZVNraWFfaAogCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJT
a1JlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTYzLDMwICs2NCw1OCBAQCBwdWJsaWM6CiAKICAgICAvLyBXZSBjYW4ga2VlcCBhIHJlc2l6ZWQg
dmVyc2lvbiBvZiB0aGUgYml0bWFwIGNhY2hlZCBvbiB0aGlzIG9iamVjdC4KICAgICAvLyBUaGlz
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjYWNoZWQgdmVyc2lvbiBv
ZiB0aGUKLSAgICAvLyBnaXZlbiBpbWFnZSBzdWJzZXQgd2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9u
cy4KLSAgICBib29sIGhhc1Jlc2l6ZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25z
dDsKKyAgICAvLyBnaXZlbiBpbWFnZSBzdWJzZXQgd2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9ucyBh
bmQgc3Vic2V0cy4KKyAgICBib29sIGhhc1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJUmVjdCYgc3Jj
U3Vic2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OworCisgICAgLy8gVGhpcyB3aWxs
IHJldHVybiBhbiBleGlzdGluZyByZXNpemVkIGltYWdlIHN1YnNldCwgb3IgZ2VuZXJhdGUgYSBu
ZXcgb25lCisgICAgLy8gb2YgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBzdWJzZXRzIGFuZCBwb3Nz
aWJseSBjYWNoZSBpdC4KKyAgICAvLyBzcmNTdWJzZXQgaXMgdGhlIHN1YnNldCBvZiB0aGUgaW1h
Z2UgdG8gcmVzaXplIGluIGltYWdlIHNwYWNlLgorICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXAo
Y29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LCBpbnQgZGVzdFdpZHRoLCBpbnQgZGVzdEhlaWdodCkg
Y29uc3QKKyAgICB7CisgICAgICAgIFNrSVJlY3QgZGVzdFZpc2libGVTdWJzZXQgPSB7MCwgMCwg
ZGVzdFdpZHRoLCBkZXN0SGVpZ2h0fTsKKyAgICAgICAgcmV0dXJuIHJlc2l6ZWRCaXRtYXAoc3Jj
U3Vic2V0LCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQsIGRlc3RWaXNpYmxlU3Vic2V0KTsKKyAgICB9
CisKKyAgICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgcmV0dXJucyBhIHN1YnNldCBvZiB0aGUgZGVz
dGluYXRpb24gaW1hZ2UgKGllOiB0aGUKKyAgICAvLyB2aXNpYmxlIHN1YnNldCkuIGRlc3RWaXNp
YmxlU3Vic2V0IGlzIHRoZSBzdWJzZXQgb2YgdGhlIHJlc2l6ZWQKKyAgICAvLyAoZGVzdFdpZHRo
IHggZGVzdEhlaWdodCkgaW1hZ2UuCisgICAgLy8gSW4gb3RoZXIgd29yZHM6CisgICAgLy8gLSBj
cm9wIGltYWdlIGJ5IHNyY1N1YnNldCAtPiBpbWFnZVN1YnNldC4KKyAgICAvLyAtIHJlc2l6ZSBp
bWFnZVN1YnNldCB0byBkZXN0V2lkdGggeCBkZXN0SGVpZ2h0IC0+IGRlc3RJbWFnZS4KKyAgICAv
LyAtIHJldHVybiBkZXN0SW1hZ2UgY3JvcHBlZCBieSBkZXN0VmlzaWJsZVN1YnNldC4KKyAgICBT
a0JpdG1hcCByZXNpemVkQml0bWFwKGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwgaW50IGRlc3RX
aWR0aCwgaW50IGRlc3RIZWlnaHQsIGNvbnN0IFNrSVJlY3QmIGRlc3RWaXNpYmxlU3Vic2V0KSBj
b25zdDsKIAotICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gYW4gZXhpc3RpbmcgcmVzaXplZCBpbWFn
ZSwgb3IgZ2VuZXJhdGUgYSBuZXcgb25lIG9mCi0gICAgLy8gdGhlIHNwZWNpZmllZCBzaXplIGFu
ZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuIFN1YnNldHRlZCBpbWFnZXMgY2FuIG5vdAotICAgIC8v
IGJlIGNhY2hlZCB1bmxlc3MgdGhlIHN1YnNldCBpcyB0aGUgZW50aXJlIGJpdG1hcC4KLSAgICBT
a0JpdG1hcCByZXNpemVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7Citwcml2
YXRlOgorICAgIC8vIENhY2hlZEltYWdlSW5mbyBpcyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5
IGNhY2hlZCBvciByZXF1ZXN0ZWQgaW1hZ2UKKyAgICAvLyByZXNpemVzLgorICAgIHN0cnVjdCBD
YWNoZWRJbWFnZUluZm8geworICAgICAgICBJbnRTaXplIHJlcXVlc3RTaXplOworICAgICAgICBT
a0lSZWN0IHNyY1N1YnNldDsKKworICAgICAgICBDYWNoZWRJbWFnZUluZm8oKTsKKworICAgICAg
ICBib29sIGlzRXF1YWwoY29uc3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJzZXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0KGNvbnN0IFNrSVJlY3QmIG90aGVy
U3JjU3Vic2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIH07CiAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGdpdmVuIHJlc2l6ZSBvcGVyYXRpb24gc2hvdWxkIGVpdGhlciByZXNp
emUgdGhlIHdob2xlCiAgICAgLy8gaW1hZ2UgYW5kIGNhY2hlIGl0LCBvciByZXNpemUganVzdCB0
aGUgcGFydCBpdCBuZWVkcyBhbmQgdGhyb3cgdGhlIHJlc3VsdAogICAgIC8vIGF3YXkuCiAgICAg
Ly8KKyAgICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gbWF5IGluY3JlbWVudCBhIHJlcXVlc3Qg
Y291bnQgdGhhdCBjYW4gY2hhbmdlIHRoZQorICAgIC8vIHJlc3VsdCBvZiBzdWJzZXF1ZW50IGNh
bGxzLgorICAgIC8vCiAgICAgLy8gT24gdGhlIG9uZSBoYW5kLCBpZiBvbmx5IGEgc21hbGwgc3Vi
c2V0IGlzIGRlc2lyZWQsIHRoZW4gd2Ugd2lsbCB3YXN0ZSBhCiAgICAgLy8gbG90IG9mIHRpbWUg
cmVzYW1wbGluZyB0aGUgZW50aXJlIHRoaW5nLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gZXhhY3Rs
eQogICAgIC8vIHdoYXQncyByZXF1aXJlZC4gT24gdGhlIG90aGVyIGhhbmQsIHJlc2FtcGxpbmcg
dGhlIGVudGlyZSBiaXRtYXAgaXMKICAgICAvLyBiZXR0ZXIgaWYgd2UncmUgZ29pbmcgdG8gYmUg
dXNpbmcgaXQgbW9yZSB0aGFuIG9uY2UgKGxpa2UgYSBiaXRtYXAKICAgICAvLyBzY3JvbGxpbmcg
b24gYW5kIG9mZiB0aGUgc2NyZWVuLiBTaW5jZSB3ZSBvbmx5IGNhY2hlIHdoZW4gZG9pbmcgdGhl
CiAgICAgLy8gZW50aXJlIHRoaW5nLCBpdCdzIGJlc3QgdG8ganVzdCBkbyBpdCB1cCBmcm9udC4K
LSAgICBib29sIHNob3VsZENhY2hlUmVzYW1wbGluZyhpbnQgZGVzdFdpZHRoLAorICAgIGJvb2wg
c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFdpZHRoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBkZXN0SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZXN0U3Vic2V0V2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRlc3RTdWJzZXRIZWlnaHQpIGNvbnN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNvbnN0OwogCi1wcml2YXRlOgogICAgIC8v
IFNldCB0byB0cnVlIHdoZW4gdGhlIGRhdGEgaXMgY29tcGxldGUuIEJlZm9yZSB0aGUgZW50aXJl
IGltYWdlIGhhcwogICAgIC8vIGxvYWRlZCwgd2UgZG8gbm90IHdhbnQgdG8gY2FjaGUgYSByZXNp
emUuCiAgICAgYm9vbCBtX2lzRGF0YUNvbXBsZXRlOwpAQCAtOTcsMTQgKzEyNiwxNyBAQCBwcml2
YXRlOgogICAgIC8vIFJlZmVyZW5jZXMgaG93IG1hbnkgdGltZXMgdGhhdCB0aGUgaW1hZ2Ugc2l6
ZSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yCiAgICAgLy8gdGhlIGxhc3Qgc2l6ZS4KICAgICAvLwot
ICAgIC8vIEV2ZXJ5IHRpbWUgd2UgZ2V0IGEgcmVxdWVzdCwgaWYgaXQgbWF0Y2hlcyB0aGUgbV9s
YXN0UmVxdWVzdFNpemUsIHdlJ2xsCi0gICAgLy8gaW5jcmVtZW50IHRoZSBjb3VudGVyLCBhbmQg
aWYgbm90LCB3ZSdsbCByZXNldCB0aGUgY291bnRlciBhbmQgc2F2ZSB0aGUKLSAgICAvLyBzaXpl
LgorICAgIC8vIEV2ZXJ5IHRpbWUgd2UgZ2V0IGEgY2FsbCB0byBzaG91bGRDYWNoZVJlc2FtcGxp
bmcsIGlmIGl0IG1hdGNoZXMgdGhlCisgICAgLy8gbV9jYWNoZWRJbWFnZUluZm8sIHdlJ2xsIGlu
Y3JlbWVudCB0aGUgY291bnRlciwgYW5kIGlmIG5vdCwgd2UnbGwgcmVzZXQKKyAgICAvLyB0aGUg
Y291bnRlciBhbmQgc2F2ZSB0aGUgZGltZW5zaW9ucy4KICAgICAvLwogICAgIC8vIFRoaXMgYWxs
b3dzIHVzIHRvIHNlZSBpZiBtYW55IHJlcXVlc3RzIGhhdmUgYmVlbiBtYWRlIGZvciB0aGUgc2Ft
ZQogICAgIC8vIHJlc2l6ZWQgaW1hZ2UsIHdlIGtub3cgdGhhdCB3ZSBzaG91bGQgcHJvYmFibHkg
Y2FjaGUgaXQsIGV2ZW4gaWYgYWxsIG9mCiAgICAgLy8gdGhvc2UgcmVxdWVzdHMgaW5kaXZpZHVh
bGx5IGFyZSBzbWFsbCBhbmQgd291bGQgbm90IG90aGVyd2lzZSBiZSBjYWNoZWQuCi0gICAgbXV0
YWJsZSBJbnRTaXplIG1fbGFzdFJlcXVlc3RTaXplOworICAgIC8vCisgICAgLy8gV2UgYWxzbyB0
cmFjayB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBzdWJzZXRzIGZvciBjYWNoaW5nIHBhcnRp
YWwKKyAgICAvLyBpbWFnZSByZXNpemVzLgorICAgIG11dGFibGUgQ2FjaGVkSW1hZ2VJbmZvIG1f
Y2FjaGVkSW1hZ2VJbmZvOwogICAgIG11dGFibGUgaW50IG1fcmVzaXplUmVxdWVzdHM7CiB9Owog
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>