<?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>49947</bug_id>
          
          <creation_ts>2010-11-22 16:30:46 -0800</creation_ts>
          <short_desc>[chromium] The compositor&apos;s root layer should be tiled</short_desc>
          <delta_ts>2022-02-28 00:07:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>abarth</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>jrg</cc>
    
    <cc>kbr</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>klobag</cc>
    
    <cc>nduca</cc>
    
    <cc>noam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thakis</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>312593</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-22 16:30:46 -0800</bug_when>
    <thetext>The LayerRendererChromium compositor currently scrolls by copying the root layer.  This is quite slow.  Rather than copying or redrawing when scrolling, the root layer should be drawn into tiles instead which don&apos;t have to necessarily be redrawn when the page scrolls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312616</commentid>
    <comment_count>1</comment_count>
      <attachid>74617</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-22 17:04:53 -0800</bug_when>
    <thetext>Created attachment 74617
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312617</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-22 17:13:27 -0800</bug_when>
    <thetext>I&apos;m looking to get an initial review on this code.  It still needs more performance analysis, but it is doing ok (in my opinion) on the correctness end of things.

In terms of performance, when a tile is dirty, this code redraws the entire tile.  It likely makes more sense to allocate a canvas per paint call that&apos;s the size of the dirty rect, but I need to do some performance analysis to test this.  I also need to do some performance analysis on the optimal tile size.  256x256 was arbitrary.

In terms of correctness, this code passes all the compositor tests on Linux and OS X.  However it appears to introduce/unearth a Skia-only bug with incorrect filtering on images/gradients along tile boundaries when the page is scaled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312644</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-11-22 18:27:56 -0800</bug_when>
    <thetext>Please check the performance carefully for populating the backing store in 256x256 chunks vs all at once.  In particular I&apos;m a little worried that populating a new row of tiles on a page like gmail as a series of narrow paints instead of one full-width paint might be a lot slower.  If so, we might have to do some tricks if we have a lot of adjacent invalidated tiles to update at once (maybe paint into a contiguous back buffer and use stride tricks to upload into tiles).  Measure first, though :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312906</commentid>
    <comment_count>4</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-11-23 10:08:31 -0800</bug_when>
    <thetext>Same issue as grace on the providing feedback. Sigh. Lost a ton of comments.

Broadly:
- Page space vs Content space; Screen space vs Frame Space. Whats the right term? We use all four.
- For functions that take coordinates, would it help to name the parameters to indicate what space they&apos;re in?
- What&apos;s the difference between the tiler&apos;s grow and resize, or rather why are they both exposed?
- Should tiles know about their position? I notice tiles track dirty coordinates in content (page?) space, but then when we go to draw using them, we construct their position using the x and y loop variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313582</commentid>
    <comment_count>5</comment_count>
      <attachid>74617</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-24 18:20:34 -0800</bug_when>
    <thetext>Comment on attachment 74617
Patch

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

First of all I should say that this is really nicely done!

I have a couple of inline comments but in general I do agree with the other reviewers that the naming (especially page and layer) is confusing.  I would also recommend to reserve using *Rect as part of a variable name only if you&apos;re describing a pixel rectangle and use a different suffix for the index rectangles used to group index tiles.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:177
&gt;  

It seems to me that this method could be eliminated completely. The parts that make the GL calls should just be moved to drawLayers

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:255
&gt; +        ASSERT(m_verticalScrollbarTiler);

I think there&apos;s an assumption that drawLayers gets called after updateRootLayerContents with the same visibleRect and contentRect.  How about caching the scrollbarRect&apos;s in updateRootLayerContents and just issue their draw calls here?  In a way it almost seems that drawLayers should just call updateAndDrawRootLayer() which is essentially updateRootLayerContents() + the three tiler-&gt;draws() and then go and draw the composited layers.

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:247
&gt; +            tile-&gt;clearDirty();

Any reason why you&apos;re not using the tile&apos;s dirty rect instead of redrawing the entire tile?

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:316
&gt; +{

I thought that up until here you were using the term &quot;page&quot; to mean the container the tiled layer lives in, which allows you to convert from page space to layer space.  If that&apos;s true then I think what you&apos;re resizing here is the layer size. If I&apos;m not completely lost, m_pageSize should be called m_layerSize .

&gt; WebKit/chromium/src/WebViewImpl.cpp:2342
&gt; +            : m_webViewImpl(webViewImpl)

I believe you need a 4-space indent here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315351</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-30 15:21:19 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Please check the performance carefully for populating the backing store in 256x256 chunks vs all at once.  In particular I&apos;m a little worried that populating a new row of tiles on a page like gmail as a series of narrow paints instead of one full-width paint might be a lot slower.  If so, we might have to do some tricks if we have a lot of adjacent invalidated tiles to update at once (maybe paint into a contiguous back buffer and use stride tricks to upload into tiles).  Measure first, though :)

This is an excellent point.  I did some performance measurements of the CPU-side costs of filling tiles and my conclusion at this point is to minimize calls to paint, as you suggest.

I did a number of tests of different tile sizes (64, 128, 256, 512, 1024) and different types of invalidation (full page, small selections) on three different web pages of different complexity (http://webkit.org/blog/386/3d-transforms, Gmail, a spreadsheet from jamesr).  The only test case where painting into multiple tiles was the strictly better strategy was full-page invalidations of the WebKit blog at some tile sizes, and even then it was 16 ms vs. 18 ms.

So, I&apos;ll revise the patch to minimize paints.

Also, based on these timings, 256x256 and 512x512 are tied for being the best tile size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317051</commentid>
    <comment_count>7</comment_count>
      <attachid>75544</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-03 14:23:27 -0800</bug_when>
    <thetext>Created attachment 75544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317052</commentid>
    <comment_count>8</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-03 14:26:14 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Same issue as grace on the providing feedback. Sigh. Lost a ton of comments.
&gt; 
&gt; Broadly:
&gt; - Page space vs Content space; Screen space vs Frame Space. Whats the right term? We use all four.

I&apos;ve renamed all &quot;page space&quot; references to &quot;content space&quot; and have tried to differentiate between &quot;layer space&quot; and &quot;content space&quot; where needed.

&gt; - For functions that take coordinates, would it help to name the parameters to indicate what space they&apos;re in?

This should be done, at least in the new code that&apos;s been added.

&gt; - What&apos;s the difference between the tiler&apos;s grow and resize, or rather why are they both exposed?

grow was intended to grow the layer to contain a rectangle.  resize was to resize the layer to an exact size.  I&apos;ve renamed these for clarity.

&gt; - Should tiles know about their position? I notice tiles track dirty coordinates in content (page?) space, but then when we go to draw using them, we construct their position using the x and y loop variables.

I think it&apos;s easiest for tiles to just have their position constructed implicitly rather than repeating that information in a separate variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317055</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-03 14:29:47 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 74617 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74617&amp;action=review

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:177
&gt; &gt;  
&gt; 
&gt; It seems to me that this method could be eliminated completely. The parts that make the GL calls should just be moved to drawLayers

Done.  I simplified the API boundary between WebViewImpl and LayerRendererChromium so that there&apos;s only one function call to draw all the layers.
 
&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:255
&gt; &gt; +        ASSERT(m_verticalScrollbarTiler);
&gt; 
&gt; I think there&apos;s an assumption that drawLayers gets called after updateRootLayerContents with the same visibleRect and contentRect.  How about caching the scrollbarRect&apos;s in updateRootLayerContents and just issue their draw calls here?  In a way it almost seems that drawLayers should just call updateAndDrawRootLayer() which is essentially updateRootLayerContents() + the three tiler-&gt;draws() and then go and draw the composited layers.

This should be much cleaner with the above change as well.
 
&gt; &gt; WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:247
&gt; &gt; +            tile-&gt;clearDirty();
&gt; 
&gt; Any reason why you&apos;re not using the tile&apos;s dirty rect instead of redrawing the entire tile?

It was a design decision that I hadn&apos;t nailed down yet.  After the performance analysis and the need to do row-by-row memcpy, I&apos;ve modified this patch to use the dirty rect instead of the entire tile.

&gt; &gt; WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:316
&gt; &gt; +{
&gt; 
&gt; I thought that up until here you were using the term &quot;page&quot; to mean the container the tiled layer lives in, which allows you to convert from page space to layer space.  If that&apos;s true then I think what you&apos;re resizing here is the layer size. If I&apos;m not completely lost, m_pageSize should be called m_layerSize .

You&apos;re quite right.  I&apos;ve tried to clean up the language in the latest patch.  Please let me know if I could be clearer.

I think I was just frustrated with the surrounding code doing a very poor job of specifying what rects were in which space, so I tried to make sure that this code was more clear.

&gt; &gt; WebKit/chromium/src/WebViewImpl.cpp:2342
&gt; &gt; +            : m_webViewImpl(webViewImpl)
&gt; 
&gt; I believe you need a 4-space indent here.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317062</commentid>
    <comment_count>10</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-03 14:37:15 -0800</bug_when>
    <thetext>Ack.  I neglected to incorporate Grace&apos;s feedback because it was in a different place.  I&apos;ll do that right now and submit another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317073</commentid>
    <comment_count>11</comment_count>
      <attachid>75546</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-03 14:49:57 -0800</bug_when>
    <thetext>Created attachment 75546
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317217</commentid>
    <comment_count>12</comment_count>
      <attachid>75546</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-12-03 19:38:52 -0800</bug_when>
    <thetext>Comment on attachment 75546
Patch

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

I didn&apos;t have time to give this a full review yet, but I left a bunch of nitpicks.  I&apos;m a bit confused by LayerTilerChromium&apos;s mixture of values and rectangles that represent pixel regions vs values and rectangles that represent tile indices.

&gt; WebCore/ChangeLog:11
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Refactor root layer update and drawing from LayerRendererChromium into
&gt; +        LayerTilerChromium.  The root layer is now drawn as multiple tiles
&gt; +        rather than as one single large texture.  Scrollbars are now drawn
&gt; +        separately rather than as part of the root layer.
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=49947
&gt; +        Test: LayoutTests/compositing/

nit: preferred format is:

1-line description (normally same as the bug title)
bug URL

long form description of patch

Test: blah blah

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.h:57
&gt; +    // Change the tile size.  This may invalidate all the existing tiles.
&gt; +    void setTileSize(const IntSize&amp; size);

Should this be public API?  It seems a little cleaner if the tile size is a construction-time invariant.

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.h:66
&gt; +        Tile(unsigned int textureId) : m_textureId(textureId) { }

explicit

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.h:88
&gt; +    void invalidateTiles(const IntRect&amp; considerGroup, const IntRect&amp; keepGroup);

I tried but I can&apos;t really figure out what you mean by &apos;considerGroup&apos; and &apos;keepGroup&apos; here.  Are these rectangles in some coordinate space or ranges of tiles?  If the latter, I feel like this shouldn&apos;t be using the IntRect type since that normally implies a geometric meaning.

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.h:92
&gt; +    int tileIndex(int x, int y);

The API here makes me think that x and y are offsets in some logical space but the implementation makes me think they are indices into a two-dimensional array.  Which are they?  I think if the latter i and j may make more sense as parameter names.  Same goes for other functions here that take x, y

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.h:108
&gt; +    // Cache a tile-sized pixel buffer to draw into.
&gt; +    Vector&lt;uint8_t&gt; m_tilePixels;

OwnArrayPtr&lt;&gt; might be a better match here - we don&apos;t need anything out of Vector except the ability to allocate an array.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2315
&gt; +    IntRect dirtyRect = view-&gt;windowToContents(rect);
&gt; +    IntRect dirtyRect2(IntPoint(rect.x() + view-&gt;scrollX(), rect.y() + view-&gt;scrollY()), rect.size());
&gt; +    ASSERT(dirtyRect == dirtyRect2);
&gt; +    m_layerRenderer-&gt;invalidateRootLayerRect(dirtyRect, visibleRect, contentRect);

This looks like it wasn&apos;t intended to be part of this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317224</commentid>
    <comment_count>13</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-03 21:05:43 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 75546 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75546&amp;action=review
&gt; 
&gt; I didn&apos;t have time to give this a full review yet, but I left a bunch of nitpicks.  I&apos;m a bit confused by LayerTilerChromium&apos;s mixture of values and rectangles that represent pixel regions vs values and rectangles that represent tile indices.

There are a number of places (invalidation, tile update, and tile drawing) that require iterating over a set of tiles.  I was using IntRect because it seemed like a reasonable way to group rectangles of tile indices.

However, given your feedback here and Vangelis&apos;s similar comments before, maybe I should just make some custom iterator class to handle this same behavior, unless you have some other suggestion.

&gt; &gt; WebCore/platform/graphics/chromium/LayerTilerChromium.h:57
&gt; &gt; +    // Change the tile size.  This may invalidate all the existing tiles.
&gt; &gt; +    void setTileSize(const IntSize&amp; size);
&gt; 
&gt; Should this be public API?  It seems a little cleaner if the tile size is a construction-time invariant.

In this patch, when the content rect is resized, scrollbars are also resized to use the minimal amount of tiles possible.  This usually ends up being just a single tile per scrollbar, unless your window size is over the max texture size.  Maybe this is an unneeded optimization.

&gt; &gt; WebCore/platform/graphics/chromium/LayerTilerChromium.h:92
&gt; &gt; +    int tileIndex(int x, int y);
&gt; 
&gt; The API here makes me think that x and y are offsets in some logical space but the implementation makes me think they are indices into a two-dimensional array.  Which are they?  I think if the latter i and j may make more sense as parameter names.  Same goes for other functions here that take x, y

That&apos;s a good point--the intention here could be confused.  They are supposed to be indices, as you correctly guess.

&gt; This looks like it wasn&apos;t intended to be part of this patch

Oops, that was unintentional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317859</commentid>
    <comment_count>14</comment_count>
      <attachid>75738</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-06 14:55:10 -0800</bug_when>
    <thetext>Created attachment 75738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317860</commentid>
    <comment_count>15</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-06 14:55:57 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=75738) [details]
&gt; Patch

Cleaned up the style nitpicks and as well as removed all use of IntRect to group tile indices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317871</commentid>
    <comment_count>16</comment_count>
      <attachid>75738</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-06 15:23:37 -0800</bug_when>
    <thetext>Comment on attachment 75738
Patch

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

Overall this looks good to me. One minor issue needs to be fixed though to avoid introducing a regression.

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:279
&gt; +                                                       kCGImageAlphaPremultipliedLast));

This needs to be kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host per a recent bug fix Nico did. Also, indentation is off here.

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:341
&gt; +    // Render the root layer using a quad that takes up the entire visible area of the window.

This comment needs to be updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318510</commentid>
    <comment_count>17</comment_count>
      <attachid>75738</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-12-07 17:03:05 -0800</bug_when>
    <thetext>Comment on attachment 75738
Patch

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

Looks good on my end (except for a couple of inline comments). I like the name cleanup!

&gt; WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:349
&gt; +    GLC(context, context-&gt;colorMask(true, true, true, false));

Since the layer tiler is supposed to be more general purpose and eventually used by other layers as well, alpha masking should be done in the LayerRendererChromium and not here.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2325
&gt; +    if (page())

this should probably move to after the point where we know for sure whether we&apos;re doing accelerated compositing or not.  If we fail to create the GL context or the LayerRendererChromium we won&apos;t be doing accelerated compositing.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2364
&gt; +class WebViewImplTilePaintInterface : public TilePaintInterface {

It is somewhat unusual to define classes in a .cpp file.  A WebKit reviewer can confirm whether it&apos;s ok or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318543</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-07 18:56:41 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; WebKit/chromium/src/WebViewImpl.cpp:2364
&gt; &gt; +class WebViewImplTilePaintInterface : public TilePaintInterface {
&gt; 
&gt; It is somewhat unusual to define classes in a .cpp file.  A WebKit reviewer can confirm whether it&apos;s ok or not.

Personally I think it&apos;s fine. The rule I&apos;m aware of is not declaring multiple classes in a .h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318566</commentid>
    <comment_count>19</comment_count>
      <attachid>75738</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-12-07 20:18:45 -0800</bug_when>
    <thetext>Comment on attachment 75738
Patch

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

&gt; WebCore/platform/ScrollView.h:326
&gt;      bool m_paintsEntireContents;
&gt; +    bool m_clipsRepaints;

Why do we need both of these?  What&apos;s the difference?

&gt;&gt; WebKit/chromium/src/WebViewImpl.cpp:2364
&gt;&gt; +class WebViewImplTilePaintInterface : public TilePaintInterface {
&gt; 
&gt; It is somewhat unusual to define classes in a .cpp file.  A WebKit reviewer can confirm whether it&apos;s ok or not.

I think defining this class in the .cpp if it&apos;s only used in this .cpp is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319703</commentid>
    <comment_count>20</comment_count>
      <attachid>75738</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-12-09 13:59:45 -0800</bug_when>
    <thetext>Comment on attachment 75738
Patch

Clearing from the review queue.  I think the patch is pretty close but there are comments here that need to be addressed before this is 100% ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320690</commentid>
    <comment_count>21</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-11 09:31:39 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 75738 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75738&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/ScrollView.h:326
&gt; &gt;      bool m_paintsEntireContents;
&gt; &gt; +    bool m_clipsRepaints;
&gt; 
&gt; Why do we need both of these?  What&apos;s the difference?

It&apos;s kind of frustrating to need both.  (I&apos;m CCing kenneth@webkit.org who added this.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320691</commentid>
    <comment_count>22</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-11 09:36:15 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #19)
&gt; &gt; (From update of attachment 75738 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75738&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; WebCore/platform/ScrollView.h:326
&gt; &gt; &gt;      bool m_paintsEntireContents;
&gt; &gt; &gt; +    bool m_clipsRepaints;
&gt; &gt; 
&gt; &gt; Why do we need both of these?  What&apos;s the difference?
&gt; 
&gt; It&apos;s kind of frustrating to need both.  (I&apos;m CCing kenneth@webkit.org (:kenne) (r) who added this.)

paintsEntireContents doesn&apos;t clip repaints but it also sets the content rect to be the entire contents of the page.  In other words, paintsEntireContents changes the way the page is drawn.

clipsRepaints only does the first part of that, allowing offscreen invalidations. Because we still want to keep the content rect and the scrollbars where they are, I added yet another boolean.

It&apos;s not ideal, but it seemed like the best approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324604</commentid>
    <comment_count>23</comment_count>
      <attachid>77043</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-20 15:21:05 -0800</bug_when>
    <thetext>Created attachment 77043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324606</commentid>
    <comment_count>24</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-20 15:25:50 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=77043) [details]
&gt; Patch

This patch addresses the two comments by Vangelis and the two comments by Ken.  The clipsRepaint logic is still there, because I think clipsRepaint is trying to do a subset of what paintsEntireContents is trying to do.

Additionally, this patch adds LayerTilerChromium::invalidateEntireLayer which gets called when the layer gets set on LayerRendererChromium.  This fixes an issue with offscreen tiles needing to be invalidated when switching from one tab to another.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324637</commentid>
    <comment_count>25</comment_count>
      <attachid>77051</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-20 16:24:33 -0800</bug_when>
    <thetext>Created attachment 77051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324640</commentid>
    <comment_count>26</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-20 16:25:24 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Created an attachment (id=77051) [details]
&gt; Patch

Rebaselining patch due to merge conflict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324692</commentid>
    <comment_count>27</comment_count>
      <attachid>77051</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-12-20 18:45:11 -0800</bug_when>
    <thetext>Comment on attachment 77051
Patch

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

Leaving some nits.  I&apos;m still not super duper sure about the paintsEntireContents/clipRects logic - why do we want to receive invalidations for offscreen rectangles if we aren&apos;t changing the visible region?  It seems like we either only want to paint the visible region (and thus only want invalidations for the visible region), or we are painting outside what the ScrollView thinks is visible and thus need invalidations outside what the ScrollView thinks is visible.  I&apos;m not sure how we can possibly have it both ways.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:126
&gt; +    m_rootLayerTiler = 0;
&gt; +    m_horizontalScrollbarTiler = 0;
&gt; +    m_verticalScrollbarTiler = 0;

nit: I think .clear() is a more explicit way of doing what you want to do here.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:183
&gt; +    // Mask out writes to alpha channel: ClearType via Skia results in invalid

Nit: subpixel antialiasing, not ClearType</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324738</commentid>
    <comment_count>28</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-20 19:48:27 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 77051 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77051&amp;action=review
&gt; 
&gt; Leaving some nits.

Thanks for pointing those out.

&gt; I&apos;m still not super duper sure about the paintsEntireContents/clipRects logic - why do we want to receive invalidations for offscreen rectangles if we aren&apos;t changing the visible region?  It seems like we either only want to paint the visible region (and thus only want invalidations for the visible region), or we are painting outside what the ScrollView thinks is visible and thus need invalidations outside what the ScrollView thinks is visible.  I&apos;m not sure how we can possibly have it both ways.

Are you not sure about why we need both paintsEntireContents and clipsRepaints, why we need either, or the interaction between them?

This patch was intended to be minimally intrusive to the paintsEntireContents logic.  If that flag is true, then this patch should be a no-op.  I agree with why your confusion about why you need to clip repaints when you set your visible rect to the entire page, but that yak shaving should be left for the port using paintsEntireContents and not this patch.  I was hoping that Kenneth Christianson could chime in here.

Ignoring paintsEntireContents, Chromium&apos;s tiled rendering paints offscreen of what ScrollView thinks is visible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324828</commentid>
    <comment_count>29</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-20 22:50:29 -0800</bug_when>
    <thetext>Seems we are gettings lots of tile implementations in WebKit :-) One in WebCore, one for WebKit2, one for EFL and now one for Chromium.

&gt; Are you not sure about why we need both paintsEntireContents and clipsRepaints, why we need either, or the interaction between them?
&gt; 
&gt; This patch was intended to be minimally intrusive to the paintsEntireContents logic.  If that flag is true, then this patch should be a no-op.  I agree with why your confusion about why you need to clip repaints when you set your visible rect to the entire page, but that yak shaving should be left for the port using paintsEntireContents and not this patch.  I was hoping that Kenneth Christianson could chime in here.
&gt; 
&gt; Ignoring paintsEntireContents, Chromium&apos;s tiled rendering paints offscreen of what ScrollView thinks is visible.

Could you explain me why you cannot use the paintsEntireContents? It basically means &quot;get updates even outside viewport&quot; which sounds pretty much like !clipRepaints.

Where is it that paintsEntireContents does something you do not need, or where you want to modify it?

&gt; paintsEntireContents doesn&apos;t clip repaints but it also sets the content rect to be the entire contents of the page.  In other words, paintsEntireContents changes the way the page is drawn.

I do not really think it needs to do that, or does that, because we layout given the viewport meta tag, so we paint fixed elements relative to that etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325040</commentid>
    <comment_count>30</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-21 09:47:32 -0800</bug_when>
    <thetext>(In reply to comment #29)

&gt; Could you explain me why you cannot use the paintsEntireContents? It basically means &quot;get updates even outside viewport&quot; which sounds pretty much like !clipRepaints.
&gt; 
&gt; Where is it that paintsEntireContents does something you do not need, or where you want to modify it?

In particular, ScrollView::visibleContentRect returns IntRect(IntPoint(0, 0), contentsSize()) if paintsEntireContents() is true.  This return value ignores both the scroll offset and scrollbars.  Alternatively, I could duplicate the visible region calculation from visibleContentRect() in WebViewImpl.cpp, but clipsRepaints seemed like a better solution than that.

&gt; &gt; paintsEntireContents doesn&apos;t clip repaints but it also sets the content rect to be the entire contents of the page.  In other words, paintsEntireContents changes the way the page is drawn.
&gt; 
&gt; I do not really think it needs to do that, or does that, because we layout given the viewport meta tag, so we paint fixed elements relative to that etc.

I&apos;m guessing you also aren&apos;t drawing scrollbars?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325564</commentid>
    <comment_count>31</comment_count>
      <attachid>77231</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-22 10:40:47 -0800</bug_when>
    <thetext>Created attachment 77231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325571</commentid>
    <comment_count>32</comment_count>
      <attachid>77231</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-22 10:46:25 -0800</bug_when>
    <thetext>Comment on attachment 77231
Patch

This patch addresses the rest of jamesr&apos;s nitpicks, other than the clipsRepaints vs. paintsEntireContents issue.

I maintain that adding an additional flag is the simplest option among the alternatives.  At this point, I would prefer to have this patch submitted and we can clean that up in a follow-on patch, if necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325577</commentid>
    <comment_count>33</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-12-22 10:55:38 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 77231 [details])
&gt; This patch addresses the rest of jamesr&apos;s nitpicks, other than the clipsRepaints vs. paintsEntireContents issue.
&gt; 
&gt; I maintain that adding an additional flag is the simplest option among the alternatives.  At this point, I would prefer to have this patch submitted and we can clean that up in a follow-on patch, if necessary.

I agree with Enne here.  paintsEntireContents() controls how much of the page is actually painted whereas clipsRepaints() controls whether invalidates get clipped or not. When tiling, it makes sense that we want to get invalidates that are outside the renderable rect so that we can update off-screen tile content accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325711</commentid>
    <comment_count>34</comment_count>
      <attachid>77231</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-22 14:48:36 -0800</bug_when>
    <thetext>Comment on attachment 77231
Patch

The revised patch looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326170</commentid>
    <comment_count>35</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-12-23 11:17:11 -0800</bug_when>
    <thetext>Committed r74568: &lt;http://trac.webkit.org/changeset/74568&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326205</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-23 12:16:42 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74568 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74617</attachid>
            <date>2010-11-22 17:04:53 -0800</date>
            <delta_ts>2010-12-03 14:23:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49947-20101122170452.patch</filename>
            <type>text/plain</type>
            <size>53230</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGJkYjFiNzczNGIwYmY2MDE4NmU4N2E5MWMxNTgzMjI0YjBmZmI1Yi4uOTRmOThlNzAzMzkzYWZm
NDVmYjdjNGE0NWJlMDE1YTdkNTUyMTYzMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxMC0xMS0yMiAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHJvb3QgbGF5ZXIgdXBkYXRlIGFuZCBk
cmF3aW5nIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIGludG8KKyAgICAgICAgTGF5ZXJUaWxl
ckNocm9taXVtLiAgVGhlIHJvb3QgbGF5ZXIgaXMgbm93IGRyYXduIGFzIG11bHRpcGxlIHRpbGVz
CisgICAgICAgIHJhdGhlciB0aGFuIGFzIG9uZSBzaW5nbGUgbGFyZ2UgdGV4dHVyZS4gIFNjcm9s
bGJhcnMgYXJlIG5vdyBkcmF3bgorICAgICAgICBzZXBhcmF0ZWx5IHJhdGhlciB0aGFuIGFzIHBh
cnQgb2YgdGhlIHJvb3QgbGF5ZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5OTQ3CisgICAgICAgIFRlc3Q6IExheW91dFRlc3RzL2NvbXBvc2l0
aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2ZXJ0aWNhbFNjcm9sbGJhclJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpob3Jpem9udGFsU2Nyb2xsYmFy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmludmFsaWRh
dGVSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6cHJlcGFyZVRvRHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxl
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJS
ZW5kZXJlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpz
ZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVUaWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnBhZ2VSZWN0VG9UaWxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnBhZ2VSZWN0VG9MYXllclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlkYXRlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlckNocm9taXVtOjpyZXNpemVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6Z3Jvd1BhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpUaWxlOjp+VGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
OlRpbGU6OnJlbGVhc2VUZXh0dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXJDaHJvbWl1bTo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlckNocm9taXVtOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJD
aHJvbWl1bTo6VGlsZTo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJD
aHJvbWl1bTo6VGlsZTo6ZGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpUaWxlOjpjbGVhckRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJv
bWl1bTo6bGF5ZXJSZW5kZXJlcik6CisKIDIwMTAtMTEtMjIgIEFsZXhhbmRlciBQYXZsb3YgIDxh
cGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFu
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCBhZjc4MmE2YmVlYmIyY2Q1NDZmZjM4YjZkMDc4NjhjZjU1NTlhMWRkLi4zNzU3YzAx
YjRkMmE2OGNkODE3NWQ2ZjgyYmQ3NjNiYTZkNDMzZDYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjQ2NCw2ICsyNDY0LDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hy
b21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKaW5kZXggODZmMzU4MGNhNzQxZjNjNTk0MzBhN2E3NWE3YzE3M2VjMmIy
NmRhNy4uNGU5YmZkOWYwOTY2Yjk3OWE3NDIxZTVkMTQxZTM3ZDcyMDRlYTVkMSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAg
LTYwLDYgKzYwLDcgQEAgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogLy8gdGhpcyBjbGFz
cy4KIGNsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllckNocm9taXVt
PiB7CiAgICAgZnJpZW5kIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKKyAgICBmcmllbmQg
Y2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA5MTU4MGNjODgzMzkxYjY4YjRlYzhhYjgx
MDhmYzNjNGNmOWQ3ZGZjLi45Y2U5ZWZhOTQ4ZTI3YjBhZWFmYzFhODc4YjgwMTk4ZTBhM2VlMmE3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC05NSw4ICs5NSw3IEBAIFBhc3NSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNz
UmVmUHRyPEdyYXBoCiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCi0gICAgOiBtX3Jv
b3RMYXllclRleHR1cmVJZCgwKQotICAgICwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkKKyAg
ICA6IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKDApCiAgICAgLCBtX3Jvb3RMYXllclRleHR1cmVI
ZWlnaHQoMCkKICAgICAsIG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSgwKQogICAgICwgbV9y
b290TGF5ZXIoMCkKQEAgLTEwOCw2ICsxMDcsOCBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZQog
ICAgICwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQogewogICAgIG1faGFyZHdhcmVDb21wb3Np
dGluZyA9IGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCk7CisgICAgbV9yb290TGF5ZXJUaWxlciA9
IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAyNTYpKTsKKyAg
ICBBU1NFUlQobV9yb290TGF5ZXJUaWxlcik7CiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCkBAIC0xMjcsNDUgKzEyOCwzOSBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IGNvbnN0IGNoYXIqCiAgICAgICAgIExPR19FUlJPUigiR0wgY29tbWFuZCBmYWlsZWQ6IEZpbGU6
ICVzXG5cdExpbmUgJWRcblx0Y29tbWFuZDogJXMsIGVycm9yICV4XG4iLCBmaWxlLCBsaW5lLCBj
b21tYW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSk7CiB9CiAKLS8vIENyZWF0ZXMgYSBjYW52
YXMgYW5kIGFuIGFzc29jaWF0ZWQgZ3JhcGhpY3MgY29udGV4dCB0aGF0IHRoZSByb290IGxheWVy
IHdpbGwKLS8vIHJlbmRlciBpbnRvLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFJv
b3RMYXllckNhbnZhc1NpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogewotICAgIGlmIChzaXpl
ID09IG1fcm9vdExheWVyQ2FudmFzU2l6ZSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChwcm9n
cmFtSWQgIT0gbV9jdXJyZW50U2hhZGVyKSB7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtSWQpKTsKKyAgICAgICAgbV9jdXJyZW50U2hhZGVyID0g
cHJvZ3JhbUlkOworICAgIH0KK30KIAotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgLy8gQ3JlYXRl
IG5ldyBjYW52YXMgYW5kIGNvbnRleHQuIE93blB0ciB0YWtlcyBjYXJlIG9mIGZyZWVpbmcgdXAK
LSAgICAvLyB0aGUgb2xkIG9uZXMuCi0gICAgbV9yb290TGF5ZXJDYW52YXMgPSBuZXcgc2tpYTo6
UGxhdGZvcm1DYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7Ci0gICAg
bV9yb290TGF5ZXJTa2lhQ29udGV4dCA9IG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKG1fcm9vdExh
eWVyQ2FudmFzLmdldCgpKTsKLSAgICBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4dCA9IG5ldyBH
cmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+
KG1fcm9vdExheWVyU2tpYUNvbnRleHQuZ2V0KCkpKTsKLSNlbGlmIFBMQVRGT1JNKENHKQotICAg
IC8vIFJlbGVhc2UgdGhlIHByZXZpb3VzIENHQml0bWFwQ29udGV4dCBiZWZvcmUgcmVhbGxvY2F0
aW5nIHRoZSBiYWNraW5nIHN0b3JlIGFzIGEgcHJlY2F1dGlvbi4KLSAgICBtX3Jvb3RMYXllckNH
Q29udGV4dC5hZG9wdENGKDApOwotICAgIGludCByb3dCeXRlcyA9IDQgKiBzaXplLndpZHRoKCk7
Ci0gICAgbV9yb290TGF5ZXJCYWNraW5nU3RvcmUucmVzaXplKHJvd0J5dGVzICogc2l6ZS5oZWln
aHQoKSk7Ci0gICAgbWVtc2V0KG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRhdGEoKSwgMCwgbV9y
b290TGF5ZXJCYWNraW5nU3RvcmUuc2l6ZSgpKTsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsK
LSAgICBtX3Jvb3RMYXllckNHQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSht
X3Jvb3RMYXllckJhY2tpbmdTdG9yZS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCA4LCByb3dCeXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
Rmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKLSAgICBDR0NvbnRleHRUcmFuc2xh
dGVDVE0obV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCksIDAsIHNpemUuaGVpZ2h0KCkpOwotICAg
IENHQ29udGV4dFNjYWxlQ1RNKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpLCAxLCAtMSk7Ci0g
ICAgbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0KG1fcm9v
dExheWVyQ0dDb250ZXh0LmdldCgpKTsKLSNlbHNlCi0jZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50
IGZvciB5b3VyIHBsYXRmb3JtLiIKLSNlbmRpZgorSW50UmVjdCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnZlcnRpY2FsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJh
cihJbnRQb2ludChjb250ZW50UmVjdC5yaWdodCgpLCBjb250ZW50UmVjdC55KCkpLCBJbnRTaXpl
KHZpc2libGVSZWN0LndpZHRoKCkgLSBjb250ZW50UmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5o
ZWlnaHQoKSkpOworICAgIHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcjsKK30KIAotICAgIG1fcm9v
dExheWVyQ2FudmFzU2l6ZSA9IHNpemU7CitJbnRSZWN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
aG9yaXpvbnRhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJh
cihJbnRQb2ludChjb250ZW50UmVjdC54KCksIGNvbnRlbnRSZWN0LmJvdHRvbSgpKSwgSW50U2l6
ZSh2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAtIGNvbnRlbnRSZWN0
LmhlaWdodCgpKSk7CisgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXI7CiB9CiAKLXZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQordm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQogewotICAgIGlmIChwcm9ncmFtSWQgIT0gbV9jdXJyZW50U2hhZGVy
KSB7Ci0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFt
SWQpKTsKLSAgICAgICAgbV9jdXJyZW50U2hhZGVyID0gcHJvZ3JhbUlkOworICAgIGlmIChjb250
ZW50UmVjdC5pbnRlcnNlY3RzKGRpcnR5UmVjdCkpCisgICAgICAgIG1fcm9vdExheWVyVGlsZXIt
PmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJh
clRpbGVyKSB7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJh
clJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgaWYgKGRpcnR5UmVjdC5p
bnRlcnNlY3RzKHNjcm9sbGJhcikpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJU
aWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICB9CisgICAgaWYgKG1fdmVydGlj
YWxTY3JvbGxiYXJUaWxlcikgeworICAgICAgICBJbnRSZWN0IHNjcm9sbGJhciA9IHZlcnRpY2Fs
U2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAgICAgICBpZiAoZGly
dHlSZWN0LmludGVyc2VjdHMoc2Nyb2xsYmFyKSkKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXJUaWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKICAgICB9CiB9CiAKQEAgLTE3
Myw4ICsxNjgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuc2ln
bmVkIHByb2dyYW1JZCkKIC8vIHJvb3QgbGF5ZXIgdGV4dHVyZS4gSXQgcmVzaXplcyB0aGUgcm9v
dCBsYXllciB0ZXh0dXJlIGFuZCBzY3JvbGxzIGl0cwogLy8gY29udGVudHMgYXMgbmVlZGVkLiBJ
dCBhbHNvIHNldHMgdXAgY29tbW9uIEdMIHN0YXRlIHVzZWQgYnkgdGhlIHJlc3QKIC8vIG9mIHRo
ZSBsYXllciBkcmF3aW5nIGNvZGUuCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFy
ZVRvRHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAgICBBU1NFUlQobV9oYXJkd2Fy
ZUNvbXBvc2l0aW5nKTsKIApAQCAtMTgzLDEwICsxNzcsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
Y29ucwogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Jv
b3RMYXllclRleHR1cmVJZCkpOwotICAgIAotICAgIGJvb2wgc2tpcFNjcm9sbCA9IGZhbHNlOwot
CiAgICAgLy8gSWYgdGhlIHNpemUgb2YgdGhlIHZpc2libGUgYXJlYSBoYXMgY2hhbmdlZCB0aGVu
IGFsbG9jYXRlIGEgbmV3IHRleHR1cmUKICAgICAvLyB0byBzdG9yZSB0aGUgY29udGVudHMgb2Yg
dGhlIHJvb3QgbGF5ZXIgYW5kIGFkanVzdCB0aGUgcHJvamVjdGlvbiBtYXRyaXgKICAgICAvLyBh
bmQgdmlld3BvcnQuCkBAIC0xOTYsMTUgKzE4Niw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25z
CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJlY3RXaWR0aDsKICAg
ICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3RIZWlnaHQ7CiAKLSAg
ICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9yb290TGF5ZXJU
ZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7Ci0KICAgICAg
ICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZhY2UgdG8gZm9yY2UgYW4gdXBkYXRl
IG9mIHRoZSB2aWV3cG9ydCBhbmQKICAgICAgICAgLy8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0
aW1lIHVzZVJlbmRlclN1cmZhY2UgaXMgY2FsbGVkLgogICAgICAgICBtX2N1cnJlbnRSZW5kZXJT
dXJmYWNlID0gMDsKLQotICAgICAgICAvLyBUaGUgcm9vdCBsYXllciB0ZXh0dXJlIHdhcyBqdXN0
IHJlc2l6ZWQgc28gaXRzIGNvbnRlbnRzIGFyZSBub3QKLSAgICAgICAgLy8gdXNlZnVsIGZvciBz
Y3JvbGxpbmcuCi0gICAgICAgIHNraXBTY3JvbGwgPSB0cnVlOwogICAgIH0KIAogICAgIC8vIFRo
ZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGluZyB0
aGUgc2Nyb2xsYmFycy4KQEAgLTIxNyw3MiArMjAxLDM3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBj
b25zCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9URVNUKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0UpKTsKIAotICAgIC8vIEJsZW5kaW5nIGRpc2Fi
bGVkIGJ5IGRlZmF1bHQuIFJvb3QgbGF5ZXIgYWxwaGEgY2hhbm5lbCBvbiBXaW5kb3dzIGlzIGlu
Y29ycmVjdCB3aGVuIFNraWEgdXNlcyBDbGVhclR5cGUuIAotICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsgCi0KLSAgICBpZiAo
bV9zY3JvbGxQb3NpdGlvbiA9PSBJbnRQb2ludCgtMSwgLTEpKSB7Ci0gICAgICAgIG1fc2Nyb2xs
UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKLSAgICAgICAgc2tpcFNjcm9sbCA9IHRydWU7Ci0g
ICAgfQotCi0gICAgSW50UG9pbnQgc2Nyb2xsRGVsdGEgPSB0b1BvaW50KHNjcm9sbFBvc2l0aW9u
IC0gbV9zY3JvbGxQb3NpdGlvbik7Ci0KLSAgICAvLyBTY3JvbGxpbmcgbGFyZ2VyIHRoYW4gdGhl
IGNvbnRlbnRSZWN0IHNpemUgZG9lcyBub3QgcHJlc2VydmUgYW55IG9mIHRoZSBwaXhlbHMsIHNv
IHRoZXJlIGlzCi0gICAgLy8gbm8gbmVlZCB0byBjb3B5IGZyYW1lYnVmZmVyIHBpeGVscyBiYWNr
IGludG8gdGhlIHRleHR1cmUuCi0gICAgaWYgKGFicyhzY3JvbGxEZWx0YS55KCkpID4gY29udGVu
dFJlY3QuaGVpZ2h0KCkgfHwgYWJzKHNjcm9sbERlbHRhLngoKSkgPiBjb250ZW50UmVjdC53aWR0
aCgpKQotICAgICAgICBza2lwU2Nyb2xsID0gdHJ1ZTsKLQotICAgIC8vIFNjcm9sbCB0aGUgYmFj
a2J1ZmZlcgotICAgIGlmICghc2tpcFNjcm9sbCAmJiAoc2Nyb2xsRGVsdGEueCgpIHx8IHNjcm9s
bERlbHRhLnkoKSkpIHsKLSAgICAgICAgLy8gU2Nyb2xsaW5nIHdvcmtzIGFzIGZvbGxvd3M6IFdl
IHJlbmRlciBhIHF1YWQgd2l0aCB0aGUgY3VycmVudCByb290IGxheWVyIGNvbnRlbnRzCi0gICAg
ICAgIC8vIHRyYW5zbGF0ZWQgYnkgdGhlIGFtb3VudCB0aGUgcGFnZSBoYXMgc2Nyb2xsZWQgc2lu
Y2UgdGhlIGxhc3QgdXBkYXRlIGFuZCB0aGVuIHJlYWQgdGhlCi0gICAgICAgIC8vIHBpeGVscyBv
ZiB0aGUgY29udGVudCBhcmVhICh2aXNpYmxlIGFyZWEgZXhjbHVkaW5nIHRoZSBzY3JvbGwgYmFy
cykgYmFjayBpbnRvIHRoZQotICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXds
eSBleHBvc2VkIGFyZWEgd2lsbCBiZSBmaWxsZWQgYnkgYSBzdWJzZXF1ZW50IGRyYXdMYXllcnNJ
bnRvUmVjdCBjYWxsCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbGVkTGF5ZXJN
YXRyaXg7Ci0KLSAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC50cmFuc2xhdGUzZCgwLjUgKiB2
aXNpYmxlUmVjdC53aWR0aCgpIC0gc2Nyb2xsRGVsdGEueCgpLAotICAgICAgICAgICAgMC41ICog
dmlzaWJsZVJlY3QuaGVpZ2h0KCkgKyBzY3JvbGxEZWx0YS55KCksIDApOwotICAgICAgICBzY3Jv
bGxlZExheWVyTWF0cml4LnNjYWxlM2QoMSwgLTEsIDEpOwotCi0gICAgICAgIHVzZVNoYWRlciht
X3RleHR1cmVMYXllclNoYWRlclByb2dyYW0pOwotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPnVuaWZvcm0xaShtX3RleHR1cmVMYXllclNoYWRlclNhbXBsZXJMb2NhdGlvbiwgMCkp
OwotICAgICAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKG1fY29udGV4dC5nZXQo
KSwgbV9wcm9qZWN0aW9uTWF0cml4LCBzY3JvbGxlZExheWVyTWF0cml4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVS
ZWN0LmhlaWdodCgpLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0cml4TG9jYXRpb24sIG1fdGV4dHVyZUxheWVyU2hhZGVy
QWxwaGFMb2NhdGlvbik7Ci0KLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jb3B5
VGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwg
MCwgY29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9Cisg
ICAgLy8gQmxlbmRpbmcgZGlzYWJsZWQgYnkgZGVmYXVsdC4gUm9vdCBsYXllciBhbHBoYSBjaGFu
bmVsIG9uIFdpbmRvd3MgaXMgaW5jb3JyZWN0IHdoZW4gU2tpYSB1c2VzIENsZWFyVHlwZS4KKyAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKSk7CiAKICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiB9CiAKLXZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0
ZVJvb3RMYXllckNvbnRlbnRzKFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBUaWxlUGFp
bnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21w
b3NpdGluZyk7CisgICAgbV9yb290TGF5ZXJUaWxlci0+dXBkYXRlKHRpbGVQYWludCwgdmlzaWJs
ZVJlY3QpOwogCi0gICAgaWYgKCFtX3Jvb3RMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUg
cm9vdCBsYXllciB0ZXh0dXJlLgotICAgIEFTU0VSVCgodXBkYXRlUmVjdC5yaWdodCgpICA8PSBt
X3Jvb3RMYXllclRleHR1cmVXaWR0aCkKLSAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QuYm90dG9t
KCkgPD0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSk7CisgICAgaWYgKHZpc2libGVSZWN0Lndp
ZHRoKCkgPiBjb250ZW50UmVjdC53aWR0aCgpKSB7CisgICAgICAgIEludFJlY3QgdmVydGljYWxT
Y3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhclJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0
KTsKKyAgICAgICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHZlcnRpY2FsU2Nyb2xsYmFyLnNpemUoKS5z
aHJ1bmtUbyhJbnRTaXplKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpKTsKKyAg
ICAgICAgaWYgKCFtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXIpCisgICAgICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyVGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxl
U2l6ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxl
ci0+c2V0VGlsZVNpemUodGlsZVNpemUpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGls
ZXItPnNldFBvc2l0aW9uKHZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnVwZGF0ZShzY3JvbGxiYXJQYWludCwgdmlzaWJsZVJl
Y3QpOworICAgIH0KIAotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgLy8gR2V0IHRoZSBjb250ZW50
cyBvZiB0aGUgdXBkYXRlZCByZWN0LgotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX3Jv
b3RMYXllckNhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Ci0gICAgQVNT
RVJUKGJpdG1hcC53aWR0aCgpID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBiaXRtYXAuaGVpZ2h0
KCkgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgdm9pZCogcGl4ZWxzID0gYml0bWFwLmdl
dFBpeGVscygpOwotI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgLy8gR2V0IHRoZSBjb250ZW50cyBv
ZiB0aGUgdXBkYXRlZCByZWN0LgotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFw
Q29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVj
dC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0SGVpZ2h0KG1f
cm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAg
dm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwotI2Vsc2UKLSNl
cnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgotI2VuZGlmCi0gICAg
Ly8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXll
ciB0ZXh0dXJlLgotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJl
Y3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxz
KSk7CisgICAgaWYgKHZpc2libGVSZWN0LmhlaWdodCgpID4gY29udGVudFJlY3QuaGVpZ2h0KCkp
IHsKKyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9s
bGJhclJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgSW50U2l6ZSB0aWxl
U2l6ZSA9IGhvcml6b250YWxTY3JvbGxiYXIuc2l6ZSgpLnNocnVua1RvKEludFNpemUobV9tYXhU
ZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkpOworICAgICAgICBpZiAoIW1faG9yaXpvbnRh
bFNjcm9sbGJhclRpbGVyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIg
PSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxlU2l6ZSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0
aWxlU2l6ZSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRQb3NpdGlv
bihob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXJUaWxlci0+dXBkYXRlKHNjcm9sbGJhclBhaW50LCB2aXNpYmxlUmVjdCk7CisgICAg
fQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCkBAIC0zMDAsMjEg
KzI0OSwyMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIG1fY29udGV4dC0+Y2xlYXJD
b2xvcigwLCAwLCAxLCAxKTsKICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9CVUZGRVJfQklUKTsKIAotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVy
ZUlkKSk7Ci0KLSAgICAvLyBSZW5kZXIgdGhlIHJvb3QgbGF5ZXIgdXNpbmcgYSBxdWFkIHRoYXQg
dGFrZXMgdXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEgb2YgdGhlIHdpbmRvdy4KLSAgICAvLyBX
ZSByZXVzZSB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCBieSBDb250ZW50TGF5ZXJDaHJvbWl1bS4K
LSAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5
ZXJWYWx1ZXMgPSBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKLSAgICB1c2VTaGFkZXIoY29u
dGVudExheWVyVmFsdWVzLT5jb250ZW50U2hhZGVyUHJvZ3JhbSgpKTsKLSAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0xaShjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlclNhbXBs
ZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgLy8gTWFzayBvdXQgd3JpdGVzIHRvIGFscGhhIGNoYW5u
ZWw6IENsZWFyVHlwZSB2aWEgU2tpYSByZXN1bHRzIGluIGludmFsaWQKLSAgICAvLyB6ZXJvIGFs
cGhhIHZhbHVlcyBvbiB0ZXh0IGdseXBocy4gVGhlIHJvb3QgbGF5ZXIgaXMgYWx3YXlzIG9wYXF1
ZS4KLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0
cnVlLCBmYWxzZSkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyTWF0cml4OwotICAg
IGxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKHZpc2libGVSZWN0LndpZHRoKCkgKiAwLjVmLCB2aXNp
YmxlUmVjdC5oZWlnaHQoKSAqIDAuNWYsIDApOwotICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0
dXJlZFF1YWQobV9jb250ZXh0LmdldCgpLCBtX3Byb2plY3Rpb25NYXRyaXgsIGxheWVyTWF0cml4
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgo
KSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIGNvbnRl
bnRMYXllclZhbHVlcy0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKKyAgICBtX3Jvb3RMYXllclRp
bGVyLT5kcmF3KHZpc2libGVSZWN0KTsKKworICAgIGlmICh2aXNpYmxlUmVjdC53aWR0aCgpID4g
Y29udGVudFJlY3Qud2lkdGgoKSkgeworICAgICAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGJh
clRpbGVyKTsKKyAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhciA9IHZlcnRpY2FsU2Ny
b2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyVGlsZXItPnNldFBvc2l0aW9uKHZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkp
OworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPmRyYXcodmlzaWJsZVJlY3QpOwor
ICAgIH0KKyAgICBpZiAodmlzaWJsZVJlY3QuaGVpZ2h0KCkgPiBjb250ZW50UmVjdC5oZWlnaHQo
KSkgeworICAgICAgICBBU1NFUlQobV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIpOworICAgICAg
ICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyUmVjdCh2
aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJU
aWxlci0+c2V0UG9zaXRpb24oaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPmRyYXcodmlzaWJsZVJlY3QpOworICAgIH0K
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVl
LCB0cnVlKSk7CiAKICAgICAvLyBTZXQgdGhlIHJvb3QgdmlzaWJsZS9jb250ZW50IHJlY3RzIC0t
LSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVycyBjYWxscy4KQEAgLTgyOSwxOSArNzc3LDYg
QEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIENyZWF0ZSBhIHRleHR1cmUg
b2JqZWN0IHRvIGhvbGQgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAgIG1fcm9v
dExheWVyVGV4dHVyZUlkID0gY3JlYXRlTGF5ZXJUZXh0dXJlKCk7Ci0gICAgaWYgKCFtX3Jvb3RM
YXllclRleHR1cmVJZCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGV4
dHVyZSBmb3Igcm9vdCBsYXllciIpOwotICAgICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFR1cm4gb2ZmIGZpbHRlcmluZyBm
b3IgdGhlIHJvb3QgbGF5ZXIgdG8gYXZvaWQgYmx1cnJpbmcgZnJvbSB0aGUgcmVwZWF0ZWQKLSAg
ICAvLyB3cml0ZXMgYW5kIHJlYWRzIHRvIHRoZSBmcmFtZWJ1ZmZlciB0aGF0IGhhcHBlbiB3aGls
ZSBzY3JvbGxpbmcuCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKLSAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCkp
OwotCiAgICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBzaXplIHN1cHBvcnRlZCBieSB0aGUgc3lz
dGVtLgogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKSk7CiAKQEAgLTg3
OCwxMSArODEzLDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRP
YmplY3RzKCkKICAgICAgICAgbV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtID0gMDsKICAgICB9
CiAKLSAgICBpZiAobV9yb290TGF5ZXJUZXh0dXJlSWQpIHsKLSAgICAgICAgZGVsZXRlTGF5ZXJU
ZXh0dXJlKG1fcm9vdExheWVyVGV4dHVyZUlkKTsKLSAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJl
SWQgPSAwOwotICAgIH0KLQogICAgIGlmIChtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpCiAgICAg
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9vZmZzY3Jl
ZW5GcmFtZWJ1ZmZlcklkKSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA1MzFkNjUyMjJk
ZWQzOGI2ZjhlNTI1ZTg1YjhmYTA0YzQxYjVhZWQ0Li5jOGU3ZWM0ZDQ2MDJmZDdhMGJkN2ExYmVl
NDgyOTJjOWRiYjc0YmFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlclN1
cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCkBAIC02NywxMSArNjgsMTIg
QEAgcHVibGljOgogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKIAotICAgIC8v
IHVwZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5kIHNjcm9sbHMgdGhl
IGJhY2tidWZmZXIuCi0gICAgdm9pZCBwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKTsKKyAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KTsKIAotICAgIC8vIHVwZGF0ZXMgYSByZWN0YW5nbGUgd2l0aGlu
IHRoZSByb290IGxheWVyIHRleHR1cmUKLSAgICB2b2lkIHVwZGF0ZVJvb3RMYXllclRleHR1cmVS
ZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOworICAgIC8vIFNldHMgdXAgZHJhdyBzdGF0
ZSBmb3IgZnV0dXJlIGxheWVyIGRyYXcgY2FsbHMuCisgICAgdm9pZCBwcmVwYXJlVG9EcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24pOworCisgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhUaWxlUGFpbnRJbnRl
cmZhY2UmIHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCwgY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKIAog
ICAgIC8vIGRyYXdzIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBiYWNrYnVmZmVyCiAgICAg
dm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCk7CkBAIC04OCw4ICs5MCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFy
ZHdhcmVDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faGFyZHdhcmVDb21wb3NpdGluZzsg
fQogCi0gICAgdm9pZCBzZXRSb290TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUmKTsKLQog
ICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVk
IGNyZWF0ZUxheWVyVGV4dHVyZSgpOwpAQCAtMTM2LDcgKzEzNiw5IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOwogICAgIHZvaWQgY2xlYW51cFNoYXJlZE9i
amVjdHMoKTsKIAotICAgIHVuc2lnbmVkIG1fcm9vdExheWVyVGV4dHVyZUlkOworICAgIHN0YXRp
YyBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHN0YXRpYyBJbnRSZWN0IGhvcml6
b250YWxTY3JvbGxiYXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCk7CisKICAgICBpbnQgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGg7CiAg
ICAgaW50IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodDsKIApAQCAtMTUwLDYgKzE1Miw5IEBAIHBy
aXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogCiAg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdExheWVyOworICAgIFJlZlB0cjxMYXllclRp
bGVyQ2hyb21pdW0+IG1fcm9vdExheWVyVGlsZXI7CisgICAgUmVmUHRyPExheWVyVGlsZXJDaHJv
bWl1bT4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXI7CisgICAgUmVmUHRyPExheWVyVGlsZXJD
aHJvbWl1bT4gbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyOwogCiAgICAgSW50UG9pbnQgbV9zY3Jv
bGxQb3NpdGlvbjsKICAgICBib29sIG1faGFyZHdhcmVDb21wb3NpdGluZzsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lODMwYjE2OWZlM2EzZDllYTRiMGQ5NWYzMzVhYTc4OTQxYjMzNzAz
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsMzYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCisKKyNpZiBQTEFURk9STShTS0lBKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNlbGlmIFBMQVRGT1JN
KENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJUaWxlckNocm9taXVtPiBM
YXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKQoreworICAgIGlmICghbGF5ZXJSZW5kZXJl
ciB8fCB0aWxlU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBMYXllclRpbGVyQ2hyb21pdW0obGF5ZXJSZW5kZXJlciwgdGlsZVNpemUp
KTsKK30KKworTGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSkKKyAg
ICA6IG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKQoreworICAgIHNldFRpbGVTaXplKHRp
bGVTaXplKTsKK30KKworTGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxlckNocm9taXVtKCkK
K3sKKyAgICByZXNldCgpOworfQorCitHcmFwaGljc0NvbnRleHQzRCogTGF5ZXJUaWxlckNocm9t
aXVtOjpsYXllclJlbmRlcmVyQ29udGV4dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheWVyUmVu
ZGVyZXIoKSk7CisgICAgcmV0dXJuIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOworfQorCit2
b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBpZiAobV90aWxlU2l6ZSA9PSBzaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZXNldCgpOworCisgICAgbV90aWxlU2l6ZSA9IHNpemU7CisKKyAgICAvLyBDcmVhdGUgdGVtcG9y
YXJ5IGNhbnZhcyBmb3IgdXBsb2FkaW5nIHRleHR1cmVzIGZyb20uCisjaWYgUExBVEZPUk0oU0tJ
QSkKKyAgICAvLyBDcmVhdGUgbmV3IGNhbnZhcyBhbmQgY29udGV4dC4gT3duUHRyIHRha2VzIGNh
cmUgb2YgZnJlZWluZyB1cAorICAgIC8vIHRoZSBvbGQgb25lcy4KKyAgICBtX2NhbnZhcyA9IG5l
dyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNl
KTsKKyAgICBtX3NraWFDb250ZXh0ID0gbmV3IFBsYXRmb3JtQ29udGV4dFNraWEobV9jYW52YXMu
Z2V0KCkpOworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4dChyZWlu
dGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4obV9za2lhQ29udGV4dC5nZXQo
KSkpOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgLy8gUmVsZWFzZSB0aGUgcHJldmlvdXMgQ0dC
aXRtYXBDb250ZXh0IGJlZm9yZSByZWFsbG9jYXRpbmcgdGhlIGJhY2tpbmcgc3RvcmUgYXMgYSBw
cmVjYXV0aW9uLgorICAgIG1fY2dDb250ZXh0LmFkb3B0Q0YoMCk7CisgICAgaW50IHJvd0J5dGVz
ID0gNCAqIHNpemUud2lkdGgoKTsKKyAgICBtX3BpeGVscy5yZXNpemUocm93Qnl0ZXMgKiBzaXpl
LmhlaWdodCgpKTsKKyAgICBtZW1zZXQobV9waXhlbHMuZGF0YSgpLCAwLCBtX3BpeGVscy5zaXpl
KCkpOworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UoQWRvcHRDRiwg
Q0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgIG1fY2dDb250ZXh0LmFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fcGl4ZWxzLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0KSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKG1fY2dDb250ZXh0Lmdl
dCgpLCAwLCBzaXplLmhlaWdodCgpKTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShtX2NnQ29udGV4
dC5nZXQoKSwgMSwgLTEpOworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29u
dGV4dChtX2NnQ29udGV4dC5nZXQoKSk7CisjZWxzZQorI2Vycm9yICJOZWVkIHRvIGltcGxlbWVu
dCBmb3IgeW91ciBwbGF0Zm9ybS4iCisjZW5kaWYKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21p
dW06OnJlc2V0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3RpbGVzW2ldKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+ZGVsZXRlTGF5ZXJUZXh0dXJlKG1fdGlsZXNbaV0t
PnJlbGVhc2VUZXh0dXJlSWQoKSk7CisgICAgfQorICAgIG1fdGlsZXMuY2xlYXIoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW51c2VkVGlsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKCFtX3VudXNlZFRpbGVzW2ldKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGxheWVyUmVuZGVyZXIoKS0+ZGVsZXRlTGF5ZXJUZXh0dXJlKG1fdW51c2VkVGlsZXNbaV0tPnJl
bGVhc2VUZXh0dXJlSWQoKSk7CisgICAgfQorICAgIG1fdW51c2VkVGlsZXMuY2xlYXIoKTsKKwor
ICAgIG1fcGFnZVNpemUgPSBJbnRTaXplKCk7CisgICAgbV9wYWdlVGlsZVNpemUgPSBJbnRTaXpl
KCk7CisgICAgbV9sYXN0VXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKworI2lmIFBMQVRGT1JNKFNL
SUEpCisgICAgbV9jYW52YXMgPSAwOworICAgIG1fc2tpYUNvbnRleHQgPSAwOworICAgIG1fZ3Jh
cGhpY3NDb250ZXh0ID0gMDsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIG1fcGl4ZWxzLmNsZWFy
KCk7CisgICAgbV9jZ0NvbnRleHQgPSAwOworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gMDsKKyNl
bmRpZgorfQorCitMYXllclRpbGVyQ2hyb21pdW06OlRpbGUqIExheWVyVGlsZXJDaHJvbWl1bTo6
Y3JlYXRlVGlsZShpbnQgeCwgaW50IHkpCit7CisgICAgY29uc3QgaW50IGluZGV4ID0gdGlsZUlu
ZGV4KHgsIHkpOworICAgIEFTU0VSVCghbV90aWxlc1tpbmRleF0pOworCisgICAgaWYgKG1fdW51
c2VkVGlsZXMuc2l6ZSgpID4gMCkgeworICAgICAgICBtX3RpbGVzW2luZGV4XSA9IG1fdW51c2Vk
VGlsZXMubGFzdCgpLnJlbGVhc2UoKTsKKyAgICAgICAgbV91bnVzZWRUaWxlcy5yZW1vdmVMYXN0
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9
IGxheWVyUmVuZGVyZXIoKS0+Y3JlYXRlTGF5ZXJUZXh0dXJlKCk7CisgICAgICAgIE93blB0cjxU
aWxlPiB0aWxlID0gYWRvcHRQdHIobmV3IFRpbGUodGV4dHVyZUlkKSk7CisKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fdGlsZVNpemUud2lkdGgoKSwg
bV90aWxlU2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CisKKyAgICAgICAgbV90aWxlc1tpbmRleF0g
PSB0aWxlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBtX3RpbGVzW2luZGV4XS0+bV9kaXJ0eSA9
IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdGlsZVNpemUpOworICAgIHJldHVybiBtX3RpbGVz
W2luZGV4XS5nZXQoKTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVU
aWxlcyhjb25zdCBJbnRSZWN0JiBjb25zaWRlclJlY3QsIGNvbnN0IEludFJlY3QmIGtlZXBSZWN0
KQoreworICAgIGlmICghbV90aWxlcy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEludmFsaWRhdGUgYW55IHRpbGVzIHVzZWQgbGFzdCB0aW1lIGJ1dCBub3QgdGhpcyB0aW1lLgor
ICAgIGZvciAoaW50IHkgPSBjb25zaWRlclJlY3QueSgpOyB5IDw9IGNvbnNpZGVyUmVjdC5ib3R0
b20oKTsgKyt5KSB7CisgICAgICAgIGZvciAoaW50IHggPSBjb25zaWRlclJlY3QueCgpOyB4IDw9
IGNvbnNpZGVyUmVjdC5yaWdodCgpOyArK3gpIHsKKyAgICAgICAgICAgIGlmIChrZWVwUmVjdC5j
b250YWlucyh4LCB5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
bV91bnVzZWRUaWxlcy5hcHBlbmQobV90aWxlc1t0aWxlSW5kZXgoeCwgeSldLnJlbGVhc2UoKSk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjpwYWdl
UmVjdFRvVGlsZVJlY3QoY29uc3QgSW50UmVjdCYgcGFnZVJlY3QpIGNvbnN0Cit7CisgICAgSW50
UmVjdCBsYXllclJlY3QgPSBwYWdlUmVjdFRvTGF5ZXJSZWN0KHBhZ2VSZWN0KTsKKworICAgIGNv
bnN0IGludCBsZWZ0ID0gbGF5ZXJSZWN0LngoKSAvIG1fdGlsZVNpemUud2lkdGgoKTsKKyAgICBj
b25zdCBpbnQgdG9wID0gbGF5ZXJSZWN0LnkoKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7CisgICAg
Y29uc3QgaW50IHJpZ2h0ID0gKGxheWVyUmVjdC5yaWdodCgpIC0gMSkgLyBtX3RpbGVTaXplLndp
ZHRoKCk7CisgICAgY29uc3QgaW50IGJvdHRvbSA9IChsYXllclJlY3QuYm90dG9tKCkgLSAxKSAv
IG1fdGlsZVNpemUuaGVpZ2h0KCk7CisKKyAgICBJbnRSZWN0IHRpbGVSZWN0KGxlZnQsIHRvcCwg
cmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApOworICAgIHJldHVybiB0aWxlUmVjdDsKK30KKwor
SW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OnBhZ2VSZWN0VG9MYXllclJlY3QoY29uc3QgSW50
UmVjdCYgcGFnZVJlY3QpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9zKHBhZ2VSZWN0LngoKSAt
IG1fcG9zaXRpb24ueCgpLCBwYWdlUmVjdC55KCkgLSBtX3Bvc2l0aW9uLnkoKSk7CisgICAgSW50
UmVjdCBsYXllclJlY3QocG9zLCBwYWdlUmVjdC5zaXplKCkpOworCisgICAgLy8gQ2xpcCB0byB0
aGUgcG9zaXRpb24uCisgICAgaWYgKHBvcy54KCkgPCAwIHx8IHBvcy55KCkgPCAwKQorICAgICAg
ICBsYXllclJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKHBhZ2VSZWN0Lndp
ZHRoKCkgKyBwb3MueCgpLCBwYWdlUmVjdC5oZWlnaHQoKSArIHBvcy55KCkpKTsKKyAgICByZXR1
cm4gbGF5ZXJSZWN0OworfQorCitpbnQgTGF5ZXJUaWxlckNocm9taXVtOjp0aWxlSW5kZXgoaW50
IHgsIGludCB5KQoreworICAgIEFTU0VSVCh4ID49IDAgJiYgeSA+PSAwICYmIHggPCBtX3BhZ2VU
aWxlU2l6ZS53aWR0aCgpICYmIHkgPCBtX3BhZ2VUaWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0
dXJuIHggKyB5ICogbV9wYWdlVGlsZVNpemUud2lkdGgoKTsKK30KKwordm9pZCBMYXllclRpbGVy
Q2hyb21pdW06OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UGFnZVJlY3QpCit7
CisgICAgaWYgKGRpcnR5UGFnZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBncm93UGFnZShkaXJ0eVBhZ2VSZWN0KTsKKworICAgIEludFJlY3QgZGlydHkgPSBwYWdlUmVj
dFRvTGF5ZXJSZWN0KGRpcnR5UGFnZVJlY3QpOworICAgIEludFJlY3QgdGlsZVJlY3QgPSBwYWdl
UmVjdFRvVGlsZVJlY3QoZGlydHlQYWdlUmVjdCk7CisKKyAgICBmb3IgKGludCB5ID0gdGlsZVJl
Y3QueSgpOyB5IDw9IHRpbGVSZWN0LmJvdHRvbSgpOyArK3kpIHsKKyAgICAgICAgZm9yIChpbnQg
eCA9IHRpbGVSZWN0LngoKTsgeCA8PSB0aWxlUmVjdC5yaWdodCgpOyArK3gpIHsKKyAgICAgICAg
ICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleCh4LCB5KV0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBJ
bnRQb2ludCBhbmNob3IoeCAqIG1fdGlsZVNpemUud2lkdGgoKSwgeSAqIG1fdGlsZVNpemUuaGVp
Z2h0KCkpOworICAgICAgICAgICAgSW50UmVjdCBib3VuZChhbmNob3IsIG1fdGlsZVNpemUpOwor
ICAgICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGRpcnR5KTsKKyAgICAgICAgICAgIHRpbGUtPm1f
ZGlydHkudW5pdGUoYm91bmQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6dXBkYXRlKFRpbGVQYWludEludGVyZmFjZSYgcGFpbnRlciwgY29uc3QgSW50
UmVjdCYgcGFnZVJlY3QpCit7CisgICAgLy8gSW52YWxpZGF0ZSBvbGQgdGlsZXMgdGhhdCB3ZXJl
IHByZXZpb3VzbHkgdXNlZCBidXQgYXJlbid0IGluIHVzZSB0aGlzCisgICAgLy8gZnJhbWUgc28g
dGhhdCB0aGV5IGNhbiBnZXQgcmV1c2VkIGZvciBuZXcgdGlsZXMuCisgICAgSW50UmVjdCB1cGRh
dGVSZWN0ID0gcGFnZVJlY3RUb1RpbGVSZWN0KHBhZ2VSZWN0KTsKKworICAgIGludmFsaWRhdGVU
aWxlcyhtX2xhc3RVcGRhdGVSZWN0LCB1cGRhdGVSZWN0KTsKKyAgICBtX2xhc3RVcGRhdGVSZWN0
ID0gdXBkYXRlUmVjdDsKKyAgICBncm93UGFnZShwYWdlUmVjdCk7CisgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworCisgICAgZm9yIChpbnQg
eSA9IHVwZGF0ZVJlY3QueSgpOyB5IDw9IHVwZGF0ZVJlY3QuYm90dG9tKCk7ICsreSkgeworICAg
ICAgICBmb3IgKGludCB4ID0gdXBkYXRlUmVjdC54KCk7IHggPD0gdXBkYXRlUmVjdC5yaWdodCgp
OyArK3gpIHsKKyAgICAgICAgICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleCh4LCB5
KV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXRpbGUpIHsKKyAgICAgICAgICAgICAgICB0aWxl
ID0gY3JlYXRlVGlsZSh4LCB5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRpbGUtPmRpcnR5
KCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOworCisgICAgICAgICAgICBJbnRQb2ludCBhbmNob3Io
bV9wb3NpdGlvbi54KCkgKyB4ICogbV90aWxlU2l6ZS53aWR0aCgpLCBtX3Bvc2l0aW9uLnkoKSAr
IHkgKiBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIEludFJlY3QgcGFpbnRSZWN0
KGFuY2hvciwgbV90aWxlU2l6ZSk7CisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0KEludFBv
aW50KDAsIDApLCBtX3RpbGVTaXplKTsKKworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgICAgICAg
ICBtX2NhbnZhcy0+c2F2ZSgpOworICAgICAgICAgICAgLy8gQnJpbmcgdGhlIGNhbnZhcyBpbnRv
IHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KKyAgICAgICAgICAgIG1f
Y2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1wYWludFJlY3QueCgpKSwg
c3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1wYWludFJlY3QueSgpKSk7CisKKyAgICAgICAgICAgIHBh
aW50ZXIucGFpbnQoKm1fZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOworICAgICAgICAgICAg
bV9jYW52YXMtPnJlc3RvcmUoKTsKKworICAgICAgICAgICAgLy8gR2V0IHRoZSBjb250ZW50cyBv
ZiB0aGUgdXBkYXRlZCByZWN0LgorICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0g
bV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgICAgICAgICAg
QVNTRVJUKGJpdG1hcC53aWR0aCgpID09IHRpbGVSZWN0LndpZHRoKCkgJiYgYml0bWFwLmhlaWdo
dCgpID09IHRpbGVSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIHZvaWQqIHBpeGVscyA9IGJp
dG1hcC5nZXRQaXhlbHMoKTsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgICAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShtX2NnQ29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIEJyaW5n
IHRoZSBDb3JlR3JhcGhpY3MgY29udGV4dCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0
aGUgcGFpbnQgcmVjdC4KKyAgICAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShtX2NnQ29u
dGV4dC5nZXQoKSwgLXBhaW50UmVjdC54KCksIC1wYWludFJlY3QueSgpKTsKKyAgICAgICAgICAg
IHBhaW50ZXIucGFpbnQoKm1fZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOworICAgICAgICAg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NnQ29udGV4dC5nZXQoKSk7CisKKyAgICAgICAg
ICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICAgICAgICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fY2dDb250
ZXh0LmdldCgpKSkgPT0gdGlsZVJlY3Qud2lkdGgoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KENHQml0
bWFwQ29udGV4dEdldEhlaWdodChtX2NnQ29udGV4dC5nZXQoKSkpID09IHRpbGVSZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIHZvaWQqIHBpeGVscyA9IG1fcGl4ZWxzLmRhdGEoKTsKKyNlbHNl
CisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorCisgICAgICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHRpbGUtPnRleHR1cmVJZCgpKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
dGlsZVJlY3QueCgpLCB0aWxlUmVjdC55KCksIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0Lmhl
aWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIHBpeGVscykpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSZWN0JiBwYWdlUmVjdCkKK3sKKyAgICAvLyBSZW5k
ZXIgdGhlIHJvb3QgbGF5ZXIgdXNpbmcgYSBxdWFkIHRoYXQgdGFrZXMgdXAgdGhlIGVudGlyZSB2
aXNpYmxlIGFyZWEgb2YgdGhlIHdpbmRvdy4KKyAgICAvLyBXZSByZXVzZSB0aGUgc2hhZGVyIHBy
b2dyYW0gdXNlZCBieSBDb250ZW50TGF5ZXJDaHJvbWl1bS4KKyAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgY29uc3QgQ29udGVudExh
eWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0gbGF5ZXJSZW5k
ZXJlcigpLT5jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKKyAgICBsYXllclJlbmRlcmVyKCkt
PnVzZVNoYWRlcihjb250ZW50TGF5ZXJWYWx1ZXMtPmNvbnRlbnRTaGFkZXJQcm9ncmFtKCkpOwor
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoY29udGVudExheWVyVmFsdWVzLT5z
aGFkZXJTYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIC8vIE1hc2sgb3V0IHdyaXRlcyB0byBh
bHBoYSBjaGFubmVsOiBDbGVhclR5cGUgdmlhIFNraWEgcmVzdWx0cyBpbiBpbnZhbGlkCisgICAg
Ly8gemVybyBhbHBoYSB2YWx1ZXMgb24gdGV4dCBnbHlwaHMuIFRoZSByb290IGxheWVyIGlzIGFs
d2F5cyBvcGFxdWUuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0
cnVlLCB0cnVlLCBmYWxzZSkpOworCisgICAgSW50UmVjdCB0aWxlUmVjdCA9IHBhZ2VSZWN0VG9U
aWxlUmVjdChwYWdlUmVjdCk7CisgICAgZm9yIChpbnQgeSA9IHRpbGVSZWN0LnkoKTsgeSA8PSB0
aWxlUmVjdC5ib3R0b20oKTsgKyt5KSB7CisgICAgICAgIGZvciAoaW50IHggPSB0aWxlUmVjdC54
KCk7IHggPD0gdGlsZVJlY3QucmlnaHQoKTsgKyt4KSB7CisgICAgICAgICAgICBUaWxlKiB0aWxl
ID0gbV90aWxlc1t0aWxlSW5kZXgoeCwgeSldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKHRp
bGUpOworCisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRpbGUtPnRleHR1cmVJZCgpKSk7CisKKyAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGVNYXRyaXg7CisgICAgICAgICAgICBJbnRQ
b2ludCBhbmNob3IobV9wb3NpdGlvbi54KCkgKyB4ICogbV90aWxlU2l6ZS53aWR0aCgpLCBtX3Bv
c2l0aW9uLnkoKSArIHkgKiBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHRpbGVN
YXRyaXgudHJhbnNsYXRlM2QoYW5jaG9yLngoKSAtIHBhZ2VSZWN0LngoKSArIG1fdGlsZVNpemUu
d2lkdGgoKSAvIDIuMCwgYW5jaG9yLnkoKSAtIHBhZ2VSZWN0LnkoKSArIG1fdGlsZVNpemUuaGVp
Z2h0KCkgLyAyLjAsIDApOworCisgICAgICAgICAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVy
ZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCB0aWxl
TWF0cml4LCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCksIDEsIGNvbnRl
bnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgY29udGVudExheWVyVmFsdWVz
LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6cmVzaXplUGFnZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IGlmIChtX3BhZ2VTaXplID09IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB3aWR0
aCA9IChzaXplLndpZHRoKCkgKyBtX3RpbGVTaXplLndpZHRoKCkgLSAxKSAvIG1fdGlsZVNpemUu
d2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gKHNpemUuaGVpZ2h0KCkgKyBtX3RpbGVTaXplLmhl
aWdodCgpIC0gMSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworCisgICAgVmVjdG9yPE93blB0cjxU
aWxlPiA+IG5ld1RpbGVzOworICAgIG5ld1RpbGVzLnJlc2l6ZSh3aWR0aCAqIGhlaWdodCk7Cisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3BhZ2VUaWxlU2l6ZS5oZWlnaHQoKTsgKyt5KQorICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fcGFnZVRpbGVTaXplLndpZHRoKCk7ICsreCkKKyAg
ICAgICAgICAgIG5ld1RpbGVzW3ggKyB5ICogd2lkdGhdLnN3YXAobV90aWxlc1t4ICsgeSAqIG1f
cGFnZVRpbGVTaXplLndpZHRoKCldKTsKKworICAgIG1fdGlsZXMuc3dhcChuZXdUaWxlcyk7Cisg
ICAgbV9wYWdlU2l6ZSA9IHNpemU7CisgICAgbV9wYWdlVGlsZVNpemUgPSBJbnRTaXplKHdpZHRo
LCBoZWlnaHQpOworfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Z3Jvd1BhZ2UoY29uc3Qg
SW50UmVjdCYgcGFnZVJlY3QpCit7CisgICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250
YWluIHRoaXMgcGFnZSByZWN0LgorICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gcGFnZVJlY3RUb0xh
eWVyUmVjdChwYWdlUmVjdCk7CisgICAgSW50UmVjdCBwYWdlKEludFBvaW50KDAsIDApLCBtX3Bh
Z2VTaXplKTsKKyAgICBwYWdlLnVuaXRlKGxheWVyUmVjdCk7CisgICAgcmVzaXplUGFnZShwYWdl
LnNpemUoKSk7CisKK30KKworTGF5ZXJUaWxlckNocm9taXVtOjpUaWxlOjp+VGlsZSgpCit7Cisg
ICAgLy8gRWFjaCB0aWxlIGRvZXNuJ3QgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgY29udGV4dCwg
c28gY2FuJ3QgY2xlYW4gdXAKKyAgICAvLyBpdHMgb3duIHRleHR1cmUuICBJZiB0aGlzIGFzc2Vy
dCBpcyBoaXQsIHRoZW4gdGhlIExheWVyVGlsZXJDaHJvbWl1bQorICAgIC8vIGRlc3RydWN0b3Ig
ZGlkbid0IGNsZWFuIHRoaXMgdXAuCisgICAgQVNTRVJUKCFtX3RleHR1cmVJZCk7Cit9CisKK3Vu
c2lnbmVkIGludCBMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OnJlbGVhc2VUZXh0dXJlSWQoKQor
eworICAgIHVuc2lnbmVkIGludCBpZCA9IG1fdGV4dHVyZUlkOworICAgIG1fdGV4dHVyZUlkID0g
MDsKKyAgICByZXR1cm4gaWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmZhMTJmMWFlYzg1ZDgwYWNmN2QyZDI0MTU4ZWM4Njc1YzgxNWU4NjcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1
bS5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIExheWVyVGlsZXJDaHJvbWl1
bV9oCisjZGVmaW5lIExheWVyVGlsZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5ZXJDaHJv
bWl1bS5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCisjaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOworCitjbGFzcyBUaWxlUGFpbnRJbnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1YWwg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHBhZ2VS
ZWN0KSA9IDA7Cit9OworCitjbGFzcyBMYXllclRpbGVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXllclRpbGVyQ2hyb21pdW0+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKTsKKworICAgIH5MYXllclRpbGVyQ2hy
b21pdW0oKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcGFnZVJl
Y3QpOworICAgIHZvaWQgdXBkYXRlKFRpbGVQYWludEludGVyZmFjZSYgcGFpbnRlciwgY29uc3Qg
SW50UmVjdCYgcGFnZVJlY3QpOworICAgIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiBwYWdlUmVj
dCk7CisKKyAgICAvLyBTZXQgcG9zaXRpb24gb2YgdGhpcyB0aWxlZCBsYXllciBpbiB0aGUgcGFn
ZS4gIERvZXNuJ3QgaW52YWxpZGF0ZSB0aWxlcy4KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICAvLyBD
aGFuZ2UgdGhlIHRpbGUgc2l6ZS4gIFRoaXMgbWF5IGludmFsaWRhdGUgYWxsIHRoZSBleGlzdGlu
ZyB0aWxlcy4KKyAgICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpOworICAg
IC8vIEludmFsaWRhdGUgYWxsIHRpbGVzLgorICAgIHZvaWQgcmVzZXQoKTsKKworcHJpdmF0ZToK
KyAgICBMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRl
cmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSk7CisKKyAgICBjbGFzcyBUaWxlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFRpbGUodW5zaWduZWQgaW50IHRleHR1cmVJZCkgOiBtX3RleHR1cmVJ
ZCh0ZXh0dXJlSWQpIHsgfQorICAgICAgICB+VGlsZSgpOworCisgICAgICAgIHVuc2lnbmVkIGlu
dCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorICAgICAgICB1bnNp
Z25lZCBpbnQgcmVsZWFzZVRleHR1cmVJZCgpOworCisgICAgICAgIGJvb2wgZGlydHkoKSBjb25z
dCB7IHJldHVybiAhbV9kaXJ0eS5pc0VtcHR5KCk7IH0KKyAgICAgICAgdm9pZCBjbGVhckRpcnR5
KCkgeyBtX2RpcnR5ID0gSW50UmVjdCgpOyB9CisKKyAgICAgICAgSW50UmVjdCBtX2RpcnR5Owor
ICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGludCBtX3RleHR1cmVJZDsKKyAgICB9Owor
CisgICAgdm9pZCByZXNpemVQYWdlKGNvbnN0IEludFNpemUmIHNpemUpOworICAgIHZvaWQgZ3Jv
d1BhZ2UoY29uc3QgSW50UmVjdCYgcGFnZVJlY3QpOworCisgICAgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyOyB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGxheWVyUmVuZGVyZXJDb250ZXh0KCkgY29uc3Q7CisgICAg
VGlsZSogY3JlYXRlVGlsZShpbnQgeCwgaW50IHkpOworICAgIHZvaWQgaW52YWxpZGF0ZVRpbGVz
KGNvbnN0IEludFJlY3QmIGNvbnNpZGVyUmVjdCwgY29uc3QgSW50UmVjdCYga2VlcFJlY3QpOwor
ICAgIEludFJlY3QgcGFnZVJlY3RUb1RpbGVSZWN0KGNvbnN0IEludFJlY3QmIHBhZ2VSZWN0KSBj
b25zdDsKKyAgICBJbnRSZWN0IHBhZ2VSZWN0VG9MYXllclJlY3QoY29uc3QgSW50UmVjdCYgcGFn
ZVJlY3QpIGNvbnN0OworICAgIGludCB0aWxlSW5kZXgoaW50IHgsIGludCB5KTsKKworICAgIElu
dFNpemUgbV90aWxlU2l6ZTsKKyAgICBJbnRTaXplIG1fcGFnZVNpemU7CisgICAgSW50U2l6ZSBt
X3BhZ2VUaWxlU2l6ZTsKKyAgICBJbnRSZWN0IG1fbGFzdFVwZGF0ZVJlY3Q7CisgICAgSW50UG9p
bnQgbV9wb3NpdGlvbjsKKworICAgIC8vIExvZ2ljYWwgMkQgYXJyYXkgb2YgdGlsZXMgKGRpbWVu
c2lvbnMgb2YgbV9wYWdlVGlsZVNpemUpCisgICAgVmVjdG9yPE93blB0cjxUaWxlPiA+IG1fdGls
ZXM7CisgICAgLy8gTGluZWFyIGFycmF5IG9mIHVudXNlZCB0aWxlcy4KKyAgICBWZWN0b3I8T3du
UHRyPFRpbGU+ID4gbV91bnVzZWRUaWxlczsKKworICAgIC8vIENhY2hlIGEgdGlsZS1zaXplZCBj
YW52YXMgdG8gZHJhdyBpbnRvLgorI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgT3duUHRyPHNraWE6
OlBsYXRmb3JtQ2FudmFzPiBtX2NhbnZhczsKKyAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tp
YT4gbV9za2lhQ29udGV4dDsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX2dyYXBoaWNz
Q29udGV4dDsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIFZlY3Rvcjx1aW50OF90PiBtX3BpeGVs
czsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBtX2NnQ29udGV4dDsKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBtX2dyYXBoaWNzQ29udGV4dDsKKyNlbmRpZgorCisgICAgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjlk
MTk5YzljZGQzZWJkMTE5NDA1ZDExNjIyYzNhMzRkYWI1NzUyMi4uYzRhYTlmZWI2ZWZhNDIyYzY4
ODI2NWRkNTBkMjQyOTNmODdhZTFlNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIw
MTAtMTEtMjIgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciByb290IGxheWVy
IGxvZ2ljIG91dCBvZiBXZWJWaWV3SW1wbCBhbmQgaW50bworICAgICAgICBMYXllclRpbGVyQ2hy
b21pdW0uICBUaGUgcGFpbnRpbmcgaXMgbm93IGRvbmUgdGhyb3VnaCBhbiBpbnRlcmZhY2UKKyAg
ICAgICAgcmF0aGVyIHRoYW4gZGlyZWN0bHkgaW4gV2ViVmlld0ltcGwuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTQ3CisKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2Nyb2xsUm9v
dExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZhbGlkYXRlUm9v
dExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbFRpbGVQ
YWludEludGVyZmFjZTo6V2ViVmlld0ltcGxUaWxlUGFpbnRJbnRlcmZhY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbFRpbGVQYWludEludGVyZmFjZTo6cGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNlOjpXZWJWaWV3SW1wbFNj
cm9sbGJhclBhaW50SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGxTY3Jv
bGxiYXJQYWludEludGVyZmFjZTo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6ZG9Db21wb3NpdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEwLTEx
LTIyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5v
dCByZXZpZXdlZC4gUGFydGlhbGx5IHJvbGwgb3V0IHI3MjI4Mi4KZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKaW5kZXggNjYyNTk0OTM3NDIxM2NiZmExMzNkYWUxMThmMTM0ODcwNTQwMTlj
MS4uZmZiYjJhNjAxNjU4Mzk3MWRkYzk1NzgxNTM3MmNlN2UxZGI1NmNmOCAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTIyNzIsODAgKzIyNzIsMjYgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKIAogdm9pZCBXZWJWaWV3SW1wbDo6c2Ny
b2xsUm9vdExheWVyUmVjdChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgLy8gQ29t
cHV0ZSB0aGUgZGFtYWdlIHJlY3QgaW4gdmlld3BvcnQgc3BhY2UuCi0gICAgV2ViRnJhbWVJbXBs
KiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKLSAgICBpZiAoIXdlYmZyYW1lKQotICAgICAg
ICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOwot
ICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBjb250ZW50UmVj
dCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7Ci0gICAgSW50UmVjdCBzY3JlZW5S
ZWN0ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250ZW50UmVjdCk7Ci0KLSAgICAvLyBXZSBz
dXBwb3J0IGZhc3Qgc2Nyb2xsaW5nIGluIG9uZSBkaXJlY3Rpb24gYXQgYSB0aW1lLgotICAgIGlm
IChzY3JvbGxEZWx0YS53aWR0aCgpICYmIHNjcm9sbERlbHRhLmhlaWdodCgpKSB7Ci0gICAgICAg
IGludmFsaWRhdGVSb290TGF5ZXJSZWN0KFdlYlJlY3Qoc2NyZWVuUmVjdCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ29tcHV0ZSB0aGUgcmVnaW9uIHdlIHdpbGwgZXhwb3Nl
IGJ5IHNjcm9sbGluZy4gV2UgdXNlIHRoZQotICAgIC8vIGNvbnRlbnQgcmVjdCBmb3IgaW52YWxp
ZGF0aW9uLiAgVXNpbmcgdGhpcyBzcGFjZSBmb3IgZGFtYWdlCi0gICAgLy8gcmVjdHMgYWxsb3dz
IHVzIHRvIGludGVybWl4IGludmFsaWRhdGVzIHdpdGggc2Nyb2xscy4KLSAgICBJbnRSZWN0IGRh
bWFnZWRDb250ZW50c1JlY3Q7Ci0gICAgaWYgKHNjcm9sbERlbHRhLndpZHRoKCkpIHsKLSAgICAg
ICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAgICAgICAgZGFtYWdlZENvbnRlbnRz
UmVjdC5zZXRZKHNjcmVlblJlY3QueSgpKTsKLSAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5z
ZXRIZWlnaHQoc2NyZWVuUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGlmIChkeCA+IDApIHsKLSAg
ICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChzY3JlZW5SZWN0LngoKSk7Ci0gICAg
ICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFdpZHRoKGR4KTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChzY3JlZW5SZWN0LnJpZ2h0
KCkgKyBkeCk7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFdpZHRoKC1keCk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0YS5o
ZWlnaHQoKTsKLSAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRYKHNjcmVlblJlY3QueCgp
KTsKLSAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aChzY3JlZW5SZWN0LndpZHRo
KCkpOwotICAgICAgICBpZiAoZHkgPiAwKSB7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNS
ZWN0LnNldFkoc2NyZWVuUmVjdC55KCkpOwotICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVj
dC5zZXRIZWlnaHQoZHkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGFtYWdlZENv
bnRlbnRzUmVjdC5zZXRZKHNjcmVlblJlY3QuYm90dG9tKCkgKyBkeSk7Ci0gICAgICAgICAgICBk
YW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdodCgtZHkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbV9yb290TGF5ZXJTY3JvbGxEYW1hZ2UudW5pdGUoZGFtYWdlZENvbnRlbnRzUmVjdCk7Ci0K
LSAgICAvLyBTY3JvbGwgYW55IGV4aXN0aW5nIGRhbWFnZSB0aGF0IGludGVyc2VjdHMgd2l0aCBj
bGlwIHJlY3QKLSAgICBpZiAoY2xpcFJlY3QuaW50ZXJzZWN0cyhtX3Jvb3RMYXllckRpcnR5UmVj
dCkpIHsKLSAgICAgICAgLy8gRmluZCB0aGUgaW5uZXIgZGFtYWdlCi0gICAgICAgIEludFJlY3Qg
aW5uZXJEYW1hZ2UoY2xpcFJlY3QpOwotICAgICAgICBpbm5lckRhbWFnZS5pbnRlcnNlY3QobV9y
b290TGF5ZXJEaXJ0eVJlY3QpOwotCi0gICAgICAgIC8vIE1vdmUgdGhlIGRhbWFnZQotICAgICAg
ICBpbm5lckRhbWFnZS5tb3ZlKHNjcm9sbERlbHRhLndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdo
dCgpKTsKLQotICAgICAgICAvLyBNZXJnZSBpdCBiYWNrIGludG8gdGhlIGRhbWFnZWQgcmVjdAot
ICAgICAgICBtX3Jvb3RMYXllckRpcnR5UmVjdC51bml0ZShpbm5lckRhbWFnZSk7Ci0gICAgfQot
CisgICAgLy8gRklYTUU6IFRvIGF2b2lkIGJyZWFraW5nIHRoZSBDaHJvbWUgcmVuZGVyX3dpZGdl
dCB3aGVuIHRoZSBuZXcgY29tcG9zaXRvciByZW5kZXIKKyAgICAvLyBwYXRoIGlzIG5vdCBjaGVj
a2VkIGluLCB3ZSBtdXN0IHN0aWxsIHBhc3Mgc2Nyb2xsIGRhbWFnZSB1cCB0byB0aGUgY2xpZW50
LiBUaGlzCisgICAgLy8gY29kZSB3aWxsIGJlIGJhY2tlZCBvdXQgaW4gYSBmb2xsb3d1cCBDTCBv
bmNlIHRoZSBDaHJvbWl1bSBjaGFuZ2VzIGhhdmUgbGFuZGVkLgorICAgIG1fY2xpZW50LT5kaWRT
Y3JvbGxSZWN0KHNjcm9sbERlbHRhLndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgpLCBjbGlw
UmVjdCk7CiAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKLXZvaWQgV2ViVmll
d0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lk
IFdlYlZpZXdJbXBsOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0
eUZyYW1lUmVjdCkKIHsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLQogICAgIGlmICgh
cGFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogYWRkIGEgc21hcnRlciBk
YW1hZ2UgYWdncmVnYXRpb24gbG9naWMgYW5kL29yIHVuaWZ5IHdpdGgKLSAgICAvLyBMYXllckNo
cm9taXVtJ3MgZGFtYWdlIGxvZ2ljCi0gICAgbV9yb290TGF5ZXJEaXJ0eVJlY3QudW5pdGUocmVj
dCk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwor
ICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2Up
OworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1
ZSk7CisgICAgLy8gQ29udmVydCBkaXJ0eSByZWN0IGZyb20gZnJhbWUgc3BhY2UgdG8gYmUgaW4g
cGFnZSBzcGFjZSwgbGlrZSBjb250ZW50IGFuZAorICAgIC8vIHZpc2libGUuCisgICAgSW50UmVj
dCBkaXJ0eVBhZ2VSZWN0KEludFBvaW50KGRpcnR5RnJhbWVSZWN0LngoKSArIHZpZXctPnNjcm9s
bFgoKSwgZGlydHlGcmFtZVJlY3QueSgpICsgdmlldy0+c2Nyb2xsWSgpKSwgZGlydHlGcmFtZVJl
Y3Quc2l6ZSgpKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmludmFsaWRhdGVSb290TGF5ZXJSZWN0
KGRpcnR5UGFnZVJlY3QsIHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CiAgICAgc2V0Um9vdExh
eWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKQEAgLTIzNzksNiArMjMyNSw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3Rk
OjptYXgoMSwgbV9zaXplLmhlaWdodCkpOwogICAgIH0KICAgICBtX2xheWVyUmVuZGVyZXIgPSBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0LnJlbGVhc2UoKSk7CisKICAgICBp
ZiAobV9sYXllclJlbmRlcmVyKSB7CiAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlID0gdHJ1ZTsKICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxz
ZTsKQEAgLTIzODksNTkgKzIzMzYsNTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgIH0KIH0KIAotdm9pZCBXZWJW
aWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwotICAg
IGlmICghd2ViZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSB3
ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIgPSBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpOwotICAgIGlmIChyb290TGF5ZXIpIHsKLSAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9
IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKLQotICAgICAgICBtX2xheWVyUmVuZGVy
ZXItPnNldFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6ZShyZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiByb290TGF5ZXJDb250ZXh0ID0gbV9s
YXllclJlbmRlcmVyLT5yb290TGF5ZXJHcmFwaGljc0NvbnRleHQoKTsKLQotI2lmIFBMQVRGT1JN
KFNLSUEpCi0gICAgICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIHNraWFDb250ZXh0ID0gcm9vdExh
eWVyQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgIHNraWE6OlBsYXRmb3JtQ2Fu
dmFzKiBwbGF0Zm9ybUNhbnZhcyA9IHNraWFDb250ZXh0LT5jYW52YXMoKTsKLQotICAgICAgICBw
bGF0Zm9ybUNhbnZhcy0+c2F2ZSgpOwotCi0gICAgICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50
byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAgICAgIHBsYXRm
b3JtQ2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0LngoKSksIHN0
YXRpY19jYXN0PFNrU2NhbGFyPigtcmVjdC55KCkpKTsKLQotICAgICAgICByb290TGF5ZXJDb250
ZXh0LT5zYXZlKCk7Ci0KLSAgICAgICAgd2ViZnJhbWUtPnBhaW50V2l0aENvbnRleHQoKnJvb3RM
YXllckNvbnRleHQsIHJlY3QpOwotICAgICAgICByb290TGF5ZXJDb250ZXh0LT5yZXN0b3JlKCk7
CitjbGFzcyBXZWJWaWV3SW1wbFRpbGVQYWludEludGVyZmFjZSA6IHB1YmxpYyBUaWxlUGFpbnRJ
bnRlcmZhY2UgeworcHVibGljOgorICAgIFdlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlKFdl
YlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkKKyAgICAgICAgICAgIDogbV93ZWJWaWV3SW1wbCh3ZWJW
aWV3SW1wbCkKKyAgICB7CisgICAgfQogCi0gICAgICAgIHBsYXRmb3JtQ2FudmFzLT5yZXN0b3Jl
KCk7Ci0jZWxpZiBQTEFURk9STShDRykKLSAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9
IHJvb3RMYXllckNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBw
YWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHBhZ2VSZWN0KQor
ICAgIHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKTsKKyAgICAg
ICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBGcmFtZVZpZXcqIHZp
ZXcgPSBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOworICAgICAgICB2aWV3LT5wYWludENvbnRl
bnRzKCZjb250ZXh0LCBwYWdlUmVjdCk7CisgICAgfQogCi0gICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY2dDb250ZXh0KTsKK3ByaXZhdGU6CisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0lt
cGw7Cit9OwogCi0gICAgICAgIC8vIEJyaW5nIHRoZSBDb3JlR3JhcGhpY3MgY29udGV4dCBpbnRv
IHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KLSAgICAgICAgQ0dDb250
ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgLXJlY3QueCgpLCAtcmVjdC55KCkpOwogCi0gICAg
ICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKK2NsYXNzIFdlYlZpZXdJbXBsU2Nyb2xsYmFy
UGFpbnRJbnRlcmZhY2UgOiBwdWJsaWMgVGlsZVBhaW50SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAg
ICBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3
SW1wbCkKKyAgICAgICAgICAgIDogbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKKyAgICB7Cisg
ICAgfQogCi0gICAgICAgIHdlYmZyYW1lLT5wYWludFdpdGhDb250ZXh0KCpyb290TGF5ZXJDb250
ZXh0LCByZWN0KTsKLSAgICAgICAgcm9vdExheWVyQ29udGV4dC0+cmVzdG9yZSgpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHBhZ2VSZWN0KQorICAgIHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fd2ViVmlld0ltcGwtPnBh
Z2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBG
cmFtZVZpZXcqIHZpZXcgPSBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwogCi0gICAgICAgIENH
Q29udGV4dFJlc3RvcmVHU3RhdGUoY2dDb250ZXh0KTsKLSNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0
IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRpZgorICAgICAgICAvLyBTY3JvbGxiYXJzIGFyZSBwYWlu
dGVkIGludG8gZnJhbWUgc3BhY2UgYW5kIG5vdCBpbnRvIHBhZ2Ugc3BhY2UsCisgICAgICAgIC8v
IHNvIHRoZSBzY3JvbGwgbmVlZHMgdG8gYmUgcmVtb3ZlZC4KKyAgICAgICAgY29udGV4dC50cmFu
c2xhdGUodmlldy0+c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpOworICAgICAgICBJbnRSZWN0
IGZyYW1lUmVjdChJbnRQb2ludChwYWdlUmVjdC54KCkgLSB2aWV3LT5zY3JvbGxYKCksIHBhZ2VS
ZWN0LnkoKSAtIHZpZXctPnNjcm9sbFkoKSksIHBhZ2VSZWN0LnNpemUoKSk7CisgICAgICAgIHZp
ZXctPnBhaW50U2Nyb2xsYmFycygmY29udGV4dCwgZnJhbWVSZWN0KTsKICAgICB9Ci19CisKK3By
aXZhdGU6CisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7Cit9OwogCiB2b2lkIFdlYlZp
ZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiB7CkBAIC0yNDUzLDMxICsyMzkyLDE0IEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OmRvQ29tcG9zaXRlKCkKICAgICAvLyBUaGUgdmlzaWJsZVJlY3QgaW5jbHVkZXMg
c2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250ZW50UmVjdCBkb2Vzbid0LgogICAgIEludFJlY3Qg
dmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CiAgICAgSW50UmVj
dCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7Ci0gICAgSW50
UmVjdCB2aWV3UG9ydCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0
KTsKLQotICAgIC8vIEdpdmUgdGhlIGNvbXBvc2l0b3IgYSBjaGFuY2UgdG8gc2V0dXAvcmVzaXpl
IHRoZSByb290IHRleHR1cmUgaGFuZGxlIGFuZCBwZXJmb3JtIHNjcm9sbGluZy4KLSAgICBtX2xh
eWVyUmVuZGVyZXItPnByZXBhcmVUb0RyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0
LCBJbnRQb2ludCh2aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOworICAgIEludFBv
aW50IHNjcm9sbCh2aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSk7CiAKLSAgICAvLyBE
cmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4KLSAgICBWZWN0b3I8SW50UmVjdD4g
ZGFtYWdlUmVjdHM7Ci0gICAgZGFtYWdlUmVjdHMuYXBwZW5kKG1fcm9vdExheWVyU2Nyb2xsRGFt
YWdlKTsKLSAgICBkYW1hZ2VSZWN0cy5hcHBlbmQobV9yb290TGF5ZXJEaXJ0eVJlY3QpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFtYWdlUmVjdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgSW50UmVjdCBkYW1hZ2VkUmVjdCA9IGRhbWFnZVJlY3RzW2ldOworICAgIG1fbGF5ZXJSZW5k
ZXJlci0+cHJlcGFyZVRvRHJhd0xheWVycyh2aXNpYmxlUmVjdCwgc2Nyb2xsKTsKIAotICAgICAg
ICAvLyBJbnRlcnNlY3QgdGhpcyByZWN0YW5nbGUgd2l0aCB0aGUgdmlld1BvcnQuCi0gICAgICAg
IGRhbWFnZWRSZWN0LmludGVyc2VjdCh2aWV3UG9ydCk7Ci0KLSAgICAgICAgLy8gTm93IHJlbmRl
ciBpdC4KLSAgICAgICAgaWYgKGRhbWFnZWRSZWN0LndpZHRoKCkgJiYgZGFtYWdlZFJlY3QuaGVp
Z2h0KCkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGRhbWFnZWRSZWN0
KTsKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlUm9vdExheWVyVGV4dHVyZVJl
Y3QoZGFtYWdlZFJlY3QpOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fcm9vdExheWVyRGlydHlS
ZWN0ID0gSW50UmVjdCgpOwotICAgIG1fcm9vdExheWVyU2Nyb2xsRGFtYWdlID0gSW50UmVjdCgp
OworICAgIFdlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlIHRpbGVQYWludCh0aGlzKTsKKyAg
ICBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNlIHNjcm9sbGJhclBhaW50KHRoaXMp
OworICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlUm9vdExheWVyQ29udGVudHModGlsZVBhaW50
LCBzY3JvbGxiYXJQYWludCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKIAotICAgIC8vIERy
YXcgdGhlIGFjdHVhbCBsYXllcnMuLi4KICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMo
dmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CmluZGV4IDAzODg3NzA3YTg3ZDQ5ZjNmMzA5ZmQzZGY4NzY3ODM0MjNhNTBkYTEuLjkyMTUxN2Rm
ODQxYzFlMjUyOWVhNzk0OTg5MjFhMDIwMjAyOWY2OWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmgKQEAgLTQwNyw3ICs0MDcsNiBAQCBwcml2YXRlOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KGJvb2wpOwotICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwogICAgIHZvaWQgZG9Db21wb3NpdGUoKTsKICAgICB2b2lkIGRvUGl4ZWxSZWFk
YmFja1RvQ2FudmFzKFdlYkNhbnZhcyosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2
b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOwpAQCAtNTM5LDcgKzUzOCw2IEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbW91c2VDYXB0dXJlTm9kZTsKIAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVy
RGlydHlSZWN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgbV9yb290TGF5ZXJTY3JvbGxEYW1hZ2U7
CiAgICAgUmVmUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRl
cmVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75544</attachid>
            <date>2010-12-03 14:23:27 -0800</date>
            <delta_ts>2010-12-03 14:49:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49947-20101203142326.patch</filename>
            <type>text/plain</type>
            <size>59793</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjEwYzMxMzhmODk2Y2RlOTI2MmYwZjNiOTdjMDBmYWQwZjQ4MGY5Ni4uZjcyNGVlYzVjOGZjMzVh
NThjZTNiNDc1ZDAwMWJiMzdhMWQ4NmI4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAxMC0xMi0wMiAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHJvb3QgbGF5ZXIgdXBkYXRlIGFuZCBk
cmF3aW5nIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIGludG8KKyAgICAgICAgTGF5ZXJUaWxl
ckNocm9taXVtLiAgVGhlIHJvb3QgbGF5ZXIgaXMgbm93IGRyYXduIGFzIG11bHRpcGxlIHRpbGVz
CisgICAgICAgIHJhdGhlciB0aGFuIGFzIG9uZSBzaW5nbGUgbGFyZ2UgdGV4dHVyZS4gIFNjcm9s
bGJhcnMgYXJlIG5vdyBkcmF3bgorICAgICAgICBzZXBhcmF0ZWx5IHJhdGhlciB0aGFuIGFzIHBh
cnQgb2YgdGhlIHJvb3QgbGF5ZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5OTQ3CisgICAgICAgIFRlc3Q6IExheW91dFRlc3RzL2NvbXBvc2l0
aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5n
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
OjpzZXRDbGlwc1JlcGFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2li
bGVDb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y2xpcHNSZXBhaW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZlcnRpY2FsU2Nyb2xsYmFyUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Omhvcml6b250YWxT
Y3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxl
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJS
ZW5kZXJlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpz
ZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVUaWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9UaWxlR3Jv
dXApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVjdFRv
TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJS
ZWN0VG9Db250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
OnRpbGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnRpbGVD
b250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnRpbGVM
YXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlk
YXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnNldExheWVyUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cmVzaXplTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpUaWxlOjp+VGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OnJlbGVhc2VUZXh0dXJlSWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6VGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OnRleHR1cmVJZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OmRpcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6Y2xlYXJEaXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXIpOgorCiAyMDEw
LTEyLTAzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmOTFkOTAzNTAyZjU0M2U4YjA5NzFiYjFhNjgyNTQx
ZDhkZWE0YjdmLi41YmRkMWRkNzBjNzBkNDY3Yzc4ODE1NjViMWNjMGI5YTBmYmM1ZTU0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMjQ5Niw2ICsyNDk2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQ
cml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGxhdGZvcm1JY29uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYjE0ZDExYjcy
YTE3MWNmODVhMTMxYWNjNWQ2NzU2YjZiZTA5NGEyOS4uMjAwOWNlNGM3ZTQzZjU5NjAzOGUzYWYw
ODlhNjlhNDI1YjhjM2QxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTEzMTQsNyArMTMxNCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiByLCBi
b29sIGltbWVkaWF0ZSkKICAgICBkb3VibGUgZGVsYXkgPSBhZGp1c3RlZERlZmVycmVkUmVwYWlu
dERlbGF5KCk7CiAgICAgaWYgKChtX2RlZmVycmluZ1JlcGFpbnRzIHx8IG1fZGVmZXJyZWRSZXBh
aW50VGltZXIuaXNBY3RpdmUoKSB8fCBkZWxheSkgJiYgIWltbWVkaWF0ZSkgewogICAgICAgICBJ
bnRSZWN0IHBhaW50UmVjdCA9IHI7Ci0gICAgICAgIGlmICghcGFpbnRzRW50aXJlQ29udGVudHMo
KSkKKyAgICAgICAgaWYgKGNsaXBzUmVwYWludHMoKSAmJiAhcGFpbnRzRW50aXJlQ29udGVudHMo
KSkKICAgICAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkp
OwogICAgICAgICBpZiAocGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuY3BwCmluZGV4IGFiOWVlOGEyMmZmZDIyNTc1MDFkZjE0YWJhNDZm
YWFiMjA2MDFiOGEuLmYxN2NhOTIwOWMyYTZkNGQzNmI4N2U2ZTFhMzU1NzFhZjljOTNmODggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtNTMsNiArNTMsNyBAQCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3KCkKICAgICAsIG1fZHJhd1BhblNjcm9sbEljb24oZmFsc2UpCiAgICAgLCBtX3VzZUZp
eGVkTGF5b3V0KGZhbHNlKQogICAgICwgbV9wYWludHNFbnRpcmVDb250ZW50cyhmYWxzZSkKKyAg
ICAsIG1fY2xpcHNSZXBhaW50cyh0cnVlKQogICAgICwgbV9kZWxlZ2F0ZXNTY3JvbGxpbmcoZmFs
c2UpCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CkBAIC0yMDIsNiArMjAzLDExIEBAIHZvaWQgU2Ny
b2xsVmlldzo6c2V0UGFpbnRzRW50aXJlQ29udGVudHMoYm9vbCBwYWludHNFbnRpcmVDb250ZW50
cykKICAgICBtX3BhaW50c0VudGlyZUNvbnRlbnRzID0gcGFpbnRzRW50aXJlQ29udGVudHM7CiB9
CiAKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0Q2xpcHNSZXBhaW50cyhib29sIGNsaXBzUmVwYWludHMp
Cit7CisgICAgbV9jbGlwc1JlcGFpbnRzID0gY2xpcHNSZXBhaW50czsKK30KKwogdm9pZCBTY3Jv
bGxWaWV3OjpzZXREZWxlZ2F0ZXNTY3JvbGxpbmcoYm9vbCBkZWxlZ2F0ZXNTY3JvbGxpbmcpCiB7
CiAgICAgbV9kZWxlZ2F0ZXNTY3JvbGxpbmcgPSBkZWxlZ2F0ZXNTY3JvbGxpbmc7CkBAIC03ODgs
NyArNzk0LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpmcmFtZVJlY3RzQ2hhbmdlZCgpCiB2b2lkIFNj
cm9sbFZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGJv
b2wgbm93KQogewogICAgIEludFJlY3QgcGFpbnRSZWN0ID0gcmVjdDsKLSAgICBpZiAoIXBhaW50
c0VudGlyZUNvbnRlbnRzKCkpCisgICAgaWYgKGNsaXBzUmVwYWludHMoKSAmJiAhcGFpbnRzRW50
aXJlQ29udGVudHMoKSkKICAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdCh2aXNpYmxlQ29udGVu
dFJlY3QoKSk7CiAgICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExNDksNCArMTE1NSwzIEBAIGJvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jc09mZnNjcmVl
bigpIGNvbnN0CiAjZW5kaWYKIAogfQotCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCmluZGV4IDdlODQ2YmMz
OWU4YzJlNzhkY2Y0OGU3ZjlkY2I2Mzk4OWIzMThkNTguLmQ3MDQ1OGY4ODA4MjdhZWI3ZjczNjNl
ZWU4YzJhYWIyMzIzYjY2MjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCkBAIC0xMTEsNiArMTExLDEx
IEBAIHB1YmxpYzoKICAgICBib29sIHBhaW50c0VudGlyZUNvbnRlbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9wYWludHNFbnRpcmVDb250ZW50czsgfQogICAgIHZvaWQgc2V0UGFpbnRzRW50aXJlQ29u
dGVudHMoYm9vbCk7CiAKKyAgICAvLyBCeSBkZWZhdWx0LCBwYWludCBldmVudHMgYXJlIGNsaXBw
ZWQgdG8gdGhlIHZpc2libGUgYXJlYS4gIElmIHNldCB0bworICAgIC8vIGZhbHNlLCBwYWludCBl
dmVudHMgYXJlIG5vIGxvbmdlciBjbGlwcGVkLiAgcGFpbnRzRW50aXJlQ29udGVudHMoKSBpbXBs
aWVzICFjbGlwc1JlcGFpbnRzKCkuCisgICAgYm9vbCBjbGlwc1JlcGFpbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGlwc1JlcGFpbnRzOyB9CisgICAgdm9pZCBzZXRDbGlwc1JlcGFpbnRzKGJvb2wp
OworCiAgICAgLy8gQnkgZGVmYXVsdCBwcm9ncmFtbWF0aWMgc2Nyb2xsaW5nIGlzIGhhbmRsZWQg
YnkgV2ViQ29yZSBhbmQgbm90IGJ5IHRoZSBVSSBhcHBsaWNhdGlvbi4KICAgICAvLyBJbiB0aGUg
Y2FzZSBvZiB1c2luZyBhIHRpbGVkIGJhY2tpbmcgc3RvcmUsIHRoaXMgbW9kZSBjYW4gYmUgc2V0
LCBzbyB0aGF0IHRoZSBzY3JvbGwgcmVxdWVzdHMKICAgICAvLyBhcmUgZGVsZWdhdGVkIHRvIHRo
ZSBVSSBhcHBsaWNhdGlvbi4KQEAgLTMxOCw2ICszMjMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV91c2VGaXhlZExheW91dDsKIAogICAgIGJvb2wgbV9wYWludHNFbnRpcmVDb250ZW50czsKKyAg
ICBib29sIG1fY2xpcHNSZXBhaW50czsKICAgICBib29sIG1fZGVsZWdhdGVzU2Nyb2xsaW5nOwog
CiAgICAgLy8gVGhlcmUgYXJlIDggcG9zc2libGUgY29tYmluYXRpb25zIG9mIHdyaXRpbmcgbW9k
ZSBhbmQgZGlyZWN0aW9uLiAgU2Nyb2xsIG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4
IG9yIHkgYXhpcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAppbmRleCA4NmYzNTgwY2E3NDFmM2M1OTQzMGE3YTc1YTdjMTczZWMyYjI2
ZGE3Li40ZTliZmQ5ZjA5NjZiOTc5YTc0MjFlNWQxNDFlMzdkNzIwNGVhNWQxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAt
NjAsNiArNjAsNyBAQCBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAvLyB0aGlzIGNsYXNz
LgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+
IHsKICAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworICAgIGZyaWVuZCBj
bGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDFiZGVhODUwMDI1NmZlMDI3OTljZjViMjM2
NWI4NDNjMGQzN2E1MzAuLjdjMTA2ZmZjYmE1MDhlY2FmYmU0NjE1ZDEzNWY4ZTBkYzA5YWJhN2Mg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTk1LDggKzk1LDcgQEAgUGFzc1JlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8R3JhcGgKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hy
b21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKLSAgICA6IG1fcm9v
dExheWVyVGV4dHVyZUlkKDApCi0gICAgLCBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCgwKQorICAg
IDogbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkKICAgICAsIG1fcm9vdExheWVyVGV4dHVyZUhl
aWdodCgwKQogICAgICwgbV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtKDApCiAgICAgLCBtX3Jv
b3RMYXllcigwKQpAQCAtMTA4LDExICsxMDcsMTkgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpM
YXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGUK
ICAgICAsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UoMCkKIHsKICAgICBtX2hhcmR3YXJlQ29tcG9z
aXRpbmcgPSBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOworICAgIG1fcm9vdExheWVyVGlsZXIg
PSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSk7Cisg
ICAgQVNTRVJUKG1fcm9vdExheWVyVGlsZXIpOwogfQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06
On5MYXllclJlbmRlcmVyQ2hyb21pdW0oKQogewogICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7
CisKKyAgICAvLyBCZWNhdXNlIHRoZSB0aWxlcnMgbmVlZCB0byBjbGVhbiB1cCB0ZXh0dXJlcywg
Y2xlYW4gdGhlbSB1cCBleHBsaWNpdGx5CisgICAgLy8gYmVmb3JlIHRoZSBHcmFwaGljc0NvbnRl
eHQzRCBpcyBkZXN0cm95ZWQuCisgICAgbV9yb290TGF5ZXJUaWxlciA9IDA7CisgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyVGlsZXIgPSAwOworICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlciA9
IDA7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRl
eHQoKQpAQCAtMTI3LDU0ICsxMzQsNzkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRl
YnVnR0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogICAgICAg
ICBMT0dfRVJST1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNv
bW1hbmQ6ICVzLCBlcnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8
aW50PihlcnJvcikpOwogfQogCi0vLyBDcmVhdGVzIGEgY2FudmFzIGFuZCBhbiBhc3NvY2lhdGVk
IGdyYXBoaWNzIGNvbnRleHQgdGhhdCB0aGUgcm9vdCBsYXllciB3aWxsCi0vLyByZW5kZXIgaW50
by4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXJDYW52YXNTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVy
KHVuc2lnbmVkIHByb2dyYW1JZCkKIHsKLSAgICBpZiAoc2l6ZSA9PSBtX3Jvb3RMYXllckNhbnZh
c1NpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAocHJvZ3JhbUlkICE9IG1fY3VycmVudFNo
YWRlcikgeworICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJv
Z3JhbUlkKSk7CisgICAgICAgIG1fY3VycmVudFNoYWRlciA9IHByb2dyYW1JZDsKKyAgICB9Cit9
CiAKLSNpZiBQTEFURk9STShTS0lBKQotICAgIC8vIENyZWF0ZSBuZXcgY2FudmFzIGFuZCBjb250
ZXh0LiBPd25QdHIgdGFrZXMgY2FyZSBvZiBmcmVlaW5nIHVwCi0gICAgLy8gdGhlIG9sZCBvbmVz
LgotICAgIG1fcm9vdExheWVyQ2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOwotICAgIG1fcm9vdExheWVyU2tpYUNvbnRl
eHQgPSBuZXcgUGxhdGZvcm1Db250ZXh0U2tpYShtX3Jvb3RMYXllckNhbnZhcy5nZXQoKSk7Ci0g
ICAgbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50
ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihtX3Jvb3RMYXllclNraWFDb250
ZXh0LmdldCgpKSk7Ci0jZWxpZiBQTEFURk9STShDRykKLSAgICAvLyBSZWxlYXNlIHRoZSBwcmV2
aW91cyBDR0JpdG1hcENvbnRleHQgYmVmb3JlIHJlYWxsb2NhdGluZyB0aGUgYmFja2luZyBzdG9y
ZSBhcyBhIHByZWNhdXRpb24uCi0gICAgbV9yb290TGF5ZXJDR0NvbnRleHQuYWRvcHRDRigwKTsK
LSAgICBpbnQgcm93Qnl0ZXMgPSA0ICogc2l6ZS53aWR0aCgpOwotICAgIG1fcm9vdExheWVyQmFj
a2luZ1N0b3JlLnJlc2l6ZShyb3dCeXRlcyAqIHNpemUuaGVpZ2h0KCkpOwotICAgIG1lbXNldCht
X3Jvb3RMYXllckJhY2tpbmdTdG9yZS5kYXRhKCksIDAsIG1fcm9vdExheWVyQmFja2luZ1N0b3Jl
LnNpemUoKSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9w
dENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgbV9yb290TGF5ZXJDR0Nv
bnRleHQuYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9yb290TGF5ZXJCYWNraW5nU3Rv
cmUuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JT
cGFjZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0
ZU9yZGVyMzJIb3N0KSk7Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKG1fcm9vdExheWVyQ0dD
b250ZXh0LmdldCgpLCAwLCBzaXplLmhlaWdodCgpKTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTSht
X3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSwgMSwgLTEpOwotICAgIG1fcm9vdExheWVyR3JhcGhp
Y3NDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4dChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQo
KSk7Ci0jZWxzZQotI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4i
Ci0jZW5kaWYKK0ludFJlY3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2ZXJ0aWNhbFNjcm9sbGJh
clJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQoreworICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJl
Y3QucmlnaHQoKSwgY29udGVudFJlY3QueSgpKSwgSW50U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgp
IC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICByZXR1
cm4gdmVydGljYWxTY3JvbGxiYXI7Cit9CiAKLSAgICBtX3Jvb3RMYXllckNhbnZhc1NpemUgPSBz
aXplOworSW50UmVjdCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omhvcml6b250YWxTY3JvbGxiYXJS
ZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkKK3sKKyAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJl
Y3QueCgpLCBjb250ZW50UmVjdC5ib3R0b20oKSksIEludFNpemUodmlzaWJsZVJlY3Qud2lkdGgo
KSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkgLSBjb250ZW50UmVjdC5oZWlnaHQoKSkpOworICAgIHJl
dHVybiBob3Jpem9udGFsU2Nyb2xsYmFyOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXNlU2hhZGVyKHVuc2lnbmVkIHByb2dyYW1JZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsK
LSAgICBpZiAocHJvZ3JhbUlkICE9IG1fY3VycmVudFNoYWRlcikgewotICAgICAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbUlkKSk7Ci0gICAgICAgIG1fY3Vy
cmVudFNoYWRlciA9IHByb2dyYW1JZDsKKyAgICBpZiAoY29udGVudFJlY3QuaW50ZXJzZWN0cyhk
aXJ0eVJlY3QpKQorICAgICAgICBtX3Jvb3RMYXllclRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0
eVJlY3QpOworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlcikgeworICAgICAgICBJ
bnRSZWN0IHNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0LCBj
b250ZW50UmVjdCk7CisgICAgICAgIGlmIChkaXJ0eVJlY3QuaW50ZXJzZWN0cyhzY3JvbGxiYXIp
KSB7CisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+c2V0TGF5ZXJQb3Np
dGlvbihzY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXJUaWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyKSB7CisgICAgICAgIEludFJlY3Qgc2Ny
b2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7
CisgICAgICAgIGlmIChkaXJ0eVJlY3QuaW50ZXJzZWN0cyhzY3JvbGxiYXIpKSB7CisgICAgICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9zaXRpb24oc2Nyb2xsYmFy
LmxvY2F0aW9uKCkpOworICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5pbnZh
bGlkYXRlUmVjdChkaXJ0eVJlY3QpOworICAgICAgICB9CiAgICAgfQogfQogCi0vLyBUaGlzIG1l
dGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHVwZGF0ZXMgYXJlIG1hZGUgdG8g
dGhlCi0vLyByb290IGxheWVyIHRleHR1cmUuIEl0IHJlc2l6ZXMgdGhlIHJvb3QgbGF5ZXIgdGV4
dHVyZSBhbmQgc2Nyb2xscyBpdHMKLS8vIGNvbnRlbnRzIGFzIG5lZWRlZC4gSXQgYWxzbyBzZXRz
IHVwIGNvbW1vbiBHTCBzdGF0ZSB1c2VkIGJ5IHRoZSByZXN0Ci0vLyBvZiB0aGUgbGF5ZXIgZHJh
d2luZyBjb2RlLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVBbmREcmF3Um9vdExheWVyKFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBUaWxl
UGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgbV9yb290TGF5ZXJUaWxlci0+
dXBkYXRlKHRpbGVQYWludCwgdmlzaWJsZVJlY3QpOworICAgIG1fcm9vdExheWVyVGlsZXItPmRy
YXcodmlzaWJsZVJlY3QpOworCisgICAgaWYgKHZpc2libGVSZWN0LndpZHRoKCkgPiBjb250ZW50
UmVjdC53aWR0aCgpKSB7CisgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXIgPSB2ZXJ0
aWNhbFNjcm9sbGJhclJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgSW50
U2l6ZSB0aWxlU2l6ZSA9IHZlcnRpY2FsU2Nyb2xsYmFyLnNpemUoKS5zaHJ1bmtUbyhJbnRTaXpl
KG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgaWYgKCFtX3Zl
cnRpY2FsU2Nyb2xsYmFyVGlsZXIpCisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGls
ZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxlU2l6ZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0VGlsZVNpemUo
dGlsZVNpemUpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9z
aXRpb24odmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXJUaWxlci0+dXBkYXRlKHNjcm9sbGJhclBhaW50LCB2aXNpYmxlUmVjdCk7CisgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7CisgICAgfQor
CisgICAgaWYgKHZpc2libGVSZWN0LmhlaWdodCgpID4gY29udGVudFJlY3QuaGVpZ2h0KCkpIHsK
KyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJh
clJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgSW50U2l6ZSB0aWxlU2l6
ZSA9IGhvcml6b250YWxTY3JvbGxiYXIuc2l6ZSgpLnNocnVua1RvKEludFNpemUobV9tYXhUZXh0
dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkpOworICAgICAgICBpZiAoIW1faG9yaXpvbnRhbFNj
cm9sbGJhclRpbGVyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIgPSBM
YXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxlU2l6ZSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0aWxl
U2l6ZSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBvc2l0
aW9uKGhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhclRpbGVyLT51cGRhdGUoc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVSZWN0KTsKKyAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPmRyYXcodmlzaWJsZVJlY3QpOworICAg
IH0KK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50
UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0
aW9uLCBUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQpCiB7
CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CiAKQEAgLTE4MywxMCArMjE1LDYg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMoY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnMKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKLSAgICAKLSAgICBib29s
IHNraXBTY3JvbGwgPSBmYWxzZTsKLQogICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSB2aXNpYmxl
IGFyZWEgaGFzIGNoYW5nZWQgdGhlbiBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlCiAgICAgLy8gdG8g
c3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIGFuZCBhZGp1c3QgdGhlIHByb2pl
Y3Rpb24gbWF0cml4CiAgICAgLy8gYW5kIHZpZXdwb3J0LgpAQCAtMTk2LDE1ICsyMjQsOSBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29ucwogICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCA9
IHZpc2libGVSZWN0V2lkdGg7CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCA9IHZp
c2libGVSZWN0SGVpZ2h0OwogCi0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dGV4
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoLCBtX3Jvb3RMYXllclRleHR1cmVIZWln
aHQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgMCkpOwotCiAgICAgICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IHJlbmRlciBzdXJm
YWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmlld3BvcnQgYW5kCiAgICAgICAgIC8vIHBy
b2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJTdXJmYWNlIGlzIGNhbGxlZC4KICAg
ICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7Ci0KLSAgICAgICAgLy8gVGhlIHJvb3Qg
bGF5ZXIgdGV4dHVyZSB3YXMganVzdCByZXNpemVkIHNvIGl0cyBjb250ZW50cyBhcmUgbm90Ci0g
ICAgICAgIC8vIHVzZWZ1bCBmb3Igc2Nyb2xsaW5nLgotICAgICAgICBza2lwU2Nyb2xsID0gdHJ1
ZTsKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlz
aWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCkBAIC0yMTcsNzcgKzIzOSwxMCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgY29ucwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCkpOwogICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFKSk7CiAK
LSAgICAvLyBCbGVuZGluZyBkaXNhYmxlZCBieSBkZWZhdWx0LiBSb290IGxheWVyIGFscGhhIGNo
YW5uZWwgb24gV2luZG93cyBpcyBpbmNvcnJlY3Qgd2hlbiBTa2lhIHVzZXMgQ2xlYXJUeXBlLiAK
LSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKSk7IAotCi0gICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gSW50UG9pbnQoLTEsIC0x
KSkgewotICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247Ci0gICAgICAg
IHNraXBTY3JvbGwgPSB0cnVlOwotICAgIH0KLQotICAgIEludFBvaW50IHNjcm9sbERlbHRhID0g
dG9Qb2ludChzY3JvbGxQb3NpdGlvbiAtIG1fc2Nyb2xsUG9zaXRpb24pOwotCi0gICAgLy8gU2Ny
b2xsaW5nIGxhcmdlciB0aGFuIHRoZSBjb250ZW50UmVjdCBzaXplIGRvZXMgbm90IHByZXNlcnZl
IGFueSBvZiB0aGUgcGl4ZWxzLCBzbyB0aGVyZSBpcwotICAgIC8vIG5vIG5lZWQgdG8gY29weSBm
cmFtZWJ1ZmZlciBwaXhlbHMgYmFjayBpbnRvIHRoZSB0ZXh0dXJlLgotICAgIGlmIChhYnMoc2Ny
b2xsRGVsdGEueSgpKSA+IGNvbnRlbnRSZWN0LmhlaWdodCgpIHx8IGFicyhzY3JvbGxEZWx0YS54
KCkpID4gY29udGVudFJlY3Qud2lkdGgoKSkKLSAgICAgICAgc2tpcFNjcm9sbCA9IHRydWU7Ci0K
LSAgICAvLyBTY3JvbGwgdGhlIGJhY2tidWZmZXIKLSAgICBpZiAoIXNraXBTY3JvbGwgJiYgKHNj
cm9sbERlbHRhLngoKSB8fCBzY3JvbGxEZWx0YS55KCkpKSB7Ci0gICAgICAgIC8vIFNjcm9sbGlu
ZyB3b3JrcyBhcyBmb2xsb3dzOiBXZSByZW5kZXIgYSBxdWFkIHdpdGggdGhlIGN1cnJlbnQgcm9v
dCBsYXllciBjb250ZW50cwotICAgICAgICAvLyB0cmFuc2xhdGVkIGJ5IHRoZSBhbW91bnQgdGhl
IHBhZ2UgaGFzIHNjcm9sbGVkIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZSBhbmQgdGhlbiByZWFkIHRo
ZQotICAgICAgICAvLyBwaXhlbHMgb2YgdGhlIGNvbnRlbnQgYXJlYSAodmlzaWJsZSBhcmVhIGV4
Y2x1ZGluZyB0aGUgc2Nyb2xsIGJhcnMpIGJhY2sgaW50byB0aGUKLSAgICAgICAgLy8gcm9vdCBs
YXllciB0ZXh0dXJlLiBUaGUgbmV3bHkgZXhwb3NlZCBhcmVhIHdpbGwgYmUgZmlsbGVkIGJ5IGEg
c3Vic2VxdWVudCBkcmF3TGF5ZXJzSW50b1JlY3QgY2FsbAotICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBzY3JvbGxlZExheWVyTWF0cml4OwotCi0gICAgICAgIHNjcm9sbGVkTGF5ZXJNYXRy
aXgudHJhbnNsYXRlM2QoMC41ICogdmlzaWJsZVJlY3Qud2lkdGgoKSAtIHNjcm9sbERlbHRhLngo
KSwKLSAgICAgICAgICAgIDAuNSAqIHZpc2libGVSZWN0LmhlaWdodCgpICsgc2Nyb2xsRGVsdGEu
eSgpLCAwKTsKLSAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC5zY2FsZTNkKDEsIC0xLCAxKTsK
LQotICAgICAgICB1c2VTaGFkZXIobV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtKTsKLSAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT51bmlmb3JtMWkobV90ZXh0dXJlTGF5ZXJTaGFk
ZXJTYW1wbGVyTG9jYXRpb24sIDApKTsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1
cmVkUXVhZChtX2NvbnRleHQuZ2V0KCksIG1fcHJvamVjdGlvbk1hdHJpeCwgc2Nyb2xsZWRMYXll
ck1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxl
UmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3RleHR1cmVMYXllclNoYWRlck1hdHJpeExvY2F0aW9u
LCBtX3RleHR1cmVMYXllclNoYWRlckFscGhhTG9jYXRpb24pOwotCi0gICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0
LmhlaWdodCgpKSk7Ci0gICAgfQorICAgIC8vIEJsZW5kaW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQu
IFJvb3QgbGF5ZXIgYWxwaGEgY2hhbm5lbCBvbiBXaW5kb3dzIGlzIGluY29ycmVjdCB3aGVuIFNr
aWEgdXNlcyBDbGVhclR5cGUuCisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogCiAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNj
cm9sbFBvc2l0aW9uOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9v
dExheWVyVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKLXsKLSAgICBBU1NF
UlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKLQotICAgIGlmICghbV9yb290TGF5ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7Ci0K
LSAgICAvLyBVcGRhdGUgdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICBBU1NFUlQoKHVwZGF0
ZVJlY3QucmlnaHQoKSAgPD0gbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgpCi0gICAgICAgICAgICYm
ICh1cGRhdGVSZWN0LmJvdHRvbSgpIDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOwotCi0j
aWYgUExBVEZPUk0oU0tJQSkKLSAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVk
IHJlY3QuCi0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5n
ZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKLSAgICBBU1NFUlQoYml0bWFwLndpZHRo
KCkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIGJpdG1hcC5oZWlnaHQoKSA9PSB1cGRhdGVSZWN0
LmhlaWdodCgpKTsKLSAgICB2b2lkKiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7Ci0jZWxp
ZiBQTEFURk9STShDRykKLSAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJl
Y3QuCi0gICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgo
bV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3Rh
dGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRl
eHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICB2b2lkKiBwaXhlbHMgPSBt
X3Jvb3RMYXllckJhY2tpbmdTdG9yZS5kYXRhKCk7Ci0jZWxzZQotI2Vycm9yICJOZWVkIHRvIGlt
cGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCi0jZW5kaWYKLSAgICAvLyBDb3B5IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJl
Y3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKLX0KLQotdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotewotICAgIEFTU0VSVChtX2hhcmR3YXJl
Q29tcG9zaXRpbmcpOwogCiAgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IG1fcm9vdExheWVy
LT5tX3JlbmRlclN1cmZhY2UuZ2V0KCk7CiAgICAgaWYgKCFtX2RlZmF1bHRSZW5kZXJTdXJmYWNl
KQpAQCAtMzAwLDIxICsyNTUsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAxLCAxKTsKICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIAotICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fcm9v
dExheWVyVGV4dHVyZUlkKSk7Ci0KLSAgICAvLyBSZW5kZXIgdGhlIHJvb3QgbGF5ZXIgdXNpbmcg
YSBxdWFkIHRoYXQgdGFrZXMgdXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEgb2YgdGhlIHdpbmRv
dy4KLSAgICAvLyBXZSByZXVzZSB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCBieSBDb250ZW50TGF5
ZXJDaHJvbWl1bS4KLSAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
KiBjb250ZW50TGF5ZXJWYWx1ZXMgPSBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKLSAgICB1
c2VTaGFkZXIoY29udGVudExheWVyVmFsdWVzLT5jb250ZW50U2hhZGVyUHJvZ3JhbSgpKTsKLSAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0xaShjb250ZW50TGF5ZXJWYWx1ZXMt
PnNoYWRlclNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgLy8gTWFzayBvdXQgd3JpdGVzIHRv
IGFscGhhIGNoYW5uZWw6IENsZWFyVHlwZSB2aWEgU2tpYSByZXN1bHRzIGluIGludmFsaWQKLSAg
ICAvLyB6ZXJvIGFscGhhIHZhbHVlcyBvbiB0ZXh0IGdseXBocy4gVGhlIHJvb3QgbGF5ZXIgaXMg
YWx3YXlzIG9wYXF1ZS4KLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVy
TWF0cml4OwotICAgIGxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKHZpc2libGVSZWN0LndpZHRoKCkg
KiAwLjVmLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAqIDAuNWYsIDApOwotICAgIExheWVyQ2hyb21p
dW06OmRyYXdUZXh0dXJlZFF1YWQobV9jb250ZXh0LmdldCgpLCBtX3Byb2plY3Rpb25NYXRyaXgs
IGxheWVyTWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJs
ZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlck1hdHJpeExvY2F0
aW9uKCksIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKKyAgICB1
cGRhdGVBbmREcmF3Um9vdExheWVyKHRpbGVQYWludCwgc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVS
ZWN0LCBjb250ZW50UmVjdCk7CisKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvbG9y
TWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKSk7CiAKICAgICAvLyBTZXQgdGhlIHJvb3Qgdmlz
aWJsZS9jb250ZW50IHJlY3RzIC0tLSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVycyBjYWxs
cy4KQEAgLTgyOSwxOSArNzcxLDYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRp
YWxpemVTaGFyZWRPYmplY3RzKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IC8vIENyZWF0ZSBhIHRleHR1cmUgb2JqZWN0IHRvIGhvbGQgdGhlIGNvbnRlbnRzIG9mIHRoZSBy
b290IGxheWVyLgotICAgIG1fcm9vdExheWVyVGV4dHVyZUlkID0gY3JlYXRlTGF5ZXJUZXh0dXJl
KCk7Ci0gICAgaWYgKCFtX3Jvb3RMYXllclRleHR1cmVJZCkgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgdGV4dHVyZSBmb3Igcm9vdCBsYXllciIpOwotICAgICAgICBjbGVh
bnVwU2hhcmVkT2JqZWN0cygpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8v
IFR1cm4gb2ZmIGZpbHRlcmluZyBmb3IgdGhlIHJvb3QgbGF5ZXIgdG8gYXZvaWQgYmx1cnJpbmcg
ZnJvbSB0aGUgcmVwZWF0ZWQKLSAgICAvLyB3cml0ZXMgYW5kIHJlYWRzIHRvIHRoZSBmcmFtZWJ1
ZmZlciB0aGF0IGhhcHBlbiB3aGlsZSBzY3JvbGxpbmcuCi0gICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9yb290
TGF5ZXJUZXh0dXJlSWQpKTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7Ci0gICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVCkpOwotCiAgICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBzaXpl
IHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgogICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwogICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKSk7CkBAIC04NzksMTEgKzgwOCw2
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAg
ICAgICAgIG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSA9IDA7CiAgICAgfQogCi0gICAgaWYg
KG1fcm9vdExheWVyVGV4dHVyZUlkKSB7Ci0gICAgICAgIGRlbGV0ZUxheWVyVGV4dHVyZShtX3Jv
b3RMYXllclRleHR1cmVJZCk7Ci0gICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUlkID0gMDsKLSAg
ICB9Ci0KICAgICBpZiAobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKQogICAgICAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fb2Zmc2NyZWVuRnJhbWVidWZm
ZXJJZCkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNTMxZDY1MjIyZGVkMzhiNmY4ZTUy
NWU4NWI4ZmEwNGM0MWI1YWVkNC4uMjFiZWJhMmQ5OGViYjg4MzRmYjg0MjRlM2Y5MGU2MWNjN2Vi
MzZlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
Q29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgpAQCAtNjcsMTQgKzY4LDEyIEBAIHB1YmxpYzoK
IAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CiAKLSAgICAvLyB1cGRhdGVzIHNp
emUgb2Ygcm9vdCB0ZXh0dXJlLCBpZiBuZWVkZWQsIGFuZCBzY3JvbGxzIHRoZSBiYWNrYnVmZmVy
LgotICAgIHZvaWQgcHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbik7CisgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCk7CiAKLSAgICAvLyB1cGRhdGVzIGEgcmVjdGFuZ2xlIHdpdGhpbiB0aGUgcm9vdCBs
YXllciB0ZXh0dXJlCi0gICAgdm9pZCB1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0KTsKLQotICAgIC8vIGRyYXdzIHRoZSBjdXJyZW50IGxheWVycyBv
bnRvIHRoZSBiYWNrYnVmZmVyCi0gICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZp
c2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgLy8gdXBkYXRlcyBh
bmQgZHJhd3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lk
IGRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24sIFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LAorICAgICAgICAgICAgICAgICAg
ICBUaWxlUGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50KTsKIAogICAgIC8vIHdhaXRzIGZv
ciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKQEAgLTg4LDggKzg3LDYg
QEAgcHVibGljOgogCiAgICAgYm9vbCBoYXJkd2FyZUNvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1
cm4gbV9oYXJkd2FyZUNvbXBvc2l0aW5nOyB9CiAKLSAgICB2b2lkIHNldFJvb3RMYXllckNhbnZh
c1NpemUoY29uc3QgSW50U2l6ZSYpOwotCiAgICAgR3JhcGhpY3NDb250ZXh0KiByb290TGF5ZXJH
cmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4
dC5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgY3JlYXRlTGF5ZXJUZXh0dXJlKCk7CkBAIC0xMjEs
NiArMTE4LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd0xheWVyKExheWVyQ2hyb21pdW0q
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qKTsKIAorICAgIHZvaWQgdXBkYXRlQW5kRHJhd1Jvb3RM
YXllcihUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBz
Y3JvbGxiYXJQYWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KTsKKwogICAgIGJvb2wgaXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSos
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qp
OwogCiAgICAgdm9pZCBzZXRTY2lzc29yVG9SZWN0KGNvbnN0IEludFJlY3QmKTsKQEAgLTEzNiw3
ICsxMzUsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsK
ICAgICB2b2lkIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAKLSAgICB1bnNpZ25lZCBtX3Jvb3RM
YXllclRleHR1cmVJZDsKKyAgICBzdGF0aWMgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhclJlY3Qo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsK
KyAgICBzdGF0aWMgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0
JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgaW50IG1f
cm9vdExheWVyVGV4dHVyZVdpZHRoOwogICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7
CiAKQEAgLTE1MCw2ICsxNTEsOSBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fcHJvamVjdGlvbk1hdHJpeDsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RM
YXllcjsKKyAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllclRpbGVyOwor
ICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVy
OworICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fdmVydGljYWxTY3JvbGxiYXJUaWxl
cjsKIAogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX2hhcmR3YXJl
Q29tcG9zaXRpbmc7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzhhZmQ3ZDY0MTI3NzNl
NjZjOTA3Mjk2Y2YzMzdiY2VjMmE1NmRiNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcApAQCAtMCwwICsx
LDQwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorCisjaWYgUExBVEZPUk0oU0tJ
QSkKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRTa2lhLmgiCisjZWxpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dC
aXRtYXBDb250ZXh0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3du
UHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSkK
K3sKKyAgICBpZiAoIWxheWVyUmVuZGVyZXIgfHwgdGlsZVNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVt
KGxheWVyUmVuZGVyZXIsIHRpbGVTaXplKSk7Cit9CisKK0xheWVyVGlsZXJDaHJvbWl1bTo6TGF5
ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUpCisgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJl
cikKK3sKKyAgICBzZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7Cit9CisKK0xheWVyVGlsZXJDaHJvbWl1
bTo6fkxheWVyVGlsZXJDaHJvbWl1bSgpCit7CisgICAgcmVzZXQoKTsKK30KKworR3JhcGhpY3ND
b250ZXh0M0QqIExheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQoKSBjb25z
dAoreworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworICAgIHJldHVybiBsYXllclJlbmRl
cmVyKCktPmNvbnRleHQoKTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldFRpbGVT
aXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fdGlsZVNpemUgPT0gc2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcmVzZXQoKTsKKworICAgIG1fdGlsZVNpemUgPSBzaXpl
OworICAgIG1fdGlsZVBpeGVscy5yZXNpemUobV90aWxlU2l6ZS53aWR0aCgpICogbV90aWxlU2l6
ZS5oZWlnaHQoKSAqIDQpOworfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cmVzZXQoKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoIW1fdGlsZXNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGF5
ZXJSZW5kZXJlcigpLT5kZWxldGVMYXllclRleHR1cmUobV90aWxlc1tpXS0+cmVsZWFzZVRleHR1
cmVJZCgpKTsKKyAgICB9CisgICAgbV90aWxlcy5jbGVhcigpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV91bnVzZWRUaWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIW1fdW51
c2VkVGlsZXNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGF5ZXJSZW5kZXJl
cigpLT5kZWxldGVMYXllclRleHR1cmUobV91bnVzZWRUaWxlc1tpXS0+cmVsZWFzZVRleHR1cmVJ
ZCgpKTsKKyAgICB9CisgICAgbV91bnVzZWRUaWxlcy5jbGVhcigpOworCisgICAgbV9sYXllclNp
emUgPSBJbnRTaXplKCk7CisgICAgbV9sYXllclRpbGVTaXplID0gSW50U2l6ZSgpOworICAgIG1f
bGFzdFVwZGF0ZUdyb3VwID0gSW50UmVjdCgpOworfQorCitMYXllclRpbGVyQ2hyb21pdW06OlRp
bGUqIExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgeCwgaW50IHkpCit7CisgICAg
Y29uc3QgaW50IGluZGV4ID0gdGlsZUluZGV4KHgsIHkpOworICAgIEFTU0VSVCghbV90aWxlc1tp
bmRleF0pOworCisgICAgaWYgKG1fdW51c2VkVGlsZXMuc2l6ZSgpID4gMCkgeworICAgICAgICBt
X3RpbGVzW2luZGV4XSA9IG1fdW51c2VkVGlsZXMubGFzdCgpLnJlbGVhc2UoKTsKKyAgICAgICAg
bV91bnVzZWRUaWxlcy5yZW1vdmVMYXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IHRleHR1cmVJZCA9IGxheWVyUmVuZGVyZXIoKS0+Y3JlYXRlTGF5ZXJUZXh0
dXJlKCk7CisgICAgICAgIE93blB0cjxUaWxlPiB0aWxlID0gYWRvcHRQdHIobmV3IFRpbGUodGV4
dHVyZUlkKSk7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJl
bmRlcmVyQ29udGV4dCgpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2Uy
RChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIG1fdGlsZVNpemUud2lkdGgoKSwgbV90aWxlU2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CisK
KyAgICAgICAgbV90aWxlc1tpbmRleF0gPSB0aWxlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBt
X3RpbGVzW2luZGV4XS0+bV9kaXJ0eUxheWVyUmVjdCA9IHRpbGVMYXllclJlY3QoeCwgeSk7Cisg
ICAgcmV0dXJuIG1fdGlsZXNbaW5kZXhdLmdldCgpOworfQorCit2b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGNvbnNpZGVyR3JvdXAsIGNvbnN0
IEludFJlY3QmIGtlZXBHcm91cCkKK3sKKyAgICBpZiAoIW1fdGlsZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJbnZhbGlkYXRlIGFueSB0aWxlcyB1c2VkIGxhc3QgdGltZSBi
dXQgbm90IHRoaXMgdGltZS4KKyAgICBmb3IgKGludCB5ID0gY29uc2lkZXJHcm91cC55KCk7IHkg
PCBjb25zaWRlckdyb3VwLmJvdHRvbSgpOyArK3kpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IGNv
bnNpZGVyR3JvdXAueCgpOyB4IDwgY29uc2lkZXJHcm91cC5yaWdodCgpOyArK3gpIHsKKyAgICAg
ICAgICAgIGlmIChrZWVwR3JvdXAuY29udGFpbnMoeCwgeSkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIGNvbnN0IGludCBpbmRleCA9IHRpbGVJbmRleCh4LCB5KTsK
KyAgICAgICAgICAgIGlmIChtX3RpbGVzW2luZGV4XSkKKyAgICAgICAgICAgICAgICBtX3VudXNl
ZFRpbGVzLmFwcGVuZChtX3RpbGVzW2luZGV4XS5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAg
fQorfQorCitJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJlY3RUb1RpbGVHcm91
cChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGxheWVy
UmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOworCisgICAgY29uc3Qg
aW50IGxlZnQgPSBsYXllclJlY3QueCgpIC8gbV90aWxlU2l6ZS53aWR0aCgpOworICAgIGNvbnN0
IGludCB0b3AgPSBsYXllclJlY3QueSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBjb25z
dCBpbnQgcmlnaHQgPSAobGF5ZXJSZWN0LnJpZ2h0KCkgLSAxKSAvIG1fdGlsZVNpemUud2lkdGgo
KTsKKyAgICBjb25zdCBpbnQgYm90dG9tID0gKGxheWVyUmVjdC5ib3R0b20oKSAtIDEpIC8gbV90
aWxlU2l6ZS5oZWlnaHQoKTsKKworICAgIEludFJlY3QgdGlsZUdyb3VwKGxlZnQsIHRvcCwgcmln
aHQgLSBsZWZ0ICsgMSwgYm90dG9tIC0gdG9wICsgMSk7CisgICAgcmV0dXJuIHRpbGVHcm91cDsK
K30KKworSW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3Qo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9zKGNv
bnRlbnRSZWN0LngoKSAtIG1fbGF5ZXJQb3NpdGlvbi54KCksIGNvbnRlbnRSZWN0LnkoKSAtIG1f
bGF5ZXJQb3NpdGlvbi55KCkpOworICAgIEludFJlY3QgbGF5ZXJSZWN0KHBvcywgY29udGVudFJl
Y3Quc2l6ZSgpKTsKKworICAgIC8vIENsaXAgdG8gdGhlIHBvc2l0aW9uLgorICAgIGlmIChwb3Mu
eCgpIDwgMCB8fCBwb3MueSgpIDwgMCkKKyAgICAgICAgbGF5ZXJSZWN0ID0gSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgSW50U2l6ZShjb250ZW50UmVjdC53aWR0aCgpICsgcG9zLngoKSwgY29udGVu
dFJlY3QuaGVpZ2h0KCkgKyBwb3MueSgpKSk7CisgICAgcmV0dXJuIGxheWVyUmVjdDsKK30KKwor
SW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OmxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgY29udGVudFJlY3QgPSBs
YXllclJlY3Q7CisgICAgY29udGVudFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xh
eWVyUG9zaXRpb24ueSgpKTsKKyAgICByZXR1cm4gY29udGVudFJlY3Q7Cit9CisKK2ludCBMYXll
clRpbGVyQ2hyb21pdW06OnRpbGVJbmRleChpbnQgeCwgaW50IHkpCit7CisgICAgQVNTRVJUKHgg
Pj0gMCAmJiB5ID49IDAgJiYgeCA8IG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpICYmIHkgPCBtX2xh
eWVyVGlsZVNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiB4ICsgeSAqIG1fbGF5ZXJUaWxlU2l6
ZS53aWR0aCgpOworfQorCitJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRS
ZWN0KGludCB4LCBpbnQgeSkKK3sKKyAgICBJbnRQb2ludCBhbmNob3IobV9sYXllclBvc2l0aW9u
LngoKSArIHggKiBtX3RpbGVTaXplLndpZHRoKCksIG1fbGF5ZXJQb3NpdGlvbi55KCkgKyB5ICog
bV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgSW50UmVjdCB0aWxlKGFuY2hvciwgbV90aWxlU2l6
ZSk7CisgICAgcmV0dXJuIHRpbGU7Cit9CisKK0ludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjp0
aWxlTGF5ZXJSZWN0KGludCB4LCBpbnQgeSkKK3sKKyAgICBJbnRQb2ludCBhbmNob3IoeCAqIG1f
dGlsZVNpemUud2lkdGgoKSwgeSAqIG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgIEludFJlY3Qg
dGlsZShhbmNob3IsIG1fdGlsZVNpemUpOworICAgIHJldHVybiB0aWxlOworfQorCit2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlDb250
ZW50UmVjdCkKK3sKKyAgICBpZiAoZGlydHlDb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdyb3dMYXllclRvQ29udGFpbihkaXJ0eUNvbnRlbnRSZWN0KTsKKwor
ICAgIC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4gbGF5ZXIgc3BhY2UsIGFzIHRoZSBsYXll
ciBjb3VsZCBiZSByZXBvc2l0aW9uZWQKKyAgICAvLyBhZnRlciBpbnZhbGlkYXRpb24uCisgICAg
SW50UmVjdCBkaXJ0eUxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoZGlydHlDb250
ZW50UmVjdCk7CisKKyAgICBJbnRSZWN0IHRpbGVHcm91cCA9IGNvbnRlbnRSZWN0VG9UaWxlR3Jv
dXAoZGlydHlDb250ZW50UmVjdCk7CisgICAgZm9yIChpbnQgeSA9IHRpbGVHcm91cC55KCk7IHkg
PCB0aWxlR3JvdXAuYm90dG9tKCk7ICsreSkgeworICAgICAgICBmb3IgKGludCB4ID0gdGlsZUdy
b3VwLngoKTsgeCA8IHRpbGVHcm91cC5yaWdodCgpOyArK3gpIHsKKyAgICAgICAgICAgIFRpbGUq
IHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleCh4LCB5KV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IXRpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBJbnRSZWN0IGJv
dW5kID0gdGlsZUxheWVyUmVjdCh4LCB5KTsKKyAgICAgICAgICAgIGJvdW5kLmludGVyc2VjdChk
aXJ0eUxheWVyUmVjdCk7CisgICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0LnVuaXRl
KGJvdW5kKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06
OnVwZGF0ZShUaWxlUGFpbnRJbnRlcmZhY2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KQoreworICAgIC8vIEludmFsaWRhdGUgb2xkIHRpbGVzIHRoYXQgd2VyZSBwcmV2aW91
c2x5IHVzZWQgYnV0IGFyZW4ndCBpbiB1c2UgdGhpcworICAgIC8vIGZyYW1lIHNvIHRoYXQgdGhl
eSBjYW4gZ2V0IHJldXNlZCBmb3IgbmV3IHRpbGVzLgorICAgIEludFJlY3QgdGlsZUdyb3VwID0g
Y29udGVudFJlY3RUb1RpbGVHcm91cChjb250ZW50UmVjdCk7CisgICAgaW52YWxpZGF0ZVRpbGVz
KG1fbGFzdFVwZGF0ZUdyb3VwLCB0aWxlR3JvdXApOworICAgIG1fbGFzdFVwZGF0ZUdyb3VwID0g
dGlsZUdyb3VwOworCisgICAgZ3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKKworICAg
IC8vIENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29u
dGFpbiBhbGwKKyAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24u
CisgICAgSW50UmVjdCBkaXJ0eUxheWVyUmVjdDsKKyAgICBmb3IgKGludCB5ID0gdGlsZUdyb3Vw
LnkoKTsgeSA8IHRpbGVHcm91cC5ib3R0b20oKTsgKyt5KSB7CisgICAgICAgIGZvciAoaW50IHgg
PSB0aWxlR3JvdXAueCgpOyB4IDwgdGlsZUdyb3VwLnJpZ2h0KCk7ICsreCkgeworICAgICAgICAg
ICAgVGlsZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KHgsIHkpXS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZSh4LCB5KTsK
KyAgICAgICAgICAgIGRpcnR5TGF5ZXJSZWN0LnVuaXRlKHRpbGUtPm1fZGlydHlMYXllclJlY3Qp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgSW50UmVjdCBwYWludFJlY3QgPSBsYXllclJl
Y3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAg
ICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IGNhbnZhcyhuZXcgc2tpYTo6UGxhdGZvcm1D
YW52YXMocGFpbnRSZWN0LndpZHRoKCksIHBhaW50UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKKyAg
ICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gc2tpYUNvbnRleHQobmV3IFBsYXRmb3JtQ29u
dGV4dFNraWEoY2FudmFzLmdldCgpKSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0KG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCo+KHNraWFDb250ZXh0LmdldCgpKSkpOworCisgICAgLy8gQnJpbmcg
dGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4K
KyAgICBjYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50UmVjdC54
KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50UmVjdC55KCkpKTsKKworICAgIHBhaW50
ZXIucGFpbnQoKmdyYXBoaWNzQ29udGV4dCwgcGFpbnRSZWN0KTsKKworICAgIC8vIEdldCB0aGUg
Y29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCBiaXRtYXAg
PSBjYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIEFTU0VSVChi
aXRtYXAud2lkdGgoKSA9PSBwYWludFJlY3Qud2lkdGgoKSAmJiBiaXRtYXAuaGVpZ2h0KCkgPT0g
cGFpbnRSZWN0LmhlaWdodCgpKTsKKyAgICB1aW50OF90KiBwYWludFBpeGVscyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihiaXRtYXAuZ2V0UGl4ZWxzKCkpOworI2VsaWYgUExBVEZPUk0oQ0cpCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGNhbnZhc1BpeGVsczsKKyAgICBpbnQgcm93Qnl0ZXMgPSA0ICog
cGFpbnRSZWN0LndpZHRoKCk7CisgICAgY2FudmFzUGl4ZWxzLnJlc2l6ZShyb3dCeXRlcyAqIHBh
aW50UmVjdC5oZWlnaHQoKSk7CisgICAgbWVtc2V0KGNhbnZhc1BpeGVscy5kYXRhKCksIDAsIGNh
bnZhc1BpeGVscy5zaXplKCkpOworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9y
U3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgIFJldGFp
blB0cjxDR0NvbnRleHRSZWY+IG1fY2dDb250ZXh0OworICAgIG1fY2dDb250ZXh0LmFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKGNhbnZhc1BpeGVscy5kYXRhKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRSZWN0LndpZHRo
KCksIHBhaW50UmVjdC5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
bV9jZ0NvbnRleHQuZ2V0KCksIDAsIHBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgQ0dDb250ZXh0
U2NhbGVDVE0obV9jZ0NvbnRleHQuZ2V0KCksIDEsIC0xKTsKKyAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBtX2dyYXBoaWNzQ29udGV4dChuZXcgR3JhcGhpY3NDb250ZXh0KG1fY2dDb250ZXh0
LmdldCgpKSk7CisKKyAgICAvLyBCcmluZyB0aGUgQ29yZUdyYXBoaWNzIGNvbnRleHQgaW50byB0
aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCisgICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKG1fY2dDb250ZXh0LmdldCgpLCAtcGFpbnRSZWN0LngoKSwgLXBhaW50UmVjdC55
KCkpOworICAgIHBhaW50ZXIucGFpbnQoKm1fZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOwor
CisgICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fY2dDb250ZXh0Lmdl
dCgpKSkgPT0gcGFpbnRSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENv
bnRleHRHZXRIZWlnaHQobV9jZ0NvbnRleHQuZ2V0KCkpKSA9PSBwYWludFJlY3QuaGVpZ2h0KCkp
OworICAgIHVpbnQ4X3QqIHBhaW50UGl4ZWxzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGNhbnZh
c1BpeGVscy5kYXRhKCkpOworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlv
dXIgcGxhdGZvcm0uIgorI2VuZGlmCisKKyAgICBmb3IgKGludCB5ID0gdGlsZUdyb3VwLnkoKTsg
eSA8IHRpbGVHcm91cC5ib3R0b20oKTsgKyt5KSB7CisgICAgICAgIGZvciAoaW50IHggPSB0aWxl
R3JvdXAueCgpOyB4IDwgdGlsZUdyb3VwLnJpZ2h0KCk7ICsreCkgeworICAgICAgICAgICAgVGls
ZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KHgsIHkpXS5nZXQoKTsKKyAgICAgICAgICAgIGlm
ICghdGlsZS0+ZGlydHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgLy8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIGNvcHkgZnJvbS4KKyAgICAg
ICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRpbGVDb250ZW50UmVjdCh4LCB5KTsKKyAgICAg
ICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKKyAg
ICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KGxheWVyUmVjdFRvQ29udGVudFJlY3QodGls
ZS0+bV9kaXJ0eUxheWVyUmVjdCkpOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1z
cGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCisgICAgICAgICAgICBJbnRSZWN0IGRlc3RS
ZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkg
LSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5zaXplKCkpOworCisgICAgICAgICAgICAvLyBPZmZz
ZXQgZnJvbSBwYWludCByZWN0YW5nbGUgdG8gdGhpcyB0aWxlJ3MgZGlydHkgcmVjdGFuZ2xlLgor
ICAgICAgICAgICAgSW50UG9pbnQgcGFpbnRPZmZzZXQoc291cmNlUmVjdC54KCkgLSBwYWludFJl
Y3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIHBhaW50UmVjdC55KCkpOworCisgICAgICAgICAgICB1
aW50OF90KiBwaXhlbFNvdXJjZTsKKyAgICAgICAgICAgIGlmIChwYWludFJlY3Qud2lkdGgoKSA9
PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIXBhaW50T2Zmc2V0LngoKSkKKyAgICAgICAgICAgICAg
ICBwaXhlbFNvdXJjZSA9ICZwYWludFBpeGVsc1s0ICogcGFpbnRPZmZzZXQueSgpICogcGFpbnRS
ZWN0LndpZHRoKCldOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU3Ry
aWRlcyBub3QgZXF1YWwsIHNvIGRvIGEgcm93LWJ5LXJvdyBtZW1jcHkgZnJvbSB0aGUKKyAgICAg
ICAgICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8gYSB0ZW1wIGJ1ZmZlciBmb3IgdXBsb2Fk
aW5nLgorICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRlc3RSZWN0Lmhl
aWdodCgpOyArK3JvdykKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZtX3RpbGVQaXhlbHNb
ZGVzdFJlY3Qud2lkdGgoKSAqIDQgKiByb3ddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
JnBhaW50UGl4ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgpICsgKHBhaW50T2Zmc2V0LnkoKSArIHJv
dykgKiBwYWludFJlY3Qud2lkdGgoKSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJlY3Qud2lkdGgoKSAqIDQpOworCisgICAgICAgICAgICAgICAgcGl4ZWxTb3VyY2UgPSAmbV90
aWxlUGl4ZWxzWzBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRpbGUt
PnRleHR1cmVJZCgpKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4U3Vi
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBk
ZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVs
U291cmNlKSk7CisKKyAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldExheWVyUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmIGxheWVyUG9zaXRpb24pCit7CisgICAgbV9sYXllclBvc2l0aW9uID0gbGF5
ZXJQb3NpdGlvbjsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgLy8gUmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5n
IGEgcXVhZCB0aGF0IHRha2VzIHVwIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5k
b3cuCisgICAgLy8gV2UgcmV1c2UgdGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExh
eWVyQ2hyb21pdW0uCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRl
cmVyQ29udGV4dCgpOworICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1
ZXMqIGNvbnRlbnRMYXllclZhbHVlcyA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGVudExheWVyU2hh
cmVkVmFsdWVzKCk7CisgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoY29udGVudExheWVy
VmFsdWVzLT5jb250ZW50U2hhZGVyUHJvZ3JhbSgpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dW5pZm9ybTFpKGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCks
IDApKTsKKyAgICAvLyBNYXNrIG91dCB3cml0ZXMgdG8gYWxwaGEgY2hhbm5lbDogQ2xlYXJUeXBl
IHZpYSBTa2lhIHJlc3VsdHMgaW4gaW52YWxpZAorICAgIC8vIHplcm8gYWxwaGEgdmFsdWVzIG9u
IHRleHQgZ2x5cGhzLiBUaGUgcm9vdCBsYXllciBpcyBhbHdheXMgb3BhcXVlLgorICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpKTsKKwor
ICAgIEludFJlY3QgdGlsZUdyb3VwID0gY29udGVudFJlY3RUb1RpbGVHcm91cChjb250ZW50UmVj
dCk7CisgICAgZm9yIChpbnQgeSA9IHRpbGVHcm91cC55KCk7IHkgPCB0aWxlR3JvdXAuYm90dG9t
KCk7ICsreSkgeworICAgICAgICBmb3IgKGludCB4ID0gdGlsZUdyb3VwLngoKTsgeCA8IHRpbGVH
cm91cC5yaWdodCgpOyArK3gpIHsKKyAgICAgICAgICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzW3Rp
bGVJbmRleCh4LCB5KV0uZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQodGlsZSk7CisKKyAgICAg
ICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgdGlsZS0+dGV4dHVyZUlkKCkpKTsKKworICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdGlsZU1hdHJpeDsKKyAgICAgICAgICAgIEludFBvaW50IGFuY2hvciht
X2xheWVyUG9zaXRpb24ueCgpICsgeCAqIG1fdGlsZVNpemUud2lkdGgoKSwgbV9sYXllclBvc2l0
aW9uLnkoKSArIHkgKiBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHRpbGVNYXRy
aXgudHJhbnNsYXRlM2QoYW5jaG9yLngoKSAtIGNvbnRlbnRSZWN0LngoKSArIG1fdGlsZVNpemUu
d2lkdGgoKSAvIDIuMCwgYW5jaG9yLnkoKSAtIGNvbnRlbnRSZWN0LnkoKSArIG1fdGlsZVNpemUu
aGVpZ2h0KCkgLyAyLjAsIDApOworCisgICAgICAgICAgICBMYXllckNocm9taXVtOjpkcmF3VGV4
dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCB0
aWxlTWF0cml4LCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCksIDEsIGNv
bnRlbnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgY29udGVudExheWVyVmFs
dWVzLT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IExheWVyVGlsZXJDaHJvbWl1bTo6cmVzaXplTGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBpZiAobV9sYXllclNpemUgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50
IHdpZHRoID0gKHNpemUud2lkdGgoKSArIG1fdGlsZVNpemUud2lkdGgoKSAtIDEpIC8gbV90aWxl
U2l6ZS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSAoc2l6ZS5oZWlnaHQoKSArIG1fdGlsZVNp
emUuaGVpZ2h0KCkgLSAxKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7CisKKyAgICBWZWN0b3I8T3du
UHRyPFRpbGU+ID4gbmV3VGlsZXM7CisgICAgbmV3VGlsZXMucmVzaXplKHdpZHRoICogaGVpZ2h0
KTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbGF5ZXJUaWxlU2l6ZS5oZWlnaHQoKTsgKyt5
KQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpOyAr
K3gpCisgICAgICAgICAgICBuZXdUaWxlc1t4ICsgeSAqIHdpZHRoXS5zd2FwKG1fdGlsZXNbeCAr
IHkgKiBtX2xheWVyVGlsZVNpemUud2lkdGgoKV0pOworCisgICAgbV90aWxlcy5zd2FwKG5ld1Rp
bGVzKTsKKyAgICBtX2xheWVyU2l6ZSA9IHNpemU7CisgICAgbV9sYXllclRpbGVTaXplID0gSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06Omdyb3dM
YXllclRvQ29udGFpbihjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICAvLyBHcm93
IHRoZSB0aWxlIGFycmF5IHRvIGNvbnRhaW4gdGhpcyBwYWdlIHJlY3QuCisgICAgSW50UmVjdCBs
YXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBJbnRS
ZWN0IGxheWVyKEludFBvaW50KDAsIDApLCBtX2xheWVyU2l6ZSk7CisgICAgbGF5ZXIudW5pdGUo
bGF5ZXJSZWN0KTsKKyAgICByZXNpemVMYXllcihsYXllci5zaXplKCkpOworfQorCitMYXllclRp
bGVyQ2hyb21pdW06OlRpbGU6On5UaWxlKCkKK3sKKyAgICAvLyBFYWNoIHRpbGUgZG9lc24ndCBo
YXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0LCBzbyBjYW4ndCBjbGVhbiB1cAorICAgIC8v
IGl0cyBvd24gdGV4dHVyZS4gIElmIHRoaXMgYXNzZXJ0IGlzIGhpdCwgdGhlbiB0aGUgTGF5ZXJU
aWxlckNocm9taXVtCisgICAgLy8gZGVzdHJ1Y3RvciBkaWRuJ3QgY2xlYW4gdGhpcyB1cC4KKyAg
ICBBU1NFUlQoIW1fdGV4dHVyZUlkKTsKK30KKwordW5zaWduZWQgaW50IExheWVyVGlsZXJDaHJv
bWl1bTo6VGlsZTo6cmVsZWFzZVRleHR1cmVJZCgpCit7CisgICAgdW5zaWduZWQgaW50IGlkID0g
bV90ZXh0dXJlSWQ7CisgICAgbV90ZXh0dXJlSWQgPSAwOworICAgIHJldHVybiBpZDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUaWxlckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2NmMWY0YjIyMWJhNDQzZWRlNWJhYzIy
YjY2MmRmMDQ1NDBhZTM2MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisKKyNpZm5kZWYgTGF5ZXJUaWxlckNocm9taXVtX2gKKyNkZWZpbmUgTGF5ZXJUaWxlckNo
cm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKKworY2xhc3MgVGlsZVBh
aW50SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgPSAwOworfTsKKwor
Y2xhc3MgTGF5ZXJUaWxlckNocm9taXVtIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKTsK
KworICAgIH5MYXllclRpbGVyQ2hyb21pdW0oKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZVJlY3Qo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHZvaWQgdXBkYXRlKFRpbGVQYWludElu
dGVyZmFjZSYgcGFpbnRlciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHZvaWQg
ZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAvLyBTZXQgcG9zaXRpb24g
b2YgdGhpcyB0aWxlZCBsYXllciBpbiBjb250ZW50IHNwYWNlLgorICAgIHZvaWQgc2V0TGF5ZXJQ
b3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pOworICAgIC8vIENoYW5nZSB0aGUgdGls
ZSBzaXplLiAgVGhpcyBtYXkgaW52YWxpZGF0ZSBhbGwgdGhlIGV4aXN0aW5nIHRpbGVzLgorICAg
IHZvaWQgc2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgLy8gSW52YWxpZGF0
ZSBhbGwgdGlsZXMuCisgICAgdm9pZCByZXNldCgpOworCitwcml2YXRlOgorICAgIExheWVyVGls
ZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IElu
dFNpemUmIHRpbGVTaXplKTsKKworICAgIGNsYXNzIFRpbGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgVGlsZSh1bnNpZ25lZCBpbnQgdGV4dHVyZUlkKSA6IG1fdGV4dHVyZUlkKHRleHR1cmVJZCkg
eyB9CisgICAgICAgIH5UaWxlKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9CisgICAgICAgIHVuc2lnbmVkIGludCByZWxl
YXNlVGV4dHVyZUlkKCk7CisKKyAgICAgICAgYm9vbCBkaXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFt
X2RpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKTsgfQorICAgICAgICB2b2lkIGNsZWFyRGlydHkoKSB7
IG1fZGlydHlMYXllclJlY3QgPSBJbnRSZWN0KCk7IH0KKworICAgICAgICAvLyBMYXllci1zcGFj
ZSBkaXJ0eSByZWN0YW5nbGUgdGhhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQuCisgICAgICAgIElu
dFJlY3QgbV9kaXJ0eUxheWVyUmVjdDsKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBp
bnQgbV90ZXh0dXJlSWQ7CisgICAgfTsKKworICAgIHZvaWQgcmVzaXplTGF5ZXIoY29uc3QgSW50
U2l6ZSYgc2l6ZSk7CisgICAgLy8gR3JvdyBsYXllciBzaXplIHRvIGNvbnRhaW4gdGhpcyByZWN0
YW5nbGUuCisgICAgdm9pZCBncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpOworCisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyOyB9CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGxh
eWVyUmVuZGVyZXJDb250ZXh0KCkgY29uc3Q7CisgICAgVGlsZSogY3JlYXRlVGlsZShpbnQgeCwg
aW50IHkpOworICAgIHZvaWQgaW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGNvbnNpZGVy
R3JvdXAsIGNvbnN0IEludFJlY3QmIGtlZXBHcm91cCk7CisgICAgSW50UmVjdCBjb250ZW50UmVj
dFRvVGlsZUdyb3VwKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKyAgICBJbnRS
ZWN0IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNv
bnN0OworICAgIEludFJlY3QgbGF5ZXJSZWN0VG9Db250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBs
YXllclJlY3QpIGNvbnN0OworICAgIGludCB0aWxlSW5kZXgoaW50IHgsIGludCB5KTsKKyAgICBJ
bnRSZWN0IHRpbGVDb250ZW50UmVjdChpbnQgeCwgaW50IHkpOworICAgIEludFJlY3QgdGlsZUxh
eWVyUmVjdChpbnQgeCwgaW50IHkpOworCisgICAgSW50U2l6ZSBtX3RpbGVTaXplOworICAgIElu
dFNpemUgbV9sYXllclNpemU7CisgICAgSW50U2l6ZSBtX2xheWVyVGlsZVNpemU7CisgICAgSW50
UmVjdCBtX2xhc3RVcGRhdGVHcm91cDsKKyAgICBJbnRQb2ludCBtX2xheWVyUG9zaXRpb247CisK
KyAgICAvLyBMb2dpY2FsIDJEIGFycmF5IG9mIHRpbGVzIChkaW1lbnNpb25zIG9mIG1fbGF5ZXJU
aWxlU2l6ZSkKKyAgICBWZWN0b3I8T3duUHRyPFRpbGU+ID4gbV90aWxlczsKKyAgICAvLyBMaW5l
YXIgYXJyYXkgb2YgdW51c2VkIHRpbGVzLgorICAgIFZlY3RvcjxPd25QdHI8VGlsZT4gPiBtX3Vu
dXNlZFRpbGVzOworCisgICAgLy8gQ2FjaGUgYSB0aWxlLXNpemVkIHBpeGVsIGJ1ZmZlciB0byBk
cmF3IGludG8uCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fdGlsZVBpeGVsczsKKworICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOworfTsKKworfQorCisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGM5
M2MyNjIxYzk3MzA3MzE3ZjJhM2ZhMDI1MDUwYjA0ZjI3MTc5NTIuLmE4ZTQ0NmEwNDlmYWJlMDBk
YTNhYWZmYzA3ZmJhMWI0MDIzODc0ZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisy
MDEwLTEyLTAyICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3Igcm9vdCBsYXll
ciBsb2dpYyBvdXQgb2YgV2ViVmlld0ltcGwgYW5kIGludG8KKyAgICAgICAgTGF5ZXJUaWxlckNo
cm9taXVtLiAgVGhlIHBhaW50aW5nIGlzIG5vdyBkb25lIHRocm91Z2ggYW4gaW50ZXJmYWNlCisg
ICAgICAgIHJhdGhlciB0aGFuIGRpcmVjdGx5IGluIFdlYlZpZXdJbXBsLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTk0NworCisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9s
bFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0
ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGxU
aWxlUGFpbnRJbnRlcmZhY2U6OldlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGxUaWxlUGFpbnRJbnRlcmZhY2U6OnBhaW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGxTY3JvbGxiYXJQYWludEludGVyZmFjZTo6V2ViVmlld0lt
cGxTY3JvbGxiYXJQYWludEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
U2Nyb2xsYmFyUGFpbnRJbnRlcmZhY2U6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmRvQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAx
MC0xMS0yOSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmlu
ZGV4IDdiZWMyNTQwOGQ3NWMzMTA5ZWI3ZjhmNTZhMGQ4MjAwY2ZkOGU5OGEuLjliMmFkNTJlNDRi
NjFiZDVhMzRmMjhlZDJjYTc5MWIxN2MwYjVkOGIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCkBAIC0yMjkyLDgzICsyMjkyLDI3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RM
YXllck5lZWRzRGlzcGxheSgpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJl
Y3QoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQog
ewotICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwotICAgIC8vIENvbXB1dGUgdGhlIGRhbWFn
ZSByZWN0IGluIHZpZXdwb3J0IHNwYWNlLgotICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBt
YWluRnJhbWVJbXBsKCk7Ci0gICAgaWYgKCF3ZWJmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKLSAgICBpZiAoIXZpZXcp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNp
YmxlQ29udGVudFJlY3QoZmFsc2UpOwotICAgIEludFJlY3Qgc2NyZWVuUmVjdCA9IHZpZXctPmNv
bnRlbnRzVG9XaW5kb3coY29udGVudFJlY3QpOwotCi0gICAgLy8gV2Ugc3VwcG9ydCBmYXN0IHNj
cm9sbGluZyBpbiBvbmUgZGlyZWN0aW9uIGF0IGEgdGltZS4KLSAgICBpZiAoc2Nyb2xsRGVsdGEu
d2lkdGgoKSAmJiBzY3JvbGxEZWx0YS5oZWlnaHQoKSkgewotICAgICAgICBpbnZhbGlkYXRlUm9v
dExheWVyUmVjdChXZWJSZWN0KHNjcmVlblJlY3QpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiB3ZSB3aWxsIGV4cG9zZSBieSBzY3JvbGxpbmcu
IFdlIHVzZSB0aGUKLSAgICAvLyBjb250ZW50IHJlY3QgZm9yIGludmFsaWRhdGlvbi4gIFVzaW5n
IHRoaXMgc3BhY2UgZm9yIGRhbWFnZQotICAgIC8vIHJlY3RzIGFsbG93cyB1cyB0byBpbnRlcm1p
eCBpbnZhbGlkYXRlcyB3aXRoIHNjcm9sbHMuCi0gICAgSW50UmVjdCBkYW1hZ2VkQ29udGVudHNS
ZWN0OwotICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCgpKSB7Ci0gICAgICAgIGludCBkeCA9IHNj
cm9sbERlbHRhLndpZHRoKCk7Ci0gICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WShzY3Jl
ZW5SZWN0LnkoKSk7Ci0gICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0SGVpZ2h0KHNjcmVl
blJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICBkYW1h
Z2VkQ29udGVudHNSZWN0LnNldFgoc2NyZWVuUmVjdC54KCkpOwotICAgICAgICAgICAgZGFtYWdl
ZENvbnRlbnRzUmVjdC5zZXRXaWR0aChkeCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFgoc2NyZWVuUmVjdC5yaWdodCgpICsgZHgpOwotICAg
ICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aCgtZHgpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0gICAg
ICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChzY3JlZW5SZWN0LngoKSk7Ci0gICAgICAgIGRh
bWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoc2NyZWVuUmVjdC53aWR0aCgpKTsKLSAgICAgICAg
aWYgKGR5ID4gMCkgewotICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKHNjcmVl
blJlY3QueSgpKTsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0SGVpZ2h0KGR5
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0
WShzY3JlZW5SZWN0LmJvdHRvbSgpICsgZHkpOwotICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRz
UmVjdC5zZXRIZWlnaHQoLWR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1vdmUgdGhl
IHByZXZpb3VzIGRhbWFnZQotICAgIG1fcm9vdExheWVyU2Nyb2xsRGFtYWdlLm1vdmUoc2Nyb2xs
RGVsdGEud2lkdGgoKSwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOwotICAgIC8vIFVuaW9uIHdpdGgg
dGhlIG5ldyBkYW1hZ2UgcmVjdC4KLSAgICBtX3Jvb3RMYXllclNjcm9sbERhbWFnZS51bml0ZShk
YW1hZ2VkQ29udGVudHNSZWN0KTsKLQotICAgIC8vIFNjcm9sbCBhbnkgZXhpc3RpbmcgZGFtYWdl
IHRoYXQgaW50ZXJzZWN0cyB3aXRoIGNsaXAgcmVjdAotICAgIGlmIChjbGlwUmVjdC5pbnRlcnNl
Y3RzKG1fcm9vdExheWVyRGlydHlSZWN0KSkgewotICAgICAgICAvLyBGaW5kIHRoZSBpbm5lciBk
YW1hZ2UKLSAgICAgICAgSW50UmVjdCBpbm5lckRhbWFnZShjbGlwUmVjdCk7Ci0gICAgICAgIGlu
bmVyRGFtYWdlLmludGVyc2VjdChtX3Jvb3RMYXllckRpcnR5UmVjdCk7Ci0KLSAgICAgICAgLy8g
TW92ZSB0aGUgZGFtYWdlCi0gICAgICAgIGlubmVyRGFtYWdlLm1vdmUoc2Nyb2xsRGVsdGEud2lk
dGgoKSwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIE1lcmdlIGl0IGJhY2sg
aW50byB0aGUgZGFtYWdlZCByZWN0Ci0gICAgICAgIG1fcm9vdExheWVyRGlydHlSZWN0LnVuaXRl
KGlubmVyRGFtYWdlKTsKLSAgICB9Ci0KKyAgICAvLyBGSVhNRTogVG8gYXZvaWQgYnJlYWtpbmcg
dGhlIENocm9tZSByZW5kZXJfd2lkZ2V0IHdoZW4gdGhlIG5ldyBjb21wb3NpdG9yIHJlbmRlcgor
ICAgIC8vIHBhdGggaXMgbm90IGNoZWNrZWQgaW4sIHdlIG11c3Qgc3RpbGwgcGFzcyBzY3JvbGwg
ZGFtYWdlIHVwIHRvIHRoZSBjbGllbnQuIFRoaXMKKyAgICAvLyBjb2RlIHdpbGwgYmUgYmFja2Vk
IG91dCBpbiBhIGZvbGxvd3VwIENMIG9uY2UgdGhlIENocm9taXVtIGNoYW5nZXMgaGF2ZSBsYW5k
ZWQuCisgICAgbV9jbGllbnQtPmRpZFNjcm9sbFJlY3Qoc2Nyb2xsRGVsdGEud2lkdGgoKSwgc2Ny
b2xsRGVsdGEuaGVpZ2h0KCksIGNsaXBSZWN0KTsKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3Bs
YXkoKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLQogICAg
IGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogYWRkIGEgc21h
cnRlciBkYW1hZ2UgYWdncmVnYXRpb24gbG9naWMgYW5kL29yIHVuaWZ5IHdpdGgKLSAgICAvLyBM
YXllckNocm9taXVtJ3MgZGFtYWdlIGxvZ2ljCi0gICAgbV9yb290TGF5ZXJEaXJ0eVJlY3QudW5p
dGUocmVjdCk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmll
dygpOworICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3Qo
ZmFsc2UpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJl
Y3QodHJ1ZSk7CisKKyAgICAvLyBDb252ZXJ0IGRpcnR5IHJlY3QgdG8gYmUgaW4gY29udGVudCBz
cGFjZS4KKyAgICBJbnRSZWN0IGRpcnR5UmVjdChJbnRQb2ludChyZWN0LngoKSArIHZpZXctPnNj
cm9sbFgoKSwgcmVjdC55KCkgKyB2aWV3LT5zY3JvbGxZKCkpLCByZWN0LnNpemUoKSk7CisKKyAg
ICBtX2xheWVyUmVuZGVyZXItPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRpcnR5UmVjdCwgdmlz
aWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsK
IH0KIApAQCAtMjM4MCw2ICsyMzI0LDkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgIGlmIChtX2lzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSA9PSBhY3RpdmUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlm
IChwYWdlKCkpCisgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0Q2xpcHNS
ZXBhaW50cyghYWN0aXZlKTsKKwogICAgIGlmICghYWN0aXZlKSB7CiAgICAgICAgIG1faXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIGlmIChtX2xheWVyUmVu
ZGVyZXIpCkBAIC0yNDA0LDYgKzIzNTEsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5o
ZWlnaHQpKTsKICAgICB9CiAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCkpOworCiAgICAgaWYgKG1fbGF5ZXJSZW5kZXJl
cikgewogICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KHRydWUpOwogICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7
CkBAIC0yNDE1LDU5ICsyMzYzLDQ5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICB9CiB9CiAKLXZvaWQgV2ViVmll
d0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKLSAgICBp
ZiAoIXdlYmZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gd2Vi
ZnJhbWUtPmZyYW1lVmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIo
KTsKLSAgICBpZiAocm9vdExheWVyKSB7Ci0gICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2
aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0KLSAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5zZXRSb290TGF5ZXJDYW52YXNTaXplKEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKSk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVyQ29udGV4dCA9IG1fbGF5
ZXJSZW5kZXJlci0+cm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCk7Ci0KLSNpZiBQTEFURk9STShT
S0lBKQotICAgICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBza2lhQ29udGV4dCA9IHJvb3RMYXll
ckNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgICAgICBza2lhOjpQbGF0Zm9ybUNhbnZh
cyogcGxhdGZvcm1DYW52YXMgPSBza2lhQ29udGV4dC0+Y2FudmFzKCk7Ci0KLSAgICAgICAgcGxh
dGZvcm1DYW52YXMtPnNhdmUoKTsKLQotICAgICAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8g
dGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgotICAgICAgICBwbGF0Zm9y
bUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtcmVjdC54KCkpLCBzdGF0
aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSgpKSk7Ci0KLSAgICAgICAgcm9vdExheWVyQ29udGV4
dC0+c2F2ZSgpOwotCi0gICAgICAgIHdlYmZyYW1lLT5wYWludFdpdGhDb250ZXh0KCpyb290TGF5
ZXJDb250ZXh0LCByZWN0KTsKLSAgICAgICAgcm9vdExheWVyQ29udGV4dC0+cmVzdG9yZSgpOwor
Y2xhc3MgV2ViVmlld0ltcGxUaWxlUGFpbnRJbnRlcmZhY2UgOiBwdWJsaWMgVGlsZVBhaW50SW50
ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBXZWJWaWV3SW1wbFRpbGVQYWludEludGVyZmFjZShXZWJW
aWV3SW1wbCogd2ViVmlld0ltcGwpCisgICAgICAgIDogbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1w
bCkKKyAgICB7CisgICAgfQogCi0gICAgICAgIHBsYXRmb3JtQ2FudmFzLT5yZXN0b3JlKCk7Ci0j
ZWxpZiBQTEFURk9STShDRykKLSAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHJvb3RM
YXllckNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHBhZ2VSZWN0KQorICAgIHsK
KyAgICAgICAgUGFnZSogcGFnZSA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKTsKKyAgICAgICAgaWYg
KCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBw
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpOworICAgICAgICB2aWV3LT5wYWludENvbnRlbnRzKCZj
b250ZXh0LCBwYWdlUmVjdCk7CisgICAgfQogCi0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUo
Y2dDb250ZXh0KTsKK3ByaXZhdGU6CisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7Cit9
OwogCi0gICAgICAgIC8vIEJyaW5nIHRoZSBDb3JlR3JhcGhpY3MgY29udGV4dCBpbnRvIHRoZSBj
b29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KLSAgICAgICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKGNnQ29udGV4dCwgLXJlY3QueCgpLCAtcmVjdC55KCkpOwogCi0gICAgICAgIHJv
b3RMYXllckNvbnRleHQtPnNhdmUoKTsKK2NsYXNzIFdlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRJ
bnRlcmZhY2UgOiBwdWJsaWMgVGlsZVBhaW50SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBXZWJW
aWV3SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkK
KyAgICAgICAgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKQorICAgIHsKKyAgICB9CiAKLSAg
ICAgICAgd2ViZnJhbWUtPnBhaW50V2l0aENvbnRleHQoKnJvb3RMYXllckNvbnRleHQsIHJlY3Qp
OwotICAgICAgICByb290TGF5ZXJDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcGFnZVJlY3Qp
CisgICAgeworICAgICAgICBQYWdlKiBwYWdlID0gbV93ZWJWaWV3SW1wbC0+cGFnZSgpOworICAg
ICAgICBpZiAoIXBhZ2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEZyYW1lVmlldyog
dmlldyA9IHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7CiAKLSAgICAgICAgQ0dDb250ZXh0UmVz
dG9yZUdTdGF0ZShjZ0NvbnRleHQpOwotI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBw
bGF0Zm9ybQotI2VuZGlmCisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHZpZXctPnNjcm9sbFgo
KSwgdmlldy0+c2Nyb2xsWSgpKTsKKyAgICAgICAgSW50UmVjdCBmcmFtZVJlY3QoSW50UG9pbnQo
cGFnZVJlY3QueCgpIC0gdmlldy0+c2Nyb2xsWCgpLCBwYWdlUmVjdC55KCkgLSB2aWV3LT5zY3Jv
bGxZKCkpLCBwYWdlUmVjdC5zaXplKCkpOworICAgICAgICB2aWV3LT5wYWludFNjcm9sbGJhcnMo
JmNvbnRleHQsIGZyYW1lUmVjdCk7CiAgICAgfQotfQorCitwcml2YXRlOgorICAgIFdlYlZpZXdJ
bXBsKiBtX3dlYlZpZXdJbXBsOworfTsKIAogdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUo
KQogewpAQCAtMjQ3OSwzMiArMjQxNywxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0
ZSgpCiAgICAgLy8gVGhlIHZpc2libGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJhcnMgd2hlcmVhcyB0
aGUgY29udGVudFJlY3QgZG9lc24ndC4KICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwogICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpOwotICAgIEludFJlY3Qgdmlld1BvcnQgPSBJbnRS
ZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0KLSAgICAvLyBHaXZlIHRo
ZSBjb21wb3NpdG9yIGEgY2hhbmNlIHRvIHNldHVwL3Jlc2l6ZSB0aGUgcm9vdCB0ZXh0dXJlIGhh
bmRsZSBhbmQgcGVyZm9ybSBzY3JvbGxpbmcuCi0gICAgbV9sYXllclJlbmRlcmVyLT5wcmVwYXJl
VG9EcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgSW50UG9pbnQodmlldy0+c2Ny
b2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpKTsKLQotICAgIC8vIERyYXcgdGhlIGNvbnRlbnRzIG9m
IHRoZSByb290IGxheWVyLgotICAgIFZlY3RvcjxJbnRSZWN0PiBkYW1hZ2VSZWN0czsKLSAgICBk
YW1hZ2VSZWN0cy5hcHBlbmQobV9yb290TGF5ZXJTY3JvbGxEYW1hZ2UpOwotICAgIGRhbWFnZVJl
Y3RzLmFwcGVuZChtX3Jvb3RMYXllckRpcnR5UmVjdCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBkYW1hZ2VSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICBJbnRSZWN0IGRhbWFnZWRS
ZWN0ID0gZGFtYWdlUmVjdHNbaV07Ci0KLSAgICAgICAgLy8gSW50ZXJzZWN0IHRoaXMgcmVjdGFu
Z2xlIHdpdGggdGhlIHZpZXdQb3J0LgotICAgICAgICBkYW1hZ2VkUmVjdC5pbnRlcnNlY3Qodmll
d1BvcnQpOwotCi0gICAgICAgIC8vIE5vdyByZW5kZXIgaXQuCi0gICAgICAgIGlmIChkYW1hZ2Vk
UmVjdC53aWR0aCgpICYmIGRhbWFnZWRSZWN0LmhlaWdodCgpKSB7Ci0gICAgICAgICAgICB1cGRh
dGVSb290TGF5ZXJDb250ZW50cyhkYW1hZ2VkUmVjdCk7Ci0gICAgICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPnVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGRhbWFnZWRSZWN0KTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBtX3Jvb3RMYXllckRpcnR5UmVjdCA9IEludFJlY3QoKTsKLSAgICBtX3Jv
b3RMYXllclNjcm9sbERhbWFnZSA9IEludFJlY3QoKTsKKyAgICBJbnRQb2ludCBzY3JvbGwodmll
dy0+c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpOwogCi0gICAgLy8gRHJhdyB0aGUgYWN0dWFs
IGxheWVycy4uLgotICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwg
Y29udGVudFJlY3QpOworICAgIFdlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlIHRpbGVQYWlu
dCh0aGlzKTsKKyAgICBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNlIHNjcm9sbGJh
clBhaW50KHRoaXMpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVj
dCwgY29udGVudFJlY3QsIHNjcm9sbCwgdGlsZVBhaW50LCBzY3JvbGxiYXJQYWludCk7CiB9CiAK
IHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKaW5kZXggMDM4ODc3MDdhODdkNDlmM2YzMDlmZDNkZjg3Njc4MzQyM2E1MGRhMS4u
OTIxNTE3ZGY4NDFjMWUyNTI5ZWE3OTQ5ODkyMWEwMjAyMDI5ZjY5YyAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaApAQCAtNDA3LDcgKzQwNyw2IEBAIHByaXZhdGU6CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUoYm9vbCk7Ci0gICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwogICAgIHZvaWQgZG9Q
aXhlbFJlYWRiYWNrVG9DYW52YXMoV2ViQ2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwogICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7CkBAIC01MzksNyArNTM4LDYgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9tb3VzZUNhcHR1cmVOb2RlOwogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFdlYkNvcmU6OkludFJlY3QgbV9y
b290TGF5ZXJEaXJ0eVJlY3Q7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Jvb3RMYXllclNjcm9s
bERhbWFnZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xh
eWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75546</attachid>
            <date>2010-12-03 14:49:57 -0800</date>
            <delta_ts>2010-12-06 14:55:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49947-20101203144956.patch</filename>
            <type>text/plain</type>
            <size>59796</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjEwYzMxMzhmODk2Y2RlOTI2MmYwZjNiOTdjMDBmYWQwZjQ4MGY5Ni4uZjcyNGVlYzVjOGZjMzVh
NThjZTNiNDc1ZDAwMWJiMzdhMWQ4NmI4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAxMC0xMi0wMiAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHJvb3QgbGF5ZXIgdXBkYXRlIGFuZCBk
cmF3aW5nIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIGludG8KKyAgICAgICAgTGF5ZXJUaWxl
ckNocm9taXVtLiAgVGhlIHJvb3QgbGF5ZXIgaXMgbm93IGRyYXduIGFzIG11bHRpcGxlIHRpbGVz
CisgICAgICAgIHJhdGhlciB0aGFuIGFzIG9uZSBzaW5nbGUgbGFyZ2UgdGV4dHVyZS4gIFNjcm9s
bGJhcnMgYXJlIG5vdyBkcmF3bgorICAgICAgICBzZXBhcmF0ZWx5IHJhdGhlciB0aGFuIGFzIHBh
cnQgb2YgdGhlIHJvb3QgbGF5ZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5OTQ3CisgICAgICAgIFRlc3Q6IExheW91dFRlc3RzL2NvbXBvc2l0
aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5n
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
OjpzZXRDbGlwc1JlcGFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2li
bGVDb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y2xpcHNSZXBhaW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZlcnRpY2FsU2Nyb2xsYmFyUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Omhvcml6b250YWxT
Y3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxl
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJS
ZW5kZXJlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpz
ZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVUaWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9UaWxlR3Jv
dXApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVjdFRv
TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJS
ZWN0VG9Db250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
OnRpbGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnRpbGVD
b250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnRpbGVM
YXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlk
YXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnNldExheWVyUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cmVzaXplTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpUaWxlOjp+VGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OnJlbGVhc2VUZXh0dXJlSWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6VGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OnRleHR1cmVJZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OmRpcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6Y2xlYXJEaXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXIpOgorCiAyMDEw
LTEyLTAzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmOTFkOTAzNTAyZjU0M2U4YjA5NzFiYjFhNjgyNTQx
ZDhkZWE0YjdmLi41YmRkMWRkNzBjNzBkNDY3Yzc4ODE1NjViMWNjMGI5YTBmYmM1ZTU0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMjQ5Niw2ICsyNDk2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQ
cml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGxhdGZvcm1JY29uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYjE0ZDExYjcy
YTE3MWNmODVhMTMxYWNjNWQ2NzU2YjZiZTA5NGEyOS4uMjAwOWNlNGM3ZTQzZjU5NjAzOGUzYWYw
ODlhNjlhNDI1YjhjM2QxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTEzMTQsNyArMTMxNCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiByLCBi
b29sIGltbWVkaWF0ZSkKICAgICBkb3VibGUgZGVsYXkgPSBhZGp1c3RlZERlZmVycmVkUmVwYWlu
dERlbGF5KCk7CiAgICAgaWYgKChtX2RlZmVycmluZ1JlcGFpbnRzIHx8IG1fZGVmZXJyZWRSZXBh
aW50VGltZXIuaXNBY3RpdmUoKSB8fCBkZWxheSkgJiYgIWltbWVkaWF0ZSkgewogICAgICAgICBJ
bnRSZWN0IHBhaW50UmVjdCA9IHI7Ci0gICAgICAgIGlmICghcGFpbnRzRW50aXJlQ29udGVudHMo
KSkKKyAgICAgICAgaWYgKGNsaXBzUmVwYWludHMoKSAmJiAhcGFpbnRzRW50aXJlQ29udGVudHMo
KSkKICAgICAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkp
OwogICAgICAgICBpZiAocGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuY3BwCmluZGV4IGFiOWVlOGEyMmZmZDIyNTc1MDFkZjE0YWJhNDZm
YWFiMjA2MDFiOGEuLmYxN2NhOTIwOWMyYTZkNGQzNmI4N2U2ZTFhMzU1NzFhZjljOTNmODggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtNTMsNiArNTMsNyBAQCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3KCkKICAgICAsIG1fZHJhd1BhblNjcm9sbEljb24oZmFsc2UpCiAgICAgLCBtX3VzZUZp
eGVkTGF5b3V0KGZhbHNlKQogICAgICwgbV9wYWludHNFbnRpcmVDb250ZW50cyhmYWxzZSkKKyAg
ICAsIG1fY2xpcHNSZXBhaW50cyh0cnVlKQogICAgICwgbV9kZWxlZ2F0ZXNTY3JvbGxpbmcoZmFs
c2UpCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CkBAIC0yMDIsNiArMjAzLDExIEBAIHZvaWQgU2Ny
b2xsVmlldzo6c2V0UGFpbnRzRW50aXJlQ29udGVudHMoYm9vbCBwYWludHNFbnRpcmVDb250ZW50
cykKICAgICBtX3BhaW50c0VudGlyZUNvbnRlbnRzID0gcGFpbnRzRW50aXJlQ29udGVudHM7CiB9
CiAKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0Q2xpcHNSZXBhaW50cyhib29sIGNsaXBzUmVwYWludHMp
Cit7CisgICAgbV9jbGlwc1JlcGFpbnRzID0gY2xpcHNSZXBhaW50czsKK30KKwogdm9pZCBTY3Jv
bGxWaWV3OjpzZXREZWxlZ2F0ZXNTY3JvbGxpbmcoYm9vbCBkZWxlZ2F0ZXNTY3JvbGxpbmcpCiB7
CiAgICAgbV9kZWxlZ2F0ZXNTY3JvbGxpbmcgPSBkZWxlZ2F0ZXNTY3JvbGxpbmc7CkBAIC03ODgs
NyArNzk0LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpmcmFtZVJlY3RzQ2hhbmdlZCgpCiB2b2lkIFNj
cm9sbFZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGJv
b2wgbm93KQogewogICAgIEludFJlY3QgcGFpbnRSZWN0ID0gcmVjdDsKLSAgICBpZiAoIXBhaW50
c0VudGlyZUNvbnRlbnRzKCkpCisgICAgaWYgKGNsaXBzUmVwYWludHMoKSAmJiAhcGFpbnRzRW50
aXJlQ29udGVudHMoKSkKICAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdCh2aXNpYmxlQ29udGVu
dFJlY3QoKSk7CiAgICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExNDksNCArMTE1NSwzIEBAIGJvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jc09mZnNjcmVl
bigpIGNvbnN0CiAjZW5kaWYKIAogfQotCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCmluZGV4IDdlODQ2YmMz
OWU4YzJlNzhkY2Y0OGU3ZjlkY2I2Mzk4OWIzMThkNTguLmQ3MDQ1OGY4ODA4MjdhZWI3ZjczNjNl
ZWU4YzJhYWIyMzIzYjY2MjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCkBAIC0xMTEsNiArMTExLDEx
IEBAIHB1YmxpYzoKICAgICBib29sIHBhaW50c0VudGlyZUNvbnRlbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9wYWludHNFbnRpcmVDb250ZW50czsgfQogICAgIHZvaWQgc2V0UGFpbnRzRW50aXJlQ29u
dGVudHMoYm9vbCk7CiAKKyAgICAvLyBCeSBkZWZhdWx0LCBwYWludCBldmVudHMgYXJlIGNsaXBw
ZWQgdG8gdGhlIHZpc2libGUgYXJlYS4gIElmIHNldCB0bworICAgIC8vIGZhbHNlLCBwYWludCBl
dmVudHMgYXJlIG5vIGxvbmdlciBjbGlwcGVkLiAgcGFpbnRzRW50aXJlQ29udGVudHMoKSBpbXBs
aWVzICFjbGlwc1JlcGFpbnRzKCkuCisgICAgYm9vbCBjbGlwc1JlcGFpbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGlwc1JlcGFpbnRzOyB9CisgICAgdm9pZCBzZXRDbGlwc1JlcGFpbnRzKGJvb2wp
OworCiAgICAgLy8gQnkgZGVmYXVsdCBwcm9ncmFtbWF0aWMgc2Nyb2xsaW5nIGlzIGhhbmRsZWQg
YnkgV2ViQ29yZSBhbmQgbm90IGJ5IHRoZSBVSSBhcHBsaWNhdGlvbi4KICAgICAvLyBJbiB0aGUg
Y2FzZSBvZiB1c2luZyBhIHRpbGVkIGJhY2tpbmcgc3RvcmUsIHRoaXMgbW9kZSBjYW4gYmUgc2V0
LCBzbyB0aGF0IHRoZSBzY3JvbGwgcmVxdWVzdHMKICAgICAvLyBhcmUgZGVsZWdhdGVkIHRvIHRo
ZSBVSSBhcHBsaWNhdGlvbi4KQEAgLTMxOCw2ICszMjMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV91c2VGaXhlZExheW91dDsKIAogICAgIGJvb2wgbV9wYWludHNFbnRpcmVDb250ZW50czsKKyAg
ICBib29sIG1fY2xpcHNSZXBhaW50czsKICAgICBib29sIG1fZGVsZWdhdGVzU2Nyb2xsaW5nOwog
CiAgICAgLy8gVGhlcmUgYXJlIDggcG9zc2libGUgY29tYmluYXRpb25zIG9mIHdyaXRpbmcgbW9k
ZSBhbmQgZGlyZWN0aW9uLiAgU2Nyb2xsIG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4
IG9yIHkgYXhpcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAppbmRleCA4NmYzNTgwY2E3NDFmM2M1OTQzMGE3YTc1YTdjMTczZWMyYjI2
ZGE3Li40ZTliZmQ5ZjA5NjZiOTc5YTc0MjFlNWQxNDFlMzdkNzIwNGVhNWQxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAt
NjAsNiArNjAsNyBAQCBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAvLyB0aGlzIGNsYXNz
LgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+
IHsKICAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworICAgIGZyaWVuZCBj
bGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDFiZGVhODUwMDI1NmZlMDI3OTljZjViMjM2
NWI4NDNjMGQzN2E1MzAuLjdjMTA2ZmZjYmE1MDhlY2FmYmU0NjE1ZDEzNWY4ZTBkYzA5YWJhN2Mg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTk1LDggKzk1LDcgQEAgUGFzc1JlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8R3JhcGgKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hy
b21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKLSAgICA6IG1fcm9v
dExheWVyVGV4dHVyZUlkKDApCi0gICAgLCBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCgwKQorICAg
IDogbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkKICAgICAsIG1fcm9vdExheWVyVGV4dHVyZUhl
aWdodCgwKQogICAgICwgbV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtKDApCiAgICAgLCBtX3Jv
b3RMYXllcigwKQpAQCAtMTA4LDExICsxMDcsMTkgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpM
YXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGUK
ICAgICAsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UoMCkKIHsKICAgICBtX2hhcmR3YXJlQ29tcG9z
aXRpbmcgPSBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOworICAgIG1fcm9vdExheWVyVGlsZXIg
PSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSk7Cisg
ICAgQVNTRVJUKG1fcm9vdExheWVyVGlsZXIpOwogfQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06
On5MYXllclJlbmRlcmVyQ2hyb21pdW0oKQogewogICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7
CisKKyAgICAvLyBCZWNhdXNlIHRoZSB0aWxlcnMgbmVlZCB0byBjbGVhbiB1cCB0ZXh0dXJlcywg
Y2xlYW4gdGhlbSB1cCBleHBsaWNpdGx5CisgICAgLy8gYmVmb3JlIHRoZSBHcmFwaGljc0NvbnRl
eHQzRCBpcyBkZXN0cm95ZWQuCisgICAgbV9yb290TGF5ZXJUaWxlciA9IDA7CisgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyVGlsZXIgPSAwOworICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlciA9
IDA7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRl
eHQoKQpAQCAtMTI3LDU0ICsxMzQsNzkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRl
YnVnR0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogICAgICAg
ICBMT0dfRVJST1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNv
bW1hbmQ6ICVzLCBlcnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8
aW50PihlcnJvcikpOwogfQogCi0vLyBDcmVhdGVzIGEgY2FudmFzIGFuZCBhbiBhc3NvY2lhdGVk
IGdyYXBoaWNzIGNvbnRleHQgdGhhdCB0aGUgcm9vdCBsYXllciB3aWxsCi0vLyByZW5kZXIgaW50
by4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXJDYW52YXNTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVy
KHVuc2lnbmVkIHByb2dyYW1JZCkKIHsKLSAgICBpZiAoc2l6ZSA9PSBtX3Jvb3RMYXllckNhbnZh
c1NpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAocHJvZ3JhbUlkICE9IG1fY3VycmVudFNo
YWRlcikgeworICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJv
Z3JhbUlkKSk7CisgICAgICAgIG1fY3VycmVudFNoYWRlciA9IHByb2dyYW1JZDsKKyAgICB9Cit9
CiAKLSNpZiBQTEFURk9STShTS0lBKQotICAgIC8vIENyZWF0ZSBuZXcgY2FudmFzIGFuZCBjb250
ZXh0LiBPd25QdHIgdGFrZXMgY2FyZSBvZiBmcmVlaW5nIHVwCi0gICAgLy8gdGhlIG9sZCBvbmVz
LgotICAgIG1fcm9vdExheWVyQ2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOwotICAgIG1fcm9vdExheWVyU2tpYUNvbnRl
eHQgPSBuZXcgUGxhdGZvcm1Db250ZXh0U2tpYShtX3Jvb3RMYXllckNhbnZhcy5nZXQoKSk7Ci0g
ICAgbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50
ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihtX3Jvb3RMYXllclNraWFDb250
ZXh0LmdldCgpKSk7Ci0jZWxpZiBQTEFURk9STShDRykKLSAgICAvLyBSZWxlYXNlIHRoZSBwcmV2
aW91cyBDR0JpdG1hcENvbnRleHQgYmVmb3JlIHJlYWxsb2NhdGluZyB0aGUgYmFja2luZyBzdG9y
ZSBhcyBhIHByZWNhdXRpb24uCi0gICAgbV9yb290TGF5ZXJDR0NvbnRleHQuYWRvcHRDRigwKTsK
LSAgICBpbnQgcm93Qnl0ZXMgPSA0ICogc2l6ZS53aWR0aCgpOwotICAgIG1fcm9vdExheWVyQmFj
a2luZ1N0b3JlLnJlc2l6ZShyb3dCeXRlcyAqIHNpemUuaGVpZ2h0KCkpOwotICAgIG1lbXNldCht
X3Jvb3RMYXllckJhY2tpbmdTdG9yZS5kYXRhKCksIDAsIG1fcm9vdExheWVyQmFja2luZ1N0b3Jl
LnNpemUoKSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9w
dENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgbV9yb290TGF5ZXJDR0Nv
bnRleHQuYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9yb290TGF5ZXJCYWNraW5nU3Rv
cmUuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JT
cGFjZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0
ZU9yZGVyMzJIb3N0KSk7Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKG1fcm9vdExheWVyQ0dD
b250ZXh0LmdldCgpLCAwLCBzaXplLmhlaWdodCgpKTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTSht
X3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSwgMSwgLTEpOwotICAgIG1fcm9vdExheWVyR3JhcGhp
Y3NDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4dChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQo
KSk7Ci0jZWxzZQotI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4i
Ci0jZW5kaWYKK0ludFJlY3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2ZXJ0aWNhbFNjcm9sbGJh
clJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQoreworICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJl
Y3QucmlnaHQoKSwgY29udGVudFJlY3QueSgpKSwgSW50U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgp
IC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICByZXR1
cm4gdmVydGljYWxTY3JvbGxiYXI7Cit9CiAKLSAgICBtX3Jvb3RMYXllckNhbnZhc1NpemUgPSBz
aXplOworSW50UmVjdCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omhvcml6b250YWxTY3JvbGxiYXJS
ZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkKK3sKKyAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJl
Y3QueCgpLCBjb250ZW50UmVjdC5ib3R0b20oKSksIEludFNpemUodmlzaWJsZVJlY3Qud2lkdGgo
KSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkgLSBjb250ZW50UmVjdC5oZWlnaHQoKSkpOworICAgIHJl
dHVybiBob3Jpem9udGFsU2Nyb2xsYmFyOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXNlU2hhZGVyKHVuc2lnbmVkIHByb2dyYW1JZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsK
LSAgICBpZiAocHJvZ3JhbUlkICE9IG1fY3VycmVudFNoYWRlcikgewotICAgICAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbUlkKSk7Ci0gICAgICAgIG1fY3Vy
cmVudFNoYWRlciA9IHByb2dyYW1JZDsKKyAgICBpZiAoY29udGVudFJlY3QuaW50ZXJzZWN0cyhk
aXJ0eVJlY3QpKQorICAgICAgICBtX3Jvb3RMYXllclRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0
eVJlY3QpOworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlcikgeworICAgICAgICBJ
bnRSZWN0IHNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0LCBj
b250ZW50UmVjdCk7CisgICAgICAgIGlmIChkaXJ0eVJlY3QuaW50ZXJzZWN0cyhzY3JvbGxiYXIp
KSB7CisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+c2V0TGF5ZXJQb3Np
dGlvbihzY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXJUaWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyKSB7CisgICAgICAgIEludFJlY3Qgc2Ny
b2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7
CisgICAgICAgIGlmIChkaXJ0eVJlY3QuaW50ZXJzZWN0cyhzY3JvbGxiYXIpKSB7CisgICAgICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9zaXRpb24oc2Nyb2xsYmFy
LmxvY2F0aW9uKCkpOworICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5pbnZh
bGlkYXRlUmVjdChkaXJ0eVJlY3QpOworICAgICAgICB9CiAgICAgfQogfQogCi0vLyBUaGlzIG1l
dGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHVwZGF0ZXMgYXJlIG1hZGUgdG8g
dGhlCi0vLyByb290IGxheWVyIHRleHR1cmUuIEl0IHJlc2l6ZXMgdGhlIHJvb3QgbGF5ZXIgdGV4
dHVyZSBhbmQgc2Nyb2xscyBpdHMKLS8vIGNvbnRlbnRzIGFzIG5lZWRlZC4gSXQgYWxzbyBzZXRz
IHVwIGNvbW1vbiBHTCBzdGF0ZSB1c2VkIGJ5IHRoZSByZXN0Ci0vLyBvZiB0aGUgbGF5ZXIgZHJh
d2luZyBjb2RlLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVBbmREcmF3Um9vdExheWVyKFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBUaWxl
UGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgbV9yb290TGF5ZXJUaWxlci0+
dXBkYXRlKHRpbGVQYWludCwgdmlzaWJsZVJlY3QpOworICAgIG1fcm9vdExheWVyVGlsZXItPmRy
YXcodmlzaWJsZVJlY3QpOworCisgICAgaWYgKHZpc2libGVSZWN0LndpZHRoKCkgPiBjb250ZW50
UmVjdC53aWR0aCgpKSB7CisgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXIgPSB2ZXJ0
aWNhbFNjcm9sbGJhclJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgSW50
U2l6ZSB0aWxlU2l6ZSA9IHZlcnRpY2FsU2Nyb2xsYmFyLnNpemUoKS5zaHJ1bmtUbyhJbnRTaXpl
KG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgaWYgKCFtX3Zl
cnRpY2FsU2Nyb2xsYmFyVGlsZXIpCisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGls
ZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxlU2l6ZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0VGlsZVNpemUo
dGlsZVNpemUpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9z
aXRpb24odmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXJUaWxlci0+dXBkYXRlKHNjcm9sbGJhclBhaW50LCB2aXNpYmxlUmVjdCk7CisgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7CisgICAgfQor
CisgICAgaWYgKHZpc2libGVSZWN0LmhlaWdodCgpID4gY29udGVudFJlY3QuaGVpZ2h0KCkpIHsK
KyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJh
clJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgSW50U2l6ZSB0aWxlU2l6
ZSA9IGhvcml6b250YWxTY3JvbGxiYXIuc2l6ZSgpLnNocnVua1RvKEludFNpemUobV9tYXhUZXh0
dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkpOworICAgICAgICBpZiAoIW1faG9yaXpvbnRhbFNj
cm9sbGJhclRpbGVyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIgPSBM
YXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxlU2l6ZSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0aWxl
U2l6ZSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBvc2l0
aW9uKGhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhclRpbGVyLT51cGRhdGUoc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVSZWN0KTsKKyAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPmRyYXcodmlzaWJsZVJlY3QpOworICAg
IH0KK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50
UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0
aW9uLCBUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQpCiB7
CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CiAKQEAgLTE4MywxMCArMjE1LDYg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMoY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnMKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKLSAgICAKLSAgICBib29s
IHNraXBTY3JvbGwgPSBmYWxzZTsKLQogICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSB2aXNpYmxl
IGFyZWEgaGFzIGNoYW5nZWQgdGhlbiBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlCiAgICAgLy8gdG8g
c3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIGFuZCBhZGp1c3QgdGhlIHByb2pl
Y3Rpb24gbWF0cml4CiAgICAgLy8gYW5kIHZpZXdwb3J0LgpAQCAtMTk2LDE1ICsyMjQsOSBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29ucwogICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCA9
IHZpc2libGVSZWN0V2lkdGg7CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCA9IHZp
c2libGVSZWN0SGVpZ2h0OwogCi0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dGV4
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoLCBtX3Jvb3RMYXllclRleHR1cmVIZWln
aHQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgMCkpOwotCiAgICAgICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IHJlbmRlciBzdXJm
YWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmlld3BvcnQgYW5kCiAgICAgICAgIC8vIHBy
b2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJTdXJmYWNlIGlzIGNhbGxlZC4KICAg
ICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7Ci0KLSAgICAgICAgLy8gVGhlIHJvb3Qg
bGF5ZXIgdGV4dHVyZSB3YXMganVzdCByZXNpemVkIHNvIGl0cyBjb250ZW50cyBhcmUgbm90Ci0g
ICAgICAgIC8vIHVzZWZ1bCBmb3Igc2Nyb2xsaW5nLgotICAgICAgICBza2lwU2Nyb2xsID0gdHJ1
ZTsKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlz
aWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCkBAIC0yMTcsNzcgKzIzOSwxMCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgY29ucwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCkpOwogICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFKSk7CiAK
LSAgICAvLyBCbGVuZGluZyBkaXNhYmxlZCBieSBkZWZhdWx0LiBSb290IGxheWVyIGFscGhhIGNo
YW5uZWwgb24gV2luZG93cyBpcyBpbmNvcnJlY3Qgd2hlbiBTa2lhIHVzZXMgQ2xlYXJUeXBlLiAK
LSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKSk7IAotCi0gICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gSW50UG9pbnQoLTEsIC0x
KSkgewotICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247Ci0gICAgICAg
IHNraXBTY3JvbGwgPSB0cnVlOwotICAgIH0KLQotICAgIEludFBvaW50IHNjcm9sbERlbHRhID0g
dG9Qb2ludChzY3JvbGxQb3NpdGlvbiAtIG1fc2Nyb2xsUG9zaXRpb24pOwotCi0gICAgLy8gU2Ny
b2xsaW5nIGxhcmdlciB0aGFuIHRoZSBjb250ZW50UmVjdCBzaXplIGRvZXMgbm90IHByZXNlcnZl
IGFueSBvZiB0aGUgcGl4ZWxzLCBzbyB0aGVyZSBpcwotICAgIC8vIG5vIG5lZWQgdG8gY29weSBm
cmFtZWJ1ZmZlciBwaXhlbHMgYmFjayBpbnRvIHRoZSB0ZXh0dXJlLgotICAgIGlmIChhYnMoc2Ny
b2xsRGVsdGEueSgpKSA+IGNvbnRlbnRSZWN0LmhlaWdodCgpIHx8IGFicyhzY3JvbGxEZWx0YS54
KCkpID4gY29udGVudFJlY3Qud2lkdGgoKSkKLSAgICAgICAgc2tpcFNjcm9sbCA9IHRydWU7Ci0K
LSAgICAvLyBTY3JvbGwgdGhlIGJhY2tidWZmZXIKLSAgICBpZiAoIXNraXBTY3JvbGwgJiYgKHNj
cm9sbERlbHRhLngoKSB8fCBzY3JvbGxEZWx0YS55KCkpKSB7Ci0gICAgICAgIC8vIFNjcm9sbGlu
ZyB3b3JrcyBhcyBmb2xsb3dzOiBXZSByZW5kZXIgYSBxdWFkIHdpdGggdGhlIGN1cnJlbnQgcm9v
dCBsYXllciBjb250ZW50cwotICAgICAgICAvLyB0cmFuc2xhdGVkIGJ5IHRoZSBhbW91bnQgdGhl
IHBhZ2UgaGFzIHNjcm9sbGVkIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZSBhbmQgdGhlbiByZWFkIHRo
ZQotICAgICAgICAvLyBwaXhlbHMgb2YgdGhlIGNvbnRlbnQgYXJlYSAodmlzaWJsZSBhcmVhIGV4
Y2x1ZGluZyB0aGUgc2Nyb2xsIGJhcnMpIGJhY2sgaW50byB0aGUKLSAgICAgICAgLy8gcm9vdCBs
YXllciB0ZXh0dXJlLiBUaGUgbmV3bHkgZXhwb3NlZCBhcmVhIHdpbGwgYmUgZmlsbGVkIGJ5IGEg
c3Vic2VxdWVudCBkcmF3TGF5ZXJzSW50b1JlY3QgY2FsbAotICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBzY3JvbGxlZExheWVyTWF0cml4OwotCi0gICAgICAgIHNjcm9sbGVkTGF5ZXJNYXRy
aXgudHJhbnNsYXRlM2QoMC41ICogdmlzaWJsZVJlY3Qud2lkdGgoKSAtIHNjcm9sbERlbHRhLngo
KSwKLSAgICAgICAgICAgIDAuNSAqIHZpc2libGVSZWN0LmhlaWdodCgpICsgc2Nyb2xsRGVsdGEu
eSgpLCAwKTsKLSAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC5zY2FsZTNkKDEsIC0xLCAxKTsK
LQotICAgICAgICB1c2VTaGFkZXIobV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtKTsKLSAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT51bmlmb3JtMWkobV90ZXh0dXJlTGF5ZXJTaGFk
ZXJTYW1wbGVyTG9jYXRpb24sIDApKTsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1
cmVkUXVhZChtX2NvbnRleHQuZ2V0KCksIG1fcHJvamVjdGlvbk1hdHJpeCwgc2Nyb2xsZWRMYXll
ck1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxl
UmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3RleHR1cmVMYXllclNoYWRlck1hdHJpeExvY2F0aW9u
LCBtX3RleHR1cmVMYXllclNoYWRlckFscGhhTG9jYXRpb24pOwotCi0gICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0
LmhlaWdodCgpKSk7Ci0gICAgfQorICAgIC8vIEJsZW5kaW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQu
IFJvb3QgbGF5ZXIgYWxwaGEgY2hhbm5lbCBvbiBXaW5kb3dzIGlzIGluY29ycmVjdCB3aGVuIFNr
aWEgdXNlcyBDbGVhclR5cGUuCisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogCiAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNj
cm9sbFBvc2l0aW9uOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9v
dExheWVyVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKLXsKLSAgICBBU1NF
UlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKLQotICAgIGlmICghbV9yb290TGF5ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7Ci0K
LSAgICAvLyBVcGRhdGUgdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICBBU1NFUlQoKHVwZGF0
ZVJlY3QucmlnaHQoKSAgPD0gbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgpCi0gICAgICAgICAgICYm
ICh1cGRhdGVSZWN0LmJvdHRvbSgpIDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOwotCi0j
aWYgUExBVEZPUk0oU0tJQSkKLSAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVk
IHJlY3QuCi0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5n
ZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKLSAgICBBU1NFUlQoYml0bWFwLndpZHRo
KCkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIGJpdG1hcC5oZWlnaHQoKSA9PSB1cGRhdGVSZWN0
LmhlaWdodCgpKTsKLSAgICB2b2lkKiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7Ci0jZWxp
ZiBQTEFURk9STShDRykKLSAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJl
Y3QuCi0gICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgo
bV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3Rh
dGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRl
eHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICB2b2lkKiBwaXhlbHMgPSBt
X3Jvb3RMYXllckJhY2tpbmdTdG9yZS5kYXRhKCk7Ci0jZWxzZQotI2Vycm9yICJOZWVkIHRvIGlt
cGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCi0jZW5kaWYKLSAgICAvLyBDb3B5IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJl
Y3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKLX0KLQotdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotewotICAgIEFTU0VSVChtX2hhcmR3YXJl
Q29tcG9zaXRpbmcpOwogCiAgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IG1fcm9vdExheWVy
LT5tX3JlbmRlclN1cmZhY2UuZ2V0KCk7CiAgICAgaWYgKCFtX2RlZmF1bHRSZW5kZXJTdXJmYWNl
KQpAQCAtMzAwLDIxICsyNTUsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAxLCAxKTsKICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIAotICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fcm9v
dExheWVyVGV4dHVyZUlkKSk7Ci0KLSAgICAvLyBSZW5kZXIgdGhlIHJvb3QgbGF5ZXIgdXNpbmcg
YSBxdWFkIHRoYXQgdGFrZXMgdXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEgb2YgdGhlIHdpbmRv
dy4KLSAgICAvLyBXZSByZXVzZSB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCBieSBDb250ZW50TGF5
ZXJDaHJvbWl1bS4KLSAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
KiBjb250ZW50TGF5ZXJWYWx1ZXMgPSBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKLSAgICB1
c2VTaGFkZXIoY29udGVudExheWVyVmFsdWVzLT5jb250ZW50U2hhZGVyUHJvZ3JhbSgpKTsKLSAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0xaShjb250ZW50TGF5ZXJWYWx1ZXMt
PnNoYWRlclNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgLy8gTWFzayBvdXQgd3JpdGVzIHRv
IGFscGhhIGNoYW5uZWw6IENsZWFyVHlwZSB2aWEgU2tpYSByZXN1bHRzIGluIGludmFsaWQKLSAg
ICAvLyB6ZXJvIGFscGhhIHZhbHVlcyBvbiB0ZXh0IGdseXBocy4gVGhlIHJvb3QgbGF5ZXIgaXMg
YWx3YXlzIG9wYXF1ZS4KLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVy
TWF0cml4OwotICAgIGxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKHZpc2libGVSZWN0LndpZHRoKCkg
KiAwLjVmLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAqIDAuNWYsIDApOwotICAgIExheWVyQ2hyb21p
dW06OmRyYXdUZXh0dXJlZFF1YWQobV9jb250ZXh0LmdldCgpLCBtX3Byb2plY3Rpb25NYXRyaXgs
IGxheWVyTWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJs
ZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlck1hdHJpeExvY2F0
aW9uKCksIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKKyAgICB1
cGRhdGVBbmREcmF3Um9vdExheWVyKHRpbGVQYWludCwgc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVS
ZWN0LCBjb250ZW50UmVjdCk7CisKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvbG9y
TWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKSk7CiAKICAgICAvLyBTZXQgdGhlIHJvb3Qgdmlz
aWJsZS9jb250ZW50IHJlY3RzIC0tLSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVycyBjYWxs
cy4KQEAgLTgyOSwxOSArNzcxLDYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRp
YWxpemVTaGFyZWRPYmplY3RzKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IC8vIENyZWF0ZSBhIHRleHR1cmUgb2JqZWN0IHRvIGhvbGQgdGhlIGNvbnRlbnRzIG9mIHRoZSBy
b290IGxheWVyLgotICAgIG1fcm9vdExheWVyVGV4dHVyZUlkID0gY3JlYXRlTGF5ZXJUZXh0dXJl
KCk7Ci0gICAgaWYgKCFtX3Jvb3RMYXllclRleHR1cmVJZCkgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgdGV4dHVyZSBmb3Igcm9vdCBsYXllciIpOwotICAgICAgICBjbGVh
bnVwU2hhcmVkT2JqZWN0cygpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8v
IFR1cm4gb2ZmIGZpbHRlcmluZyBmb3IgdGhlIHJvb3QgbGF5ZXIgdG8gYXZvaWQgYmx1cnJpbmcg
ZnJvbSB0aGUgcmVwZWF0ZWQKLSAgICAvLyB3cml0ZXMgYW5kIHJlYWRzIHRvIHRoZSBmcmFtZWJ1
ZmZlciB0aGF0IGhhcHBlbiB3aGlsZSBzY3JvbGxpbmcuCi0gICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9yb290
TGF5ZXJUZXh0dXJlSWQpKTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7Ci0gICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVCkpOwotCiAgICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBzaXpl
IHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgogICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwogICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKSk7CkBAIC04NzksMTEgKzgwOCw2
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAg
ICAgICAgIG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSA9IDA7CiAgICAgfQogCi0gICAgaWYg
KG1fcm9vdExheWVyVGV4dHVyZUlkKSB7Ci0gICAgICAgIGRlbGV0ZUxheWVyVGV4dHVyZShtX3Jv
b3RMYXllclRleHR1cmVJZCk7Ci0gICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUlkID0gMDsKLSAg
ICB9Ci0KICAgICBpZiAobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKQogICAgICAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fb2Zmc2NyZWVuRnJhbWVidWZm
ZXJJZCkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNTMxZDY1MjIyZGVkMzhiNmY4ZTUy
NWU4NWI4ZmEwNGM0MWI1YWVkNC4uMjFiZWJhMmQ5OGViYjg4MzRmYjg0MjRlM2Y5MGU2MWNjN2Vi
MzZlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
Q29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgpAQCAtNjcsMTQgKzY4LDEyIEBAIHB1YmxpYzoK
IAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CiAKLSAgICAvLyB1cGRhdGVzIHNp
emUgb2Ygcm9vdCB0ZXh0dXJlLCBpZiBuZWVkZWQsIGFuZCBzY3JvbGxzIHRoZSBiYWNrYnVmZmVy
LgotICAgIHZvaWQgcHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbik7CisgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCk7CiAKLSAgICAvLyB1cGRhdGVzIGEgcmVjdGFuZ2xlIHdpdGhpbiB0aGUgcm9vdCBs
YXllciB0ZXh0dXJlCi0gICAgdm9pZCB1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0KTsKLQotICAgIC8vIGRyYXdzIHRoZSBjdXJyZW50IGxheWVycyBv
bnRvIHRoZSBiYWNrYnVmZmVyCi0gICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZp
c2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgLy8gdXBkYXRlcyBh
bmQgZHJhd3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lk
IGRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24sIFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LAorICAgICAgICAgICAgICAgICAg
ICBUaWxlUGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50KTsKIAogICAgIC8vIHdhaXRzIGZv
ciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKQEAgLTg4LDggKzg3LDYg
QEAgcHVibGljOgogCiAgICAgYm9vbCBoYXJkd2FyZUNvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1
cm4gbV9oYXJkd2FyZUNvbXBvc2l0aW5nOyB9CiAKLSAgICB2b2lkIHNldFJvb3RMYXllckNhbnZh
c1NpemUoY29uc3QgSW50U2l6ZSYpOwotCiAgICAgR3JhcGhpY3NDb250ZXh0KiByb290TGF5ZXJH
cmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4
dC5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgY3JlYXRlTGF5ZXJUZXh0dXJlKCk7CkBAIC0xMjEs
NiArMTE4LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd0xheWVyKExheWVyQ2hyb21pdW0q
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qKTsKIAorICAgIHZvaWQgdXBkYXRlQW5kRHJhd1Jvb3RM
YXllcihUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBz
Y3JvbGxiYXJQYWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KTsKKwogICAgIGJvb2wgaXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSos
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qp
OwogCiAgICAgdm9pZCBzZXRTY2lzc29yVG9SZWN0KGNvbnN0IEludFJlY3QmKTsKQEAgLTEzNiw3
ICsxMzUsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsK
ICAgICB2b2lkIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAKLSAgICB1bnNpZ25lZCBtX3Jvb3RM
YXllclRleHR1cmVJZDsKKyAgICBzdGF0aWMgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhclJlY3Qo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsK
KyAgICBzdGF0aWMgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0
JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgaW50IG1f
cm9vdExheWVyVGV4dHVyZVdpZHRoOwogICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7
CiAKQEAgLTE1MCw2ICsxNTEsOSBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fcHJvamVjdGlvbk1hdHJpeDsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RM
YXllcjsKKyAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllclRpbGVyOwor
ICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVy
OworICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fdmVydGljYWxTY3JvbGxiYXJUaWxl
cjsKIAogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX2hhcmR3YXJl
Q29tcG9zaXRpbmc7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ2OWM0NTRlMDhjYzU2
NGQwMTQ2ZmY3ZGNmMDM4ODdiYjhkN2VjZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcApAQCAtMCwwICsx
LDQwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorCisjaWYgUExBVEZPUk0oU0tJ
QSkKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRTa2lhLmgiCisjZWxpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dC
aXRtYXBDb250ZXh0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3du
UHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSkK
K3sKKyAgICBpZiAoIWxheWVyUmVuZGVyZXIgfHwgdGlsZVNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVt
KGxheWVyUmVuZGVyZXIsIHRpbGVTaXplKSk7Cit9CisKK0xheWVyVGlsZXJDaHJvbWl1bTo6TGF5
ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUpCisgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJl
cikKK3sKKyAgICBzZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7Cit9CisKK0xheWVyVGlsZXJDaHJvbWl1
bTo6fkxheWVyVGlsZXJDaHJvbWl1bSgpCit7CisgICAgcmVzZXQoKTsKK30KKworR3JhcGhpY3ND
b250ZXh0M0QqIExheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQoKSBjb25z
dAoreworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworICAgIHJldHVybiBsYXllclJlbmRl
cmVyKCktPmNvbnRleHQoKTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldFRpbGVT
aXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fdGlsZVNpemUgPT0gc2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcmVzZXQoKTsKKworICAgIG1fdGlsZVNpemUgPSBzaXpl
OworICAgIG1fdGlsZVBpeGVscy5yZXNpemUobV90aWxlU2l6ZS53aWR0aCgpICogbV90aWxlU2l6
ZS5oZWlnaHQoKSAqIDQpOworfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cmVzZXQoKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoIW1fdGlsZXNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGF5
ZXJSZW5kZXJlcigpLT5kZWxldGVMYXllclRleHR1cmUobV90aWxlc1tpXS0+cmVsZWFzZVRleHR1
cmVJZCgpKTsKKyAgICB9CisgICAgbV90aWxlcy5jbGVhcigpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV91bnVzZWRUaWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIW1fdW51
c2VkVGlsZXNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGF5ZXJSZW5kZXJl
cigpLT5kZWxldGVMYXllclRleHR1cmUobV91bnVzZWRUaWxlc1tpXS0+cmVsZWFzZVRleHR1cmVJ
ZCgpKTsKKyAgICB9CisgICAgbV91bnVzZWRUaWxlcy5jbGVhcigpOworCisgICAgbV9sYXllclNp
emUgPSBJbnRTaXplKCk7CisgICAgbV9sYXllclRpbGVTaXplID0gSW50U2l6ZSgpOworICAgIG1f
bGFzdFVwZGF0ZUdyb3VwID0gSW50UmVjdCgpOworfQorCitMYXllclRpbGVyQ2hyb21pdW06OlRp
bGUqIExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgeCwgaW50IHkpCit7CisgICAg
Y29uc3QgaW50IGluZGV4ID0gdGlsZUluZGV4KHgsIHkpOworICAgIEFTU0VSVCghbV90aWxlc1tp
bmRleF0pOworCisgICAgaWYgKG1fdW51c2VkVGlsZXMuc2l6ZSgpID4gMCkgeworICAgICAgICBt
X3RpbGVzW2luZGV4XSA9IG1fdW51c2VkVGlsZXMubGFzdCgpLnJlbGVhc2UoKTsKKyAgICAgICAg
bV91bnVzZWRUaWxlcy5yZW1vdmVMYXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IHRleHR1cmVJZCA9IGxheWVyUmVuZGVyZXIoKS0+Y3JlYXRlTGF5ZXJUZXh0
dXJlKCk7CisgICAgICAgIE93blB0cjxUaWxlPiB0aWxlID0gYWRvcHRQdHIobmV3IFRpbGUodGV4
dHVyZUlkKSk7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJl
bmRlcmVyQ29udGV4dCgpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2Uy
RChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIG1fdGlsZVNpemUud2lkdGgoKSwgbV90aWxlU2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CisK
KyAgICAgICAgbV90aWxlc1tpbmRleF0gPSB0aWxlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBt
X3RpbGVzW2luZGV4XS0+bV9kaXJ0eUxheWVyUmVjdCA9IHRpbGVMYXllclJlY3QoeCwgeSk7Cisg
ICAgcmV0dXJuIG1fdGlsZXNbaW5kZXhdLmdldCgpOworfQorCit2b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGNvbnNpZGVyR3JvdXAsIGNvbnN0
IEludFJlY3QmIGtlZXBHcm91cCkKK3sKKyAgICBpZiAoIW1fdGlsZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJbnZhbGlkYXRlIGFueSB0aWxlcyB1c2VkIGxhc3QgdGltZSBi
dXQgbm90IHRoaXMgdGltZS4KKyAgICBmb3IgKGludCB5ID0gY29uc2lkZXJHcm91cC55KCk7IHkg
PCBjb25zaWRlckdyb3VwLmJvdHRvbSgpOyArK3kpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IGNv
bnNpZGVyR3JvdXAueCgpOyB4IDwgY29uc2lkZXJHcm91cC5yaWdodCgpOyArK3gpIHsKKyAgICAg
ICAgICAgIGlmIChrZWVwR3JvdXAuY29udGFpbnMoeCwgeSkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIGNvbnN0IGludCBpbmRleCA9IHRpbGVJbmRleCh4LCB5KTsK
KyAgICAgICAgICAgIGlmIChtX3RpbGVzW2luZGV4XSkKKyAgICAgICAgICAgICAgICBtX3VudXNl
ZFRpbGVzLmFwcGVuZChtX3RpbGVzW2luZGV4XS5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAg
fQorfQorCitJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJlY3RUb1RpbGVHcm91
cChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGxheWVy
UmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOworCisgICAgY29uc3Qg
aW50IGxlZnQgPSBsYXllclJlY3QueCgpIC8gbV90aWxlU2l6ZS53aWR0aCgpOworICAgIGNvbnN0
IGludCB0b3AgPSBsYXllclJlY3QueSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBjb25z
dCBpbnQgcmlnaHQgPSAobGF5ZXJSZWN0LnJpZ2h0KCkgLSAxKSAvIG1fdGlsZVNpemUud2lkdGgo
KTsKKyAgICBjb25zdCBpbnQgYm90dG9tID0gKGxheWVyUmVjdC5ib3R0b20oKSAtIDEpIC8gbV90
aWxlU2l6ZS5oZWlnaHQoKTsKKworICAgIEludFJlY3QgdGlsZUdyb3VwKGxlZnQsIHRvcCwgcmln
aHQgLSBsZWZ0ICsgMSwgYm90dG9tIC0gdG9wICsgMSk7CisgICAgcmV0dXJuIHRpbGVHcm91cDsK
K30KKworSW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3Qo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9zKGNv
bnRlbnRSZWN0LngoKSAtIG1fbGF5ZXJQb3NpdGlvbi54KCksIGNvbnRlbnRSZWN0LnkoKSAtIG1f
bGF5ZXJQb3NpdGlvbi55KCkpOworICAgIEludFJlY3QgbGF5ZXJSZWN0KHBvcywgY29udGVudFJl
Y3Quc2l6ZSgpKTsKKworICAgIC8vIENsaXAgdG8gdGhlIHBvc2l0aW9uLgorICAgIGlmIChwb3Mu
eCgpIDwgMCB8fCBwb3MueSgpIDwgMCkKKyAgICAgICAgbGF5ZXJSZWN0ID0gSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgSW50U2l6ZShjb250ZW50UmVjdC53aWR0aCgpICsgcG9zLngoKSwgY29udGVu
dFJlY3QuaGVpZ2h0KCkgKyBwb3MueSgpKSk7CisgICAgcmV0dXJuIGxheWVyUmVjdDsKK30KKwor
SW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OmxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgY29udGVudFJlY3QgPSBs
YXllclJlY3Q7CisgICAgY29udGVudFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xh
eWVyUG9zaXRpb24ueSgpKTsKKyAgICByZXR1cm4gY29udGVudFJlY3Q7Cit9CisKK2ludCBMYXll
clRpbGVyQ2hyb21pdW06OnRpbGVJbmRleChpbnQgeCwgaW50IHkpCit7CisgICAgQVNTRVJUKHgg
Pj0gMCAmJiB5ID49IDAgJiYgeCA8IG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpICYmIHkgPCBtX2xh
eWVyVGlsZVNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiB4ICsgeSAqIG1fbGF5ZXJUaWxlU2l6
ZS53aWR0aCgpOworfQorCitJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRS
ZWN0KGludCB4LCBpbnQgeSkKK3sKKyAgICBJbnRQb2ludCBhbmNob3IobV9sYXllclBvc2l0aW9u
LngoKSArIHggKiBtX3RpbGVTaXplLndpZHRoKCksIG1fbGF5ZXJQb3NpdGlvbi55KCkgKyB5ICog
bV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgSW50UmVjdCB0aWxlKGFuY2hvciwgbV90aWxlU2l6
ZSk7CisgICAgcmV0dXJuIHRpbGU7Cit9CisKK0ludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjp0
aWxlTGF5ZXJSZWN0KGludCB4LCBpbnQgeSkKK3sKKyAgICBJbnRQb2ludCBhbmNob3IoeCAqIG1f
dGlsZVNpemUud2lkdGgoKSwgeSAqIG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgIEludFJlY3Qg
dGlsZShhbmNob3IsIG1fdGlsZVNpemUpOworICAgIHJldHVybiB0aWxlOworfQorCit2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlDb250
ZW50UmVjdCkKK3sKKyAgICBpZiAoZGlydHlDb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdyb3dMYXllclRvQ29udGFpbihkaXJ0eUNvbnRlbnRSZWN0KTsKKwor
ICAgIC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4gbGF5ZXIgc3BhY2UsIGFzIHRoZSBsYXll
ciBjb3VsZCBiZSByZXBvc2l0aW9uZWQKKyAgICAvLyBhZnRlciBpbnZhbGlkYXRpb24uCisgICAg
SW50UmVjdCBkaXJ0eUxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoZGlydHlDb250
ZW50UmVjdCk7CisKKyAgICBJbnRSZWN0IHRpbGVHcm91cCA9IGNvbnRlbnRSZWN0VG9UaWxlR3Jv
dXAoZGlydHlDb250ZW50UmVjdCk7CisgICAgZm9yIChpbnQgeSA9IHRpbGVHcm91cC55KCk7IHkg
PCB0aWxlR3JvdXAuYm90dG9tKCk7ICsreSkgeworICAgICAgICBmb3IgKGludCB4ID0gdGlsZUdy
b3VwLngoKTsgeCA8IHRpbGVHcm91cC5yaWdodCgpOyArK3gpIHsKKyAgICAgICAgICAgIFRpbGUq
IHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleCh4LCB5KV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IXRpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBJbnRSZWN0IGJv
dW5kID0gdGlsZUxheWVyUmVjdCh4LCB5KTsKKyAgICAgICAgICAgIGJvdW5kLmludGVyc2VjdChk
aXJ0eUxheWVyUmVjdCk7CisgICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0LnVuaXRl
KGJvdW5kKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06
OnVwZGF0ZShUaWxlUGFpbnRJbnRlcmZhY2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KQoreworICAgIC8vIEludmFsaWRhdGUgb2xkIHRpbGVzIHRoYXQgd2VyZSBwcmV2aW91
c2x5IHVzZWQgYnV0IGFyZW4ndCBpbiB1c2UgdGhpcworICAgIC8vIGZyYW1lIHNvIHRoYXQgdGhl
eSBjYW4gZ2V0IHJldXNlZCBmb3IgbmV3IHRpbGVzLgorICAgIEludFJlY3QgdGlsZUdyb3VwID0g
Y29udGVudFJlY3RUb1RpbGVHcm91cChjb250ZW50UmVjdCk7CisgICAgaW52YWxpZGF0ZVRpbGVz
KG1fbGFzdFVwZGF0ZUdyb3VwLCB0aWxlR3JvdXApOworICAgIG1fbGFzdFVwZGF0ZUdyb3VwID0g
dGlsZUdyb3VwOworCisgICAgZ3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKKworICAg
IC8vIENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29u
dGFpbiBhbGwKKyAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24u
CisgICAgSW50UmVjdCBkaXJ0eUxheWVyUmVjdDsKKyAgICBmb3IgKGludCB5ID0gdGlsZUdyb3Vw
LnkoKTsgeSA8IHRpbGVHcm91cC5ib3R0b20oKTsgKyt5KSB7CisgICAgICAgIGZvciAoaW50IHgg
PSB0aWxlR3JvdXAueCgpOyB4IDwgdGlsZUdyb3VwLnJpZ2h0KCk7ICsreCkgeworICAgICAgICAg
ICAgVGlsZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KHgsIHkpXS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZSh4LCB5KTsK
KyAgICAgICAgICAgIGRpcnR5TGF5ZXJSZWN0LnVuaXRlKHRpbGUtPm1fZGlydHlMYXllclJlY3Qp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgSW50UmVjdCBwYWludFJlY3QgPSBsYXllclJl
Y3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAg
ICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IGNhbnZhcyhuZXcgc2tpYTo6UGxhdGZvcm1D
YW52YXMocGFpbnRSZWN0LndpZHRoKCksIHBhaW50UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKKyAg
ICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gc2tpYUNvbnRleHQobmV3IFBsYXRmb3JtQ29u
dGV4dFNraWEoY2FudmFzLmdldCgpKSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0KG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCo+KHNraWFDb250ZXh0LmdldCgpKSkpOworCisgICAgLy8gQnJpbmcg
dGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4K
KyAgICBjYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50UmVjdC54
KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50UmVjdC55KCkpKTsKKworICAgIHBhaW50
ZXIucGFpbnQoKmdyYXBoaWNzQ29udGV4dCwgcGFpbnRSZWN0KTsKKworICAgIC8vIEdldCB0aGUg
Y29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFw
ID0gY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBBU1NFUlQo
Yml0bWFwLndpZHRoKCkgPT0gcGFpbnRSZWN0LndpZHRoKCkgJiYgYml0bWFwLmhlaWdodCgpID09
IHBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgdWludDhfdCogcGFpbnRQaXhlbHMgPSBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oYml0bWFwLmdldFBpeGVscygpKTsKKyNlbGlmIFBMQVRGT1JNKENHKQor
ICAgIFZlY3Rvcjx1aW50OF90PiBjYW52YXNQaXhlbHM7CisgICAgaW50IHJvd0J5dGVzID0gNCAq
IHBhaW50UmVjdC53aWR0aCgpOworICAgIGNhbnZhc1BpeGVscy5yZXNpemUocm93Qnl0ZXMgKiBw
YWludFJlY3QuaGVpZ2h0KCkpOworICAgIG1lbXNldChjYW52YXNQaXhlbHMuZGF0YSgpLCAwLCBj
YW52YXNQaXhlbHMuc2l6ZSgpKTsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xv
clNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICBSZXRh
aW5QdHI8Q0dDb250ZXh0UmVmPiBtX2NnQ29udGV4dDsKKyAgICBtX2NnQ29udGV4dC5hZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZShjYW52YXNQaXhlbHMuZGF0YSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50UmVjdC53aWR0
aCgpLCBwYWludFJlY3QuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KG1fY2dDb250ZXh0LmdldCgpLCAwLCBwYWludFJlY3QuaGVpZ2h0KCkpOworICAgIENHQ29udGV4
dFNjYWxlQ1RNKG1fY2dDb250ZXh0LmdldCgpLCAxLCAtMSk7CisgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gbV9ncmFwaGljc0NvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4dChtX2NnQ29udGV4
dC5nZXQoKSkpOworCisgICAgLy8gQnJpbmcgdGhlIENvcmVHcmFwaGljcyBjb250ZXh0IGludG8g
dGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgorICAgIENHQ29udGV4dFRy
YW5zbGF0ZUNUTShtX2NnQ29udGV4dC5nZXQoKSwgLXBhaW50UmVjdC54KCksIC1wYWludFJlY3Qu
eSgpKTsKKyAgICBwYWludGVyLnBhaW50KCptX2dyYXBoaWNzQ29udGV4dCwgcGFpbnRSZWN0KTsK
KworICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRXaWR0aChtX2NnQ29udGV4dC5n
ZXQoKSkpID09IHBhaW50UmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBD
b250ZXh0R2V0SGVpZ2h0KG1fY2dDb250ZXh0LmdldCgpKSkgPT0gcGFpbnRSZWN0LmhlaWdodCgp
KTsKKyAgICB1aW50OF90KiBwYWludFBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjYW52
YXNQaXhlbHMuZGF0YSgpKTsKKyNlbHNlCisjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5
b3VyIHBsYXRmb3JtLiIKKyNlbmRpZgorCisgICAgZm9yIChpbnQgeSA9IHRpbGVHcm91cC55KCk7
IHkgPCB0aWxlR3JvdXAuYm90dG9tKCk7ICsreSkgeworICAgICAgICBmb3IgKGludCB4ID0gdGls
ZUdyb3VwLngoKTsgeCA8IHRpbGVHcm91cC5yaWdodCgpOyArK3gpIHsKKyAgICAgICAgICAgIFRp
bGUqIHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleCh4LCB5KV0uZ2V0KCk7CisgICAgICAgICAgICBp
ZiAoIXRpbGUtPmRpcnR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCisgICAg
ICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxlQ29udGVudFJlY3QoeCwgeSk7CisgICAg
ICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Cisg
ICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChsYXllclJlY3RUb0NvbnRlbnRSZWN0KHRp
bGUtPm1fZGlydHlMYXllclJlY3QpKTsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRpbGUt
c3BhY2UgcmVjdGFuZ2xlIHRvIHVwbG9hZCBpbnRvLgorICAgICAgICAgICAgSW50UmVjdCBkZXN0
UmVjdChJbnRQb2ludChzb3VyY2VSZWN0LngoKSAtIGFuY2hvci54KCksIHNvdXJjZVJlY3QueSgp
IC0gYW5jaG9yLnkoKSksIHNvdXJjZVJlY3Quc2l6ZSgpKTsKKworICAgICAgICAgICAgLy8gT2Zm
c2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4K
KyAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gcGFpbnRS
ZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBwYWludFJlY3QueSgpKTsKKworICAgICAgICAgICAg
dWludDhfdCogcGl4ZWxTb3VyY2U7CisgICAgICAgICAgICBpZiAocGFpbnRSZWN0LndpZHRoKCkg
PT0gc291cmNlUmVjdC53aWR0aCgpICYmICFwYWludE9mZnNldC54KCkpCisgICAgICAgICAgICAg
ICAgcGl4ZWxTb3VyY2UgPSAmcGFpbnRQaXhlbHNbNCAqIHBhaW50T2Zmc2V0LnkoKSAqIHBhaW50
UmVjdC53aWR0aCgpXTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFN0
cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJvdy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCisgICAg
ICAgICAgICAgICAgLy8gcGFpbnQgcmVzdWx0cyBpbnRvIGEgdGVtcCBidWZmZXIgZm9yIHVwbG9h
ZGluZy4KKyAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkZXN0UmVjdC5o
ZWlnaHQoKTsgKytyb3cpCisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmbV90aWxlUGl4ZWxz
W2Rlc3RSZWN0LndpZHRoKCkgKiA0ICogcm93XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZwYWludFBpeGVsc1s0ICogKHBhaW50T2Zmc2V0LngoKSArIChwYWludE9mZnNldC55KCkgKyBy
b3cpICogcGFpbnRSZWN0LndpZHRoKCkpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSZWN0LndpZHRoKCkgKiA0KTsKKworICAgICAgICAgICAgICAgIHBpeGVsU291cmNlID0gJm1f
dGlsZVBpeGVsc1swXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0aWxl
LT50ZXh0dXJlSWQoKSkpOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1
YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0LngoKSwg
ZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhl
bFNvdXJjZSkpOworCisgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpzZXRMYXllclBvc2l0aW9uKGNv
bnN0IEludFBvaW50JiBsYXllclBvc2l0aW9uKQoreworICAgIG1fbGF5ZXJQb3NpdGlvbiA9IGxh
eWVyUG9zaXRpb247Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIC8vIFJlbmRlciB0aGUgcm9vdCBsYXllciB1c2lu
ZyBhIHF1YWQgdGhhdCB0YWtlcyB1cCB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBvZiB0aGUgd2lu
ZG93LgorICAgIC8vIFdlIHJldXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENvbnRlbnRM
YXllckNocm9taXVtLgorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5k
ZXJlckNvbnRleHQoKTsKKyAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzKiBjb250ZW50TGF5ZXJWYWx1ZXMgPSBsYXllclJlbmRlcmVyKCktPmNvbnRlbnRMYXllclNo
YXJlZFZhbHVlcygpOworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKGNvbnRlbnRMYXll
clZhbHVlcy0+Y29udGVudFNoYWRlclByb2dyYW0oKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnVuaWZvcm0xaShjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlclNhbXBsZXJMb2NhdGlvbigp
LCAwKSk7CisgICAgLy8gTWFzayBvdXQgd3JpdGVzIHRvIGFscGhhIGNoYW5uZWw6IENsZWFyVHlw
ZSB2aWEgU2tpYSByZXN1bHRzIGluIGludmFsaWQKKyAgICAvLyB6ZXJvIGFscGhhIHZhbHVlcyBv
biB0ZXh0IGdseXBocy4gVGhlIHJvb3QgbGF5ZXIgaXMgYWx3YXlzIG9wYXF1ZS4KKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKSk7CisK
KyAgICBJbnRSZWN0IHRpbGVHcm91cCA9IGNvbnRlbnRSZWN0VG9UaWxlR3JvdXAoY29udGVudFJl
Y3QpOworICAgIGZvciAoaW50IHkgPSB0aWxlR3JvdXAueSgpOyB5IDwgdGlsZUdyb3VwLmJvdHRv
bSgpOyArK3kpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHRpbGVHcm91cC54KCk7IHggPCB0aWxl
R3JvdXAucmlnaHQoKTsgKyt4KSB7CisgICAgICAgICAgICBUaWxlKiB0aWxlID0gbV90aWxlc1t0
aWxlSW5kZXgoeCwgeSldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKHRpbGUpOworCisgICAg
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHRpbGUtPnRleHR1cmVJZCgpKSk7CisKKyAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRpbGVNYXRyaXg7CisgICAgICAgICAgICBJbnRQb2ludCBhbmNob3Io
bV9sYXllclBvc2l0aW9uLngoKSArIHggKiBtX3RpbGVTaXplLndpZHRoKCksIG1fbGF5ZXJQb3Np
dGlvbi55KCkgKyB5ICogbV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICB0aWxlTWF0
cml4LnRyYW5zbGF0ZTNkKGFuY2hvci54KCkgLSBjb250ZW50UmVjdC54KCkgKyBtX3RpbGVTaXpl
LndpZHRoKCkgLyAyLjAsIGFuY2hvci55KCkgLSBjb250ZW50UmVjdC55KCkgKyBtX3RpbGVTaXpl
LmhlaWdodCgpIC8gMi4wLCAwKTsKKworICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1Rl
eHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwg
dGlsZU1hdHJpeCwgbV90aWxlU2l6ZS53aWR0aCgpLCBtX3RpbGVTaXplLmhlaWdodCgpLCAxLCBj
b250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIGNvbnRlbnRMYXllclZh
bHVlcy0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBMYXllclRpbGVyQ2hyb21pdW06OnJlc2l6ZUxheWVyKGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgaWYgKG1fbGF5ZXJTaXplID09IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGlu
dCB3aWR0aCA9IChzaXplLndpZHRoKCkgKyBtX3RpbGVTaXplLndpZHRoKCkgLSAxKSAvIG1fdGls
ZVNpemUud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gKHNpemUuaGVpZ2h0KCkgKyBtX3RpbGVT
aXplLmhlaWdodCgpIC0gMSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworCisgICAgVmVjdG9yPE93
blB0cjxUaWxlPiA+IG5ld1RpbGVzOworICAgIG5ld1RpbGVzLnJlc2l6ZSh3aWR0aCAqIGhlaWdo
dCk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xheWVyVGlsZVNpemUuaGVpZ2h0KCk7ICsr
eSkKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xheWVyVGlsZVNpemUud2lkdGgoKTsg
Kyt4KQorICAgICAgICAgICAgbmV3VGlsZXNbeCArIHkgKiB3aWR0aF0uc3dhcChtX3RpbGVzW3gg
KyB5ICogbV9sYXllclRpbGVTaXplLndpZHRoKCldKTsKKworICAgIG1fdGlsZXMuc3dhcChuZXdU
aWxlcyk7CisgICAgbV9sYXllclNpemUgPSBzaXplOworICAgIG1fbGF5ZXJUaWxlU2l6ZSA9IElu
dFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpncm93
TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgLy8gR3Jv
dyB0aGUgdGlsZSBhcnJheSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0LgorICAgIEludFJl
Y3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7CisgICAg
SW50UmVjdCBsYXllcihJbnRQb2ludCgwLCAwKSwgbV9sYXllclNpemUpOworICAgIGxheWVyLnVu
aXRlKGxheWVyUmVjdCk7CisgICAgcmVzaXplTGF5ZXIobGF5ZXIuc2l6ZSgpKTsKK30KKworTGF5
ZXJUaWxlckNocm9taXVtOjpUaWxlOjp+VGlsZSgpCit7CisgICAgLy8gRWFjaCB0aWxlIGRvZXNu
J3QgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgY29udGV4dCwgc28gY2FuJ3QgY2xlYW4gdXAKKyAg
ICAvLyBpdHMgb3duIHRleHR1cmUuICBJZiB0aGlzIGFzc2VydCBpcyBoaXQsIHRoZW4gdGhlIExh
eWVyVGlsZXJDaHJvbWl1bQorICAgIC8vIGRlc3RydWN0b3IgZGlkbid0IGNsZWFuIHRoaXMgdXAu
CisgICAgQVNTRVJUKCFtX3RleHR1cmVJZCk7Cit9CisKK3Vuc2lnbmVkIGludCBMYXllclRpbGVy
Q2hyb21pdW06OlRpbGU6OnJlbGVhc2VUZXh0dXJlSWQoKQoreworICAgIHVuc2lnbmVkIGludCBp
ZCA9IG1fdGV4dHVyZUlkOworICAgIG1fdGV4dHVyZUlkID0gMDsKKyAgICByZXR1cm4gaWQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUaWxlckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjZjFmNGIyMjFiYTQ0M2VkZTVi
YWMyMmI2NjJkZjA0NTQwYWUzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsMTE3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworCisjaWZuZGVmIExheWVyVGlsZXJDaHJvbWl1bV9oCisjZGVmaW5lIExheWVyVGls
ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CisKK2NsYXNzIFRp
bGVQYWludEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpID0gMDsKK307
CisKK2NsYXNzIExheWVyVGlsZXJDaHJvbWl1bSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBjcmVhdGUoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSk7CisKKyAgICB+TGF5ZXJUaWxlckNocm9taXVtKCk7CisKKyAgICB2b2lkIGludmFsaWRhdGVS
ZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICB2b2lkIHVwZGF0ZShUaWxlUGFp
bnRJbnRlcmZhY2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICB2
b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCisgICAgLy8gU2V0IHBvc2l0
aW9uIG9mIHRoaXMgdGlsZWQgbGF5ZXIgaW4gY29udGVudCBzcGFjZS4KKyAgICB2b2lkIHNldExh
eWVyUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKTsKKyAgICAvLyBDaGFuZ2UgdGhl
IHRpbGUgc2l6ZS4gIFRoaXMgbWF5IGludmFsaWRhdGUgYWxsIHRoZSBleGlzdGluZyB0aWxlcy4K
KyAgICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpOworICAgIC8vIEludmFs
aWRhdGUgYWxsIHRpbGVzLgorICAgIHZvaWQgcmVzZXQoKTsKKworcHJpdmF0ZToKKyAgICBMYXll
clRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25z
dCBJbnRTaXplJiB0aWxlU2l6ZSk7CisKKyAgICBjbGFzcyBUaWxlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFRpbGUodW5zaWduZWQgaW50IHRleHR1cmVJZCkgOiBtX3RleHR1cmVJZCh0ZXh0dXJl
SWQpIHsgfQorICAgICAgICB+VGlsZSgpOworCisgICAgICAgIHVuc2lnbmVkIGludCB0ZXh0dXJl
SWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorICAgICAgICB1bnNpZ25lZCBpbnQg
cmVsZWFzZVRleHR1cmVJZCgpOworCisgICAgICAgIGJvb2wgZGlydHkoKSBjb25zdCB7IHJldHVy
biAhbV9kaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCk7IH0KKyAgICAgICAgdm9pZCBjbGVhckRpcnR5
KCkgeyBtX2RpcnR5TGF5ZXJSZWN0ID0gSW50UmVjdCgpOyB9CisKKyAgICAgICAgLy8gTGF5ZXIt
c3BhY2UgZGlydHkgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLgorICAgICAg
ICBJbnRSZWN0IG1fZGlydHlMYXllclJlY3Q7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWdu
ZWQgaW50IG1fdGV4dHVyZUlkOworICAgIH07CisKKyAgICB2b2lkIHJlc2l6ZUxheWVyKGNvbnN0
IEludFNpemUmIHNpemUpOworICAgIC8vIEdyb3cgbGF5ZXIgc2l6ZSB0byBjb250YWluIHRoaXMg
cmVjdGFuZ2xlLgorICAgIHZvaWQgZ3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KTsKKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlcjsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBsYXllclJlbmRlcmVyQ29udGV4dCgpIGNvbnN0OworICAgIFRpbGUqIGNyZWF0ZVRpbGUoaW50
IHgsIGludCB5KTsKKyAgICB2b2lkIGludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBjb25z
aWRlckdyb3VwLCBjb25zdCBJbnRSZWN0JiBrZWVwR3JvdXApOworICAgIEludFJlY3QgY29udGVu
dFJlY3RUb1RpbGVHcm91cChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAg
SW50UmVjdCBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KSBjb25zdDsKKyAgICBJbnRSZWN0IGxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVj
dCYgbGF5ZXJSZWN0KSBjb25zdDsKKyAgICBpbnQgdGlsZUluZGV4KGludCB4LCBpbnQgeSk7Cisg
ICAgSW50UmVjdCB0aWxlQ29udGVudFJlY3QoaW50IHgsIGludCB5KTsKKyAgICBJbnRSZWN0IHRp
bGVMYXllclJlY3QoaW50IHgsIGludCB5KTsKKworICAgIEludFNpemUgbV90aWxlU2l6ZTsKKyAg
ICBJbnRTaXplIG1fbGF5ZXJTaXplOworICAgIEludFNpemUgbV9sYXllclRpbGVTaXplOworICAg
IEludFJlY3QgbV9sYXN0VXBkYXRlR3JvdXA7CisgICAgSW50UG9pbnQgbV9sYXllclBvc2l0aW9u
OworCisgICAgLy8gTG9naWNhbCAyRCBhcnJheSBvZiB0aWxlcyAoZGltZW5zaW9ucyBvZiBtX2xh
eWVyVGlsZVNpemUpCisgICAgVmVjdG9yPE93blB0cjxUaWxlPiA+IG1fdGlsZXM7CisgICAgLy8g
TGluZWFyIGFycmF5IG9mIHVudXNlZCB0aWxlcy4KKyAgICBWZWN0b3I8T3duUHRyPFRpbGU+ID4g
bV91bnVzZWRUaWxlczsKKworICAgIC8vIENhY2hlIGEgdGlsZS1zaXplZCBwaXhlbCBidWZmZXIg
dG8gZHJhdyBpbnRvLgorICAgIFZlY3Rvcjx1aW50OF90PiBtX3RpbGVQaXhlbHM7CisKKyAgICBM
YXllclJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKK307CisKK30KKworI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBjOTNjMjYyMWM5NzMwNzMxN2YyYTNmYTAyNTA1MGIwNGYyNzE3OTUyLi5hOGU0NDZhMDQ5ZmFi
ZTAwZGEzYWFmZmMwN2ZiYTFiNDAyMzg3NGY0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBA
QAorMjAxMC0xMi0wMiAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHJvb3Qg
bGF5ZXIgbG9naWMgb3V0IG9mIFdlYlZpZXdJbXBsIGFuZCBpbnRvCisgICAgICAgIExheWVyVGls
ZXJDaHJvbWl1bS4gIFRoZSBwYWludGluZyBpcyBub3cgZG9uZSB0aHJvdWdoIGFuIGludGVyZmFj
ZQorICAgICAgICByYXRoZXIgdGhhbiBkaXJlY3RseSBpbiBXZWJWaWV3SW1wbC4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5NDcKKworICAgICAg
ICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
Y3JvbGxSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmludmFs
aWRhdGVSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsVGlsZVBhaW50SW50ZXJmYWNlOjpXZWJWaWV3SW1wbFRpbGVQYWludEludGVyZmFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlOjpwYWludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRJbnRlcmZhY2U6OldlYlZp
ZXdJbXBsU2Nyb2xsYmFyUGFpbnRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNlOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisK
IDIwMTAtMTEtMjkgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAppbmRleCA3YmVjMjU0MDhkNzVjMzEwOWViN2Y4ZjU2YTBkODIwMGNmZDhlOThhLi43ZTk0ZDdm
MzEzYjdkMTNlNjE4MzE5YjkyMDNiNjAyODc0ZWE3ODRhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcApAQCAtMjI5Miw4MyArMjI5MiwyNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRS
b290TGF5ZXJOZWVkc0Rpc3BsYXkoKQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5
ZXJSZWN0KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKIHsKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICAvLyBDb21wdXRlIHRoZSBk
YW1hZ2UgcmVjdCBpbiB2aWV3cG9ydCBzcGFjZS4KLSAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1l
ID0gbWFpbkZyYW1lSW1wbCgpOwotICAgIGlmICghd2ViZnJhbWUpCi0gICAgICAgIHJldHVybjsK
LSAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7Ci0gICAgaWYgKCF2
aWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKLSAgICBJbnRSZWN0IHNjcmVlblJlY3QgPSB2aWV3
LT5jb250ZW50c1RvV2luZG93KGNvbnRlbnRSZWN0KTsKLQotICAgIC8vIFdlIHN1cHBvcnQgZmFz
dCBzY3JvbGxpbmcgaW4gb25lIGRpcmVjdGlvbiBhdCBhIHRpbWUuCi0gICAgaWYgKHNjcm9sbERl
bHRhLndpZHRoKCkgJiYgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpIHsKLSAgICAgICAgaW52YWxpZGF0
ZVJvb3RMYXllclJlY3QoV2ViUmVjdChzY3JlZW5SZWN0KSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBDb21wdXRlIHRoZSByZWdpb24gd2Ugd2lsbCBleHBvc2UgYnkgc2Nyb2xs
aW5nLiBXZSB1c2UgdGhlCi0gICAgLy8gY29udGVudCByZWN0IGZvciBpbnZhbGlkYXRpb24uICBV
c2luZyB0aGlzIHNwYWNlIGZvciBkYW1hZ2UKLSAgICAvLyByZWN0cyBhbGxvd3MgdXMgdG8gaW50
ZXJtaXggaW52YWxpZGF0ZXMgd2l0aCBzY3JvbGxzLgotICAgIEludFJlY3QgZGFtYWdlZENvbnRl
bnRzUmVjdDsKLSAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSkgewotICAgICAgICBpbnQgZHgg
PSBzY3JvbGxEZWx0YS53aWR0aCgpOwotICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFko
c2NyZWVuUmVjdC55KCkpOwotICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdodChz
Y3JlZW5SZWN0LmhlaWdodCgpKTsKLSAgICAgICAgaWYgKGR4ID4gMCkgewotICAgICAgICAgICAg
ZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRYKHNjcmVlblJlY3QueCgpKTsKLSAgICAgICAgICAgIGRh
bWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoZHgpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRYKHNjcmVlblJlY3QucmlnaHQoKSArIGR4KTsK
LSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoLWR4KTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLmhlaWdodCgpOwot
ICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFgoc2NyZWVuUmVjdC54KCkpOwotICAgICAg
ICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFdpZHRoKHNjcmVlblJlY3Qud2lkdGgoKSk7Ci0gICAg
ICAgIGlmIChkeSA+IDApIHsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WShz
Y3JlZW5SZWN0LnkoKSk7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdo
dChkeSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0
LnNldFkoc2NyZWVuUmVjdC5ib3R0b20oKSArIGR5KTsKLSAgICAgICAgICAgIGRhbWFnZWRDb250
ZW50c1JlY3Quc2V0SGVpZ2h0KC1keSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBNb3Zl
IHRoZSBwcmV2aW91cyBkYW1hZ2UKLSAgICBtX3Jvb3RMYXllclNjcm9sbERhbWFnZS5tb3ZlKHNj
cm9sbERlbHRhLndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgpKTsKLSAgICAvLyBVbmlvbiB3
aXRoIHRoZSBuZXcgZGFtYWdlIHJlY3QuCi0gICAgbV9yb290TGF5ZXJTY3JvbGxEYW1hZ2UudW5p
dGUoZGFtYWdlZENvbnRlbnRzUmVjdCk7Ci0KLSAgICAvLyBTY3JvbGwgYW55IGV4aXN0aW5nIGRh
bWFnZSB0aGF0IGludGVyc2VjdHMgd2l0aCBjbGlwIHJlY3QKLSAgICBpZiAoY2xpcFJlY3QuaW50
ZXJzZWN0cyhtX3Jvb3RMYXllckRpcnR5UmVjdCkpIHsKLSAgICAgICAgLy8gRmluZCB0aGUgaW5u
ZXIgZGFtYWdlCi0gICAgICAgIEludFJlY3QgaW5uZXJEYW1hZ2UoY2xpcFJlY3QpOwotICAgICAg
ICBpbm5lckRhbWFnZS5pbnRlcnNlY3QobV9yb290TGF5ZXJEaXJ0eVJlY3QpOwotCi0gICAgICAg
IC8vIE1vdmUgdGhlIGRhbWFnZQotICAgICAgICBpbm5lckRhbWFnZS5tb3ZlKHNjcm9sbERlbHRh
LndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgpKTsKLQotICAgICAgICAvLyBNZXJnZSBpdCBi
YWNrIGludG8gdGhlIGRhbWFnZWQgcmVjdAotICAgICAgICBtX3Jvb3RMYXllckRpcnR5UmVjdC51
bml0ZShpbm5lckRhbWFnZSk7Ci0gICAgfQotCisgICAgLy8gRklYTUU6IFRvIGF2b2lkIGJyZWFr
aW5nIHRoZSBDaHJvbWUgcmVuZGVyX3dpZGdldCB3aGVuIHRoZSBuZXcgY29tcG9zaXRvciByZW5k
ZXIKKyAgICAvLyBwYXRoIGlzIG5vdCBjaGVja2VkIGluLCB3ZSBtdXN0IHN0aWxsIHBhc3Mgc2Ny
b2xsIGRhbWFnZSB1cCB0byB0aGUgY2xpZW50LiBUaGlzCisgICAgLy8gY29kZSB3aWxsIGJlIGJh
Y2tlZCBvdXQgaW4gYSBmb2xsb3d1cCBDTCBvbmNlIHRoZSBDaHJvbWl1bSBjaGFuZ2VzIGhhdmUg
bGFuZGVkLgorICAgIG1fY2xpZW50LT5kaWRTY3JvbGxSZWN0KHNjcm9sbERlbHRhLndpZHRoKCks
IHNjcm9sbERlbHRhLmhlaWdodCgpLCBjbGlwUmVjdCk7CiAgICAgc2V0Um9vdExheWVyTmVlZHNE
aXNwbGF5KCk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7Ci0K
ICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IGFkZCBh
IHNtYXJ0ZXIgZGFtYWdlIGFnZ3JlZ2F0aW9uIGxvZ2ljIGFuZC9vciB1bmlmeSB3aXRoCi0gICAg
Ly8gTGF5ZXJDaHJvbWl1bSdzIGRhbWFnZSBsb2dpYwotICAgIG1fcm9vdExheWVyRGlydHlSZWN0
LnVuaXRlKHJlY3QpOworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnZpZXcoKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KGZhbHNlKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KHRydWUpOworCisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB2aWV3LT53aW5kb3dUb0Nv
bnRlbnRzKHJlY3QpOworICAgIEludFJlY3QgZGlydHlSZWN0MihJbnRQb2ludChyZWN0LngoKSAr
IHZpZXctPnNjcm9sbFgoKSwgcmVjdC55KCkgKyB2aWV3LT5zY3JvbGxZKCkpLCByZWN0LnNpemUo
KSk7CisgICAgQVNTRVJUKGRpcnR5UmVjdCA9PSBkaXJ0eVJlY3QyKTsKKyAgICBtX2xheWVyUmVu
ZGVyZXItPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRpcnR5UmVjdCwgdmlzaWJsZVJlY3QsIGNv
bnRlbnRSZWN0KTsKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIApAQCAtMjM4
MCw2ICsyMzI0LDkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSA9PSBhY3RpdmUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChwYWdlKCkpCisg
ICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0Q2xpcHNSZXBhaW50cyghYWN0
aXZlKTsKKwogICAgIGlmICghYWN0aXZlKSB7CiAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCkBAIC0y
NDA0LDYgKzIzNTEsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBlKHN0
ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKICAg
ICB9CiAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
Y29udGV4dC5yZWxlYXNlKCkpOworCiAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgewogICAgICAg
ICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAg
ICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7CkBAIC0yNDE1LDU5
ICsyMzYzLDQ5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnVwZGF0
ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFpc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
RnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKLSAgICBpZiAoIXdlYmZyYW1l
KQotICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1l
VmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5ZXJDaHJv
bWl1bSogcm9vdExheWVyID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKTsKLSAgICBpZiAo
cm9vdExheWVyKSB7Ci0gICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxl
Q29udGVudFJlY3QodHJ1ZSk7Ci0KLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRSb290TGF5
ZXJDYW52YXNTaXplKEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVyQ29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+
cm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCk7Ci0KLSNpZiBQTEFURk9STShTS0lBKQotICAgICAg
ICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBza2lhQ29udGV4dCA9IHJvb3RMYXllckNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwotICAgICAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogcGxhdGZvcm1D
YW52YXMgPSBza2lhQ29udGV4dC0+Y2FudmFzKCk7Ci0KLSAgICAgICAgcGxhdGZvcm1DYW52YXMt
PnNhdmUoKTsKLQotICAgICAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5h
dGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgotICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+dHJh
bnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtcmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1Nj
YWxhcj4oLXJlY3QueSgpKSk7Ci0KLSAgICAgICAgcm9vdExheWVyQ29udGV4dC0+c2F2ZSgpOwot
Ci0gICAgICAgIHdlYmZyYW1lLT5wYWludFdpdGhDb250ZXh0KCpyb290TGF5ZXJDb250ZXh0LCBy
ZWN0KTsKLSAgICAgICAgcm9vdExheWVyQ29udGV4dC0+cmVzdG9yZSgpOworY2xhc3MgV2ViVmll
d0ltcGxUaWxlUGFpbnRJbnRlcmZhY2UgOiBwdWJsaWMgVGlsZVBhaW50SW50ZXJmYWNlIHsKK3B1
YmxpYzoKKyAgICBXZWJWaWV3SW1wbFRpbGVQYWludEludGVyZmFjZShXZWJWaWV3SW1wbCogd2Vi
Vmlld0ltcGwpCisgICAgICAgIDogbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKKyAgICB7Cisg
ICAgfQogCi0gICAgICAgIHBsYXRmb3JtQ2FudmFzLT5yZXN0b3JlKCk7Ci0jZWxpZiBQTEFURk9S
TShDRykKLSAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHJvb3RMYXllckNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQorICAgIHsKKyAgICAgICAg
UGFnZSogcGFnZSA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlLT5tYWlu
RnJhbWUoKS0+dmlldygpOworICAgICAgICB2aWV3LT5wYWludENvbnRlbnRzKCZjb250ZXh0LCBj
b250ZW50UmVjdCk7CisgICAgfQogCi0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250
ZXh0KTsKK3ByaXZhdGU6CisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7Cit9OwogCi0g
ICAgICAgIC8vIEJyaW5nIHRoZSBDb3JlR3JhcGhpY3MgY29udGV4dCBpbnRvIHRoZSBjb29yZGlu
YXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGNnQ29udGV4dCwgLXJlY3QueCgpLCAtcmVjdC55KCkpOwogCi0gICAgICAgIHJvb3RMYXll
ckNvbnRleHQtPnNhdmUoKTsKK2NsYXNzIFdlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRJbnRlcmZh
Y2UgOiBwdWJsaWMgVGlsZVBhaW50SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBXZWJWaWV3SW1w
bFNjcm9sbGJhclBhaW50SW50ZXJmYWNlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkKKyAgICAg
ICAgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKQorICAgIHsKKyAgICB9CiAKLSAgICAgICAg
d2ViZnJhbWUtPnBhaW50V2l0aENvbnRleHQoKnJvb3RMYXllckNvbnRleHQsIHJlY3QpOwotICAg
ICAgICByb290TGF5ZXJDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCisg
ICAgeworICAgICAgICBQYWdlKiBwYWdlID0gbV93ZWJWaWV3SW1wbC0+cGFnZSgpOworICAgICAg
ICBpZiAoIXBhZ2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEZyYW1lVmlldyogdmll
dyA9IHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7CiAKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9y
ZUdTdGF0ZShjZ0NvbnRleHQpOwotI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0
Zm9ybQotI2VuZGlmCisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHZpZXctPnNjcm9sbFgoKSwg
dmlldy0+c2Nyb2xsWSgpKTsKKyAgICAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gdmlldy0+Y29u
dGVudHNUb1dpbmRvdyhjb250ZW50UmVjdCk7CisgICAgICAgIHZpZXctPnBhaW50U2Nyb2xsYmFy
cygmY29udGV4dCwgd2luZG93UmVjdCk7CiAgICAgfQotfQorCitwcml2YXRlOgorICAgIFdlYlZp
ZXdJbXBsKiBtX3dlYlZpZXdJbXBsOworfTsKIAogdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3Np
dGUoKQogewpAQCAtMjQ3OSwzMiArMjQxNywxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBv
c2l0ZSgpCiAgICAgLy8gVGhlIHZpc2libGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJhcnMgd2hlcmVh
cyB0aGUgY29udGVudFJlY3QgZG9lc24ndC4KICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmll
dy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwogICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpOwotICAgIEludFJlY3Qgdmlld1BvcnQgPSBJ
bnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0KLSAgICAvLyBHaXZl
IHRoZSBjb21wb3NpdG9yIGEgY2hhbmNlIHRvIHNldHVwL3Jlc2l6ZSB0aGUgcm9vdCB0ZXh0dXJl
IGhhbmRsZSBhbmQgcGVyZm9ybSBzY3JvbGxpbmcuCi0gICAgbV9sYXllclJlbmRlcmVyLT5wcmVw
YXJlVG9EcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgSW50UG9pbnQodmlldy0+
c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpKTsKLQotICAgIC8vIERyYXcgdGhlIGNvbnRlbnRz
IG9mIHRoZSByb290IGxheWVyLgotICAgIFZlY3RvcjxJbnRSZWN0PiBkYW1hZ2VSZWN0czsKLSAg
ICBkYW1hZ2VSZWN0cy5hcHBlbmQobV9yb290TGF5ZXJTY3JvbGxEYW1hZ2UpOwotICAgIGRhbWFn
ZVJlY3RzLmFwcGVuZChtX3Jvb3RMYXllckRpcnR5UmVjdCk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBkYW1hZ2VSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICBJbnRSZWN0IGRhbWFn
ZWRSZWN0ID0gZGFtYWdlUmVjdHNbaV07CisgICAgSW50UG9pbnQgc2Nyb2xsKHZpZXctPnNjcm9s
bFgoKSwgdmlldy0+c2Nyb2xsWSgpKTsKIAotICAgICAgICAvLyBJbnRlcnNlY3QgdGhpcyByZWN0
YW5nbGUgd2l0aCB0aGUgdmlld1BvcnQuCi0gICAgICAgIGRhbWFnZWRSZWN0LmludGVyc2VjdCh2
aWV3UG9ydCk7Ci0KLSAgICAgICAgLy8gTm93IHJlbmRlciBpdC4KLSAgICAgICAgaWYgKGRhbWFn
ZWRSZWN0LndpZHRoKCkgJiYgZGFtYWdlZFJlY3QuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIHVw
ZGF0ZVJvb3RMYXllckNvbnRlbnRzKGRhbWFnZWRSZWN0KTsKLSAgICAgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QoZGFtYWdlZFJlY3QpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIG1fcm9vdExheWVyRGlydHlSZWN0ID0gSW50UmVjdCgpOwotICAgIG1f
cm9vdExheWVyU2Nyb2xsRGFtYWdlID0gSW50UmVjdCgpOworICAgIFdlYlZpZXdJbXBsVGlsZVBh
aW50SW50ZXJmYWNlIHRpbGVQYWludCh0aGlzKTsKIAotICAgIC8vIERyYXcgdGhlIGFjdHVhbCBs
YXllcnMuLi4KLSAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNv
bnRlbnRSZWN0KTsKKyAgICBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNlIHNjcm9s
bGJhclBhaW50KHRoaXMpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxl
UmVjdCwgY29udGVudFJlY3QsIHNjcm9sbCwgdGlsZVBhaW50LCBzY3JvbGxiYXJQYWludCk7CiB9
CiAKIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKaW5kZXggMDM4ODc3MDdhODdkNDlmM2YzMDlmZDNkZjg3Njc4MzQyM2E1MGRh
MS4uOTIxNTE3ZGY4NDFjMWUyNTI5ZWE3OTQ5ODkyMWEwMjAyMDI5ZjY5YyAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaApAQCAtNDA3LDcgKzQwNyw2IEBAIHByaXZhdGU6CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUoYm9vbCk7Ci0gICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwogICAgIHZvaWQg
ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoV2ViQ2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwogICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7CkBAIC01MzksNyArNTM4LDYgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9tb3VzZUNhcHR1cmVOb2RlOwog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFdlYkNvcmU6OkludFJlY3Qg
bV9yb290TGF5ZXJEaXJ0eVJlY3Q7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Jvb3RMYXllclNj
cm9sbERhbWFnZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBt
X2xheWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75738</attachid>
            <date>2010-12-06 14:55:10 -0800</date>
            <delta_ts>2010-12-20 15:21:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49947-20101206145509.patch</filename>
            <type>text/plain</type>
            <size>60593</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzBjYWVhMDljOGM0ZGE5NmM4MzA2YmM3ODE5Yzk0YzQyMDMwY2RmOS4uOWY1YzcyZTRmNzhiNzU4
YjNlYzRiNzg5YjAxYmY2MWEyNDk1M2UxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OCBAQAorMjAxMC0xMi0wMiAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gVGlsZSByb290IGxheWVyIG9mIHRo
ZSBjb21wb3NpdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDk5NDcKKworICAgICAgICBSZWZhY3RvciByb290IGxheWVyIHVwZGF0ZSBhbmQgZHJh
d2luZyBmcm9tIExheWVyUmVuZGVyZXJDaHJvbWl1bSBpbnRvCisgICAgICAgIExheWVyVGlsZXJD
aHJvbWl1bS4gIFRoZSByb290IGxheWVyIGlzIG5vdyBkcmF3biBhcyBtdWx0aXBsZSB0aWxlcwor
ICAgICAgICByYXRoZXIgdGhhbiBhcyBvbmUgc2luZ2xlIGxhcmdlIHRleHR1cmUuICBTY3JvbGxi
YXJzIGFyZSBub3cgZHJhd24KKyAgICAgICAgc2VwYXJhdGVseSByYXRoZXIgdGhhbiBhcyBwYXJ0
IG9mIHRoZSByb290IGxheWVyLgorCisgICAgICAgIFRlc3Q6IExheW91dFRlc3RzL2NvbXBvc2l0
aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5n
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
OjpzZXRDbGlwc1JlcGFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2li
bGVDb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y2xpcHNSZXBhaW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZlcnRpY2FsU2Nyb2xsYmFyUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Omhvcml6b250YWxT
Y3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxl
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJS
ZW5kZXJlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpz
ZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVUaWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9UaWxlR3Jv
dXApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVjdFRv
TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJS
ZWN0VG9Db250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
OnRpbGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnRpbGVD
b250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnRpbGVM
YXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlk
YXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnNldExheWVyUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cmVzaXplTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpUaWxlOjp+VGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OnJlbGVhc2VUZXh0dXJlSWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6VGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OnRleHR1cmVJZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OmRpcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6Y2xlYXJEaXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXIpOgorCiAyMDEw
LTEyLTA2ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDAxYzVjODk5ZjliZWE2OWI5OWVmNjVjZDk1
ZjA1MjA1ZTA1OTE5ODUuLmVjMmU2MmRjZmEwZjc3MWMxOWU2OThlMTk1NGEzYmUwNWFlNDIxYzcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0yNTgwLDYgKzI1ODAsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJv
bWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBs
YXllclByaXZhdGVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9QbGF0Zm9ybUljb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBiMTRk
MTFiNzJhMTcxY2Y4NWExMzFhY2M1ZDY3NTZiNmJlMDk0YTI5Li4yMDA5Y2U0YzdlNDNmNTk2MDM4
ZTNhZjA4OWE2OWE0MjViOGMzZDExIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTMxNCw3ICsxMzE0LDcg
QEAgdm9pZCBGcmFtZVZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3Qm
IHIsIGJvb2wgaW1tZWRpYXRlKQogICAgIGRvdWJsZSBkZWxheSA9IGFkanVzdGVkRGVmZXJyZWRS
ZXBhaW50RGVsYXkoKTsKICAgICBpZiAoKG1fZGVmZXJyaW5nUmVwYWludHMgfHwgbV9kZWZlcnJl
ZFJlcGFpbnRUaW1lci5pc0FjdGl2ZSgpIHx8IGRlbGF5KSAmJiAhaW1tZWRpYXRlKSB7CiAgICAg
ICAgIEludFJlY3QgcGFpbnRSZWN0ID0gcjsKLSAgICAgICAgaWYgKCFwYWludHNFbnRpcmVDb250
ZW50cygpKQorICAgICAgICBpZiAoY2xpcHNSZXBhaW50cygpICYmICFwYWludHNFbnRpcmVDb250
ZW50cygpKQogICAgICAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdCh2aXNpYmxlQ29udGVudFJl
Y3QoKSk7CiAgICAgICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKaW5kZXggYWI5ZWU4YTIyZmZkMjI1NzUwMWRmMTRh
YmE0NmZhYWIyMDYwMWI4YS4uZjE3Y2E5MjA5YzJhNmQ0ZDM2Yjg3ZTZlMWEzNTU3MWFmOWM5M2Y4
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCkBAIC01Myw2ICs1Myw3IEBAIFNjcm9sbFZpZXc6
OlNjcm9sbFZpZXcoKQogICAgICwgbV9kcmF3UGFuU2Nyb2xsSWNvbihmYWxzZSkKICAgICAsIG1f
dXNlRml4ZWRMYXlvdXQoZmFsc2UpCiAgICAgLCBtX3BhaW50c0VudGlyZUNvbnRlbnRzKGZhbHNl
KQorICAgICwgbV9jbGlwc1JlcGFpbnRzKHRydWUpCiAgICAgLCBtX2RlbGVnYXRlc1Njcm9sbGlu
ZyhmYWxzZSkKIHsKICAgICBwbGF0Zm9ybUluaXQoKTsKQEAgLTIwMiw2ICsyMDMsMTEgQEAgdm9p
ZCBTY3JvbGxWaWV3OjpzZXRQYWludHNFbnRpcmVDb250ZW50cyhib29sIHBhaW50c0VudGlyZUNv
bnRlbnRzKQogICAgIG1fcGFpbnRzRW50aXJlQ29udGVudHMgPSBwYWludHNFbnRpcmVDb250ZW50
czsKIH0KIAordm9pZCBTY3JvbGxWaWV3OjpzZXRDbGlwc1JlcGFpbnRzKGJvb2wgY2xpcHNSZXBh
aW50cykKK3sKKyAgICBtX2NsaXBzUmVwYWludHMgPSBjbGlwc1JlcGFpbnRzOworfQorCiB2b2lk
IFNjcm9sbFZpZXc6OnNldERlbGVnYXRlc1Njcm9sbGluZyhib29sIGRlbGVnYXRlc1Njcm9sbGlu
ZykKIHsKICAgICBtX2RlbGVnYXRlc1Njcm9sbGluZyA9IGRlbGVnYXRlc1Njcm9sbGluZzsKQEAg
LTc4OCw3ICs3OTQsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKIHZv
aWQgU2Nyb2xsVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgcmVj
dCwgYm9vbCBub3cpCiB7CiAgICAgSW50UmVjdCBwYWludFJlY3QgPSByZWN0OwotICAgIGlmICgh
cGFpbnRzRW50aXJlQ29udGVudHMoKSkKKyAgICBpZiAoY2xpcHNSZXBhaW50cygpICYmICFwYWlu
dHNFbnRpcmVDb250ZW50cygpKQogICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KHZpc2libGVD
b250ZW50UmVjdCgpKTsKICAgICBpZiAocGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTE0OSw0ICsxMTU1LDMgQEAgYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUlzT2Zm
c2NyZWVuKCkgY29uc3QKICNlbmRpZgogCiB9Ci0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKaW5kZXggN2U4
NDZiYzM5ZThjMmU3OGRjZjQ4ZTdmOWRjYjYzOTg5YjMxOGQ1OC4uZDcwNDU4Zjg4MDgyN2FlYjdm
NzM2M2VlZThjMmFhYjIzMjNiNjYyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKQEAgLTExMSw2ICsx
MTEsMTEgQEAgcHVibGljOgogICAgIGJvb2wgcGFpbnRzRW50aXJlQ29udGVudHMoKSBjb25zdCB7
IHJldHVybiBtX3BhaW50c0VudGlyZUNvbnRlbnRzOyB9CiAgICAgdm9pZCBzZXRQYWludHNFbnRp
cmVDb250ZW50cyhib29sKTsKIAorICAgIC8vIEJ5IGRlZmF1bHQsIHBhaW50IGV2ZW50cyBhcmUg
Y2xpcHBlZCB0byB0aGUgdmlzaWJsZSBhcmVhLiAgSWYgc2V0IHRvCisgICAgLy8gZmFsc2UsIHBh
aW50IGV2ZW50cyBhcmUgbm8gbG9uZ2VyIGNsaXBwZWQuICBwYWludHNFbnRpcmVDb250ZW50cygp
IGltcGxpZXMgIWNsaXBzUmVwYWludHMoKS4KKyAgICBib29sIGNsaXBzUmVwYWludHMoKSBjb25z
dCB7IHJldHVybiBtX2NsaXBzUmVwYWludHM7IH0KKyAgICB2b2lkIHNldENsaXBzUmVwYWludHMo
Ym9vbCk7CisKICAgICAvLyBCeSBkZWZhdWx0IHByb2dyYW1tYXRpYyBzY3JvbGxpbmcgaXMgaGFu
ZGxlZCBieSBXZWJDb3JlIGFuZCBub3QgYnkgdGhlIFVJIGFwcGxpY2F0aW9uLgogICAgIC8vIElu
IHRoZSBjYXNlIG9mIHVzaW5nIGEgdGlsZWQgYmFja2luZyBzdG9yZSwgdGhpcyBtb2RlIGNhbiBi
ZSBzZXQsIHNvIHRoYXQgdGhlIHNjcm9sbCByZXF1ZXN0cwogICAgIC8vIGFyZSBkZWxlZ2F0ZWQg
dG8gdGhlIFVJIGFwcGxpY2F0aW9uLgpAQCAtMzE4LDYgKzMyMyw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3VzZUZpeGVkTGF5b3V0OwogCiAgICAgYm9vbCBtX3BhaW50c0VudGlyZUNvbnRlbnRz
OworICAgIGJvb2wgbV9jbGlwc1JlcGFpbnRzOwogICAgIGJvb2wgbV9kZWxlZ2F0ZXNTY3JvbGxp
bmc7CiAKICAgICAvLyBUaGVyZSBhcmUgOCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2Ygd3JpdGlu
ZyBtb2RlIGFuZCBkaXJlY3Rpb24uICBTY3JvbGwgb3JpZ2luIHdpbGwgYmUgbm9uLXplcm8gaW4g
dGhlIHggb3IgeSBheGlzCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDg2ZjM1ODBjYTc0MWYzYzU5NDMwYTdhNzVhN2MxNzNl
YzJiMjZkYTcuLjRlOWJmZDlmMDk2NmI5NzlhNzQyMWU1ZDE0MWUzN2Q3MjA0ZWE1ZDEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CkBAIC02MCw2ICs2MCw3IEBAIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIC8vIHRoaXMg
Y2xhc3MuCiBjbGFzcyBMYXllckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJv
bWl1bT4gewogICAgIGZyaWVuZCBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CisgICAgZnJp
ZW5kIGNsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9
IDApOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMWJkZWE4NTAwMjU2ZmUwMjc5OWNm
NWIyMzY1Yjg0M2MwZDM3YTUzMC4uN2MxMDZmZmNiYTUwOGVjYWZiZTQ2MTVkMTM1ZjhlMGRjMDlh
YmE3YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtOTUsOCArOTUsNyBAQCBQYXNzUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
UGFzc1JlZlB0cjxHcmFwaAogfQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQotICAgIDog
bV9yb290TGF5ZXJUZXh0dXJlSWQoMCkKLSAgICAsIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKDAp
CisgICAgOiBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCgwKQogICAgICwgbV9yb290TGF5ZXJUZXh0
dXJlSGVpZ2h0KDApCiAgICAgLCBtX3RleHR1cmVMYXllclNoYWRlclByb2dyYW0oMCkKICAgICAs
IG1fcm9vdExheWVyKDApCkBAIC0xMDgsMTEgKzEwNywxOSBAQCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZQogICAgICwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQogewogICAgIG1faGFyZHdhcmVD
b21wb3NpdGluZyA9IGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCk7CisgICAgbV9yb290TGF5ZXJU
aWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAyNTYp
KTsKKyAgICBBU1NFUlQobV9yb290TGF5ZXJUaWxlcik7CiB9CiAKIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCiB7CiAgICAgY2xlYW51cFNoYXJlZE9iamVj
dHMoKTsKKworICAgIC8vIEJlY2F1c2UgdGhlIHRpbGVycyBuZWVkIHRvIGNsZWFuIHVwIHRleHR1
cmVzLCBjbGVhbiB0aGVtIHVwIGV4cGxpY2l0bHkKKyAgICAvLyBiZWZvcmUgdGhlIEdyYXBoaWNz
Q29udGV4dDNEIGlzIGRlc3Ryb3llZC4KKyAgICBtX3Jvb3RMYXllclRpbGVyID0gMDsKKyAgICBt
X2hvcml6b250YWxTY3JvbGxiYXJUaWxlciA9IDA7CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRp
bGVyID0gMDsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y29udGV4dCgpCkBAIC0xMjcsNTQgKzEzNCw3OSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZGVidWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqCiAg
ICAgICAgIExPR19FUlJPUigiR0wgY29tbWFuZCBmYWlsZWQ6IEZpbGU6ICVzXG5cdExpbmUgJWRc
blx0Y29tbWFuZDogJXMsIGVycm9yICV4XG4iLCBmaWxlLCBsaW5lLCBjb21tYW5kLCBzdGF0aWNf
Y2FzdDxpbnQ+KGVycm9yKSk7CiB9CiAKLS8vIENyZWF0ZXMgYSBjYW52YXMgYW5kIGFuIGFzc29j
aWF0ZWQgZ3JhcGhpY3MgY29udGV4dCB0aGF0IHRoZSByb290IGxheWVyIHdpbGwKLS8vIHJlbmRl
ciBpbnRvLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFJvb3RMYXllckNhbnZhc1Np
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VT
aGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogewotICAgIGlmIChzaXplID09IG1fcm9vdExheWVy
Q2FudmFzU2l6ZSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChwcm9ncmFtSWQgIT0gbV9jdXJy
ZW50U2hhZGVyKSB7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dXNlUHJvZ3Jh
bShwcm9ncmFtSWQpKTsKKyAgICAgICAgbV9jdXJyZW50U2hhZGVyID0gcHJvZ3JhbUlkOworICAg
IH0KK30KIAotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgLy8gQ3JlYXRlIG5ldyBjYW52YXMgYW5k
IGNvbnRleHQuIE93blB0ciB0YWtlcyBjYXJlIG9mIGZyZWVpbmcgdXAKLSAgICAvLyB0aGUgb2xk
IG9uZXMuCi0gICAgbV9yb290TGF5ZXJDYW52YXMgPSBuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMo
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXJTa2lh
Q29udGV4dCA9IG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKG1fcm9vdExheWVyQ2FudmFzLmdldCgp
KTsKLSAgICBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQo
cmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KG1fcm9vdExheWVyU2tp
YUNvbnRleHQuZ2V0KCkpKTsKLSNlbGlmIFBMQVRGT1JNKENHKQotICAgIC8vIFJlbGVhc2UgdGhl
IHByZXZpb3VzIENHQml0bWFwQ29udGV4dCBiZWZvcmUgcmVhbGxvY2F0aW5nIHRoZSBiYWNraW5n
IHN0b3JlIGFzIGEgcHJlY2F1dGlvbi4KLSAgICBtX3Jvb3RMYXllckNHQ29udGV4dC5hZG9wdENG
KDApOwotICAgIGludCByb3dCeXRlcyA9IDQgKiBzaXplLndpZHRoKCk7Ci0gICAgbV9yb290TGF5
ZXJCYWNraW5nU3RvcmUucmVzaXplKHJvd0J5dGVzICogc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbWVt
c2V0KG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRhdGEoKSwgMCwgbV9yb290TGF5ZXJCYWNraW5n
U3RvcmUuc2l6ZSgpKTsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNl
KEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKLSAgICBtX3Jvb3RMYXll
ckNHQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX3Jvb3RMYXllckJhY2tp
bmdTdG9yZS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCA4LCByb3dCeXRlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2xvclNwYWNlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkhvc3QpKTsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obV9yb290TGF5
ZXJDR0NvbnRleHQuZ2V0KCksIDAsIHNpemUuaGVpZ2h0KCkpOwotICAgIENHQ29udGV4dFNjYWxl
Q1RNKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpLCAxLCAtMSk7Ci0gICAgbV9yb290TGF5ZXJH
cmFwaGljc0NvbnRleHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0KG1fcm9vdExheWVyQ0dDb250ZXh0
LmdldCgpKTsKLSNlbHNlCi0jZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRm
b3JtLiIKLSNlbmRpZgorSW50UmVjdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZlcnRpY2FsU2Ny
b2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpCit7CisgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhcihJbnRQb2ludChjb250
ZW50UmVjdC5yaWdodCgpLCBjb250ZW50UmVjdC55KCkpLCBJbnRTaXplKHZpc2libGVSZWN0Lndp
ZHRoKCkgLSBjb250ZW50UmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkpOworICAg
IHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcjsKK30KIAotICAgIG1fcm9vdExheWVyQ2FudmFzU2l6
ZSA9IHNpemU7CitJbnRSZWN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aG9yaXpvbnRhbFNjcm9s
bGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KQoreworICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcihJbnRQb2ludChjb250
ZW50UmVjdC54KCksIGNvbnRlbnRSZWN0LmJvdHRvbSgpKSwgSW50U2l6ZSh2aXNpYmxlUmVjdC53
aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAtIGNvbnRlbnRSZWN0LmhlaWdodCgpKSk7Cisg
ICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXI7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQogewotICAgIGlmIChwcm9ncmFtSWQgIT0gbV9jdXJyZW50U2hhZGVyKSB7Ci0gICAgICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtSWQpKTsKLSAgICAgICAg
bV9jdXJyZW50U2hhZGVyID0gcHJvZ3JhbUlkOworICAgIGlmIChjb250ZW50UmVjdC5pbnRlcnNl
Y3RzKGRpcnR5UmVjdCkpCisgICAgICAgIG1fcm9vdExheWVyVGlsZXItPmludmFsaWRhdGVSZWN0
KGRpcnR5UmVjdCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyKSB7CisgICAg
ICAgIEludFJlY3Qgc2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhclJlY3QodmlzaWJsZVJl
Y3QsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgaWYgKGRpcnR5UmVjdC5pbnRlcnNlY3RzKHNjcm9s
bGJhcikpIHsKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRMYXll
clBvc2l0aW9uKHNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhclRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXIpIHsKKyAgICAgICAgSW50UmVj
dCBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhclJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRS
ZWN0KTsKKyAgICAgICAgaWYgKGRpcnR5UmVjdC5pbnRlcnNlY3RzKHNjcm9sbGJhcikpIHsKKyAg
ICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0TGF5ZXJQb3NpdGlvbihzY3Jv
bGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXIt
PmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKLS8vIFRo
aXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdXBkYXRlcyBhcmUgbWFk
ZSB0byB0aGUKLS8vIHJvb3QgbGF5ZXIgdGV4dHVyZS4gSXQgcmVzaXplcyB0aGUgcm9vdCBsYXll
ciB0ZXh0dXJlIGFuZCBzY3JvbGxzIGl0cwotLy8gY29udGVudHMgYXMgbmVlZGVkLiBJdCBhbHNv
IHNldHMgdXAgY29tbW9uIEdMIHN0YXRlIHVzZWQgYnkgdGhlIHJlc3QKLS8vIG9mIHRoZSBsYXll
ciBkcmF3aW5nIGNvZGUuCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJh
d0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZUFuZERyYXdSb290TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQs
IFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQsIGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBtX3Jvb3RMYXllclRp
bGVyLT51cGRhdGUodGlsZVBhaW50LCB2aXNpYmxlUmVjdCk7CisgICAgbV9yb290TGF5ZXJUaWxl
ci0+ZHJhdyh2aXNpYmxlUmVjdCk7CisKKyAgICBpZiAodmlzaWJsZVJlY3Qud2lkdGgoKSA+IGNv
bnRlbnRSZWN0LndpZHRoKCkpIHsKKyAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhciA9
IHZlcnRpY2FsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAgICAg
ICBJbnRTaXplIHRpbGVTaXplID0gdmVydGljYWxTY3JvbGxiYXIuc2l6ZSgpLnNocnVua1RvKElu
dFNpemUobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkpOworICAgICAgICBpZiAo
IW1fdmVydGljYWxTY3JvbGxiYXJUaWxlcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXJUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVTaXplKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5zZXRUaWxl
U2l6ZSh0aWxlU2l6ZSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0TGF5
ZXJQb3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhclRpbGVyLT51cGRhdGUoc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVSZWN0KTsK
KyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5kcmF3KHZpc2libGVSZWN0KTsKKyAg
ICB9CisKKyAgICBpZiAodmlzaWJsZVJlY3QuaGVpZ2h0KCkgPiBjb250ZW50UmVjdC5oZWlnaHQo
KSkgeworICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXIgPSBob3Jpem9udGFsU2Ny
b2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAgICAgICBJbnRTaXplIHRp
bGVTaXplID0gaG9yaXpvbnRhbFNjcm9sbGJhci5zaXplKCkuc2hydW5rVG8oSW50U2l6ZShtX21h
eFRleHR1cmVTaXplLCBtX21heFRleHR1cmVTaXplKSk7CisgICAgICAgIGlmICghbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyVGlsZXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxl
ciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVTaXplKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnNldFRpbGVTaXpl
KHRpbGVTaXplKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnNldExheWVy
UG9zaXRpb24oaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyVGlsZXItPnVwZGF0ZShzY3JvbGxiYXJQYWludCwgdmlzaWJsZVJlY3Qp
OworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7
CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25z
dCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xs
UG9zaXRpb24sIFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWlu
dCkKIHsKICAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIApAQCAtMTgzLDEwICsy
MTUsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhj
b25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29ucwogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOwotICAgIAotICAg
IGJvb2wgc2tpcFNjcm9sbCA9IGZhbHNlOwotCiAgICAgLy8gSWYgdGhlIHNpemUgb2YgdGhlIHZp
c2libGUgYXJlYSBoYXMgY2hhbmdlZCB0aGVuIGFsbG9jYXRlIGEgbmV3IHRleHR1cmUKICAgICAv
LyB0byBzdG9yZSB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIgYW5kIGFkanVzdCB0aGUg
cHJvamVjdGlvbiBtYXRyaXgKICAgICAvLyBhbmQgdmlld3BvcnQuCkBAIC0xOTYsMTUgKzIyNCw5
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zCiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdp
ZHRoID0gdmlzaWJsZVJlY3RXaWR0aDsKICAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0
ID0gdmlzaWJsZVJlY3RIZWlnaHQ7CiAKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVy
ZUhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCAwKSk7Ci0KICAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVy
IHN1cmZhY2UgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKICAgICAgICAg
Ly8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0aW1lIHVzZVJlbmRlclN1cmZhY2UgaXMgY2FsbGVk
LgogICAgICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKLQotICAgICAgICAvLyBUaGUg
cm9vdCBsYXllciB0ZXh0dXJlIHdhcyBqdXN0IHJlc2l6ZWQgc28gaXRzIGNvbnRlbnRzIGFyZSBu
b3QKLSAgICAgICAgLy8gdXNlZnVsIGZvciBzY3JvbGxpbmcuCi0gICAgICAgIHNraXBTY3JvbGwg
PSB0cnVlOwogICAgIH0KIAogICAgIC8vIFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGly
ZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFycy4KQEAgLTIxNyw3NyArMjM5
LDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKSk7CiAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0Up
KTsKIAotICAgIC8vIEJsZW5kaW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFJvb3QgbGF5ZXIgYWxw
aGEgY2hhbm5lbCBvbiBXaW5kb3dzIGlzIGluY29ycmVjdCB3aGVuIFNraWEgdXNlcyBDbGVhclR5
cGUuIAotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQpKTsgCi0KLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBJbnRQb2ludCgt
MSwgLTEpKSB7Ci0gICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKLSAg
ICAgICAgc2tpcFNjcm9sbCA9IHRydWU7Ci0gICAgfQotCi0gICAgSW50UG9pbnQgc2Nyb2xsRGVs
dGEgPSB0b1BvaW50KHNjcm9sbFBvc2l0aW9uIC0gbV9zY3JvbGxQb3NpdGlvbik7Ci0KLSAgICAv
LyBTY3JvbGxpbmcgbGFyZ2VyIHRoYW4gdGhlIGNvbnRlbnRSZWN0IHNpemUgZG9lcyBub3QgcHJl
c2VydmUgYW55IG9mIHRoZSBwaXhlbHMsIHNvIHRoZXJlIGlzCi0gICAgLy8gbm8gbmVlZCB0byBj
b3B5IGZyYW1lYnVmZmVyIHBpeGVscyBiYWNrIGludG8gdGhlIHRleHR1cmUuCi0gICAgaWYgKGFi
cyhzY3JvbGxEZWx0YS55KCkpID4gY29udGVudFJlY3QuaGVpZ2h0KCkgfHwgYWJzKHNjcm9sbERl
bHRhLngoKSkgPiBjb250ZW50UmVjdC53aWR0aCgpKQotICAgICAgICBza2lwU2Nyb2xsID0gdHJ1
ZTsKLQotICAgIC8vIFNjcm9sbCB0aGUgYmFja2J1ZmZlcgotICAgIGlmICghc2tpcFNjcm9sbCAm
JiAoc2Nyb2xsRGVsdGEueCgpIHx8IHNjcm9sbERlbHRhLnkoKSkpIHsKLSAgICAgICAgLy8gU2Ny
b2xsaW5nIHdvcmtzIGFzIGZvbGxvd3M6IFdlIHJlbmRlciBhIHF1YWQgd2l0aCB0aGUgY3VycmVu
dCByb290IGxheWVyIGNvbnRlbnRzCi0gICAgICAgIC8vIHRyYW5zbGF0ZWQgYnkgdGhlIGFtb3Vu
dCB0aGUgcGFnZSBoYXMgc2Nyb2xsZWQgc2luY2UgdGhlIGxhc3QgdXBkYXRlIGFuZCB0aGVuIHJl
YWQgdGhlCi0gICAgICAgIC8vIHBpeGVscyBvZiB0aGUgY29udGVudCBhcmVhICh2aXNpYmxlIGFy
ZWEgZXhjbHVkaW5nIHRoZSBzY3JvbGwgYmFycykgYmFjayBpbnRvIHRoZQotICAgICAgICAvLyBy
b290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEgd2lsbCBiZSBmaWxsZWQg
YnkgYSBzdWJzZXF1ZW50IGRyYXdMYXllcnNJbnRvUmVjdCBjYWxsCi0gICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHNjcm9sbGVkTGF5ZXJNYXRyaXg7Ci0KLSAgICAgICAgc2Nyb2xsZWRMYXll
ck1hdHJpeC50cmFuc2xhdGUzZCgwLjUgKiB2aXNpYmxlUmVjdC53aWR0aCgpIC0gc2Nyb2xsRGVs
dGEueCgpLAotICAgICAgICAgICAgMC41ICogdmlzaWJsZVJlY3QuaGVpZ2h0KCkgKyBzY3JvbGxE
ZWx0YS55KCksIDApOwotICAgICAgICBzY3JvbGxlZExheWVyTWF0cml4LnNjYWxlM2QoMSwgLTEs
IDEpOwotCi0gICAgICAgIHVzZVNoYWRlcihtX3RleHR1cmVMYXllclNoYWRlclByb2dyYW0pOwot
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0xaShtX3RleHR1cmVMYXll
clNoYWRlclNhbXBsZXJMb2NhdGlvbiwgMCkpOwotICAgICAgICBMYXllckNocm9taXVtOjpkcmF3
VGV4dHVyZWRRdWFkKG1fY29udGV4dC5nZXQoKSwgbV9wcm9qZWN0aW9uTWF0cml4LCBzY3JvbGxl
ZExheWVyTWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZp
c2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpLCAxLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0cml4TG9j
YXRpb24sIG1fdGV4dHVyZUxheWVyU2hhZGVyQWxwaGFMb2NhdGlvbik7Ci0KLSAgICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgY29udGVudFJlY3Qud2lkdGgoKSwgY29udGVu
dFJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9CisgICAgLy8gQmxlbmRpbmcgZGlzYWJsZWQgYnkgZGVm
YXVsdC4gUm9vdCBsYXllciBhbHBoYSBjaGFubmVsIG9uIFdpbmRvd3MgaXMgaW5jb3JyZWN0IHdo
ZW4gU2tpYSB1c2VzIENsZWFyVHlwZS4KKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRp
c2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CiAKICAgICBtX3Njcm9sbFBvc2l0aW9u
ID0gc2Nyb2xsUG9zaXRpb247Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQotewotICAg
IEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwotCi0gICAgaWYgKCFtX3Jvb3RMYXllcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQp
KTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgIEFTU0VSVCgo
dXBkYXRlUmVjdC5yaWdodCgpICA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKLSAgICAgICAg
ICAgJiYgKHVwZGF0ZVJlY3QuYm90dG9tKCkgPD0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSk7
Ci0KLSNpZiBQTEFURk9STShTS0lBKQotICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVw
ZGF0ZWQgcmVjdC4KLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9yb290TGF5ZXJDYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgIEFTU0VSVChiaXRtYXAu
d2lkdGgoKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgYml0bWFwLmhlaWdodCgpID09IHVwZGF0
ZVJlY3QuaGVpZ2h0KCkpOwotICAgIHZvaWQqIHBpeGVscyA9IGJpdG1hcC5nZXRQaXhlbHMoKTsK
LSNlbGlmIFBMQVRGT1JNKENHKQotICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0
ZWQgcmVjdC4KLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRX
aWR0aChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAm
JiBzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldEhlaWdodChtX3Jvb3RMYXllckNH
Q29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgIHZvaWQqIHBpeGVs
cyA9IG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRhdGEoKTsKLSNlbHNlCi0jZXJyb3IgIk5lZWQg
dG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKLSNlbmRpZgotICAgIC8vIENvcHkgdGhl
IGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4K
LSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBk
YXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscykpOwotfQotCi12
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCi17Ci0gICAgQVNTRVJUKG1faGFy
ZHdhcmVDb21wb3NpdGluZyk7CiAKICAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gbV9yb290
TGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQoKTsKICAgICBpZiAoIW1fZGVmYXVsdFJlbmRlclN1
cmZhY2UpCkBAIC0zMDAsMjEgKzI1NSw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0CiAgICAg
bV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDEsIDEpOwogICAgIG1fY29udGV4dC0+Y2xlYXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogCi0gICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKLQotICAgIC8vIFJlbmRlciB0aGUgcm9vdCBsYXllciB1
c2luZyBhIHF1YWQgdGhhdCB0YWtlcyB1cCB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBvZiB0aGUg
d2luZG93LgotICAgIC8vIFdlIHJldXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENvbnRl
bnRMYXllckNocm9taXVtLgotICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRW
YWx1ZXMqIGNvbnRlbnRMYXllclZhbHVlcyA9IGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygpOwot
ICAgIHVzZVNoYWRlcihjb250ZW50TGF5ZXJWYWx1ZXMtPmNvbnRlbnRTaGFkZXJQcm9ncmFtKCkp
OwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dW5pZm9ybTFpKGNvbnRlbnRMYXllclZh
bHVlcy0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICAvLyBNYXNrIG91dCB3cml0
ZXMgdG8gYWxwaGEgY2hhbm5lbDogQ2xlYXJUeXBlIHZpYSBTa2lhIHJlc3VsdHMgaW4gaW52YWxp
ZAotICAgIC8vIHplcm8gYWxwaGEgdmFsdWVzIG9uIHRleHQgZ2x5cGhzLiBUaGUgcm9vdCBsYXll
ciBpcyBhbHdheXMgb3BhcXVlLgotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29sb3JN
YXNrKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJNYXRyaXg7Ci0gICAgbGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QodmlzaWJsZVJlY3Qud2lk
dGgoKSAqIDAuNWYsIHZpc2libGVSZWN0LmhlaWdodCgpICogMC41ZiwgMCk7Ci0gICAgTGF5ZXJD
aHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChtX2NvbnRleHQuZ2V0KCksIG1fcHJvamVjdGlvbk1h
dHJpeCwgbGF5ZXJNYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4
TG9jYXRpb24oKSwgY29udGVudExheWVyVmFsdWVzLT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwor
ICAgIHVwZGF0ZUFuZERyYXdSb290TGF5ZXIodGlsZVBhaW50LCBzY3JvbGxiYXJQYWludCwgdmlz
aWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpKTsKIAogICAgIC8vIFNldCB0aGUgcm9v
dCB2aXNpYmxlL2NvbnRlbnQgcmVjdHMgLS0tIHVzZWQgYnkgc3Vic2VxdWVudCBkcmF3TGF5ZXJz
IGNhbGxzLgpAQCAtODI5LDE5ICs3NzEsNiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSBvYmplY3QgdG8gaG9sZCB0aGUgY29udGVudHMgb2Yg
dGhlIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXJUZXh0dXJlSWQgPSBjcmVhdGVMYXllclRl
eHR1cmUoKTsKLSAgICBpZiAoIW1fcm9vdExheWVyVGV4dHVyZUlkKSB7Ci0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0ZXh0dXJlIGZvciByb290IGxheWVyIik7Ci0gICAgICAg
IGNsZWFudXBTaGFyZWRPYmplY3RzKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgLy8gVHVybiBvZmYgZmlsdGVyaW5nIGZvciB0aGUgcm9vdCBsYXllciB0byBhdm9pZCBibHVy
cmluZyBmcm9tIHRoZSByZXBlYXRlZAotICAgIC8vIHdyaXRlcyBhbmQgcmVhZHMgdG8gdGhlIGZy
YW1lYnVmZmVyIHRoYXQgaGFwcGVuIHdoaWxlIHNjcm9sbGluZy4KLSAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X3Jvb3RMYXllclRleHR1cmVJZCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpKTsKLSAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7Ci0KICAgICAvLyBHZXQgdGhlIG1heCB0ZXh0dXJl
IHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0uCiAgICAgbV9tYXhUZXh0dXJlU2l6ZSA9IDA7
CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpKTsKQEAgLTg3OSwxMSAr
ODA4LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3Rz
KCkKICAgICAgICAgbV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtID0gMDsKICAgICB9CiAKLSAg
ICBpZiAobV9yb290TGF5ZXJUZXh0dXJlSWQpIHsKLSAgICAgICAgZGVsZXRlTGF5ZXJUZXh0dXJl
KG1fcm9vdExheWVyVGV4dHVyZUlkKTsKLSAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSWQgPSAw
OwotICAgIH0KLQogICAgIGlmIChtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpCiAgICAgICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFt
ZWJ1ZmZlcklkKSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA1MzFkNjUyMjJkZWQzOGI2
ZjhlNTI1ZTg1YjhmYTA0YzQxYjVhZWQ0Li4yMWJlYmEyZDk4ZWJiODgzNGZiODQyNGUzZjkwZTYx
Y2M3ZWIzNmU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs
dWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCkBAIC02NywxNCArNjgsMTIgQEAgcHVi
bGljOgogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKIAotICAgIC8vIHVwZGF0
ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5kIHNjcm9sbHMgdGhlIGJhY2ti
dWZmZXIuCi0gICAgdm9pZCBwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9s
bFBvc2l0aW9uKTsKKyAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KTsKIAotICAgIC8vIHVwZGF0ZXMgYSByZWN0YW5nbGUgd2l0aGluIHRoZSBy
b290IGxheWVyIHRleHR1cmUKLSAgICB2b2lkIHVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGNv
bnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOwotCi0gICAgLy8gZHJhd3MgdGhlIGN1cnJlbnQgbGF5
ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKLSAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICAvLyB1cGRh
dGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgorICAg
IHZvaWQgZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbiwgVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQsCisgICAgICAgICAgICAg
ICAgICAgIFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQpOwogCiAgICAgLy8gd2Fp
dHMgZm9yIHJlbmRlcmluZyB0byBmaW5pc2gKICAgICB2b2lkIGZpbmlzaCgpOwpAQCAtODgsOCAr
ODcsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhcmR3YXJlQ29tcG9zaXRpbmcoKSBjb25zdCB7
IHJldHVybiBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7IH0KIAotICAgIHZvaWQgc2V0Um9vdExheWVy
Q2FudmFzU2l6ZShjb25zdCBJbnRTaXplJik7Ci0KICAgICBHcmFwaGljc0NvbnRleHQqIHJvb3RM
YXllckdyYXBoaWNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyR3JhcGhpY3ND
b250ZXh0LmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRleHR1cmUoKTsKQEAg
LTEyMSw2ICsxMTgsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkcmF3TGF5ZXIoTGF5ZXJDaHJv
bWl1bSosIFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOwogCisgICAgdm9pZCB1cGRhdGVBbmREcmF3
Um9vdExheWVyKFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBUaWxlUGFpbnRJbnRlcmZh
Y2UmIHNjcm9sbGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgYm9vbCBpc0xheWVyVmlzaWJsZShMYXllckNocm9t
aXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxl
UmVjdCk7CiAKICAgICB2b2lkIHNldFNjaXNzb3JUb1JlY3QoY29uc3QgSW50UmVjdCYpOwpAQCAt
MTM2LDcgKzEzNSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0
cygpOwogICAgIHZvaWQgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIAotICAgIHVuc2lnbmVkIG1f
cm9vdExheWVyVGV4dHVyZUlkOworICAgIHN0YXRpYyBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFy
UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpOworICAgIHN0YXRpYyBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXJSZWN0KGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICBp
bnQgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGg7CiAgICAgaW50IG1fcm9vdExheWVyVGV4dHVyZUhl
aWdodDsKIApAQCAtMTUwLDYgKzE1MSw5IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1f
cm9vdExheWVyOworICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fcm9vdExheWVyVGls
ZXI7CisgICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
VGlsZXI7CisgICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV92ZXJ0aWNhbFNjcm9sbGJh
clRpbGVyOwogCiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1faGFy
ZHdhcmVDb21wb3NpdGluZzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40M2IwZTJiYWJm
NGZlZjAwMTJlNDkxZTAwZGQ2Njc3YzI1ZmQ1MmNlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCkBAIC0w
LDAgKzEsNDE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKKyNpZiBQTEFURk9S
TShTS0lBKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKKyNlbGlmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0JpdG1hcENvbnRleHQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJh
eVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8TGF5ZXJUaWxlckNo
cm9taXVtPiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKQoreworICAgIGlmICghbGF5
ZXJSZW5kZXJlciB8fCB0aWxlU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW0obGF5ZXJSZW5kZXJlciwg
dGlsZVNpemUpKTsKK30KKworTGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hyb21pdW0o
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSkKKyAgICA6IG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKQoreworICAgIHNldFRp
bGVTaXplKHRpbGVTaXplKTsKK30KKworTGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxlckNo
cm9taXVtKCkKK3sKKyAgICByZXNldCgpOworfQorCitHcmFwaGljc0NvbnRleHQzRCogTGF5ZXJU
aWxlckNocm9taXVtOjpsYXllclJlbmRlcmVyQ29udGV4dCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGxheWVyUmVuZGVyZXIoKSk7CisgICAgcmV0dXJuIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgp
OworfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV90aWxlU2l6ZSA9PSBzaXplKQorICAgICAgICByZXR1cm47
CisKKyAgICByZXNldCgpOworCisgICAgbV90aWxlU2l6ZSA9IHNpemU7CisgICAgbV90aWxlUGl4
ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdWludDhfdFttX3RpbGVTaXplLndpZHRoKCkgKiBtX3Rp
bGVTaXplLmhlaWdodCgpICogNF0pOworfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cmVz
ZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoIW1fdGlsZXNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgbGF5ZXJSZW5kZXJlcigpLT5kZWxldGVMYXllclRleHR1cmUobV90aWxlc1tpXS0+cmVsZWFz
ZVRleHR1cmVJZCgpKTsKKyAgICB9CisgICAgbV90aWxlcy5jbGVhcigpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV91bnVzZWRUaWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
IW1fdW51c2VkVGlsZXNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGF5ZXJS
ZW5kZXJlcigpLT5kZWxldGVMYXllclRleHR1cmUobV91bnVzZWRUaWxlc1tpXS0+cmVsZWFzZVRl
eHR1cmVJZCgpKTsKKyAgICB9CisgICAgbV91bnVzZWRUaWxlcy5jbGVhcigpOworCisgICAgbV9s
YXllclNpemUgPSBJbnRTaXplKCk7CisgICAgbV9sYXllclRpbGVTaXplID0gSW50U2l6ZSgpOwor
ICAgIG1fbGFzdFVwZGF0ZUxheWVyUmVjdCA9IEludFJlY3QoKTsKK30KKworTGF5ZXJUaWxlckNo
cm9taXVtOjpUaWxlKiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBq
KQoreworICAgIGNvbnN0IGludCBpbmRleCA9IHRpbGVJbmRleChpLCBqKTsKKyAgICBBU1NFUlQo
IW1fdGlsZXNbaW5kZXhdKTsKKworICAgIGlmIChtX3VudXNlZFRpbGVzLnNpemUoKSA+IDApIHsK
KyAgICAgICAgbV90aWxlc1tpbmRleF0gPSBtX3VudXNlZFRpbGVzLmxhc3QoKS5yZWxlYXNlKCk7
CisgICAgICAgIG1fdW51c2VkVGlsZXMucmVtb3ZlTGFzdCgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0
ZUxheWVyVGV4dHVyZSgpOworICAgICAgICBPd25QdHI8VGlsZT4gdGlsZSA9IGFkb3B0UHRyKG5l
dyBUaWxlKHRleHR1cmVJZCkpOworCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCksIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgMCkpOworCisgICAgICAgIG1fdGlsZXNbaW5kZXhdID0gdGlsZS5yZWxlYXNlKCk7CisgICAg
fQorCisgICAgbV90aWxlc1tpbmRleF0tPm1fZGlydHlMYXllclJlY3QgPSB0aWxlTGF5ZXJSZWN0
KGksIGopOworICAgIHJldHVybiBtX3RpbGVzW2luZGV4XS5nZXQoKTsKK30KKwordm9pZCBMYXll
clRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBvbGRMYXllclJl
Y3QsIGNvbnN0IEludFJlY3QmIG5ld0xheWVyUmVjdCkKK3sKKyAgICBpZiAoIW1fdGlsZXMuc2l6
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IG9sZENvbnRlbnRSZWN0ID0gbGF5
ZXJSZWN0VG9Db250ZW50UmVjdChvbGRMYXllclJlY3QpOworICAgIGludCBvbGRMZWZ0LCBvbGRU
b3AsIG9sZFJpZ2h0LCBvbGRCb3R0b207CisgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG9s
ZENvbnRlbnRSZWN0LCBvbGRMZWZ0LCBvbGRUb3AsIG9sZFJpZ2h0LCBvbGRCb3R0b20pOworCisg
ICAgSW50UmVjdCBuZXdDb250ZW50UmVjdCA9IGxheWVyUmVjdFRvQ29udGVudFJlY3QobmV3TGF5
ZXJSZWN0KTsKKyAgICBpbnQgbmV3TGVmdCwgbmV3VG9wLCBuZXdSaWdodCwgbmV3Qm90dG9tOwor
ICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhuZXdDb250ZW50UmVjdCwgbmV3TGVmdCwgbmV3
VG9wLCBuZXdSaWdodCwgbmV3Qm90dG9tKTsKKworICAgIC8vIEl0ZXJhdGluZyB0aHJvdWdoIGp1
c3QgdGhlIG9sZCB0aWxlIGluZGljZXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIGF2b2lkCisgICAg
Ly8gaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVudGlyZSBtX3RpbGVzIGFycmF5LgorICAgIGZvciAo
aW50IGogPSBvbGRUb3A7IGogPD0gb2xkQm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQg
aSA9IG9sZExlZnQ7IGkgPD0gb2xkUmlnaHQ7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgPj0g
bmV3TGVmdCAmJiBpIDw9IG5ld1JpZ2h0ICYmIGogPj0gbmV3VG9wICYmIGogPD0gbmV3Qm90dG9t
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjb25zdCBpbnQgaW5k
ZXggPSB0aWxlSW5kZXgoaSwgaik7CisgICAgICAgICAgICBpZiAobV90aWxlc1tpbmRleF0pCisg
ICAgICAgICAgICAgICAgbV91bnVzZWRUaWxlcy5hcHBlbmQobV90aWxlc1tpbmRleF0ucmVsZWFz
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmNv
bnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgaW50ICZs
ZWZ0LCBpbnQgJnRvcCwgaW50ICZyaWdodCwgaW50ICZib3R0b20pIGNvbnN0Cit7CisgICAgY29u
c3QgSW50UmVjdCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0
KTsKKworICAgIGxlZnQgPSBsYXllclJlY3QueCgpIC8gbV90aWxlU2l6ZS53aWR0aCgpOworICAg
IHRvcCA9IGxheWVyUmVjdC55KCkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworICAgIHJpZ2h0ID0g
KGxheWVyUmVjdC5yaWdodCgpIC0gMSkgLyBtX3RpbGVTaXplLndpZHRoKCk7CisgICAgYm90dG9t
ID0gKGxheWVyUmVjdC5ib3R0b20oKSAtIDEpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKK30KKwor
SW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9zKGNvbnRlbnRS
ZWN0LngoKSAtIG1fbGF5ZXJQb3NpdGlvbi54KCksIGNvbnRlbnRSZWN0LnkoKSAtIG1fbGF5ZXJQ
b3NpdGlvbi55KCkpOworICAgIEludFJlY3QgbGF5ZXJSZWN0KHBvcywgY29udGVudFJlY3Quc2l6
ZSgpKTsKKworICAgIC8vIENsaXAgdG8gdGhlIHBvc2l0aW9uLgorICAgIGlmIChwb3MueCgpIDwg
MCB8fCBwb3MueSgpIDwgMCkKKyAgICAgICAgbGF5ZXJSZWN0ID0gSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgSW50U2l6ZShjb250ZW50UmVjdC53aWR0aCgpICsgcG9zLngoKSwgY29udGVudFJlY3Qu
aGVpZ2h0KCkgKyBwb3MueSgpKSk7CisgICAgcmV0dXJuIGxheWVyUmVjdDsKK30KKworSW50UmVj
dCBMYXllclRpbGVyQ2hyb21pdW06OmxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVj
dCYgbGF5ZXJSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgY29udGVudFJlY3QgPSBsYXllclJl
Y3Q7CisgICAgY29udGVudFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9z
aXRpb24ueSgpKTsKKyAgICByZXR1cm4gY29udGVudFJlY3Q7Cit9CisKK2ludCBMYXllclRpbGVy
Q2hyb21pdW06OnRpbGVJbmRleChpbnQgaSwgaW50IGopIGNvbnN0Cit7CisgICAgQVNTRVJUKGkg
Pj0gMCAmJiBqID49IDAgJiYgaSA8IG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpICYmIGogPCBtX2xh
eWVyVGlsZVNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBpICsgaiAqIG1fbGF5ZXJUaWxlU2l6
ZS53aWR0aCgpOworfQorCitJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRS
ZWN0KGludCBpLCBpbnQgaikgY29uc3QKK3sKKyAgICBJbnRQb2ludCBhbmNob3IobV9sYXllclBv
c2l0aW9uLngoKSArIGkgKiBtX3RpbGVTaXplLndpZHRoKCksIG1fbGF5ZXJQb3NpdGlvbi55KCkg
KyBqICogbV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgSW50UmVjdCB0aWxlKGFuY2hvciwgbV90
aWxlU2l6ZSk7CisgICAgcmV0dXJuIHRpbGU7Cit9CisKK0ludFJlY3QgTGF5ZXJUaWxlckNocm9t
aXVtOjp0aWxlTGF5ZXJSZWN0KGludCBpLCBpbnQgaikgY29uc3QKK3sKKyAgICBJbnRQb2ludCBh
bmNob3IoaSAqIG1fdGlsZVNpemUud2lkdGgoKSwgaiAqIG1fdGlsZVNpemUuaGVpZ2h0KCkpOwor
ICAgIEludFJlY3QgdGlsZShhbmNob3IsIG1fdGlsZVNpemUpOworICAgIHJldHVybiB0aWxlOwor
fQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZ3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKKworICAg
IC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4gbGF5ZXIgc3BhY2UsIGFzIHRoZSBsYXllciBj
b3VsZCBiZSByZXBvc2l0aW9uZWQKKyAgICAvLyBhZnRlciBpbnZhbGlkYXRpb24uCisgICAgSW50
UmVjdCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKwor
ICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgY29udGVudFJlY3RUb1RpbGVJ
bmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAo
aW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxl
ZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVGlsZSogdGlsZSA9IG1fdGlsZXNb
dGlsZUluZGV4KGksIGopXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEludFJlY3QgYm91bmQgPSB0aWxlTGF5ZXJS
ZWN0KGksIGopOworICAgICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGxheWVyUmVjdCk7CisgICAg
ICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0LnVuaXRlKGJvdW5kKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShUaWxlUGFpbnRJbnRl
cmZhY2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIC8vIElu
dmFsaWRhdGUgb2xkIHRpbGVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHVzZWQgYnV0IGFyZW4ndCBp
biB1c2UgdGhpcworICAgIC8vIGZyYW1lIHNvIHRoYXQgdGhleSBjYW4gZ2V0IHJldXNlZCBmb3Ig
bmV3IHRpbGVzLgorICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVj
dChjb250ZW50UmVjdCk7CisgICAgaW52YWxpZGF0ZVRpbGVzKG1fbGFzdFVwZGF0ZUxheWVyUmVj
dCwgbGF5ZXJSZWN0KTsKKyAgICBtX2xhc3RVcGRhdGVMYXllclJlY3QgPSBsYXllclJlY3Q7CisK
KyAgICBncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOworCisgICAgLy8gQ3JlYXRlIHRp
bGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAorICAg
IC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KKyAgICBJbnRSZWN0
IGRpcnR5TGF5ZXJSZWN0OworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAg
Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVGls
ZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KGksIGopXS5nZXQoKTsKKyAgICAgICAgICAgIGlm
ICghdGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKKyAgICAg
ICAgICAgIGRpcnR5TGF5ZXJSZWN0LnVuaXRlKHRpbGUtPm1fZGlydHlMYXllclJlY3QpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY29uc3QgSW50UmVjdCBwYWludFJlY3QgPSBsYXllclJlY3RUb0Nv
bnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBPd25Q
dHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IGNhbnZhcyhuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMo
cGFpbnRSZWN0LndpZHRoKCksIHBhaW50UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKKyAgICBPd25Q
dHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gc2tpYUNvbnRleHQobmV3IFBsYXRmb3JtQ29udGV4dFNr
aWEoY2FudmFzLmdldCgpKSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3ND
b250ZXh0KG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCo+KHNraWFDb250ZXh0LmdldCgpKSkpOworCisgICAgLy8gQnJpbmcgdGhlIGNh
bnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KKyAgICBj
YW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50UmVjdC54KCkpLCBz
dGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50UmVjdC55KCkpKTsKKworICAgIHBhaW50ZXIucGFp
bnQoKmdyYXBoaWNzQ29udGV4dCwgcGFpbnRSZWN0KTsKKworICAgIC8vIEdldCB0aGUgY29udGVu
dHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY2Fu
dmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBBU1NFUlQoYml0bWFw
LndpZHRoKCkgPT0gcGFpbnRSZWN0LndpZHRoKCkgJiYgYml0bWFwLmhlaWdodCgpID09IHBhaW50
UmVjdC5oZWlnaHQoKSk7CisgICAgdWludDhfdCogcGFpbnRQaXhlbHMgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oYml0bWFwLmdldFBpeGVscygpKTsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIFZl
Y3Rvcjx1aW50OF90PiBjYW52YXNQaXhlbHM7CisgICAgaW50IHJvd0J5dGVzID0gNCAqIHBhaW50
UmVjdC53aWR0aCgpOworICAgIGNhbnZhc1BpeGVscy5yZXNpemUocm93Qnl0ZXMgKiBwYWludFJl
Y3QuaGVpZ2h0KCkpOworICAgIG1lbXNldChjYW52YXNQaXhlbHMuZGF0YSgpLCAwLCBjYW52YXNQ
aXhlbHMuc2l6ZSgpKTsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNl
KEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICBSZXRhaW5QdHI8
Q0dDb250ZXh0UmVmPiBtX2NnQ29udGV4dDsKKyAgICBtX2NnQ29udGV4dC5hZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZShjYW52YXNQaXhlbHMuZGF0YSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50UmVjdC53aWR0aCgpLCBw
YWludFJlY3QuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKG1fY2dD
b250ZXh0LmdldCgpLCAwLCBwYWludFJlY3QuaGVpZ2h0KCkpOworICAgIENHQ29udGV4dFNjYWxl
Q1RNKG1fY2dDb250ZXh0LmdldCgpLCAxLCAtMSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gbV9ncmFwaGljc0NvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4dChtX2NnQ29udGV4dC5nZXQo
KSkpOworCisgICAgLy8gQnJpbmcgdGhlIENvcmVHcmFwaGljcyBjb250ZXh0IGludG8gdGhlIGNv
b3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgorICAgIENHQ29udGV4dFRyYW5zbGF0
ZUNUTShtX2NnQ29udGV4dC5nZXQoKSwgLXBhaW50UmVjdC54KCksIC1wYWludFJlY3QueSgpKTsK
KyAgICBwYWludGVyLnBhaW50KCptX2dyYXBoaWNzQ29udGV4dCwgcGFpbnRSZWN0KTsKKworICAg
IC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRXaWR0aChtX2NnQ29udGV4dC5nZXQoKSkp
ID09IHBhaW50UmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0
R2V0SGVpZ2h0KG1fY2dDb250ZXh0LmdldCgpKSkgPT0gcGFpbnRSZWN0LmhlaWdodCgpKTsKKyAg
ICB1aW50OF90KiBwYWludFBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjYW52YXNQaXhl
bHMuZGF0YSgpKTsKKyNlbHNlCisjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBs
YXRmb3JtLiIKKyNlbmRpZgorCisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsr
aikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAg
ICAgICAgICBUaWxlKiB0aWxlID0gbV90aWxlc1t0aWxlSW5kZXgoaSwgaildLmdldCgpOworICAg
ICAgICAgICAgaWYgKCF0aWxlLT5kaXJ0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBm
cm9tLgorICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdGlsZUNvbnRlbnRSZWN0KGks
IGopOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2Nh
dGlvbigpOworICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0VG9Db250
ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7CisKKyAgICAgICAgICAgIC8vIENhbGN1
bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KKyAgICAgICAgICAgIElu
dFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3IueCgpLCBzb3Vy
Y2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7CisKKyAgICAgICAg
ICAgIC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0aGlzIHRpbGUncyBkaXJ0eSBy
ZWN0YW5nbGUuCisgICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChzb3VyY2VSZWN0Lngo
KSAtIHBhaW50UmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0gcGFpbnRSZWN0LnkoKSk7CisKKyAg
ICAgICAgICAgIHVpbnQ4X3QqIHBpeGVsU291cmNlOworICAgICAgICAgICAgaWYgKHBhaW50UmVj
dC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZzZXQueCgpKQorICAg
ICAgICAgICAgICAgIHBpeGVsU291cmNlID0gJnBhaW50UGl4ZWxzWzQgKiBwYWludE9mZnNldC55
KCkgKiBwYWludFJlY3Qud2lkdGgoKV07CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9t
IHRoZQorICAgICAgICAgICAgICAgIC8vIHBhaW50IHJlc3VsdHMgaW50byBhIHRlbXAgYnVmZmVy
IGZvciB1cGxvYWRpbmcuCisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwg
ZGVzdFJlY3QuaGVpZ2h0KCk7ICsrcm93KQorICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJm1f
dGlsZVBpeGVsc1tkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmcGFpbnRQaXhlbHNbNCAqIChwYWludE9mZnNldC54KCkgKyAocGFpbnRPZmZz
ZXQueSgpICsgcm93KSAqIHBhaW50UmVjdC53aWR0aCgpKV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0UmVjdC53aWR0aCgpICogNCk7CisKKyAgICAgICAgICAgICAgICBwaXhlbFNv
dXJjZSA9ICZtX3RpbGVQaXhlbHNbMF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgdGlsZS0+dGV4dHVyZUlkKCkpKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBkZXN0
UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgcGl4ZWxTb3VyY2UpKTsKKworICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0TGF5ZXJQ
b3NpdGlvbihjb25zdCBJbnRQb2ludCYgbGF5ZXJQb3NpdGlvbikKK3sKKyAgICBtX2xheWVyUG9z
aXRpb24gPSBsYXllclBvc2l0aW9uOworfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJh
dyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICAvLyBSZW5kZXIgdGhlIHJvb3Qg
bGF5ZXIgdXNpbmcgYSBxdWFkIHRoYXQgdGFrZXMgdXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEg
b2YgdGhlIHdpbmRvdy4KKyAgICAvLyBXZSByZXVzZSB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCBi
eSBDb250ZW50TGF5ZXJDaHJvbWl1bS4KKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgY29uc3QgQ29udGVudExheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0gbGF5ZXJSZW5kZXJlcigpLT5jb250
ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihj
b250ZW50TGF5ZXJWYWx1ZXMtPmNvbnRlbnRTaGFkZXJQcm9ncmFtKCkpOworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoY29udGVudExheWVyVmFsdWVzLT5zaGFkZXJTYW1wbGVy
TG9jYXRpb24oKSwgMCkpOworICAgIC8vIE1hc2sgb3V0IHdyaXRlcyB0byBhbHBoYSBjaGFubmVs
OiBDbGVhclR5cGUgdmlhIFNraWEgcmVzdWx0cyBpbiBpbnZhbGlkCisgICAgLy8gemVybyBhbHBo
YSB2YWx1ZXMgb24gdGV4dCBnbHlwaHMuIFRoZSByb290IGxheWVyIGlzIGFsd2F5cyBvcGFxdWUu
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCBm
YWxzZSkpOworCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBjb250ZW50
UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7
CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3Ig
KGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBUaWxlKiB0aWxl
ID0gbV90aWxlc1t0aWxlSW5kZXgoaSwgaildLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKHRp
bGUpOworCisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRpbGUtPnRleHR1cmVJZCgpKSk7CisKKyAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGVNYXRyaXg7CisgICAgICAgICAgICBJbnRS
ZWN0IHRpbGVSZWN0ID0gdGlsZUNvbnRlbnRSZWN0KGksIGopOworICAgICAgICAgICAgdGlsZU1h
dHJpeC50cmFuc2xhdGUzZCh0aWxlUmVjdC54KCkgLSBjb250ZW50UmVjdC54KCkgKyB0aWxlUmVj
dC53aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55KCkgLSBjb250ZW50UmVjdC55KCkgKyB0aWxlUmVj
dC5oZWlnaHQoKSAvIDIuMCwgMCk7CisKKyAgICAgICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdU
ZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCks
IHRpbGVNYXRyaXgsIG1fdGlsZVNpemUud2lkdGgoKSwgbV90aWxlU2l6ZS5oZWlnaHQoKSwgMSwg
Y29udGVudExheWVyVmFsdWVzLT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBjb250ZW50TGF5ZXJW
YWx1ZXMtPnNoYWRlckFscGhhTG9jYXRpb24oKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNpemVMYXllcihjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIGlmIChtX2xheWVyU2l6ZSA9PSBzaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnQgd2lkdGggPSAoc2l6ZS53aWR0aCgpICsgbV90aWxlU2l6ZS53aWR0aCgpIC0gMSkgLyBtX3Rp
bGVTaXplLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IChzaXplLmhlaWdodCgpICsgbV90aWxl
U2l6ZS5oZWlnaHQoKSAtIDEpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKKworICAgIFZlY3RvcjxP
d25QdHI8VGlsZT4gPiBuZXdUaWxlczsKKyAgICBuZXdUaWxlcy5yZXNpemUod2lkdGggKiBoZWln
aHQpOworICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9sYXllclRpbGVTaXplLmhlaWdodCgpOyAr
K2opCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9sYXllclRpbGVTaXplLndpZHRoKCk7
ICsraSkKKyAgICAgICAgICAgIG5ld1RpbGVzW2kgKyBqICogd2lkdGhdLnN3YXAobV90aWxlc1tp
ICsgaiAqIG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpXSk7CisKKyAgICBtX3RpbGVzLnN3YXAobmV3
VGlsZXMpOworICAgIG1fbGF5ZXJTaXplID0gc2l6ZTsKKyAgICBtX2xheWVyVGlsZVNpemUgPSBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Z3Jv
d0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIC8vIEdy
b3cgdGhlIHRpbGUgYXJyYXkgdG8gY29udGFpbiB0aGlzIGNvbnRlbnQgcmVjdC4KKyAgICBJbnRS
ZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOworICAg
IEludFJlY3QgbGF5ZXIoSW50UG9pbnQoMCwgMCksIG1fbGF5ZXJTaXplKTsKKyAgICBsYXllci51
bml0ZShsYXllclJlY3QpOworICAgIHJlc2l6ZUxheWVyKGxheWVyLnNpemUoKSk7Cit9CisKK0xh
eWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6flRpbGUoKQoreworICAgIC8vIEVhY2ggdGlsZSBkb2Vz
bid0IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRleHQsIHNvIGNhbid0IGNsZWFuIHVwCisg
ICAgLy8gaXRzIG93biB0ZXh0dXJlLiAgSWYgdGhpcyBhc3NlcnQgaXMgaGl0LCB0aGVuIHRoZSBM
YXllclRpbGVyQ2hyb21pdW0KKyAgICAvLyBkZXN0cnVjdG9yIGRpZG4ndCBjbGVhbiB0aGlzIHVw
LgorICAgIEFTU0VSVCghbV90ZXh0dXJlSWQpOworfQorCit1bnNpZ25lZCBpbnQgTGF5ZXJUaWxl
ckNocm9taXVtOjpUaWxlOjpyZWxlYXNlVGV4dHVyZUlkKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQg
aWQgPSBtX3RleHR1cmVJZDsKKyAgICBtX3RleHR1cmVJZCA9IDA7CisgICAgcmV0dXJuIGlkOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGNhYWVkNTJmYmU0NTEwYjky
MGQ0ZTEwZTliZmJkOTdmNzhmMGIzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDEyMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKworI2lmbmRlZiBMYXllclRpbGVyQ2hyb21pdW1faAorI2RlZmluZSBMYXllclRp
bGVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgTGF5
ZXJSZW5kZXJlckNocm9taXVtOworCitjbGFzcyBUaWxlUGFpbnRJbnRlcmZhY2UgeworcHVibGlj
OgorICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSA9IDA7Cit9OworCitjbGFzcyBMYXllclRpbGVyQ2hyb21p
dW0gOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PExheWVyVGlsZXJDaHJvbWl1bT4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpOworCisgICAgfkxheWVyVGlsZXJDaHJv
bWl1bSgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCk7CisgICAgdm9pZCB1cGRhdGUoVGlsZVBhaW50SW50ZXJmYWNlJiBwYWludGVyLCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgdm9pZCBkcmF3KGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KTsKKworICAgIC8vIFNldCBwb3NpdGlvbiBvZiB0aGlzIHRpbGVkIGxheWVyIGlu
IGNvbnRlbnQgc3BhY2UuCisgICAgdm9pZCBzZXRMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbik7CisgICAgLy8gQ2hhbmdlIHRoZSB0aWxlIHNpemUuICBUaGlzIG1heSBpbnZh
bGlkYXRlIGFsbCB0aGUgZXhpc3RpbmcgdGlsZXMuCisgICAgdm9pZCBzZXRUaWxlU2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKTsKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCB0aWxlcy4KKyAgICB2b2lk
IHJlc2V0KCk7CisKK3ByaXZhdGU6CisgICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpOworCisg
ICAgY2xhc3MgVGlsZSB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBUaWxlKHVuc2ln
bmVkIGludCB0ZXh0dXJlSWQpIDogbV90ZXh0dXJlSWQodGV4dHVyZUlkKSB7IH0KKyAgICAgICAg
flRpbGUoKTsKKworICAgICAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICAgICAgdW5zaWduZWQgaW50IHJlbGVhc2VUZXh0dXJlSWQo
KTsKKworICAgICAgICBib29sIGRpcnR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGlydHlMYXllclJl
Y3QuaXNFbXB0eSgpOyB9CisgICAgICAgIHZvaWQgY2xlYXJEaXJ0eSgpIHsgbV9kaXJ0eUxheWVy
UmVjdCA9IEludFJlY3QoKTsgfQorCisgICAgICAgIC8vIExheWVyLXNwYWNlIGRpcnR5IHJlY3Rh
bmdsZSB0aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZC4KKyAgICAgICAgSW50UmVjdCBtX2RpcnR5
TGF5ZXJSZWN0OworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGludCBtX3RleHR1cmVJ
ZDsKKyAgICB9OworCisgICAgdm9pZCByZXNpemVMYXllcihjb25zdCBJbnRTaXplJiBzaXplKTsK
KyAgICAvLyBHcm93IGxheWVyIHNpemUgdG8gY29udGFpbiB0aGlzIHJlY3RhbmdsZS4KKyAgICB2
b2lkIGdyb3dMYXllclRvQ29udGFpbihjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyUmVuZGVyZXI7IH0KKyAgICBHcmFwaGljc0NvbnRleHQzRCogbGF5ZXJSZW5kZXJlckNv
bnRleHQoKSBjb25zdDsKKyAgICBUaWxlKiBjcmVhdGVUaWxlKGludCBpLCBpbnQgaik7CisgICAg
Ly8gSW52YWxpZGF0ZSBhbnkgdGlsZXMgd2hpY2ggZG8gbm90IGludGVyc2VjdCB3aXRoIHRoZSBu
ZXdMYXllclJlY3QuCisgICAgdm9pZCBpbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYgb2xk
TGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBuZXdMYXllclJlY3QpOworICAgIHZvaWQgY29udGVu
dFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQgJmxlZnQs
IGludCAmdG9wLCBpbnQgJnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29uc3Q7CisgICAgSW50UmVjdCBj
b250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsK
KyAgICBJbnRSZWN0IGxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJS
ZWN0KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIGluZGV4IGludG8gbV90aWxlcyBmb3Ig
YSBnaXZlbiB0aWxlIGxvY2F0aW9uLgorICAgIGludCB0aWxlSW5kZXgoaW50IGksIGludCBqKSBj
b25zdDsKKyAgICAvLyBSZXR1cm5zIHRoZSBib3VuZHMgaW4gY29udGVudCBzcGFjZSBmb3IgYSBn
aXZlbiB0aWxlIGxvY2F0aW9uLgorICAgIEludFJlY3QgdGlsZUNvbnRlbnRSZWN0KGludCBpLCBp
bnQgaikgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0aGUgYm91bmRzIGluIGxheWVyIHNwYWNlIGZv
ciBhIGdpdmVuIHRpbGUgbG9jYXRpb24uCisgICAgSW50UmVjdCB0aWxlTGF5ZXJSZWN0KGludCBp
LCBpbnQgaikgY29uc3Q7CisKKyAgICBJbnRTaXplIG1fdGlsZVNpemU7CisgICAgSW50U2l6ZSBt
X2xheWVyU2l6ZTsKKyAgICBJbnRTaXplIG1fbGF5ZXJUaWxlU2l6ZTsKKyAgICBJbnRSZWN0IG1f
bGFzdFVwZGF0ZUxheWVyUmVjdDsKKyAgICBJbnRQb2ludCBtX2xheWVyUG9zaXRpb247CisKKyAg
ICAvLyBMb2dpY2FsIDJEIGFycmF5IG9mIHRpbGVzIChkaW1lbnNpb25zIG9mIG1fbGF5ZXJUaWxl
U2l6ZSkKKyAgICBWZWN0b3I8T3duUHRyPFRpbGU+ID4gbV90aWxlczsKKyAgICAvLyBMaW5lYXIg
YXJyYXkgb2YgdW51c2VkIHRpbGVzLgorICAgIFZlY3RvcjxPd25QdHI8VGlsZT4gPiBtX3VudXNl
ZFRpbGVzOworCisgICAgLy8gQ2FjaGUgYSB0aWxlLXNpemVkIHBpeGVsIGJ1ZmZlciB0byBkcmF3
IGludG8uCisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV90aWxlUGl4ZWxzOworCisgICAgTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCit9CisKKyNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MTBkYjk0YWU1YzY0MmMzODI4MzJjOGRmMGEwMzAwNTZhOGJiYjJkZC4uMDc3ZDUwZmZhN2NhNjc4
MGRjMGU0Mzg3ZWMwOTc3Mzg1ZWU4NWE4MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTAtMTItMDIgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFRpbGUg
cm9vdCBsYXllciBvZiB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTQ3CisKKyAgICAgICAgUmVmYWN0b3Igcm9vdCBsYXll
ciBsb2dpYyBvdXQgb2YgV2ViVmlld0ltcGwgYW5kIGludG8KKyAgICAgICAgTGF5ZXJUaWxlckNo
cm9taXVtLiAgVGhlIHBhaW50aW5nIGlzIG5vdyBkb25lIHRocm91Z2ggYW4gaW50ZXJmYWNlCisg
ICAgICAgIHJhdGhlciB0aGFuIGRpcmVjdGx5IGluIFdlYlZpZXdJbXBsLgorCisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9s
bFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0
ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGxU
aWxlUGFpbnRJbnRlcmZhY2U6OldlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGxUaWxlUGFpbnRJbnRlcmZhY2U6OnBhaW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGxTY3JvbGxiYXJQYWludEludGVyZmFjZTo6V2ViVmlld0lt
cGxTY3JvbGxiYXJQYWludEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
U2Nyb2xsYmFyUGFpbnRJbnRlcmZhY2U6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmRvQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAx
MC0xMi0wMyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjczMzAyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAppbmRleCA3YmVjMjU0MDhkNzVjMzEwOWViN2Y4ZjU2YTBkODIwMGNmZDhlOThh
Li43YjU5YjVjYWMyNDU5ZDNjYTJmOTQ5ZTM3MGU5MDlmOGU3ODU5MzhkIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMjI5Miw4MyArMjI5MiwyNSBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzY3Jv
bGxSb290TGF5ZXJSZWN0KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCkKIHsKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICAvLyBDb21w
dXRlIHRoZSBkYW1hZ2UgcmVjdCBpbiB2aWV3cG9ydCBzcGFjZS4KLSAgICBXZWJGcmFtZUltcGwq
IHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwotICAgIGlmICghd2ViZnJhbWUpCi0gICAgICAg
IHJldHVybjsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7Ci0g
ICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0
ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKLSAgICBJbnRSZWN0IHNjcmVlblJl
Y3QgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRlbnRSZWN0KTsKLQotICAgIC8vIFdlIHN1
cHBvcnQgZmFzdCBzY3JvbGxpbmcgaW4gb25lIGRpcmVjdGlvbiBhdCBhIHRpbWUuCi0gICAgaWYg
KHNjcm9sbERlbHRhLndpZHRoKCkgJiYgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpIHsKLSAgICAgICAg
aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoV2ViUmVjdChzY3JlZW5SZWN0KSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBDb21wdXRlIHRoZSByZWdpb24gd2Ugd2lsbCBleHBvc2Ug
Ynkgc2Nyb2xsaW5nLiBXZSB1c2UgdGhlCi0gICAgLy8gY29udGVudCByZWN0IGZvciBpbnZhbGlk
YXRpb24uICBVc2luZyB0aGlzIHNwYWNlIGZvciBkYW1hZ2UKLSAgICAvLyByZWN0cyBhbGxvd3Mg
dXMgdG8gaW50ZXJtaXggaW52YWxpZGF0ZXMgd2l0aCBzY3JvbGxzLgotICAgIEludFJlY3QgZGFt
YWdlZENvbnRlbnRzUmVjdDsKLSAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSkgewotICAgICAg
ICBpbnQgZHggPSBzY3JvbGxEZWx0YS53aWR0aCgpOwotICAgICAgICBkYW1hZ2VkQ29udGVudHNS
ZWN0LnNldFkoc2NyZWVuUmVjdC55KCkpOwotICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNl
dEhlaWdodChzY3JlZW5SZWN0LmhlaWdodCgpKTsKLSAgICAgICAgaWYgKGR4ID4gMCkgewotICAg
ICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRYKHNjcmVlblJlY3QueCgpKTsKLSAgICAg
ICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoZHgpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRYKHNjcmVlblJlY3QucmlnaHQo
KSArIGR4KTsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoLWR4KTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLmhl
aWdodCgpOwotICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFgoc2NyZWVuUmVjdC54KCkp
OwotICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFdpZHRoKHNjcmVlblJlY3Qud2lkdGgo
KSk7Ci0gICAgICAgIGlmIChkeSA+IDApIHsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1Jl
Y3Quc2V0WShzY3JlZW5SZWN0LnkoKSk7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0
LnNldEhlaWdodChkeSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29u
dGVudHNSZWN0LnNldFkoc2NyZWVuUmVjdC5ib3R0b20oKSArIGR5KTsKLSAgICAgICAgICAgIGRh
bWFnZWRDb250ZW50c1JlY3Quc2V0SGVpZ2h0KC1keSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBNb3ZlIHRoZSBwcmV2aW91cyBkYW1hZ2UKLSAgICBtX3Jvb3RMYXllclNjcm9sbERhbWFn
ZS5tb3ZlKHNjcm9sbERlbHRhLndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgpKTsKLSAgICAv
LyBVbmlvbiB3aXRoIHRoZSBuZXcgZGFtYWdlIHJlY3QuCi0gICAgbV9yb290TGF5ZXJTY3JvbGxE
YW1hZ2UudW5pdGUoZGFtYWdlZENvbnRlbnRzUmVjdCk7Ci0KLSAgICAvLyBTY3JvbGwgYW55IGV4
aXN0aW5nIGRhbWFnZSB0aGF0IGludGVyc2VjdHMgd2l0aCBjbGlwIHJlY3QKLSAgICBpZiAoY2xp
cFJlY3QuaW50ZXJzZWN0cyhtX3Jvb3RMYXllckRpcnR5UmVjdCkpIHsKLSAgICAgICAgLy8gRmlu
ZCB0aGUgaW5uZXIgZGFtYWdlCi0gICAgICAgIEludFJlY3QgaW5uZXJEYW1hZ2UoY2xpcFJlY3Qp
OwotICAgICAgICBpbm5lckRhbWFnZS5pbnRlcnNlY3QobV9yb290TGF5ZXJEaXJ0eVJlY3QpOwot
Ci0gICAgICAgIC8vIE1vdmUgdGhlIGRhbWFnZQotICAgICAgICBpbm5lckRhbWFnZS5tb3ZlKHNj
cm9sbERlbHRhLndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgpKTsKLQotICAgICAgICAvLyBN
ZXJnZSBpdCBiYWNrIGludG8gdGhlIGRhbWFnZWQgcmVjdAotICAgICAgICBtX3Jvb3RMYXllckRp
cnR5UmVjdC51bml0ZShpbm5lckRhbWFnZSk7Ci0gICAgfQotCisgICAgLy8gRklYTUU6IFRvIGF2
b2lkIGJyZWFraW5nIHRoZSBDaHJvbWUgcmVuZGVyX3dpZGdldCB3aGVuIHRoZSBuZXcgY29tcG9z
aXRvciByZW5kZXIKKyAgICAvLyBwYXRoIGlzIG5vdCBjaGVja2VkIGluLCB3ZSBtdXN0IHN0aWxs
IHBhc3Mgc2Nyb2xsIGRhbWFnZSB1cCB0byB0aGUgY2xpZW50LiBUaGlzCisgICAgLy8gY29kZSB3
aWxsIGJlIGJhY2tlZCBvdXQgaW4gYSBmb2xsb3d1cCBDTCBvbmNlIHRoZSBDaHJvbWl1bSBjaGFu
Z2VzIGhhdmUgbGFuZGVkLgorICAgIG1fY2xpZW50LT5kaWRTY3JvbGxSZWN0KHNjcm9sbERlbHRh
LndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgpLCBjbGlwUmVjdCk7CiAgICAgc2V0Um9vdExh
eWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290
TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKG1fbGF5ZXJSZW5k
ZXJlcik7Ci0KICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklY
TUU6IGFkZCBhIHNtYXJ0ZXIgZGFtYWdlIGFnZ3JlZ2F0aW9uIGxvZ2ljIGFuZC9vciB1bmlmeSB3
aXRoCi0gICAgLy8gTGF5ZXJDaHJvbWl1bSdzIGRhbWFnZSBsb2dpYwotICAgIG1fcm9vdExheWVy
RGlydHlSZWN0LnVuaXRlKHJlY3QpOworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KGZhbHNlKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlz
aWJsZUNvbnRlbnRSZWN0KHRydWUpOworCisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB2aWV3LT53
aW5kb3dUb0NvbnRlbnRzKHJlY3QpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+aW52YWxpZGF0ZVJv
b3RMYXllclJlY3QoZGlydHlSZWN0LCB2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOwogICAgIHNl
dFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogfQogCkBAIC0yMzgwLDYgKzIzMjIsOSBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3Rp
dmUpCiAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID09IGFjdGl2ZSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKHBhZ2UoKSkKKyAgICAgICAgcGFnZSgpLT5tYWlu
RnJhbWUoKS0+dmlldygpLT5zZXRDbGlwc1JlcGFpbnRzKCFhY3RpdmUpOworCiAgICAgaWYgKCFh
Y3RpdmUpIHsKICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxz
ZTsKICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKQEAgLTI0MDQsNiArMjM0OSw3IEBAIHZv
aWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFj
dGl2ZSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndp
ZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOwogICAgIH0KICAgICBtX2xheWVyUmVu
ZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0LnJlbGVhc2UoKSk7
CisKICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7CiAgICAgICAgIG1fY2xpZW50LT5kaWRBY3Rp
dmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgICAgIG1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKQEAgLTI0MTUsNTkgKzIzNjEsNDkgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZl
KQogICAgIH0KIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMo
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1l
ID0gbWFpbkZyYW1lSW1wbCgpOwotICAgIGlmICghd2ViZnJhbWUpCi0gICAgICAgIHJldHVybjsK
LSAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7Ci0gICAgaWYgKCF2
aWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIgPSBt
X2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpOwotICAgIGlmIChyb290TGF5ZXIpIHsKLSAgICAg
ICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsK
LQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6
ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
KiByb290TGF5ZXJDb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXJHcmFwaGljc0Nv
bnRleHQoKTsKLQotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgICAgIFBsYXRmb3JtQ29udGV4dFNr
aWEqIHNraWFDb250ZXh0ID0gcm9vdExheWVyQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0g
ICAgICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBwbGF0Zm9ybUNhbnZhcyA9IHNraWFDb250ZXh0
LT5jYW52YXMoKTsKLQotICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+c2F2ZSgpOwotCi0gICAgICAg
IC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBh
aW50IHJlY3QuCi0gICAgICAgIHBsYXRmb3JtQ2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8
U2tTY2FsYXI+KC1yZWN0LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtcmVjdC55KCkpKTsK
LQotICAgICAgICByb290TGF5ZXJDb250ZXh0LT5zYXZlKCk7Ci0KLSAgICAgICAgd2ViZnJhbWUt
PnBhaW50V2l0aENvbnRleHQoKnJvb3RMYXllckNvbnRleHQsIHJlY3QpOwotICAgICAgICByb290
TGF5ZXJDb250ZXh0LT5yZXN0b3JlKCk7CitjbGFzcyBXZWJWaWV3SW1wbFRpbGVQYWludEludGVy
ZmFjZSA6IHB1YmxpYyBUaWxlUGFpbnRJbnRlcmZhY2UgeworcHVibGljOgorICAgIGV4cGxpY2l0
IFdlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkK
KyAgICAgICAgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKQorICAgIHsKKyAgICB9CiAKLSAg
ICAgICAgcGxhdGZvcm1DYW52YXMtPnJlc3RvcmUoKTsKLSNlbGlmIFBMQVRGT1JNKENHKQotICAg
ICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcm9vdExheWVyQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCisgICAgeworICAgICAgICBQYWdlKiBwYWdl
ID0gbV93ZWJWaWV3SW1wbC0+cGFnZSgpOworICAgICAgICBpZiAoIXBhZ2UpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UtPm1haW5GcmFtZSgpLT52
aWV3KCk7CisgICAgICAgIHZpZXctPnBhaW50Q29udGVudHMoJmNvbnRleHQsIGNvbnRlbnRSZWN0
KTsKKyAgICB9CiAKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjZ0NvbnRleHQpOworcHJp
dmF0ZToKKyAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKK307CiAKLSAgICAgICAgLy8g
QnJpbmcgdGhlIENvcmVHcmFwaGljcyBjb250ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVt
IG9mIHRoZSBwYWludCByZWN0LgotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250
ZXh0LCAtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAKLSAgICAgICAgcm9vdExheWVyQ29udGV4dC0+
c2F2ZSgpOworY2xhc3MgV2ViVmlld0ltcGxTY3JvbGxiYXJQYWludEludGVyZmFjZSA6IHB1Ymxp
YyBUaWxlUGFpbnRJbnRlcmZhY2UgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYlZpZXdJbXBs
U2Nyb2xsYmFyUGFpbnRJbnRlcmZhY2UoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsKQorICAgICAg
ICA6IG1fd2ViVmlld0ltcGwod2ViVmlld0ltcGwpCisgICAgeworICAgIH0KIAotICAgICAgICB3
ZWJmcmFtZS0+cGFpbnRXaXRoQ29udGV4dCgqcm9vdExheWVyQ29udGV4dCwgcmVjdCk7Ci0gICAg
ICAgIHJvb3RMYXllckNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKKyAg
ICB7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCk7CisgICAgICAg
IGlmICghcGFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3
ID0gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKIAotICAgICAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKGNnQ29udGV4dCk7Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRm
b3JtCi0jZW5kaWYKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUodmlldy0+c2Nyb2xsWCgpLCB2
aWV3LT5zY3JvbGxZKCkpOworICAgICAgICBJbnRSZWN0IHdpbmRvd1JlY3QgPSB2aWV3LT5jb250
ZW50c1RvV2luZG93KGNvbnRlbnRSZWN0KTsKKyAgICAgICAgdmlldy0+cGFpbnRTY3JvbGxiYXJz
KCZjb250ZXh0LCB3aW5kb3dSZWN0KTsKICAgICB9Ci19CisKK3ByaXZhdGU6CisgICAgV2ViVmll
d0ltcGwqIG1fd2ViVmlld0ltcGw7Cit9OwogCiB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0
ZSgpCiB7CkBAIC0yNDc5LDMyICsyNDE1LDEyIEBAIHZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9z
aXRlKCkKICAgICAvLyBUaGUgdmlzaWJsZVJlY3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVyZWFz
IHRoZSBjb250ZW50UmVjdCBkb2Vzbid0LgogICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CiAgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZp
ZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7Ci0gICAgSW50UmVjdCB2aWV3UG9ydCA9IElu
dFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKLQotICAgIC8vIEdpdmUg
dGhlIGNvbXBvc2l0b3IgYSBjaGFuY2UgdG8gc2V0dXAvcmVzaXplIHRoZSByb290IHRleHR1cmUg
aGFuZGxlIGFuZCBwZXJmb3JtIHNjcm9sbGluZy4KLSAgICBtX2xheWVyUmVuZGVyZXItPnByZXBh
cmVUb0RyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBJbnRQb2ludCh2aWV3LT5z
Y3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOwotCi0gICAgLy8gRHJhdyB0aGUgY29udGVudHMg
b2YgdGhlIHJvb3QgbGF5ZXIuCi0gICAgVmVjdG9yPEludFJlY3Q+IGRhbWFnZVJlY3RzOwotICAg
IGRhbWFnZVJlY3RzLmFwcGVuZChtX3Jvb3RMYXllclNjcm9sbERhbWFnZSk7Ci0gICAgZGFtYWdl
UmVjdHMuYXBwZW5kKG1fcm9vdExheWVyRGlydHlSZWN0KTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRhbWFnZVJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEludFJlY3QgZGFtYWdl
ZFJlY3QgPSBkYW1hZ2VSZWN0c1tpXTsKKyAgICBJbnRQb2ludCBzY3JvbGwodmlldy0+c2Nyb2xs
WCgpLCB2aWV3LT5zY3JvbGxZKCkpOwogCi0gICAgICAgIC8vIEludGVyc2VjdCB0aGlzIHJlY3Rh
bmdsZSB3aXRoIHRoZSB2aWV3UG9ydC4KLSAgICAgICAgZGFtYWdlZFJlY3QuaW50ZXJzZWN0KHZp
ZXdQb3J0KTsKLQotICAgICAgICAvLyBOb3cgcmVuZGVyIGl0LgotICAgICAgICBpZiAoZGFtYWdl
ZFJlY3Qud2lkdGgoKSAmJiBkYW1hZ2VkUmVjdC5oZWlnaHQoKSkgewotICAgICAgICAgICAgdXBk
YXRlUm9vdExheWVyQ29udGVudHMoZGFtYWdlZFJlY3QpOwotICAgICAgICAgICAgbV9sYXllclJl
bmRlcmVyLT51cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChkYW1hZ2VkUmVjdCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgbV9yb290TGF5ZXJEaXJ0eVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9y
b290TGF5ZXJTY3JvbGxEYW1hZ2UgPSBJbnRSZWN0KCk7CisgICAgV2ViVmlld0ltcGxUaWxlUGFp
bnRJbnRlcmZhY2UgdGlsZVBhaW50KHRoaXMpOwogCi0gICAgLy8gRHJhdyB0aGUgYWN0dWFsIGxh
eWVycy4uLgotICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29u
dGVudFJlY3QpOworICAgIFdlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRJbnRlcmZhY2Ugc2Nyb2xs
YmFyUGFpbnQodGhpcyk7CisgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKHZpc2libGVS
ZWN0LCBjb250ZW50UmVjdCwgc2Nyb2xsLCB0aWxlUGFpbnQsIHNjcm9sbGJhclBhaW50KTsKIH0K
IAogdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAppbmRleCAwMzg4NzcwN2E4N2Q0OWYzZjMwOWZkM2RmODc2NzgzNDIzYTUwZGEx
Li45MjE1MTdkZjg0MWMxZTI1MjllYTc5NDk4OTIxYTAyMDIwMjlmNjljIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCkBAIC00MDcsNyArNDA3LDYgQEAgcHJpdmF0ZToKIAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZShib29sKTsKLSAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CiAgICAgdm9pZCBk
b1BpeGVsUmVhZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CiAgICAgdm9pZCByZWFsbG9jYXRlUmVuZGVyZXIoKTsKQEAgLTUzOSw3ICs1MzgsNiBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX21vdXNlQ2FwdHVyZU5vZGU7CiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgV2ViQ29yZTo6SW50UmVjdCBt
X3Jvb3RMYXllckRpcnR5UmVjdDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVyU2Ny
b2xsRGFtYWdlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1f
bGF5ZXJSZW5kZXJlcjsKICAgICBib29sIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77043</attachid>
            <date>2010-12-20 15:21:05 -0800</date>
            <delta_ts>2010-12-20 16:24:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49947-20101220152103.patch</filename>
            <type>text/plain</type>
            <size>63205</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODRjNDQxMzc4MDZiNjdlMDZmZDNkNDI3NmQ3NmRlYzc5NjViNmQ3NS4uMWFkMzM1ZmNlMGE2Y2Ji
MjBiMTM1MGY1MzYwMzM2MDE5NjZiMjZiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAxMC0xMi0yMCAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gVGlsZSByb290IGxheWVyIG9mIHRo
ZSBjb21wb3NpdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDk5NDcKKworICAgICAgICBSZWZhY3RvciByb290IGxheWVyIHVwZGF0ZSBhbmQgZHJh
d2luZyBmcm9tIExheWVyUmVuZGVyZXJDaHJvbWl1bSBpbnRvCisgICAgICAgIExheWVyVGlsZXJD
aHJvbWl1bS4gIFRoZSByb290IGxheWVyIGlzIG5vdyBkcmF3biBhcyBtdWx0aXBsZSB0aWxlcwor
ICAgICAgICByYXRoZXIgdGhhbiBhcyBvbmUgc2luZ2xlIGxhcmdlIHRleHR1cmUuICBTY3JvbGxi
YXJzIGFyZSBub3cgZHJhd24KKyAgICAgICAgc2VwYXJhdGVseSByYXRoZXIgdGhhbiBhcyBwYXJ0
IG9mIHRoZSByb290IGxheWVyLgorCisgICAgICAgIFRlc3Q6IExheW91dFRlc3RzL2NvbXBvc2l0
aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5n
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
OjpzZXRDbGlwc1JlcGFpbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpjbGlwc1JlcGFpbnRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVy
ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVz
ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZlcnRp
Y2FsU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06Omhvcml6b250YWxTY3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9vdExheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFJvb3RMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJl
ZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGlsZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjpMYXllclRpbGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjp+TGF5ZXJUaWxlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJD
aHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Q2hyb21pdW06OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6
Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmludmFs
aWRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmNvbnRl
bnRSZWN0VG9UaWxlSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21p
dW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpsYXllclJlY3RUb0NvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXJDaHJvbWl1bTo6dGlsZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6dGlsZUxheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Q2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJD
aHJvbWl1bTo6aW52YWxpZGF0ZUVudGlyZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VGlsZXJDaHJvbWl1bTo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJv
bWl1bTo6c2V0TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hy
b21pdW06OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpyZXNp
emVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06Omdyb3dMYXll
clRvQ29udGFpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6
On5UaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6cmVs
ZWFzZVRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUaWxlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNo
cm9taXVtOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1
bTo6VGlsZTo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1
bTo6VGlsZTo6ZGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpU
aWxlOjpjbGVhckRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6
bGF5ZXJSZW5kZXJlcik6CisKIDIwMTAtMTItMjAgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBn
b29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZmNh
OGNmYzQyZDI0YjcxODlkZTk4YWFhMWZmNmVmOTk0YzI3NDUxOC4uMmZhNDFiMzllYzM2NGRhYzE3
OTllZjEwY2FiZmY4MTM2ZTU3ZWU2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI1OTksNiArMjU5OSw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVy
Q2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKaW5kZXggMjQ4NDg2MGU5NWQ5MGMyYWE2ZTBhNTFhZmZkZjQzOGM5ZGZiZWFiMC4uZDFlOGQx
NTg1NjViNWExMjlkZDMwMmRiMGY1YTE1ZWZkZDljMjY1ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTEz
MTQsNyArMTMxNCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZShj
b25zdCBJbnRSZWN0JiByLCBib29sIGltbWVkaWF0ZSkKICAgICBkb3VibGUgZGVsYXkgPSBhZGp1
c3RlZERlZmVycmVkUmVwYWludERlbGF5KCk7CiAgICAgaWYgKChtX2RlZmVycmluZ1JlcGFpbnRz
IHx8IG1fZGVmZXJyZWRSZXBhaW50VGltZXIuaXNBY3RpdmUoKSB8fCBkZWxheSkgJiYgIWltbWVk
aWF0ZSkgewogICAgICAgICBJbnRSZWN0IHBhaW50UmVjdCA9IHI7Ci0gICAgICAgIGlmICghcGFp
bnRzRW50aXJlQ29udGVudHMoKSkKKyAgICAgICAgaWYgKGNsaXBzUmVwYWludHMoKSAmJiAhcGFp
bnRzRW50aXJlQ29udGVudHMoKSkKICAgICAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3Qodmlz
aWJsZUNvbnRlbnRSZWN0KCkpOwogICAgICAgICBpZiAocGFpbnRSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCmluZGV4IDdkOWU3OTJmYTli
ODcxYzY5YTYyZGU4YzUzYWNlMzIzMTAyN2ViOWUuLjU3YTU5MTgyMDY4NzRjYzc1MmZiMTNmNTkx
ZGM4NThhOTdhMDUzNjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtNTMsNiArNTMsNyBA
QCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKICAgICAsIG1fZHJhd1BhblNjcm9sbEljb24oZmFs
c2UpCiAgICAgLCBtX3VzZUZpeGVkTGF5b3V0KGZhbHNlKQogICAgICwgbV9wYWludHNFbnRpcmVD
b250ZW50cyhmYWxzZSkKKyAgICAsIG1fY2xpcHNSZXBhaW50cyh0cnVlKQogICAgICwgbV9kZWxl
Z2F0ZXNTY3JvbGxpbmcoZmFsc2UpCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CkBAIC0yMDIsNiAr
MjAzLDExIEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0UGFpbnRzRW50aXJlQ29udGVudHMoYm9vbCBw
YWludHNFbnRpcmVDb250ZW50cykKICAgICBtX3BhaW50c0VudGlyZUNvbnRlbnRzID0gcGFpbnRz
RW50aXJlQ29udGVudHM7CiB9CiAKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0Q2xpcHNSZXBhaW50cyhi
b29sIGNsaXBzUmVwYWludHMpCit7CisgICAgbV9jbGlwc1JlcGFpbnRzID0gY2xpcHNSZXBhaW50
czsKK30KKwogdm9pZCBTY3JvbGxWaWV3OjpzZXREZWxlZ2F0ZXNTY3JvbGxpbmcoYm9vbCBkZWxl
Z2F0ZXNTY3JvbGxpbmcpCiB7CiAgICAgbV9kZWxlZ2F0ZXNTY3JvbGxpbmcgPSBkZWxlZ2F0ZXNT
Y3JvbGxpbmc7CkBAIC03OTQsNyArODAwLDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpmcmFtZVJlY3Rz
Q2hhbmdlZCgpCiB2b2lkIFNjcm9sbFZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0
IEludFJlY3QmIHJlY3QsIGJvb2wgbm93KQogewogICAgIEludFJlY3QgcGFpbnRSZWN0ID0gcmVj
dDsKLSAgICBpZiAoIXBhaW50c0VudGlyZUNvbnRlbnRzKCkpCisgICAgaWYgKGNsaXBzUmVwYWlu
dHMoKSAmJiAhcGFpbnRzRW50aXJlQ29udGVudHMoKSkKICAgICAgICAgcGFpbnRSZWN0LmludGVy
c2VjdCh2aXNpYmxlQ29udGVudFJlY3QoKSk7CiAgICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTExNTUsNCArMTE2MSwzIEBAIGJvb2wgU2Nyb2xsVmlldzo6
cGxhdGZvcm1Jc09mZnNjcmVlbigpIGNvbnN0CiAjZW5kaWYKIAogfQotCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCmluZGV4IGVkMzMwOThmOGE1YjJjZjVhMzM0YmY3NGY5NGFiMjVkOGM2MWVmNWEuLjY2YjRj
MDliZGIyYmRlNTVhMDUxNzI1ZDI3ZjNmMGZmOTFmZGVlNTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5o
CkBAIC0xMTEsNiArMTExLDExIEBAIHB1YmxpYzoKICAgICBib29sIHBhaW50c0VudGlyZUNvbnRl
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludHNFbnRpcmVDb250ZW50czsgfQogICAgIHZvaWQg
c2V0UGFpbnRzRW50aXJlQ29udGVudHMoYm9vbCk7CiAKKyAgICAvLyBCeSBkZWZhdWx0LCBwYWlu
dCBldmVudHMgYXJlIGNsaXBwZWQgdG8gdGhlIHZpc2libGUgYXJlYS4gIElmIHNldCB0bworICAg
IC8vIGZhbHNlLCBwYWludCBldmVudHMgYXJlIG5vIGxvbmdlciBjbGlwcGVkLiAgcGFpbnRzRW50
aXJlQ29udGVudHMoKSBpbXBsaWVzICFjbGlwc1JlcGFpbnRzKCkuCisgICAgYm9vbCBjbGlwc1Jl
cGFpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwc1JlcGFpbnRzOyB9CisgICAgdm9pZCBzZXRD
bGlwc1JlcGFpbnRzKGJvb2wpOworCiAgICAgLy8gQnkgZGVmYXVsdCBwcm9ncmFtbWF0aWMgc2Ny
b2xsaW5nIGlzIGhhbmRsZWQgYnkgV2ViQ29yZSBhbmQgbm90IGJ5IHRoZSBVSSBhcHBsaWNhdGlv
bi4KICAgICAvLyBJbiB0aGUgY2FzZSBvZiB1c2luZyBhIHRpbGVkIGJhY2tpbmcgc3RvcmUsIHRo
aXMgbW9kZSBjYW4gYmUgc2V0LCBzbyB0aGF0IHRoZSBzY3JvbGwgcmVxdWVzdHMKICAgICAvLyBh
cmUgZGVsZWdhdGVkIHRvIHRoZSBVSSBhcHBsaWNhdGlvbi4KQEAgLTMyNSw2ICszMzAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV91c2VGaXhlZExheW91dDsKIAogICAgIGJvb2wgbV9wYWludHNF
bnRpcmVDb250ZW50czsKKyAgICBib29sIG1fY2xpcHNSZXBhaW50czsKICAgICBib29sIG1fZGVs
ZWdhdGVzU2Nyb2xsaW5nOwogCiAgICAgLy8gVGhlcmUgYXJlIDggcG9zc2libGUgY29tYmluYXRp
b25zIG9mIHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0aW9uLiAgU2Nyb2xsIG9yaWdpbiB3aWxsIGJl
IG5vbi16ZXJvIGluIHRoZSB4IG9yIHkgYXhpcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhYzk1Mjg1MTE3Mzk1MDYwMzU3
NzBlZDNmMWI2YjgxMDY1NzdlNzQ1Li5hMGE2OTBmOWFiZGJmODE5NGYzNDM1MDcyYmEwZDljODU1
YzA0ZmQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaApAQCAtNjAsNiArNjAsNyBAQCBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21p
dW07CiAvLyB0aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPExheWVyQ2hyb21pdW0+IHsKICAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOworICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIgPSAwKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDM1ZDZiMTE1
ZTk3ZGQ2YzkwNzBlMTI3ZGFiY2Y0MmQ1Njg0NGVjMTEuLjU0ZjdlZDYyYjEwZmQ2MDk4M2IzOGU4
OTJjMzY2NWI5MWFhOTg0MjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTEwMCw4ICsx
MDAsNyBAQCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaAogfQogCiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0KQotICAgIDogbV9yb290TGF5ZXJUZXh0dXJlSWQoMCkKLSAgICAsIG1fcm9vdExheWVy
VGV4dHVyZVdpZHRoKDApCisgICAgOiBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCgwKQogICAgICwg
bV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KDApCiAgICAgLCBtX3Jvb3RMYXllcigwKQogICAgICwg
bV9zY3JvbGxQb3NpdGlvbihJbnRQb2ludCgtMSwgLTEpKQpAQCAtMTEzLDExICsxMTIsMTkgQEAg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGUKICAgICAsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UoMCkK
IHsKICAgICBtX2hhcmR3YXJlQ29tcG9zaXRpbmcgPSBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygp
OworICAgIG1fcm9vdExheWVyVGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlz
LCBJbnRTaXplKDI1NiwgMjU2KSk7CisgICAgQVNTRVJUKG1fcm9vdExheWVyVGlsZXIpOwogfQog
CiBMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJlbmRlcmVyQ2hyb21pdW0oKQogewogICAg
IGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CisKKyAgICAvLyBCZWNhdXNlIHRoZSB0aWxlcnMgbmVl
ZCB0byBjbGVhbiB1cCB0ZXh0dXJlcywgY2xlYW4gdGhlbSB1cCBleHBsaWNpdGx5CisgICAgLy8g
YmVmb3JlIHRoZSBHcmFwaGljc0NvbnRleHQzRCBpcyBkZXN0cm95ZWQuCisgICAgbV9yb290TGF5
ZXJUaWxlciA9IDA7CisgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIgPSAwOworICAgIG1f
dmVydGljYWxTY3JvbGxiYXJUaWxlciA9IDA7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQoKQpAQCAtMTMyLDU0ICsxMzksODMgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBjb25zdCBjaGFyKgogICAgICAgICBMT0dfRVJST1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBG
aWxlOiAlc1xuXHRMaW5lICVkXG5cdGNvbW1hbmQ6ICVzLCBlcnJvciAleFxuIiwgZmlsZSwgbGlu
ZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8aW50PihlcnJvcikpOwogfQogCi0vLyBDcmVhdGVzIGEg
Y2FudmFzIGFuZCBhbiBhc3NvY2lhdGVkIGdyYXBoaWNzIGNvbnRleHQgdGhhdCB0aGUgcm9vdCBs
YXllciB3aWxsCi0vLyByZW5kZXIgaW50by4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpz
ZXRSb290TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuc2lnbmVkIHByb2dyYW1JZCkKIHsKLSAgICBpZiAo
c2l6ZSA9PSBtX3Jvb3RMYXllckNhbnZhc1NpemUpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
cHJvZ3JhbUlkICE9IG1fY3VycmVudFNoYWRlcikgeworICAgICAgICBHTEMobV9jb250ZXh0Lmdl
dCgpLCBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbUlkKSk7CisgICAgICAgIG1fY3VycmVu
dFNoYWRlciA9IHByb2dyYW1JZDsKKyAgICB9Cit9CiAKLSNpZiBQTEFURk9STShTS0lBKQotICAg
IC8vIENyZWF0ZSBuZXcgY2FudmFzIGFuZCBjb250ZXh0LiBPd25QdHIgdGFrZXMgY2FyZSBvZiBm
cmVlaW5nIHVwCi0gICAgLy8gdGhlIG9sZCBvbmVzLgotICAgIG1fcm9vdExheWVyQ2FudmFzID0g
bmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFs
c2UpOwotICAgIG1fcm9vdExheWVyU2tpYUNvbnRleHQgPSBuZXcgUGxhdGZvcm1Db250ZXh0U2tp
YShtX3Jvb3RMYXllckNhbnZhcy5nZXQoKSk7Ci0gICAgbV9yb290TGF5ZXJHcmFwaGljc0NvbnRl
eHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqPihtX3Jvb3RMYXllclNraWFDb250ZXh0LmdldCgpKSk7Ci0jZWxpZiBQTEFURk9S
TShDRykKLSAgICAvLyBSZWxlYXNlIHRoZSBwcmV2aW91cyBDR0JpdG1hcENvbnRleHQgYmVmb3Jl
IHJlYWxsb2NhdGluZyB0aGUgYmFja2luZyBzdG9yZSBhcyBhIHByZWNhdXRpb24uCi0gICAgbV9y
b290TGF5ZXJDR0NvbnRleHQuYWRvcHRDRigwKTsKLSAgICBpbnQgcm93Qnl0ZXMgPSA0ICogc2l6
ZS53aWR0aCgpOwotICAgIG1fcm9vdExheWVyQmFja2luZ1N0b3JlLnJlc2l6ZShyb3dCeXRlcyAq
IHNpemUuaGVpZ2h0KCkpOwotICAgIG1lbXNldChtX3Jvb3RMYXllckJhY2tpbmdTdG9yZS5kYXRh
KCksIDAsIG1fcm9vdExheWVyQmFja2luZ1N0b3JlLnNpemUoKSk7Ci0gICAgUmV0YWluUHRyPENH
Q29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZp
Y2VSR0IoKSk7Ci0gICAgbV9yb290TGF5ZXJDR0NvbnRleHQuYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUobV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7Ci0gICAgQ0dDb250
ZXh0VHJhbnNsYXRlQ1RNKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpLCAwLCBzaXplLmhlaWdo
dCgpKTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSwg
MSwgLTEpOwotICAgIG1fcm9vdExheWVyR3JhcGhpY3NDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29u
dGV4dChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSk7Ci0jZWxzZQotI2Vycm9yICJOZWVkIHRv
IGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCi0jZW5kaWYKK0ludFJlY3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2ZXJ0aWNhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIEludFJlY3QgdmVydGlj
YWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJlY3QucmlnaHQoKSwgY29udGVudFJlY3QueSgp
KSwgSW50U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpIC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXI7Cit9CiAK
LSAgICBtX3Jvb3RMYXllckNhbnZhc1NpemUgPSBzaXplOworSW50UmVjdCBMYXllclJlbmRlcmVy
Q2hyb21pdW06Omhvcml6b250YWxTY3JvbGxiYXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVS
ZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBJbnRSZWN0IGhvcml6b250
YWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJlY3QueCgpLCBjb250ZW50UmVjdC5ib3R0b20o
KSksIEludFNpemUodmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkgLSBj
b250ZW50UmVjdC5oZWlnaHQoKSkpOworICAgIHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyOwog
fQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuc2lnbmVkIHByb2dy
YW1JZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlkYXRlUm9vdExheWVyUmVj
dChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsKLSAgICBpZiAocHJvZ3JhbUlkICE9IG1fY3Vy
cmVudFNoYWRlcikgewotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnVz
ZVByb2dyYW0ocHJvZ3JhbUlkKSk7Ci0gICAgICAgIG1fY3VycmVudFNoYWRlciA9IHByb2dyYW1J
ZDsKKyAgICBpZiAoY29udGVudFJlY3QuaW50ZXJzZWN0cyhkaXJ0eVJlY3QpKQorICAgICAgICBt
X3Jvb3RMYXllclRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOworICAgIGlmIChtX2hv
cml6b250YWxTY3JvbGxiYXJUaWxlcikgeworICAgICAgICBJbnRSZWN0IHNjcm9sbGJhciA9IGhv
cml6b250YWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CisgICAgICAg
IGlmIChkaXJ0eVJlY3QuaW50ZXJzZWN0cyhzY3JvbGxiYXIpKSB7CisgICAgICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXJUaWxlci0+c2V0TGF5ZXJQb3NpdGlvbihzY3JvbGxiYXIubG9jYXRp
b24oKSk7CisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+aW52YWxpZGF0
ZVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV92ZXJ0aWNhbFNj
cm9sbGJhclRpbGVyKSB7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyID0gdmVydGljYWxTY3Jv
bGxiYXJSZWN0KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CisgICAgICAgIGlmIChkaXJ0eVJl
Y3QuaW50ZXJzZWN0cyhzY3JvbGxiYXIpKSB7CisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyVGlsZXItPnNldExheWVyUG9zaXRpb24oc2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3Qp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlQW5kRHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBh
aW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIC8vIE1hc2sgb3V0IHdyaXRlcyB0
byBhbHBoYSBjaGFubmVsOiBDbGVhclR5cGUgdmlhIFNraWEgcmVzdWx0cyBpbiBpbnZhbGlkCisg
ICAgLy8gemVybyBhbHBoYSB2YWx1ZXMgb24gdGV4dCBnbHlwaHMuIFRoZSByb290IGxheWVyIGlz
IGFsd2F5cyBvcGFxdWUuCisgICAgR0xDKGNvbnRleHQuZ2V0KCksIGNvbnRleHQtPmNvbG9yTWFz
ayh0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSkpOworCisgICAgbV9yb290TGF5ZXJUaWxlci0+dXBk
YXRlKHRpbGVQYWludCwgdmlzaWJsZVJlY3QpOworICAgIG1fcm9vdExheWVyVGlsZXItPmRyYXco
dmlzaWJsZVJlY3QpOworCisgICAgaWYgKHZpc2libGVSZWN0LndpZHRoKCkgPiBjb250ZW50UmVj
dC53aWR0aCgpKSB7CisgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXIgPSB2ZXJ0aWNh
bFNjcm9sbGJhclJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgSW50U2l6
ZSB0aWxlU2l6ZSA9IHZlcnRpY2FsU2Nyb2xsYmFyLnNpemUoKS5zaHJ1bmtUbyhJbnRTaXplKG1f
bWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgaWYgKCFtX3ZlcnRp
Y2FsU2Nyb2xsYmFyVGlsZXIpCisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXIg
PSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxlU2l6ZSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0VGlsZVNpemUodGls
ZVNpemUpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9zaXRp
b24odmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXJUaWxlci0+dXBkYXRlKHNjcm9sbGJhclBhaW50LCB2aXNpYmxlUmVjdCk7CisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7CisgICAgfQorCisg
ICAgaWYgKHZpc2libGVSZWN0LmhlaWdodCgpID4gY29udGVudFJlY3QuaGVpZ2h0KCkpIHsKKyAg
ICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhclJl
Y3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICAgICAgSW50U2l6ZSB0aWxlU2l6ZSA9
IGhvcml6b250YWxTY3JvbGxiYXIuc2l6ZSgpLnNocnVua1RvKEludFNpemUobV9tYXhUZXh0dXJl
U2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkpOworICAgICAgICBpZiAoIW1faG9yaXpvbnRhbFNjcm9s
bGJhclRpbGVyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIgPSBMYXll
clRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxlU2l6ZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0aWxlU2l6
ZSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBvc2l0aW9u
KGhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhclRpbGVyLT51cGRhdGUoc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVSZWN0KTsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPmRyYXcodmlzaWJsZVJlY3QpOwogICAgIH0K
IH0KIAotLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB1cGRh
dGVzIGFyZSBtYWRlIHRvIHRoZQotLy8gcm9vdCBsYXllciB0ZXh0dXJlLiBJdCByZXNpemVzIHRo
ZSByb290IGxheWVyIHRleHR1cmUgYW5kIHNjcm9sbHMgaXRzCi0vLyBjb250ZW50cyBhcyBuZWVk
ZWQuIEl0IGFsc28gc2V0cyB1cCBjb21tb24gR0wgc3RhdGUgdXNlZCBieSB0aGUgcmVzdAotLy8g
b2YgdGhlIGxheWVyIGRyYXdpbmcgY29kZS4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpw
cmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgVGlsZVBhaW50SW50ZXJmYWNl
JiB0aWxlUGFpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWxl
UGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50KQogewogICAgIEFTU0VSVChtX2hhcmR3YXJl
Q29tcG9zaXRpbmcpOwogCkBAIC0xODgsMTAgKzIyNCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBj
b25zCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fcm9vdExheWVyVGV4dHVyZUlkKSk7Ci0KLSAgICBib29sIHNraXBTY3JvbGwgPSBmYWxzZTsK
LQogICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSB2aXNpYmxlIGFyZWEgaGFzIGNoYW5nZWQgdGhl
biBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlCiAgICAgLy8gdG8gc3RvcmUgdGhlIGNvbnRlbnRzIG9m
IHRoZSByb290IGxheWVyIGFuZCBhZGp1c3QgdGhlIHByb2plY3Rpb24gbWF0cml4CiAgICAgLy8g
YW5kIHZpZXdwb3J0LgpAQCAtMjAxLDggKzIzMyw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25z
CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJlY3RXaWR0aDsKICAg
ICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3RIZWlnaHQ7CiAKLSAg
ICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9yb290
TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7Ci0K
ICAgICAgICAgaWYgKCFtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlKQogICAgICAgICAgICAg
bV9yb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgbV9yb290TGF5ZXIt
Pm1fcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IEludFJlY3QoMCwgMCwgbV9yb290TGF5
ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCk7CkBAIC0yMTAsMTAgKzI0
MCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zCiAgICAgICAgIC8vIFJlc2V0IHRoZSBjdXJy
ZW50IHJlbmRlciBzdXJmYWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmlld3BvcnQgYW5k
CiAgICAgICAgIC8vIHByb2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJTdXJmYWNl
IGlzIGNhbGxlZC4KICAgICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7Ci0KLSAgICAg
ICAgLy8gVGhlIHJvb3QgbGF5ZXIgdGV4dHVyZSB3YXMganVzdCByZXNpemVkIHNvIGl0cyBjb250
ZW50cyBhcmUgbm90Ci0gICAgICAgIC8vIHVzZWZ1bCBmb3Igc2Nyb2xsaW5nLgotICAgICAgICBz
a2lwU2Nyb2xsID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJz
IHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCkBAIC0y
MjksNzYgKzI1NSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3
TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zCiAgICAgLy8gQmxlbmRpbmcg
ZGlzYWJsZWQgYnkgZGVmYXVsdC4gUm9vdCBsYXllciBhbHBoYSBjaGFubmVsIG9uIFdpbmRvd3Mg
aXMgaW5jb3JyZWN0IHdoZW4gU2tpYSB1c2VzIENsZWFyVHlwZS4KICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CiAK
LSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBJbnRQb2ludCgtMSwgLTEpKSB7Ci0gICAgICAg
IG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKLSAgICAgICAgc2tpcFNjcm9sbCA9
IHRydWU7Ci0gICAgfQotCi0gICAgSW50UG9pbnQgc2Nyb2xsRGVsdGEgPSB0b1BvaW50KHNjcm9s
bFBvc2l0aW9uIC0gbV9zY3JvbGxQb3NpdGlvbik7Ci0KLSAgICAvLyBTY3JvbGxpbmcgbGFyZ2Vy
IHRoYW4gdGhlIGNvbnRlbnRSZWN0IHNpemUgZG9lcyBub3QgcHJlc2VydmUgYW55IG9mIHRoZSBw
aXhlbHMsIHNvIHRoZXJlIGlzCi0gICAgLy8gbm8gbmVlZCB0byBjb3B5IGZyYW1lYnVmZmVyIHBp
eGVscyBiYWNrIGludG8gdGhlIHRleHR1cmUuCi0gICAgaWYgKGFicyhzY3JvbGxEZWx0YS55KCkp
ID4gY29udGVudFJlY3QuaGVpZ2h0KCkgfHwgYWJzKHNjcm9sbERlbHRhLngoKSkgPiBjb250ZW50
UmVjdC53aWR0aCgpKQotICAgICAgICBza2lwU2Nyb2xsID0gdHJ1ZTsKLQotICAgIC8vIFNjcm9s
bCB0aGUgYmFja2J1ZmZlcgotICAgIGlmICghc2tpcFNjcm9sbCAmJiAoc2Nyb2xsRGVsdGEueCgp
IHx8IHNjcm9sbERlbHRhLnkoKSkpIHsKLSAgICAgICAgLy8gU2Nyb2xsaW5nIHdvcmtzIGFzIGZv
bGxvd3M6IFdlIHJlbmRlciBhIHF1YWQgd2l0aCB0aGUgY3VycmVudCByb290IGxheWVyIGNvbnRl
bnRzCi0gICAgICAgIC8vIHRyYW5zbGF0ZWQgYnkgdGhlIGFtb3VudCB0aGUgcGFnZSBoYXMgc2Ny
b2xsZWQgc2luY2UgdGhlIGxhc3QgdXBkYXRlIGFuZCB0aGVuIHJlYWQgdGhlCi0gICAgICAgIC8v
IHBpeGVscyBvZiB0aGUgY29udGVudCBhcmVhICh2aXNpYmxlIGFyZWEgZXhjbHVkaW5nIHRoZSBz
Y3JvbGwgYmFycykgYmFjayBpbnRvIHRoZQotICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUu
IFRoZSBuZXdseSBleHBvc2VkIGFyZWEgd2lsbCBiZSBmaWxsZWQgYnkgYSBzdWJzZXF1ZW50IGRy
YXdMYXllcnNJbnRvUmVjdCBjYWxsCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9s
bGVkTGF5ZXJNYXRyaXg7Ci0KLSAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC50cmFuc2xhdGUz
ZCgwLjUgKiB2aXNpYmxlUmVjdC53aWR0aCgpIC0gc2Nyb2xsRGVsdGEueCgpLAotICAgICAgICAg
ICAgMC41ICogdmlzaWJsZVJlY3QuaGVpZ2h0KCkgKyBzY3JvbGxEZWx0YS55KCksIDApOwotICAg
ICAgICBzY3JvbGxlZExheWVyTWF0cml4LnNjYWxlM2QoMSwgLTEsIDEpOwotCi0gICAgICAgIGNv
bnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiByc3YgPSByZW5kZXJTdXJm
YWNlU2hhcmVkVmFsdWVzKCk7Ci0gICAgICAgIHVzZVNoYWRlcihyc3YtPnNoYWRlclByb2dyYW0o
KSk7Ci0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dW5pZm9ybTFpKHJz
di0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bTo6
ZHJhd1RleHR1cmVkUXVhZChtX2NvbnRleHQuZ2V0KCksIG1fcHJvamVjdGlvbk1hdHJpeCwgc2Ny
b2xsZWRMYXllck1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3YtPnNoYWRlck1hdHJpeExvY2F0aW9u
KCksIHJzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKLQotICAgICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCAwLCAwLCAwLCAwLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVj
dC5oZWlnaHQoKSkpOwotICAgIH0KLQogICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3Np
dGlvbjsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllclRl
eHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCi17Ci0gICAgQVNTRVJUKG1faGFy
ZHdhcmVDb21wb3NpdGluZyk7Ci0KLSAgICBpZiAoIW1fcm9vdExheWVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOwotCi0g
ICAgLy8gVXBkYXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgQVNTRVJUKCh1cGRhdGVS
ZWN0LnJpZ2h0KCkgIDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQotICAgICAgICAgICAmJiAo
dXBkYXRlUmVjdC5ib3R0b20oKSA8PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKLQotI2lm
IFBMQVRGT1JNKFNLSUEpCi0gICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCBy
ZWN0LgotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX3Jvb3RMYXllckNhbnZhcy0+Z2V0
RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Ci0gICAgQVNTRVJUKGJpdG1hcC53aWR0aCgp
ID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBiaXRtYXAuaGVpZ2h0KCkgPT0gdXBkYXRlUmVjdC5o
ZWlnaHQoKSk7Ci0gICAgdm9pZCogcGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOwotI2VsaWYg
UExBVEZPUk0oQ0cpCi0gICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0
LgotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1f
cm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRp
Y19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0
LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgdm9pZCogcGl4ZWxzID0gbV9y
b290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwotI2Vsc2UKLSNlcnJvciAiTmVlZCB0byBpbXBs
ZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgotI2VuZGlmCi0gICAgLy8gQ29weSB0aGUgY29udGVu
dHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgIEdM
QyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRh
dGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7Ci19Ci0KLXZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBBU1NFUlQobV9oYXJk
d2FyZUNvbXBvc2l0aW5nKTsKLSAgICBBU1NFUlQobV9yb290TGF5ZXItPm1fcmVuZGVyU3VyZmFj
ZSk7CiAKICAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gbV9yb290TGF5ZXItPm1fcmVuZGVy
U3VyZmFjZS5nZXQoKTsKIApAQCAtMzA4LDIyICsyNjUsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjdAogICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAxLCAxKTsKICAgICBtX2NvbnRl
eHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIAotICAgIEdM
QyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7Ci0KLSAgICAvLyBSZW5kZXIg
dGhlIHJvb3QgbGF5ZXIgdXNpbmcgYSBxdWFkIHRoYXQgdGFrZXMgdXAgdGhlIGVudGlyZSB2aXNp
YmxlIGFyZWEgb2YgdGhlIHdpbmRvdy4KLSAgICAvLyBXZSByZXVzZSB0aGUgc2hhZGVyIHByb2dy
YW0gdXNlZCBieSBDb250ZW50TGF5ZXJDaHJvbWl1bS4KLSAgICBjb25zdCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJWYWx1ZXMgPSBjb250ZW50TGF5ZXJT
aGFyZWRWYWx1ZXMoKTsKLSAgICB1c2VTaGFkZXIoY29udGVudExheWVyVmFsdWVzLT5jb250ZW50
U2hhZGVyUHJvZ3JhbSgpKTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnVu
aWZvcm0xaShjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlclNhbXBsZXJMb2NhdGlvbigpLCAwKSk7
Ci0gICAgLy8gTWFzayBvdXQgd3JpdGVzIHRvIGFscGhhIGNoYW5uZWw6IENsZWFyVHlwZSB2aWEg
U2tpYSByZXN1bHRzIGluIGludmFsaWQKLSAgICAvLyB6ZXJvIGFscGhhIHZhbHVlcyBvbiB0ZXh0
IGdseXBocy4gVGhlIHJvb3QgbGF5ZXIgaXMgYWx3YXlzIG9wYXF1ZS4KLSAgICBHTEMobV9jb250
ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSkp
OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyTWF0cml4OwotICAgIGxheWVyTWF0cml4
LnRyYW5zbGF0ZTNkKHZpc2libGVSZWN0LndpZHRoKCkgKiAwLjVmLCB2aXNpYmxlUmVjdC5oZWln
aHQoKSAqIDAuNWYsIDApOwotICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQobV9j
b250ZXh0LmdldCgpLCBtX3Byb2plY3Rpb25NYXRyaXgsIGxheWVyTWF0cml4LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJl
Y3QuaGVpZ2h0KCksIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIGNvbnRlbnRMYXllclZhbHVl
cy0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKSk7CisgICAgdXBkYXRlQW5k
RHJhd1Jvb3RMYXllcih0aWxlUGFpbnQsIHNjcm9sbGJhclBhaW50LCB2aXNpYmxlUmVjdCwgY29u
dGVudFJlY3QpOwogCiAgICAgLy8gU2V0IHRoZSByb290IHZpc2libGUvY29udGVudCByZWN0cyAt
LS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXllcnMgY2FsbHMuCiAgICAgbV9yb290VmlzaWJs
ZVJlY3QgPSB2aXNpYmxlUmVjdDsKQEAgLTM5Myw2ICszMzUsMTYgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnByZXNlbnQoKQogICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsK
IH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFJvb3RMYXllcihQYXNzUmVmUHRy
PExheWVyQ2hyb21pdW0+IGxheWVyKQoreworICAgIG1fcm9vdExheWVyID0gbGF5ZXI7CisgICAg
bV9yb290TGF5ZXJUaWxlci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CisgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhclRpbGVyKQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxl
ci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJU
aWxlcikKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5pbnZhbGlkYXRlRW50aXJl
TGF5ZXIoKTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVy
UGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQo
cmVjdC5yaWdodCgpIDw9IHJvb3RMYXllclRleHR1cmVTaXplKCkud2lkdGgoKQpAQCAtODAzLDE5
ICs3NTUsNiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9i
amVjdHMoKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgLy8gQ3JlYXRlIGEg
dGV4dHVyZSBvYmplY3QgdG8gaG9sZCB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIuCi0g
ICAgbV9yb290TGF5ZXJUZXh0dXJlSWQgPSBjcmVhdGVMYXllclRleHR1cmUoKTsKLSAgICBpZiAo
IW1fcm9vdExheWVyVGV4dHVyZUlkKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNy
ZWF0ZSB0ZXh0dXJlIGZvciByb290IGxheWVyIik7Ci0gICAgICAgIGNsZWFudXBTaGFyZWRPYmpl
Y3RzKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVHVybiBvZmYgZmls
dGVyaW5nIGZvciB0aGUgcm9vdCBsYXllciB0byBhdm9pZCBibHVycmluZyBmcm9tIHRoZSByZXBl
YXRlZAotICAgIC8vIHdyaXRlcyBhbmQgcmVhZHMgdG8gdGhlIGZyYW1lYnVmZmVyIHRoYXQgaGFw
cGVuIHdoaWxlIHNjcm9sbGluZy4KLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRl
eHR1cmVJZCkpOwotICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpKTsKLSAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7Ci0KICAgICAvLyBHZXQgdGhlIG1heCB0ZXh0dXJl
IHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0uCiAgICAgbV9tYXhUZXh0dXJlU2l6ZSA9IDA7
CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpKTsKQEAgLTg1
MCwxMiArNzg5LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRP
YmplY3RzKCkKICAgICBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKICAgICBtX3Bs
dWdpbkxheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CiAgICAgbV9yZW5kZXJTdXJmYWNlU2hhcmVk
VmFsdWVzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9yb290TGF5ZXJUZXh0dXJlSWQpIHsKLSAgICAg
ICAgZGVsZXRlTGF5ZXJUZXh0dXJlKG1fcm9vdExheWVyVGV4dHVyZUlkKTsKLSAgICAgICAgbV9y
b290TGF5ZXJUZXh0dXJlSWQgPSAwOwotICAgIH0KLQogICAgIGlmIChtX29mZnNjcmVlbkZyYW1l
YnVmZmVySWQpCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVsZXRl
RnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCmluZGV4IDhhZjU4OWYyODc5MWM1YTAxNDhlZGM3ODU4NjIxNDk5NTVhMDUzYjQuLmVjOWRk
MTA1MGNkZGYzN2RlZTAxMGUzNDlkNWEyZGUzMDJhZThhZjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJMYXllclRpbGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAu
aCIKQEAgLTY3LDE0ICs2OCwxMiBAQCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCgpOwogCi0gICAgLy8gdXBkYXRlcyBzaXplIG9mIHJvb3QgdGV4dHVyZSwgaWYgbmVl
ZGVkLCBhbmQgc2Nyb2xscyB0aGUgYmFja2J1ZmZlci4KLSAgICB2b2lkIHByZXBhcmVUb0RyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIHZvaWQgaW52YWxpZGF0
ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBjb25zdCBJbnRSZWN0JiB2
aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCi0gICAgLy8gdXBkYXRl
cyBhIHJlY3RhbmdsZSB3aXRoaW4gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZQotICAgIHZvaWQgdXBk
YXRlUm9vdExheWVyVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCk7Ci0KLSAg
ICAvLyBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgotICAgIHZv
aWQgZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpOworICAgIC8vIHVwZGF0ZXMgYW5kIGRyYXdzIHRoZSBjdXJyZW50IGxheWVy
cyBvbnRvIHRoZSBiYWNrYnVmZmVyCisgICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBUaWxlUGFpbnRJbnRlcmZhY2Um
IHRpbGVQYWludCwKKyAgICAgICAgICAgICAgICAgICAgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3Jv
bGxiYXJQYWludCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAg
IHZvaWQgZmluaXNoKCk7CkBAIC04Miw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICAvLyBwdXRzIGJh
Y2tidWZmZXIgb25zY3JlZW4KICAgICB2b2lkIHByZXNlbnQoKTsKIAotICAgIHZvaWQgc2V0Um9v
dExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpIHsgbV9yb290TGF5ZXIgPSBs
YXllcjsgfQorICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bGF5ZXIpOwogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExh
eWVyLmdldCgpOyB9CiAgICAgdm9pZCB0cmFuc2ZlclJvb3RMYXllcihMYXllclJlbmRlcmVyQ2hy
b21pdW0qIG90aGVyKSB7IG90aGVyLT5tX3Jvb3RMYXllciA9IG1fcm9vdExheWVyLnJlbGVhc2Uo
KTsgfQogCkBAIC0xMzEsNiArMTMwLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd0xheWVy
KExheWVyQ2hyb21pdW0qLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qKTsKIAorICAgIHZvaWQgdXBk
YXRlQW5kRHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBh
aW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogICAgIGJvb2wgaXNMYXllclZpc2libGUo
TGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QpOwogCiAgICAgdm9pZCBzZXREcmF3Vmlld3BvcnRSZWN0KGNvbnN0IElu
dFJlY3QmLCBib29sIGZsaXBZKTsKQEAgLTE0NCwxMyArMTQ1LDE4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOwogICAgIHZvaWQgY2xlYW51cFNoYXJlZE9i
amVjdHMoKTsKIAotICAgIHVuc2lnbmVkIG1fcm9vdExheWVyVGV4dHVyZUlkOworICAgIHN0YXRp
YyBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHN0YXRpYyBJbnRSZWN0IGhvcml6
b250YWxTY3JvbGxiYXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCk7CisKICAgICBpbnQgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGg7CiAg
ICAgaW50IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodDsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1fcHJvamVjdGlvbk1hdHJpeDsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jv
b3RMYXllcjsKKyAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllclRpbGVy
OworICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1faG9yaXpvbnRhbFNjcm9sbGJhclRp
bGVyOworICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fdmVydGljYWxTY3JvbGxiYXJU
aWxlcjsKIAogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX2hhcmR3
YXJlQ29tcG9zaXRpbmc7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk0NTk4Zjc2MzQ1
MDdjZGM5NjcxNjcxZDEwYjg0Y2U0N2UxODAxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcApAQCAtMCww
ICsxLDQyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorCisjaWYgUExBVEZPUk0o
U0tJQSkKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCisjZWxpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q0dCaXRtYXBDb250ZXh0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPExheWVyVGlsZXJDaHJv
bWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBs
YXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSkKK3sKKyAgICBpZiAoIWxheWVy
UmVuZGVyZXIgfHwgdGlsZVNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVtKGxheWVyUmVuZGVyZXIsIHRp
bGVTaXplKSk7Cit9CisKK0xheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUpCisgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcikKK3sKKyAgICBzZXRUaWxl
U2l6ZSh0aWxlU2l6ZSk7Cit9CisKK0xheWVyVGlsZXJDaHJvbWl1bTo6fkxheWVyVGlsZXJDaHJv
bWl1bSgpCit7CisgICAgcmVzZXQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIExheWVyVGls
ZXJDaHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQoKSBjb25zdAoreworICAgIEFTU0VSVChs
YXllclJlbmRlcmVyKCkpOworICAgIHJldHVybiBsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsK
K30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldFRpbGVTaXplKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgaWYgKG1fdGlsZVNpemUgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcmVzZXQoKTsKKworICAgIG1fdGlsZVNpemUgPSBzaXplOworICAgIG1fdGlsZVBpeGVs
cyA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbbV90aWxlU2l6ZS53aWR0aCgpICogbV90aWxl
U2l6ZS5oZWlnaHQoKSAqIDRdKTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0
KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKCFtX3RpbGVzW2ldKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGxheWVyUmVuZGVyZXIoKS0+ZGVsZXRlTGF5ZXJUZXh0dXJlKG1fdGlsZXNbaV0tPnJlbGVhc2VU
ZXh0dXJlSWQoKSk7CisgICAgfQorICAgIG1fdGlsZXMuY2xlYXIoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdW51c2VkVGlsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFt
X3VudXNlZFRpbGVzW2ldKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxheWVyUmVu
ZGVyZXIoKS0+ZGVsZXRlTGF5ZXJUZXh0dXJlKG1fdW51c2VkVGlsZXNbaV0tPnJlbGVhc2VUZXh0
dXJlSWQoKSk7CisgICAgfQorICAgIG1fdW51c2VkVGlsZXMuY2xlYXIoKTsKKworICAgIG1fbGF5
ZXJTaXplID0gSW50U2l6ZSgpOworICAgIG1fbGF5ZXJUaWxlU2l6ZSA9IEludFNpemUoKTsKKyAg
ICBtX2xhc3RVcGRhdGVMYXllclJlY3QgPSBJbnRSZWN0KCk7Cit9CisKK0xheWVyVGlsZXJDaHJv
bWl1bTo6VGlsZSogTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikK
K3sKKyAgICBjb25zdCBpbnQgaW5kZXggPSB0aWxlSW5kZXgoaSwgaik7CisgICAgQVNTRVJUKCFt
X3RpbGVzW2luZGV4XSk7CisKKyAgICBpZiAobV91bnVzZWRUaWxlcy5zaXplKCkgPiAwKSB7Cisg
ICAgICAgIG1fdGlsZXNbaW5kZXhdID0gbV91bnVzZWRUaWxlcy5sYXN0KCkucmVsZWFzZSgpOwor
ICAgICAgICBtX3VudXNlZFRpbGVzLnJlbW92ZUxhc3QoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbGF5ZXJSZW5kZXJlcigpLT5jcmVhdGVM
YXllclRleHR1cmUoKTsKKyAgICAgICAgT3duUHRyPFRpbGU+IHRpbGUgPSBhZG9wdFB0cihuZXcg
VGlsZSh0ZXh0dXJlSWQpKTsKKworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgbV90aWxlU2l6ZS53aWR0aCgpLCBtX3RpbGVTaXplLmhlaWdodCgpLCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IDApKTsKKworICAgICAgICBtX3RpbGVzW2luZGV4XSA9IHRpbGUucmVsZWFzZSgpOworICAgIH0K
KworICAgIG1fdGlsZXNbaW5kZXhdLT5tX2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVjdChp
LCBqKTsKKyAgICByZXR1cm4gbV90aWxlc1tpbmRleF0uZ2V0KCk7Cit9CisKK3ZvaWQgTGF5ZXJU
aWxlckNocm9taXVtOjppbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYgb2xkTGF5ZXJSZWN0
LCBjb25zdCBJbnRSZWN0JiBuZXdMYXllclJlY3QpCit7CisgICAgaWYgKCFtX3RpbGVzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBvbGRDb250ZW50UmVjdCA9IGxheWVy
UmVjdFRvQ29udGVudFJlY3Qob2xkTGF5ZXJSZWN0KTsKKyAgICBpbnQgb2xkTGVmdCwgb2xkVG9w
LCBvbGRSaWdodCwgb2xkQm90dG9tOworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhvbGRD
b250ZW50UmVjdCwgb2xkTGVmdCwgb2xkVG9wLCBvbGRSaWdodCwgb2xkQm90dG9tKTsKKworICAg
IEludFJlY3QgbmV3Q29udGVudFJlY3QgPSBsYXllclJlY3RUb0NvbnRlbnRSZWN0KG5ld0xheWVy
UmVjdCk7CisgICAgaW50IG5ld0xlZnQsIG5ld1RvcCwgbmV3UmlnaHQsIG5ld0JvdHRvbTsKKyAg
ICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMobmV3Q29udGVudFJlY3QsIG5ld0xlZnQsIG5ld1Rv
cCwgbmV3UmlnaHQsIG5ld0JvdHRvbSk7CisKKyAgICAvLyBJdGVyYXRpbmcgdGhyb3VnaCBqdXN0
IHRoZSBvbGQgdGlsZSBpbmRpY2VzIGlzIGFuIG9wdGltaXphdGlvbiB0byBhdm9pZAorICAgIC8v
IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbnRpcmUgbV90aWxlcyBhcnJheS4KKyAgICBmb3IgKGlu
dCBqID0gb2xkVG9wOyBqIDw9IG9sZEJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSBvbGRMZWZ0OyBpIDw9IG9sZFJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpID49IG5l
d0xlZnQgJiYgaSA8PSBuZXdSaWdodCAmJiBqID49IG5ld1RvcCAmJiBqIDw9IG5ld0JvdHRvbSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgY29uc3QgaW50IGluZGV4
ID0gdGlsZUluZGV4KGksIGopOworICAgICAgICAgICAgaWYgKG1fdGlsZXNbaW5kZXhdKQorICAg
ICAgICAgICAgICAgIG1fdW51c2VkVGlsZXMuYXBwZW5kKG1fdGlsZXNbaW5kZXhdLnJlbGVhc2Uo
KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpjb250
ZW50UmVjdFRvVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGludCAmbGVm
dCwgaW50ICZ0b3AsIGludCAmcmlnaHQsIGludCAmYm90dG9tKSBjb25zdAoreworICAgIGNvbnN0
IEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7
CisKKyAgICBsZWZ0ID0gbGF5ZXJSZWN0LngoKSAvIG1fdGlsZVNpemUud2lkdGgoKTsKKyAgICB0
b3AgPSBsYXllclJlY3QueSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKKyAgICByaWdodCA9IChs
YXllclJlY3QucmlnaHQoKSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0aCgpOworICAgIGJvdHRvbSA9
IChsYXllclJlY3QuYm90dG9tKCkgLSAxKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7Cit9CisKK0lu
dFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAoreworICAgIEludFBvaW50IHBvcyhjb250ZW50UmVj
dC54KCkgLSBtX2xheWVyUG9zaXRpb24ueCgpLCBjb250ZW50UmVjdC55KCkgLSBtX2xheWVyUG9z
aXRpb24ueSgpKTsKKyAgICBJbnRSZWN0IGxheWVyUmVjdChwb3MsIGNvbnRlbnRSZWN0LnNpemUo
KSk7CisKKyAgICAvLyBDbGlwIHRvIHRoZSBwb3NpdGlvbi4KKyAgICBpZiAocG9zLngoKSA8IDAg
fHwgcG9zLnkoKSA8IDApCisgICAgICAgIGxheWVyUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwg
MCksIEludFNpemUoY29udGVudFJlY3Qud2lkdGgoKSArIHBvcy54KCksIGNvbnRlbnRSZWN0Lmhl
aWdodCgpICsgcG9zLnkoKSkpOworICAgIHJldHVybiBsYXllclJlY3Q7Cit9CisKK0ludFJlY3Qg
TGF5ZXJUaWxlckNocm9taXVtOjpsYXllclJlY3RUb0NvbnRlbnRSZWN0KGNvbnN0IEludFJlY3Qm
IGxheWVyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gbGF5ZXJSZWN0
OworICAgIGNvbnRlbnRSZWN0Lm1vdmUobV9sYXllclBvc2l0aW9uLngoKSwgbV9sYXllclBvc2l0
aW9uLnkoKSk7CisgICAgcmV0dXJuIGNvbnRlbnRSZWN0OworfQorCitpbnQgTGF5ZXJUaWxlckNo
cm9taXVtOjp0aWxlSW5kZXgoaW50IGksIGludCBqKSBjb25zdAoreworICAgIEFTU0VSVChpID49
IDAgJiYgaiA+PSAwICYmIGkgPCBtX2xheWVyVGlsZVNpemUud2lkdGgoKSAmJiBqIDwgbV9sYXll
clRpbGVTaXplLmhlaWdodCgpKTsKKyAgICByZXR1cm4gaSArIGogKiBtX2xheWVyVGlsZVNpemUu
d2lkdGgoKTsKK30KKworSW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OnRpbGVDb250ZW50UmVj
dChpbnQgaSwgaW50IGopIGNvbnN0Cit7CisgICAgSW50UG9pbnQgYW5jaG9yKG1fbGF5ZXJQb3Np
dGlvbi54KCkgKyBpICogbV90aWxlU2l6ZS53aWR0aCgpLCBtX2xheWVyUG9zaXRpb24ueSgpICsg
aiAqIG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgIEludFJlY3QgdGlsZShhbmNob3IsIG1fdGls
ZVNpemUpOworICAgIHJldHVybiB0aWxlOworfQorCitJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1
bTo6dGlsZUxheWVyUmVjdChpbnQgaSwgaW50IGopIGNvbnN0Cit7CisgICAgSW50UG9pbnQgYW5j
aG9yKGkgKiBtX3RpbGVTaXplLndpZHRoKCksIGogKiBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAg
ICBJbnRSZWN0IHRpbGUoYW5jaG9yLCBtX3RpbGVTaXplKTsKKyAgICByZXR1cm4gdGlsZTsKK30K
Kwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KQoreworICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7CisKKyAgICAv
LyBEaXJ0eSByZWN0cyBhcmUgYWx3YXlzIGluIGxheWVyIHNwYWNlLCBhcyB0aGUgbGF5ZXIgY291
bGQgYmUgcmVwb3NpdGlvbmVkCisgICAgLy8gYWZ0ZXIgaW52YWxpZGF0aW9uLgorICAgIEludFJl
Y3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7CisKKyAg
ICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5k
aWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGlu
dCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0
OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzW3Rp
bGVJbmRleChpLCBqKV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBJbnRSZWN0IGJvdW5kID0gdGlsZUxheWVyUmVj
dChpLCBqKTsKKyAgICAgICAgICAgIGJvdW5kLmludGVyc2VjdChsYXllclJlY3QpOworICAgICAg
ICAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdC51bml0ZShib3VuZCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlkYXRlRW50aXJlTGF5ZXIo
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAobV90aWxlc1tpXSkKKyAgICAgICAgICAgIG1fdW51c2VkVGlsZXMuYXBwZW5k
KG1fdGlsZXNbaV0ucmVsZWFzZSgpKTsKKyAgICB9CisgICAgbV90aWxlcy5jbGVhcigpOworCisg
ICAgbV9sYXllclNpemUgPSBJbnRTaXplKCk7CisgICAgbV9sYXllclRpbGVTaXplID0gSW50U2l6
ZSgpOworICAgIG1fbGFzdFVwZGF0ZUxheWVyUmVjdCA9IEludFJlY3QoKTsKK30KKwordm9pZCBM
YXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShUaWxlUGFpbnRJbnRlcmZhY2UmIHBhaW50ZXIsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIC8vIEludmFsaWRhdGUgb2xkIHRpbGVz
IHRoYXQgd2VyZSBwcmV2aW91c2x5IHVzZWQgYnV0IGFyZW4ndCBpbiB1c2UgdGhpcworICAgIC8v
IGZyYW1lIHNvIHRoYXQgdGhleSBjYW4gZ2V0IHJldXNlZCBmb3IgbmV3IHRpbGVzLgorICAgIElu
dFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7Cisg
ICAgaW52YWxpZGF0ZVRpbGVzKG1fbGFzdFVwZGF0ZUxheWVyUmVjdCwgbGF5ZXJSZWN0KTsKKyAg
ICBtX2xhc3RVcGRhdGVMYXllclJlY3QgPSBsYXllclJlY3Q7CisKKyAgICBncm93TGF5ZXJUb0Nv
bnRhaW4oY29udGVudFJlY3QpOworCisgICAgLy8gQ3JlYXRlIHRpbGVzIGFzIG5lZWRlZCwgZXhw
YW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAorICAgIC8vIHRoZSBkaXJ0eSByZWdp
b25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KKyAgICBJbnRSZWN0IGRpcnR5TGF5ZXJSZWN0Owor
ICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgY29udGVudFJlY3RUb1RpbGVJ
bmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAo
aW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxl
ZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVGlsZSogdGlsZSA9IG1fdGlsZXNb
dGlsZUluZGV4KGksIGopXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAg
ICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKKyAgICAgICAgICAgIGRpcnR5TGF5ZXJS
ZWN0LnVuaXRlKHRpbGUtPm1fZGlydHlMYXllclJlY3QpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgSW50UmVjdCBwYWludFJlY3QgPSBsYXllclJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5
ZXJSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJD
b250ZXh0KCk7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1D
YW52YXM+IGNhbnZhcyhuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMocGFpbnRSZWN0LndpZHRoKCks
IHBhaW50UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKKyAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0
U2tpYT4gc2tpYUNvbnRleHQobmV3IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7
CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0KG5ldyBHcmFwaGlj
c0NvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KHNraWFD
b250ZXh0LmdldCgpKSkpOworCisgICAgLy8gQnJpbmcgdGhlIGNhbnZhcyBpbnRvIHRoZSBjb29y
ZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KKyAgICBjYW52YXMtPnRyYW5zbGF0ZShz
dGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50UmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxh
cj4oLXBhaW50UmVjdC55KCkpKTsKKworICAgIHBhaW50ZXIucGFpbnQoKmdyYXBoaWNzQ29udGV4
dCwgcGFpbnRSZWN0KTsKKworICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQg
cmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY2FudmFzLT5nZXREZXZpY2UoKS0+
YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBBU1NFUlQoYml0bWFwLndpZHRoKCkgPT0gcGFpbnRS
ZWN0LndpZHRoKCkgJiYgYml0bWFwLmhlaWdodCgpID09IHBhaW50UmVjdC5oZWlnaHQoKSk7Cisg
ICAgdWludDhfdCogcGFpbnRQaXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYml0bWFwLmdl
dFBpeGVscygpKTsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIFZlY3Rvcjx1aW50OF90PiBjYW52
YXNQaXhlbHM7CisgICAgaW50IHJvd0J5dGVzID0gNCAqIHBhaW50UmVjdC53aWR0aCgpOworICAg
IGNhbnZhc1BpeGVscy5yZXNpemUocm93Qnl0ZXMgKiBwYWludFJlY3QuaGVpZ2h0KCkpOworICAg
IG1lbXNldChjYW52YXNQaXhlbHMuZGF0YSgpLCAwLCBjYW52YXNQaXhlbHMuc2l6ZSgpKTsKKyAg
ICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JT
cGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBtX2Nn
Q29udGV4dDsKKyAgICBtX2NnQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShj
YW52YXNQaXhlbHMuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhaW50UmVjdC53aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCks
IDgsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRG
aXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkpOworICAgIENHQ29udGV4dFRyYW5zbGF0
ZUNUTShtX2NnQ29udGV4dC5nZXQoKSwgMCwgcGFpbnRSZWN0LmhlaWdodCgpKTsKKyAgICBDR0Nv
bnRleHRTY2FsZUNUTShtX2NnQ29udGV4dC5nZXQoKSwgMSwgLTEpOworICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IG1fZ3JhcGhpY3NDb250ZXh0KG5ldyBHcmFwaGljc0NvbnRleHQobV9jZ0Nv
bnRleHQuZ2V0KCkpKTsKKworICAgIC8vIEJyaW5nIHRoZSBDb3JlR3JhcGhpY3MgY29udGV4dCBp
bnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KKyAgICBDR0NvbnRl
eHRUcmFuc2xhdGVDVE0obV9jZ0NvbnRleHQuZ2V0KCksIC1wYWludFJlY3QueCgpLCAtcGFpbnRS
ZWN0LnkoKSk7CisgICAgcGFpbnRlci5wYWludCgqbV9ncmFwaGljc0NvbnRleHQsIHBhaW50UmVj
dCk7CisKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCisgICAg
QVNTRVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9jZ0NvbnRl
eHQuZ2V0KCkpKSA9PSBwYWludFJlY3Qud2lkdGgoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KENHQml0
bWFwQ29udGV4dEdldEhlaWdodChtX2NnQ29udGV4dC5nZXQoKSkpID09IHBhaW50UmVjdC5oZWln
aHQoKSk7CisgICAgdWludDhfdCogcGFpbnRQaXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4o
Y2FudmFzUGl4ZWxzLmRhdGEoKSk7CisjZWxzZQorI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBm
b3IgeW91ciBwbGF0Zm9ybS4iCisjZW5kaWYKKworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0g
Ym90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsr
aSkgeworICAgICAgICAgICAgVGlsZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KGksIGopXS5n
ZXQoKTsKKyAgICAgICAgICAgIGlmICghdGlsZS0+ZGlydHkoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xl
IHRvIGNvcHkgZnJvbS4KKyAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRpbGVDb250
ZW50UmVjdChpLCBqKTsKKyAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJj
ZVJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KGxheWVy
UmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOworCisgICAgICAgICAg
ICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCisgICAg
ICAgICAgICBJbnRSZWN0IGRlc3RSZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9y
LngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5zaXplKCkpOwor
CisgICAgICAgICAgICAvLyBPZmZzZXQgZnJvbSBwYWludCByZWN0YW5nbGUgdG8gdGhpcyB0aWxl
J3MgZGlydHkgcmVjdGFuZ2xlLgorICAgICAgICAgICAgSW50UG9pbnQgcGFpbnRPZmZzZXQoc291
cmNlUmVjdC54KCkgLSBwYWludFJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIHBhaW50UmVjdC55
KCkpOworCisgICAgICAgICAgICB1aW50OF90KiBwaXhlbFNvdXJjZTsKKyAgICAgICAgICAgIGlm
IChwYWludFJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIXBhaW50T2Zmc2V0
LngoKSkKKyAgICAgICAgICAgICAgICBwaXhlbFNvdXJjZSA9ICZwYWludFBpeGVsc1s0ICogcGFp
bnRPZmZzZXQueSgpICogcGFpbnRSZWN0LndpZHRoKCldOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gU3RyaWRlcyBub3QgZXF1YWwsIHNvIGRvIGEgcm93LWJ5LXJvdyBt
ZW1jcHkgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8gYSB0
ZW1wIGJ1ZmZlciBmb3IgdXBsb2FkaW5nLgorICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IGRlc3RSZWN0LmhlaWdodCgpOyArK3JvdykKKyAgICAgICAgICAgICAgICAgICAg
bWVtY3B5KCZtX3RpbGVQaXhlbHNbZGVzdFJlY3Qud2lkdGgoKSAqIDQgKiByb3ddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnBhaW50UGl4ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgpICsg
KHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBwYWludFJlY3Qud2lkdGgoKSldLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQpOworCisgICAgICAgICAgICAg
ICAgcGl4ZWxTb3VyY2UgPSAmbV90aWxlUGl4ZWxzWzBdOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHRpbGUtPnRleHR1cmVJZCgpKSk7CisgICAgICAgICAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RS
ZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIHBpeGVsU291cmNlKSk7CisKKyAgICAgICAgICAgIHRpbGUtPmNsZWFy
RGlydHkoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06
OnNldExheWVyUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIGxheWVyUG9zaXRpb24pCit7CisgICAg
bV9sYXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKK30KKwordm9pZCBMYXllclRpbGVyQ2hy
b21pdW06OmRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgLy8gV2UgcmV1
c2UgdGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAg
IGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclZh
bHVlcyA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CisgICAg
bGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoY29udGVudExheWVyVmFsdWVzLT5jb250ZW50U2hh
ZGVyUHJvZ3JhbSgpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKGNvbnRl
bnRMYXllclZhbHVlcy0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKKworICAgIGludCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNv
bnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0
b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0g
cmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVGlsZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4
KGksIGopXS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh0aWxlKTsKKworICAgICAgICAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB0aWxlLT50ZXh0dXJlSWQoKSkpOworCisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0aWxlTWF0cml4OworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVD
b250ZW50UmVjdChpLCBqKTsKKyAgICAgICAgICAgIHRpbGVNYXRyaXgudHJhbnNsYXRlM2QodGls
ZVJlY3QueCgpIC0gY29udGVudFJlY3QueCgpICsgdGlsZVJlY3Qud2lkdGgoKSAvIDIuMCwgdGls
ZVJlY3QueSgpIC0gY29udGVudFJlY3QueSgpICsgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyLjAsIDAp
OworCisgICAgICAgICAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQs
IGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCB0aWxlTWF0cml4LCBtX3RpbGVT
aXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCksIDEsIGNvbnRlbnRMYXllclZhbHVlcy0+
c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgY29udGVudExheWVyVmFsdWVzLT5zaGFkZXJBbHBoYUxv
Y2F0aW9uKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1
bTo6cmVzaXplTGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9sYXllclNp
emUgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHdpZHRoID0gKHNpemUud2lk
dGgoKSArIG1fdGlsZVNpemUud2lkdGgoKSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0aCgpOworICAg
IGludCBoZWlnaHQgPSAoc2l6ZS5oZWlnaHQoKSArIG1fdGlsZVNpemUuaGVpZ2h0KCkgLSAxKSAv
IG1fdGlsZVNpemUuaGVpZ2h0KCk7CisKKyAgICBWZWN0b3I8T3duUHRyPFRpbGU+ID4gbmV3VGls
ZXM7CisgICAgbmV3VGlsZXMucmVzaXplKHdpZHRoICogaGVpZ2h0KTsKKyAgICBmb3IgKGludCBq
ID0gMDsgaiA8IG1fbGF5ZXJUaWxlU2l6ZS5oZWlnaHQoKTsgKytqKQorICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpOyArK2kpCisgICAgICAgICAgICBu
ZXdUaWxlc1tpICsgaiAqIHdpZHRoXS5zd2FwKG1fdGlsZXNbaSArIGogKiBtX2xheWVyVGlsZVNp
emUud2lkdGgoKV0pOworCisgICAgbV90aWxlcy5zd2FwKG5ld1RpbGVzKTsKKyAgICBtX2xheWVy
U2l6ZSA9IHNpemU7CisgICAgbV9sYXllclRpbGVTaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06Omdyb3dMYXllclRvQ29udGFpbihjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICAvLyBHcm93IHRoZSB0aWxlIGFycmF5IHRv
IGNvbnRhaW4gdGhpcyBjb250ZW50IHJlY3QuCisgICAgSW50UmVjdCBsYXllclJlY3QgPSBjb250
ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBJbnRSZWN0IGxheWVyKEludFBv
aW50KDAsIDApLCBtX2xheWVyU2l6ZSk7CisgICAgbGF5ZXIudW5pdGUobGF5ZXJSZWN0KTsKKyAg
ICByZXNpemVMYXllcihsYXllci5zaXplKCkpOworfQorCitMYXllclRpbGVyQ2hyb21pdW06OlRp
bGU6On5UaWxlKCkKK3sKKyAgICAvLyBFYWNoIHRpbGUgZG9lc24ndCBoYXZlIGEgcmVmZXJlbmNl
IHRvIHRoZSBjb250ZXh0LCBzbyBjYW4ndCBjbGVhbiB1cAorICAgIC8vIGl0cyBvd24gdGV4dHVy
ZS4gIElmIHRoaXMgYXNzZXJ0IGlzIGhpdCwgdGhlbiB0aGUgTGF5ZXJUaWxlckNocm9taXVtCisg
ICAgLy8gZGVzdHJ1Y3RvciBkaWRuJ3QgY2xlYW4gdGhpcyB1cC4KKyAgICBBU1NFUlQoIW1fdGV4
dHVyZUlkKTsKK30KKwordW5zaWduZWQgaW50IExheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6cmVs
ZWFzZVRleHR1cmVJZCgpCit7CisgICAgdW5zaWduZWQgaW50IGlkID0gbV90ZXh0dXJlSWQ7Cisg
ICAgbV90ZXh0dXJlSWQgPSAwOworICAgIHJldHVybiBpZDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21p
dW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9t
aXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzA2NmZkZjZjMDk5YTBkNWZjMzZjM2M0YTk0NWRmM2JkYjFlZDhl
MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUaWxlckNocm9taXVtLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYg
TGF5ZXJUaWxlckNocm9taXVtX2gKKyNkZWZpbmUgTGF5ZXJUaWxlckNocm9taXVtX2gKKworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsK
KworY2xhc3MgVGlsZVBhaW50SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkgPSAwOworfTsKKworY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+
IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNp
emUmIHRpbGVTaXplKTsKKworICAgIH5MYXllclRpbGVyQ2hyb21pdW0oKTsKKworICAgIHZvaWQg
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHZvaWQgaW52
YWxpZGF0ZUVudGlyZUxheWVyKCk7CisgICAgdm9pZCB1cGRhdGUoVGlsZVBhaW50SW50ZXJmYWNl
JiBwYWludGVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgdm9pZCBkcmF3KGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIFNldCBwb3NpdGlvbiBvZiB0aGlz
IHRpbGVkIGxheWVyIGluIGNvbnRlbnQgc3BhY2UuCisgICAgdm9pZCBzZXRMYXllclBvc2l0aW9u
KGNvbnN0IEludFBvaW50JiBwb3NpdGlvbik7CisgICAgLy8gQ2hhbmdlIHRoZSB0aWxlIHNpemUu
ICBUaGlzIG1heSBpbnZhbGlkYXRlIGFsbCB0aGUgZXhpc3RpbmcgdGlsZXMuCisgICAgdm9pZCBz
ZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKTsKKworcHJpdmF0ZToKKyAgICBMYXllclRp
bGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSk7CisKKyAgICBjbGFzcyBUaWxlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIGV4cGxpY2l0IFRpbGUodW5zaWduZWQgaW50IHRleHR1cmVJZCkgOiBtX3RleHR1cmVJZCh0
ZXh0dXJlSWQpIHsgfQorICAgICAgICB+VGlsZSgpOworCisgICAgICAgIHVuc2lnbmVkIGludCB0
ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorICAgICAgICB1bnNpZ25l
ZCBpbnQgcmVsZWFzZVRleHR1cmVJZCgpOworCisgICAgICAgIGJvb2wgZGlydHkoKSBjb25zdCB7
IHJldHVybiAhbV9kaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCk7IH0KKyAgICAgICAgdm9pZCBjbGVh
ckRpcnR5KCkgeyBtX2RpcnR5TGF5ZXJSZWN0ID0gSW50UmVjdCgpOyB9CisKKyAgICAgICAgLy8g
TGF5ZXItc3BhY2UgZGlydHkgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLgor
ICAgICAgICBJbnRSZWN0IG1fZGlydHlMYXllclJlY3Q7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
dW5zaWduZWQgaW50IG1fdGV4dHVyZUlkOworICAgIH07CisKKyAgICB2b2lkIHJlc2l6ZUxheWVy
KGNvbnN0IEludFNpemUmIHNpemUpOworICAgIC8vIEdyb3cgbGF5ZXIgc2l6ZSB0byBjb250YWlu
IHRoaXMgcmVjdGFuZ2xlLgorICAgIHZvaWQgZ3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KTsKKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlcjsgfQorICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4dCgpIGNvbnN0OworICAgIFRpbGUqIGNyZWF0ZVRp
bGUoaW50IGksIGludCBqKTsKKyAgICAvLyBJbnZhbGlkYXRlIGFueSB0aWxlcyB3aGljaCBkbyBu
b3QgaW50ZXJzZWN0IHdpdGggdGhlIG5ld0xheWVyUmVjdC4KKyAgICB2b2lkIGludmFsaWRhdGVU
aWxlcyhjb25zdCBJbnRSZWN0JiBvbGRMYXllclJlY3QsIGNvbnN0IEludFJlY3QmIG5ld0xheWVy
UmVjdCk7CisgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgY29udGVudFJlY3RUb1RpbGVJbmRp
Y2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQgJmxlZnQsIGludCAmdG9wLCBpbnQg
JnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29uc3Q7CisgICAgSW50UmVjdCBjb250ZW50UmVjdFRvTGF5
ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKyAgICBJbnRSZWN0IGxh
eWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBjb25zdDsKKwor
ICAgIC8vIFJldHVybnMgdGhlIGluZGV4IGludG8gbV90aWxlcyBmb3IgYSBnaXZlbiB0aWxlIGxv
Y2F0aW9uLgorICAgIGludCB0aWxlSW5kZXgoaW50IGksIGludCBqKSBjb25zdDsKKyAgICAvLyBS
ZXR1cm5zIHRoZSBib3VuZHMgaW4gY29udGVudCBzcGFjZSBmb3IgYSBnaXZlbiB0aWxlIGxvY2F0
aW9uLgorICAgIEludFJlY3QgdGlsZUNvbnRlbnRSZWN0KGludCBpLCBpbnQgaikgY29uc3Q7Cisg
ICAgLy8gUmV0dXJucyB0aGUgYm91bmRzIGluIGxheWVyIHNwYWNlIGZvciBhIGdpdmVuIHRpbGUg
bG9jYXRpb24uCisgICAgSW50UmVjdCB0aWxlTGF5ZXJSZWN0KGludCBpLCBpbnQgaikgY29uc3Q7
CisKKyAgICBJbnRTaXplIG1fdGlsZVNpemU7CisgICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKKyAg
ICBJbnRTaXplIG1fbGF5ZXJUaWxlU2l6ZTsKKyAgICBJbnRSZWN0IG1fbGFzdFVwZGF0ZUxheWVy
UmVjdDsKKyAgICBJbnRQb2ludCBtX2xheWVyUG9zaXRpb247CisKKyAgICAvLyBMb2dpY2FsIDJE
IGFycmF5IG9mIHRpbGVzIChkaW1lbnNpb25zIG9mIG1fbGF5ZXJUaWxlU2l6ZSkKKyAgICBWZWN0
b3I8T3duUHRyPFRpbGU+ID4gbV90aWxlczsKKyAgICAvLyBMaW5lYXIgYXJyYXkgb2YgdW51c2Vk
IHRpbGVzLgorICAgIFZlY3RvcjxPd25QdHI8VGlsZT4gPiBtX3VudXNlZFRpbGVzOworCisgICAg
Ly8gQ2FjaGUgYSB0aWxlLXNpemVkIHBpeGVsIGJ1ZmZlciB0byBkcmF3IGludG8uCisgICAgT3du
QXJyYXlQdHI8dWludDhfdD4gbV90aWxlUGl4ZWxzOworCisgICAgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZWM5N2NiZjBlYTMxMjMx
ZTZjNGE4OGRmYzA5OWUyOTVjNDRlZDRhMS4uNjY3ZTcxNjM1MDAzNzU4Mzg2ZjU1NDMwYTk0YzU5
N2Y3YzEwMTVjMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMTItMjAgIEFk
cmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFRpbGUgcm9vdCBsYXllciBvZiB0
aGUgY29tcG9zaXRvci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ5OTQ3CisKKyAgICAgICAgUmVmYWN0b3Igcm9vdCBsYXllciBsb2dpYyBvdXQgb2Yg
V2ViVmlld0ltcGwgYW5kIGludG8KKyAgICAgICAgTGF5ZXJUaWxlckNocm9taXVtLiAgVGhlIHBh
aW50aW5nIGlzIG5vdyBkb25lIHRocm91Z2ggYW4gaW50ZXJmYWNlCisgICAgICAgIHJhdGhlciB0
aGFuIGRpcmVjdGx5IGluIFdlYlZpZXdJbXBsLgorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGxUaWxlUGFpbnRJbnRlcmZh
Y2U6OldlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGxUaWxlUGFpbnRJbnRlcmZhY2U6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGxTY3JvbGxiYXJQYWludEludGVyZmFjZTo6V2ViVmlld0ltcGxTY3JvbGxiYXJQYWlu
dEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRJ
bnRlcmZhY2U6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQ29tcG9z
aXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMC0xMi0yMCAgQW5kcmVp
IFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVy
ZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBhYzA1ZGQyYjc5
YjM3OWNiNzNkYzM2MDAwMjg2YjUwMDlmYmU5MDAyLi5hN2M0YWExY2U4ZDkyNjlkNGVjMDY3NmJk
YWQzY2JlOGE5Y2FlZDU5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMjI2
OCw3MCArMjI2OCw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxh
eSgpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewotICAgIEFTU0VSVCht
X2xheWVyUmVuZGVyZXIpOwotICAgIC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0IGluIHZpZXdw
b3J0IHNwYWNlLgotICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7
Ci0gICAgaWYgKCF3ZWJmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lVmlldyogdmll
dyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3Qo
ZmFsc2UpOwotICAgIEludFJlY3Qgc2NyZWVuUmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3co
Y29udGVudFJlY3QpOwotCi0gICAgLy8gV2Ugc3VwcG9ydCBmYXN0IHNjcm9sbGluZyBpbiBvbmUg
ZGlyZWN0aW9uIGF0IGEgdGltZS4KLSAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSAmJiBzY3Jv
bGxEZWx0YS5oZWlnaHQoKSkgewotICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChXZWJS
ZWN0KHNjcmVlblJlY3QpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENvbXB1
dGUgdGhlIHJlZ2lvbiB3ZSB3aWxsIGV4cG9zZSBieSBzY3JvbGxpbmcuIFdlIHVzZSB0aGUKLSAg
ICAvLyBjb250ZW50IHJlY3QgZm9yIGludmFsaWRhdGlvbi4gIFVzaW5nIHRoaXMgc3BhY2UgZm9y
IGRhbWFnZQotICAgIC8vIHJlY3RzIGFsbG93cyB1cyB0byBpbnRlcm1peCBpbnZhbGlkYXRlcyB3
aXRoIHNjcm9sbHMuCi0gICAgSW50UmVjdCBkYW1hZ2VkQ29udGVudHNSZWN0OwotICAgIGlmIChz
Y3JvbGxEZWx0YS53aWR0aCgpKSB7Ci0gICAgICAgIGludCBkeCA9IHNjcm9sbERlbHRhLndpZHRo
KCk7Ci0gICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WShzY3JlZW5SZWN0LnkoKSk7Ci0g
ICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0SGVpZ2h0KHNjcmVlblJlY3QuaGVpZ2h0KCkp
OwotICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0
LnNldFgoc2NyZWVuUmVjdC54KCkpOwotICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5z
ZXRXaWR0aChkeCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVu
dHNSZWN0LnNldFgoc2NyZWVuUmVjdC5yaWdodCgpICsgZHgpOwotICAgICAgICAgICAgZGFtYWdl
ZENvbnRlbnRzUmVjdC5zZXRXaWR0aCgtZHgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0gICAgICAgIGRhbWFnZWRDb250
ZW50c1JlY3Quc2V0WChzY3JlZW5SZWN0LngoKSk7Ci0gICAgICAgIGRhbWFnZWRDb250ZW50c1Jl
Y3Quc2V0V2lkdGgoc2NyZWVuUmVjdC53aWR0aCgpKTsKLSAgICAgICAgaWYgKGR5ID4gMCkgewot
ICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKHNjcmVlblJlY3QueSgpKTsKLSAg
ICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0SGVpZ2h0KGR5KTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WShzY3JlZW5SZWN0LmJv
dHRvbSgpICsgZHkpOwotICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQo
LWR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1vdmUgdGhlIHByZXZpb3VzIGRhbWFn
ZQotICAgIG1fcm9vdExheWVyU2Nyb2xsRGFtYWdlLm1vdmUoc2Nyb2xsRGVsdGEud2lkdGgoKSwg
c2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOwotICAgIC8vIFVuaW9uIHdpdGggdGhlIG5ldyBkYW1hZ2Ug
cmVjdC4KLSAgICBtX3Jvb3RMYXllclNjcm9sbERhbWFnZS51bml0ZShkYW1hZ2VkQ29udGVudHNS
ZWN0KTsKLQotICAgIC8vIFNjcm9sbCBhbnkgZXhpc3RpbmcgZGFtYWdlIHRoYXQgaW50ZXJzZWN0
cyB3aXRoIGNsaXAgcmVjdAotICAgIGlmIChjbGlwUmVjdC5pbnRlcnNlY3RzKG1fcm9vdExheWVy
RGlydHlSZWN0KSkgewotICAgICAgICAvLyBGaW5kIHRoZSBpbm5lciBkYW1hZ2UKLSAgICAgICAg
SW50UmVjdCBpbm5lckRhbWFnZShjbGlwUmVjdCk7Ci0gICAgICAgIGlubmVyRGFtYWdlLmludGVy
c2VjdChtX3Jvb3RMYXllckRpcnR5UmVjdCk7Ci0KLSAgICAgICAgLy8gTW92ZSB0aGUgZGFtYWdl
Ci0gICAgICAgIGlubmVyRGFtYWdlLm1vdmUoc2Nyb2xsRGVsdGEud2lkdGgoKSwgc2Nyb2xsRGVs
dGEuaGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIE1lcmdlIGl0IGJhY2sgaW50byB0aGUgZGFtYWdl
ZCByZWN0Ci0gICAgICAgIG1fcm9vdExheWVyRGlydHlSZWN0LnVuaXRlKGlubmVyRGFtYWdlKTsK
LSAgICB9Ci0KICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIApAQCAtMjM0Miw5
ICsyMjc4LDEyIEBAIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIEZJWE1FOiBhZGQgYSBzbWFydGVyIGRhbWFnZSBhZ2dyZWdhdGlvbiBsb2dpYyBhbmQv
b3IgdW5pZnkgd2l0aAotICAgIC8vIExheWVyQ2hyb21pdW0ncyBkYW1hZ2UgbG9naWMKLSAgICBt
X3Jvb3RMYXllckRpcnR5UmVjdC51bml0ZShyZWN0KTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBw
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZp
ZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9
IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKKworICAgIEludFJlY3QgZGlydHlSZWN0
ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhyZWN0KTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KGRpcnR5UmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0
KTsKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIApAQCAtMjM2MSw4OSArMjMw
MCw3NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCiAgICAgICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOyAvLyBmaW5pc2ggYWxsIEdMIHJlbmRlcmluZyBi
ZWZvcmUgd2UgaGlkZSB0aGUgd2luZG93PwogICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKKyAgICB9IGVsc2UgaWYgKG1fbGF5ZXJSZW5kZXJl
cikgewogICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7CiAg
ICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVzaXplT25zY3JlZW5Db250ZW50KFdlYkNvcmU6Oklu
dFNpemUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heCgxLCBtX3Np
emUuaGVpZ2h0KSkpOwogCiAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcodHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3ND
b250ZXh0M0QucmVsZWFzZSgpOwotICAgIGlmICghY29udGV4dCkgewotICAgICAgICBjb250ZXh0
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0
ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KTsKLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5o
ZWlnaHQpKTsKLSAgICB9Ci0gICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCkpOwotICAgIGlmIChtX2xheWVyUmVuZGVyZXIp
IHsKLSAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0
cnVlKTsKLSAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwot
ICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZCA9IGZhbHNlOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gZmFsc2U7Ci0gICAg
ICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoZmFsc2UpOwot
ICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZCA9IHRydWU7CisgICAgICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGlj
c0NvbnRleHQzRC5yZWxlYXNlKCk7CisgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAg
ICAgY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoZ2V0Q29tcG9zaXRvckNvbnRl
eHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0
ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKKyAgICAgICAgfQorICAgICAgICBtX2xheWVyUmVu
ZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0LnJlbGVhc2UoKSk7
CisgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKKyAgICAgICAgICAgIG1fY2xpZW50LT5k
aWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CisgICAgICAgICAgICBtX2lz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICBtX2NvbXBv
c2l0b3JDcmVhdGlvbkZhaWxlZCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAg
IG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoZmFsc2UpOworICAg
ICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSB0cnVlOworICAgICAgICB9CiAg
ICAgfQorICAgIGlmIChwYWdlKCkpCisgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXco
KS0+c2V0Q2xpcHNSZXBhaW50cyghbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOwog
fQogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIGlmICghaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJh
bWVJbXBsKCk7Ci0gICAgaWYgKCF3ZWJmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZyYW1l
VmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciA9IG1fbGF5ZXJSZW5k
ZXJlci0+cm9vdExheWVyKCk7Ci0gICAgaWYgKHJvb3RMYXllcikgewotICAgICAgICBJbnRSZWN0
IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwotCi0gICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+c2V0Um9vdExheWVyQ2FudmFzU2l6ZShJbnRTaXplKHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQqIHJvb3RMYXll
ckNvbnRleHQgPSBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllckdyYXBoaWNzQ29udGV4dCgpOwot
Ci0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSogc2tpYUNv
bnRleHQgPSByb290TGF5ZXJDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgc2tp
YTo6UGxhdGZvcm1DYW52YXMqIHBsYXRmb3JtQ2FudmFzID0gc2tpYUNvbnRleHQtPmNhbnZhcygp
OwotCi0gICAgICAgIHBsYXRmb3JtQ2FudmFzLT5zYXZlKCk7Ci0KLSAgICAgICAgLy8gQnJpbmcg
dGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4K
LSAgICAgICAgcGxhdGZvcm1DYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4o
LXJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0LnkoKSkpOwotCi0gICAgICAg
IHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKLQotICAgICAgICB3ZWJmcmFtZS0+cGFpbnRXaXRo
Q29udGV4dCgqcm9vdExheWVyQ29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHJvb3RMYXllckNvbnRl
eHQtPnJlc3RvcmUoKTsKK2NsYXNzIFdlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlIDogcHVi
bGljIFRpbGVQYWludEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViVmlld0lt
cGxUaWxlUGFpbnRJbnRlcmZhY2UoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsKQorICAgICAgICA6
IG1fd2ViVmlld0ltcGwod2ViVmlld0ltcGwpCisgICAgeworICAgIH0KIAotICAgICAgICBwbGF0
Zm9ybUNhbnZhcy0+cmVzdG9yZSgpOwotI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSByb290TGF5ZXJDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCkKKyAgICB7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBtX3dlYlZp
ZXdJbXBsLT5wYWdlKCk7CisgICAgICAgIGlmICghcGFnZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAg
ICAgICAgdmlldy0+cGFpbnRDb250ZW50cygmY29udGV4dCwgY29udGVudFJlY3QpOworICAgIH0K
IAotICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7Citwcml2YXRlOgorICAg
IFdlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOworfTsKIAotICAgICAgICAvLyBCcmluZyB0aGUg
Q29yZUdyYXBoaWNzIGNvbnRleHQgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBh
aW50IHJlY3QuCi0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIC1yZWN0
LngoKSwgLXJlY3QueSgpKTsKIAotICAgICAgICByb290TGF5ZXJDb250ZXh0LT5zYXZlKCk7Citj
bGFzcyBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNlIDogcHVibGljIFRpbGVQYWlu
dEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViVmlld0ltcGxTY3JvbGxiYXJQ
YWludEludGVyZmFjZShXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpCisgICAgICAgIDogbV93ZWJW
aWV3SW1wbCh3ZWJWaWV3SW1wbCkKKyAgICB7CisgICAgfQogCi0gICAgICAgIHdlYmZyYW1lLT5w
YWludFdpdGhDb250ZXh0KCpyb290TGF5ZXJDb250ZXh0LCByZWN0KTsKLSAgICAgICAgcm9vdExh
eWVyQ29udGV4dC0+cmVzdG9yZSgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQorICAgIHsKKyAgICAg
ICAgUGFnZSogcGFnZSA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdl
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlLT5t
YWluRnJhbWUoKS0+dmlldygpOwogCi0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2dD
b250ZXh0KTsKLSNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRp
ZgorICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSh2aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9s
bFkoKSk7CisgICAgICAgIEludFJlY3Qgd2luZG93UmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5k
b3coY29udGVudFJlY3QpOworICAgICAgICB2aWV3LT5wYWludFNjcm9sbGJhcnMoJmNvbnRleHQs
IHdpbmRvd1JlY3QpOwogICAgIH0KLX0KKworcHJpdmF0ZToKKyAgICBXZWJWaWV3SW1wbCogbV93
ZWJWaWV3SW1wbDsKK307CiAKIHZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKCkKIHsKQEAg
LTI0NTUsMzIgKzIzODIsMTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogICAg
IC8vIFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRlcyBzY3JvbGxiYXJzIHdoZXJlYXMgdGhlIGNvbnRl
bnRSZWN0IGRvZXNuJ3QuCiAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVD
b250ZW50UmVjdCh0cnVlKTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KGZhbHNlKTsKLSAgICBJbnRSZWN0IHZpZXdQb3J0ID0gSW50UmVjdCgwLCAw
LCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwotCi0gICAgLy8gR2l2ZSB0aGUgY29tcG9z
aXRvciBhIGNoYW5jZSB0byBzZXR1cC9yZXNpemUgdGhlIHJvb3QgdGV4dHVyZSBoYW5kbGUgYW5k
IHBlcmZvcm0gc2Nyb2xsaW5nLgotICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlcGFyZVRvRHJhd0xh
eWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwg
dmlldy0+c2Nyb2xsWSgpKSk7CisgICAgSW50UG9pbnQgc2Nyb2xsKHZpZXctPnNjcm9sbFgoKSwg
dmlldy0+c2Nyb2xsWSgpKTsKIAotICAgIC8vIERyYXcgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290
IGxheWVyLgotICAgIFZlY3RvcjxJbnRSZWN0PiBkYW1hZ2VSZWN0czsKLSAgICBkYW1hZ2VSZWN0
cy5hcHBlbmQobV9yb290TGF5ZXJTY3JvbGxEYW1hZ2UpOwotICAgIGRhbWFnZVJlY3RzLmFwcGVu
ZChtX3Jvb3RMYXllckRpcnR5UmVjdCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYW1h
Z2VSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0ID0gZGFt
YWdlUmVjdHNbaV07Ci0KLSAgICAgICAgLy8gSW50ZXJzZWN0IHRoaXMgcmVjdGFuZ2xlIHdpdGgg
dGhlIHZpZXdQb3J0LgotICAgICAgICBkYW1hZ2VkUmVjdC5pbnRlcnNlY3Qodmlld1BvcnQpOwot
Ci0gICAgICAgIC8vIE5vdyByZW5kZXIgaXQuCi0gICAgICAgIGlmIChkYW1hZ2VkUmVjdC53aWR0
aCgpICYmIGRhbWFnZWRSZWN0LmhlaWdodCgpKSB7Ci0gICAgICAgICAgICB1cGRhdGVSb290TGF5
ZXJDb250ZW50cyhkYW1hZ2VkUmVjdCk7Ci0gICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnVw
ZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGRhbWFnZWRSZWN0KTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBtX3Jvb3RMYXllckRpcnR5UmVjdCA9IEludFJlY3QoKTsKLSAgICBtX3Jvb3RMYXllclNj
cm9sbERhbWFnZSA9IEludFJlY3QoKTsKKyAgICBXZWJWaWV3SW1wbFRpbGVQYWludEludGVyZmFj
ZSB0aWxlUGFpbnQodGhpcyk7CiAKLSAgICAvLyBEcmF3IHRoZSBhY3R1YWwgbGF5ZXJzLi4uCi0g
ICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7
CisgICAgV2ViVmlld0ltcGxTY3JvbGxiYXJQYWludEludGVyZmFjZSBzY3JvbGxiYXJQYWludCh0
aGlzKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRl
bnRSZWN0LCBzY3JvbGwsIHRpbGVQYWludCwgc2Nyb2xsYmFyUGFpbnQpOwogfQogCiB2b2lkIFdl
YlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CmluZGV4IDZlOGRjYWNkNTg2MzgzOWQ2NmZiOTU5Nzg4ZTI4Yjk5YzMzMmZiM2MuLjgwYWJmODEz
ZWViZjk2MjE2NWUyMGU5OTUyYmRkNjljYWMwMmYxZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmgKQEAgLTM5Niw3ICszOTYsNiBAQCBwcml2YXRlOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KGJvb2wpOwotICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwogICAgIHZvaWQgZG9Db21wb3NpdGUoKTsKICAgICB2b2lkIGRvUGl4ZWxSZWFk
YmFja1RvQ2FudmFzKFdlYkNhbnZhcyosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2
b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOwpAQCAtNTI4LDcgKzUyNyw2IEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbW91c2VDYXB0dXJlTm9kZTsKIAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVy
RGlydHlSZWN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgbV9yb290TGF5ZXJTY3JvbGxEYW1hZ2U7
CiAgICAgUmVmUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRl
cmVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77051</attachid>
            <date>2010-12-20 16:24:33 -0800</date>
            <delta_ts>2010-12-22 10:40:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49947-20101220162431.patch</filename>
            <type>text/plain</type>
            <size>62890</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmUzZDI0ZDA5ZGNjYTNiODM5NGQ5MmZlODM3MzdmYzFlMzc2MGZiOC4uZTZkMjRkMWFjNWZiZmJh
OWNjMjBlY2I5YTJlOWNhM2Y4NDI3NDZiYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAxMC0xMi0yMCAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gVGlsZSByb290IGxheWVyIG9mIHRo
ZSBjb21wb3NpdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDk5NDcKKworICAgICAgICBSZWZhY3RvciByb290IGxheWVyIHVwZGF0ZSBhbmQgZHJh
d2luZyBmcm9tIExheWVyUmVuZGVyZXJDaHJvbWl1bSBpbnRvCisgICAgICAgIExheWVyVGlsZXJD
aHJvbWl1bS4gIFRoZSByb290IGxheWVyIGlzIG5vdyBkcmF3biBhcyBtdWx0aXBsZSB0aWxlcwor
ICAgICAgICByYXRoZXIgdGhhbiBhcyBvbmUgc2luZ2xlIGxhcmdlIHRleHR1cmUuICBTY3JvbGxi
YXJzIGFyZSBub3cgZHJhd24KKyAgICAgICAgc2VwYXJhdGVseSByYXRoZXIgdGhhbiBhcyBwYXJ0
IG9mIHRoZSByb290IGxheWVyLgorCisgICAgICAgIFRlc3Q6IExheW91dFRlc3RzL2NvbXBvc2l0
aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5n
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
OjpzZXRDbGlwc1JlcGFpbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpjbGlwc1JlcGFpbnRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVy
ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVz
ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZlcnRp
Y2FsU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06Omhvcml6b250YWxTY3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9vdExheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFJvb3RMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJl
ZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGlsZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjpMYXllclRpbGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjp+TGF5ZXJUaWxlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJD
aHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Q2hyb21pdW06OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6
Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmludmFs
aWRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmNvbnRl
bnRSZWN0VG9UaWxlSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21p
dW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpsYXllclJlY3RUb0NvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXJDaHJvbWl1bTo6dGlsZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6dGlsZUxheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Q2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJD
aHJvbWl1bTo6aW52YWxpZGF0ZUVudGlyZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VGlsZXJDaHJvbWl1bTo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJv
bWl1bTo6c2V0TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hy
b21pdW06OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpyZXNp
emVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06Omdyb3dMYXll
clRvQ29udGFpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6
On5UaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6cmVs
ZWFzZVRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUaWxlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNo
cm9taXVtOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1
bTo6VGlsZTo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1
bTo6VGlsZTo6ZGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpU
aWxlOjpjbGVhckRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6
bGF5ZXJSZW5kZXJlcik6CisKIDIwMTAtMTItMjAgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzQyNzguCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IGZjYThjZmM0MmQyNGI3MTg5ZGU5OGFhYTFmZjZlZjk5NGMyNzQ1MTguLjJmYTQxYjM5ZWMz
NjRkYWMxNzk5ZWYxMGNhYmZmODEzNmU1N2VlNjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNTk5LDYgKzI1OTksOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUaWxlckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtSWNvbi5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcCcsCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCmluZGV4IDI0ODQ4NjBlOTVkOTBjMmFhNmUwYTUxYWZmZGY0MzhjOWRmYmVhYjAu
LmQxZThkMTU4NTY1YjVhMTI5ZGQzMDJkYjBmNWExNWVmZGQ5YzI2NWYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CkBAIC0xMzE0LDcgKzEzMTQsNyBAQCB2b2lkIEZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0
YW5nbGUoY29uc3QgSW50UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCiAgICAgZG91YmxlIGRlbGF5
ID0gYWRqdXN0ZWREZWZlcnJlZFJlcGFpbnREZWxheSgpOwogICAgIGlmICgobV9kZWZlcnJpbmdS
ZXBhaW50cyB8fCBtX2RlZmVycmVkUmVwYWludFRpbWVyLmlzQWN0aXZlKCkgfHwgZGVsYXkpICYm
ICFpbW1lZGlhdGUpIHsKICAgICAgICAgSW50UmVjdCBwYWludFJlY3QgPSByOwotICAgICAgICBp
ZiAoIXBhaW50c0VudGlyZUNvbnRlbnRzKCkpCisgICAgICAgIGlmIChjbGlwc1JlcGFpbnRzKCkg
JiYgIXBhaW50c0VudGlyZUNvbnRlbnRzKCkpCiAgICAgICAgICAgICBwYWludFJlY3QuaW50ZXJz
ZWN0KHZpc2libGVDb250ZW50UmVjdCgpKTsKICAgICAgICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCA3ZDll
NzkyZmE5Yjg3MWM2OWE2MmRlOGM1M2FjZTMyMzEwMjdlYjllLi41N2E1OTE4MjA2ODc0Y2M3NTJm
YjEzZjU5MWRjODU4YTk3YTA1MzY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKQEAgLTUzLDYg
KzUzLDcgQEAgU2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCiAgICAgLCBtX2RyYXdQYW5TY3JvbGxJ
Y29uKGZhbHNlKQogICAgICwgbV91c2VGaXhlZExheW91dChmYWxzZSkKICAgICAsIG1fcGFpbnRz
RW50aXJlQ29udGVudHMoZmFsc2UpCisgICAgLCBtX2NsaXBzUmVwYWludHModHJ1ZSkKICAgICAs
IG1fZGVsZWdhdGVzU2Nyb2xsaW5nKGZhbHNlKQogewogICAgIHBsYXRmb3JtSW5pdCgpOwpAQCAt
MjAyLDYgKzIwMywxMSBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFBhaW50c0VudGlyZUNvbnRlbnRz
KGJvb2wgcGFpbnRzRW50aXJlQ29udGVudHMpCiAgICAgbV9wYWludHNFbnRpcmVDb250ZW50cyA9
IHBhaW50c0VudGlyZUNvbnRlbnRzOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnNldENsaXBzUmVw
YWludHMoYm9vbCBjbGlwc1JlcGFpbnRzKQoreworICAgIG1fY2xpcHNSZXBhaW50cyA9IGNsaXBz
UmVwYWludHM7Cit9CisKIHZvaWQgU2Nyb2xsVmlldzo6c2V0RGVsZWdhdGVzU2Nyb2xsaW5nKGJv
b2wgZGVsZWdhdGVzU2Nyb2xsaW5nKQogewogICAgIG1fZGVsZWdhdGVzU2Nyb2xsaW5nID0gZGVs
ZWdhdGVzU2Nyb2xsaW5nOwpAQCAtNzk0LDcgKzgwMCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6ZnJh
bWVSZWN0c0NoYW5nZWQoKQogdm9pZCBTY3JvbGxWaWV3OjpyZXBhaW50Q29udGVudFJlY3Rhbmds
ZShjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIG5vdykKIHsKICAgICBJbnRSZWN0IHBhaW50UmVj
dCA9IHJlY3Q7Ci0gICAgaWYgKCFwYWludHNFbnRpcmVDb250ZW50cygpKQorICAgIGlmIChjbGlw
c1JlcGFpbnRzKCkgJiYgIXBhaW50c0VudGlyZUNvbnRlbnRzKCkpCiAgICAgICAgIHBhaW50UmVj
dC5pbnRlcnNlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOwogICAgIGlmIChwYWludFJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTU1LDQgKzExNjEsMyBAQCBib29sIFNjcm9s
bFZpZXc6OnBsYXRmb3JtSXNPZmZzY3JlZW4oKSBjb25zdAogI2VuZGlmCiAKIH0KLQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmggYi9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaAppbmRleCBlZDMzMDk4ZjhhNWIyY2Y1YTMzNGJmNzRmOTRhYjI1ZDhjNjFlZjVh
Li42NmI0YzA5YmRiMmJkZTU1YTA1MTcyNWQyN2YzZjBmZjkxZmRlZTU4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuaApAQCAtMTExLDYgKzExMSwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBwYWludHNFbnRp
cmVDb250ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRzRW50aXJlQ29udGVudHM7IH0KICAg
ICB2b2lkIHNldFBhaW50c0VudGlyZUNvbnRlbnRzKGJvb2wpOwogCisgICAgLy8gQnkgZGVmYXVs
dCwgcGFpbnQgZXZlbnRzIGFyZSBjbGlwcGVkIHRvIHRoZSB2aXNpYmxlIGFyZWEuICBJZiBzZXQg
dG8KKyAgICAvLyBmYWxzZSwgcGFpbnQgZXZlbnRzIGFyZSBubyBsb25nZXIgY2xpcHBlZC4gIHBh
aW50c0VudGlyZUNvbnRlbnRzKCkgaW1wbGllcyAhY2xpcHNSZXBhaW50cygpLgorICAgIGJvb2wg
Y2xpcHNSZXBhaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcHNSZXBhaW50czsgfQorICAgIHZv
aWQgc2V0Q2xpcHNSZXBhaW50cyhib29sKTsKKwogICAgIC8vIEJ5IGRlZmF1bHQgcHJvZ3JhbW1h
dGljIHNjcm9sbGluZyBpcyBoYW5kbGVkIGJ5IFdlYkNvcmUgYW5kIG5vdCBieSB0aGUgVUkgYXBw
bGljYXRpb24uCiAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgdXNpbmcgYSB0aWxlZCBiYWNraW5nIHN0
b3JlLCB0aGlzIG1vZGUgY2FuIGJlIHNldCwgc28gdGhhdCB0aGUgc2Nyb2xsIHJlcXVlc3RzCiAg
ICAgLy8gYXJlIGRlbGVnYXRlZCB0byB0aGUgVUkgYXBwbGljYXRpb24uCkBAIC0zMjUsNiArMzMw
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXNlRml4ZWRMYXlvdXQ7CiAKICAgICBib29sIG1f
cGFpbnRzRW50aXJlQ29udGVudHM7CisgICAgYm9vbCBtX2NsaXBzUmVwYWludHM7CiAgICAgYm9v
bCBtX2RlbGVnYXRlc1Njcm9sbGluZzsKIAogICAgIC8vIFRoZXJlIGFyZSA4IHBvc3NpYmxlIGNv
bWJpbmF0aW9ucyBvZiB3cml0aW5nIG1vZGUgYW5kIGRpcmVjdGlvbi4gIFNjcm9sbCBvcmlnaW4g
d2lsbCBiZSBub24temVybyBpbiB0aGUgeCBvciB5IGF4aXMKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggYWM5NTI4NTExNzM5
NTA2MDM1NzcwZWQzZjFiNmI4MTA2NTc3ZTc0NS4uYTBhNjkwZjlhYmRiZjgxOTRmMzQzNTA3MmJh
MGQ5Yzg1NWMwNGZkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOwogLy8gdGhpcyBjbGFzcy4KIGNsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMg
UmVmQ291bnRlZDxMYXllckNocm9taXVtPiB7CiAgICAgZnJpZW5kIGNsYXNzIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTsKKyAgICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOwogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA2
ZDVmNjQyZmU2YWZhZTYwMWQwMDA1Nzg4NDMwN2VjNjE0NmY0MDEzLi43MDBjOWU2MzI0Nzc1NmY5
MTU3OTc0YmRjZTJhNjVjODBiMWI1ZWVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0x
MDAsOCArMTAwLDcgQEAgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGgKIH0KIAogTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCkKLSAgICA6IG1fcm9vdExheWVyVGV4dHVyZUlkKDApCi0gICAgLCBtX3Jv
b3RMYXllclRleHR1cmVXaWR0aCgwKQorICAgIDogbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkK
ICAgICAsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCgwKQogICAgICwgbV9yb290TGF5ZXIoMCkK
ICAgICAsIG1fc2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKQEAgLTExMiwxMSArMTEx
LDE5IEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRlCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJm
YWNlKDApCiB7CiAgICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJlZE9i
amVjdHMoKTsKKyAgICBtX3Jvb3RMYXllclRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVh
dGUodGhpcywgSW50U2l6ZSgyNTYsIDI1NikpOworICAgIEFTU0VSVChtX3Jvb3RMYXllclRpbGVy
KTsKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNocm9taXVtKCkK
IHsKICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOworCisgICAgLy8gQmVjYXVzZSB0aGUgdGls
ZXJzIG5lZWQgdG8gY2xlYW4gdXAgdGV4dHVyZXMsIGNsZWFuIHRoZW0gdXAgZXhwbGljaXRseQor
ICAgIC8vIGJlZm9yZSB0aGUgR3JhcGhpY3NDb250ZXh0M0QgaXMgZGVzdHJveWVkLgorICAgIG1f
cm9vdExheWVyVGlsZXIgPSAwOworICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyID0gMDsK
KyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXIgPSAwOwogfQogCiBHcmFwaGljc0NvbnRleHQz
RCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0KCkKQEAgLTEzMSw1NCArMTM4LDgzIEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgY29uc3QgY2hhcioKICAgICAgICAgTE9HX0VSUk9SKCJHTCBjb21tYW5kIGZh
aWxlZDogRmlsZTogJXNcblx0TGluZSAlZFxuXHRjb21tYW5kOiAlcywgZXJyb3IgJXhcbiIsIGZp
bGUsIGxpbmUsIGNvbW1hbmQsIHN0YXRpY19jYXN0PGludD4oZXJyb3IpKTsKIH0KIAotLy8gQ3Jl
YXRlcyBhIGNhbnZhcyBhbmQgYW4gYXNzb2NpYXRlZCBncmFwaGljcyBjb250ZXh0IHRoYXQgdGhl
IHJvb3QgbGF5ZXIgd2lsbAotLy8gcmVuZGVyIGludG8uCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6c2V0Um9vdExheWVyQ2FudmFzU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcih1bnNpZ25lZCBwcm9ncmFtSWQpCiB7Ci0g
ICAgaWYgKHNpemUgPT0gbV9yb290TGF5ZXJDYW52YXNTaXplKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKHByb2dyYW1JZCAhPSBtX2N1cnJlbnRTaGFkZXIpIHsKKyAgICAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW1JZCkpOworICAgICAgICBt
X2N1cnJlbnRTaGFkZXIgPSBwcm9ncmFtSWQ7CisgICAgfQorfQogCi0jaWYgUExBVEZPUk0oU0tJ
QSkKLSAgICAvLyBDcmVhdGUgbmV3IGNhbnZhcyBhbmQgY29udGV4dC4gT3duUHRyIHRha2VzIGNh
cmUgb2YgZnJlZWluZyB1cAotICAgIC8vIHRoZSBvbGQgb25lcy4KLSAgICBtX3Jvb3RMYXllckNh
bnZhcyA9IG5ldyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCksIGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllclNraWFDb250ZXh0ID0gbmV3IFBsYXRmb3JtQ29u
dGV4dFNraWEobV9yb290TGF5ZXJDYW52YXMuZ2V0KCkpOwotICAgIG1fcm9vdExheWVyR3JhcGhp
Y3NDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4dChyZWludGVycHJldF9jYXN0PFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0Kj4obV9yb290TGF5ZXJTa2lhQ29udGV4dC5nZXQoKSkpOwotI2VsaWYg
UExBVEZPUk0oQ0cpCi0gICAgLy8gUmVsZWFzZSB0aGUgcHJldmlvdXMgQ0dCaXRtYXBDb250ZXh0
IGJlZm9yZSByZWFsbG9jYXRpbmcgdGhlIGJhY2tpbmcgc3RvcmUgYXMgYSBwcmVjYXV0aW9uLgot
ICAgIG1fcm9vdExheWVyQ0dDb250ZXh0LmFkb3B0Q0YoMCk7Ci0gICAgaW50IHJvd0J5dGVzID0g
NCAqIHNpemUud2lkdGgoKTsKLSAgICBtX3Jvb3RMYXllckJhY2tpbmdTdG9yZS5yZXNpemUocm93
Qnl0ZXMgKiBzaXplLmhlaWdodCgpKTsKLSAgICBtZW1zZXQobV9yb290TGF5ZXJCYWNraW5nU3Rv
cmUuZGF0YSgpLCAwLCBtX3Jvb3RMYXllckJhY2tpbmdTdG9yZS5zaXplKCkpOwotICAgIFJldGFp
blB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlUkdCKCkpOwotICAgIG1fcm9vdExheWVyQ0dDb250ZXh0LmFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRhdGEoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkpOwotICAg
IENHQ29udGV4dFRyYW5zbGF0ZUNUTShtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSwgMCwgc2l6
ZS5oZWlnaHQoKSk7Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0obV9yb290TGF5ZXJDR0NvbnRleHQu
Z2V0KCksIDEsIC0xKTsKLSAgICBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4dCA9IG5ldyBHcmFw
aGljc0NvbnRleHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpOwotI2Vsc2UKLSNlcnJvciAi
TmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgotI2VuZGlmCitJbnRSZWN0IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dmVydGljYWxTY3JvbGxiYXJSZWN0KGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBJbnRSZWN0
IHZlcnRpY2FsU2Nyb2xsYmFyKEludFBvaW50KGNvbnRlbnRSZWN0LnJpZ2h0KCksIGNvbnRlbnRS
ZWN0LnkoKSksIEludFNpemUodmlzaWJsZVJlY3Qud2lkdGgoKSAtIGNvbnRlbnRSZWN0LndpZHRo
KCksIHZpc2libGVSZWN0LmhlaWdodCgpKSk7CisgICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFy
OworfQogCi0gICAgbV9yb290TGF5ZXJDYW52YXNTaXplID0gc2l6ZTsKK0ludFJlY3QgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpob3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2
aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgSW50UmVjdCBo
b3Jpem9udGFsU2Nyb2xsYmFyKEludFBvaW50KGNvbnRlbnRSZWN0LngoKSwgY29udGVudFJlY3Qu
Ym90dG9tKCkpLCBJbnRTaXplKHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdo
dCgpIC0gY29udGVudFJlY3QuaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9s
bGJhcjsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcih1bnNpZ25l
ZCBwcm9ncmFtSWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJvb3RM
YXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxl
UmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7Ci0gICAgaWYgKHByb2dyYW1JZCAh
PSBtX2N1cnJlbnRTaGFkZXIpIHsKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT51c2VQcm9ncmFtKHByb2dyYW1JZCkpOwotICAgICAgICBtX2N1cnJlbnRTaGFkZXIgPSBw
cm9ncmFtSWQ7CisgICAgaWYgKGNvbnRlbnRSZWN0LmludGVyc2VjdHMoZGlydHlSZWN0KSkKKyAg
ICAgICAgbV9yb290TGF5ZXJUaWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIpIHsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxi
YXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOwor
ICAgICAgICBpZiAoZGlydHlSZWN0LmludGVyc2VjdHMoc2Nyb2xsYmFyKSkgeworICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9zaXRpb24oc2Nyb2xsYmFy
LmxvY2F0aW9uKCkpOworICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPmlu
dmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fdmVy
dGljYWxTY3JvbGxiYXJUaWxlcikgeworICAgICAgICBJbnRSZWN0IHNjcm9sbGJhciA9IHZlcnRp
Y2FsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAgICAgICBpZiAo
ZGlydHlSZWN0LmludGVyc2VjdHMoc2Nyb2xsYmFyKSkgeworICAgICAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBvc2l0aW9uKHNjcm9sbGJhci5sb2NhdGlvbigpKTsK
KyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+aW52YWxpZGF0ZVJlY3QoZGly
dHlSZWN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZUFuZERyYXdSb290TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQs
IFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQsIGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICAvLyBNYXNrIG91dCB3
cml0ZXMgdG8gYWxwaGEgY2hhbm5lbDogQ2xlYXJUeXBlIHZpYSBTa2lhIHJlc3VsdHMgaW4gaW52
YWxpZAorICAgIC8vIHplcm8gYWxwaGEgdmFsdWVzIG9uIHRleHQgZ2x5cGhzLiBUaGUgcm9vdCBs
YXllciBpcyBhbHdheXMgb3BhcXVlLgorICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKSk7CisKKyAgICBtX3Jvb3RMYXll
clRpbGVyLT51cGRhdGUodGlsZVBhaW50LCB2aXNpYmxlUmVjdCk7CisgICAgbV9yb290TGF5ZXJU
aWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7CisKKyAgICBpZiAodmlzaWJsZVJlY3Qud2lkdGgoKSA+
IGNvbnRlbnRSZWN0LndpZHRoKCkpIHsKKyAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJh
ciA9IHZlcnRpY2FsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAg
ICAgICBJbnRTaXplIHRpbGVTaXplID0gdmVydGljYWxTY3JvbGxiYXIuc2l6ZSgpLnNocnVua1Rv
KEludFNpemUobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkpOworICAgICAgICBp
ZiAoIW1fdmVydGljYWxTY3JvbGxiYXJUaWxlcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXJUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVTaXplKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5zZXRU
aWxlU2l6ZSh0aWxlU2l6ZSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0
TGF5ZXJQb3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT51cGRhdGUoc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVSZWN0
KTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5kcmF3KHZpc2libGVSZWN0KTsK
KyAgICB9CisKKyAgICBpZiAodmlzaWJsZVJlY3QuaGVpZ2h0KCkgPiBjb250ZW50UmVjdC5oZWln
aHQoKSkgeworICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXIgPSBob3Jpem9udGFs
U2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAgICAgICBJbnRTaXpl
IHRpbGVTaXplID0gaG9yaXpvbnRhbFNjcm9sbGJhci5zaXplKCkuc2hydW5rVG8oSW50U2l6ZSht
X21heFRleHR1cmVTaXplLCBtX21heFRleHR1cmVTaXplKSk7CisgICAgICAgIGlmICghbV9ob3Jp
em9udGFsU2Nyb2xsYmFyVGlsZXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJU
aWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVTaXplKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnNldFRpbGVT
aXplKHRpbGVTaXplKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnNldExh
eWVyUG9zaXRpb24oaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnVwZGF0ZShzY3JvbGxiYXJQYWludCwgdmlzaWJsZVJl
Y3QpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVj
dCk7CiAgICAgfQogfQogCi0vLyBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55
IG90aGVyIHVwZGF0ZXMgYXJlIG1hZGUgdG8gdGhlCi0vLyByb290IGxheWVyIHRleHR1cmUuIEl0
IHJlc2l6ZXMgdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZSBhbmQgc2Nyb2xscyBpdHMKLS8vIGNvbnRl
bnRzIGFzIG5lZWRlZC4gSXQgYWxzbyBzZXRzIHVwIGNvbW1vbiBHTCBzdGF0ZSB1c2VkIGJ5IHRo
ZSByZXN0Ci0vLyBvZiB0aGUgbGF5ZXIgZHJhd2luZyBjb2RlLgotdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBUaWxlUGFp
bnRJbnRlcmZhY2UmIHRpbGVQYWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQpCiB7CiAgICAgQVNTRVJU
KG1faGFyZHdhcmVDb21wb3NpdGluZyk7CiAKQEAgLTE4NywxMCArMjIzLDYgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGNvbnMKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKLQotICAgIGJvb2wgc2tpcFNjcm9s
bCA9IGZhbHNlOwotCiAgICAgLy8gSWYgdGhlIHNpemUgb2YgdGhlIHZpc2libGUgYXJlYSBoYXMg
Y2hhbmdlZCB0aGVuIGFsbG9jYXRlIGEgbmV3IHRleHR1cmUKICAgICAvLyB0byBzdG9yZSB0aGUg
Y29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIgYW5kIGFkanVzdCB0aGUgcHJvamVjdGlvbiBtYXRy
aXgKICAgICAvLyBhbmQgdmlld3BvcnQuCkBAIC0yMDAsMTUgKzIzMiw5IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zCiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJl
Y3RXaWR0aDsKICAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3RI
ZWlnaHQ7CiAKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFLCAwKSk7Ci0KICAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZhY2Ug
dG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKICAgICAgICAgLy8gcHJvamVj
dGlvbiBtYXRyaXggbmV4dCB0aW1lIHVzZVJlbmRlclN1cmZhY2UgaXMgY2FsbGVkLgogICAgICAg
ICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKLQotICAgICAgICAvLyBUaGUgcm9vdCBsYXll
ciB0ZXh0dXJlIHdhcyBqdXN0IHJlc2l6ZWQgc28gaXRzIGNvbnRlbnRzIGFyZSBub3QKLSAgICAg
ICAgLy8gdXNlZnVsIGZvciBzY3JvbGxpbmcuCi0gICAgICAgIHNraXBTY3JvbGwgPSB0cnVlOwog
ICAgIH0KIAogICAgIC8vIFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxl
IGFyZWEsIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFycy4KQEAgLTIyNCw3NSArMjUwLDcgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMoY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QsIGNvbnMKICAgICAvLyBCbGVuZGluZyBkaXNhYmxlZCBieSBkZWZhdWx0
LiBSb290IGxheWVyIGFscGhhIGNoYW5uZWwgb24gV2luZG93cyBpcyBpbmNvcnJlY3Qgd2hlbiBT
a2lhIHVzZXMgQ2xlYXJUeXBlLgogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKIAotICAgIGlmIChtX3Njcm9sbFBv
c2l0aW9uID09IEludFBvaW50KC0xLCAtMSkpIHsKLSAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9
IHNjcm9sbFBvc2l0aW9uOwotICAgICAgICBza2lwU2Nyb2xsID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBJbnRQb2ludCBzY3JvbGxEZWx0YSA9IHRvUG9pbnQoc2Nyb2xsUG9zaXRpb24gLSBtX3Njcm9s
bFBvc2l0aW9uKTsKLQotICAgIC8vIFNjcm9sbGluZyBsYXJnZXIgdGhhbiB0aGUgY29udGVudFJl
Y3Qgc2l6ZSBkb2VzIG5vdCBwcmVzZXJ2ZSBhbnkgb2YgdGhlIHBpeGVscywgc28gdGhlcmUgaXMK
LSAgICAvLyBubyBuZWVkIHRvIGNvcHkgZnJhbWVidWZmZXIgcGl4ZWxzIGJhY2sgaW50byB0aGUg
dGV4dHVyZS4KLSAgICBpZiAoYWJzKHNjcm9sbERlbHRhLnkoKSkgPiBjb250ZW50UmVjdC5oZWln
aHQoKSB8fCBhYnMoc2Nyb2xsRGVsdGEueCgpKSA+IGNvbnRlbnRSZWN0LndpZHRoKCkpCi0gICAg
ICAgIHNraXBTY3JvbGwgPSB0cnVlOwotCi0gICAgLy8gU2Nyb2xsIHRoZSBiYWNrYnVmZmVyCi0g
ICAgaWYgKCFza2lwU2Nyb2xsICYmIChzY3JvbGxEZWx0YS54KCkgfHwgc2Nyb2xsRGVsdGEueSgp
KSkgewotICAgICAgICAvLyBTY3JvbGxpbmcgd29ya3MgYXMgZm9sbG93czogV2UgcmVuZGVyIGEg
cXVhZCB3aXRoIHRoZSBjdXJyZW50IHJvb3QgbGF5ZXIgY29udGVudHMKLSAgICAgICAgLy8gdHJh
bnNsYXRlZCBieSB0aGUgYW1vdW50IHRoZSBwYWdlIGhhcyBzY3JvbGxlZCBzaW5jZSB0aGUgbGFz
dCB1cGRhdGUgYW5kIHRoZW4gcmVhZCB0aGUKLSAgICAgICAgLy8gcGl4ZWxzIG9mIHRoZSBjb250
ZW50IGFyZWEgKHZpc2libGUgYXJlYSBleGNsdWRpbmcgdGhlIHNjcm9sbCBiYXJzKSBiYWNrIGlu
dG8gdGhlCi0gICAgICAgIC8vIHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQg
YXJlYSB3aWxsIGJlIGZpbGxlZCBieSBhIHN1YnNlcXVlbnQgZHJhd0xheWVyc0ludG9SZWN0IGNh
bGwKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsZWRMYXllck1hdHJpeDsKLQot
ICAgICAgICBzY3JvbGxlZExheWVyTWF0cml4LnRyYW5zbGF0ZTNkKDAuNSAqIHZpc2libGVSZWN0
LndpZHRoKCkgLSBzY3JvbGxEZWx0YS54KCksCi0gICAgICAgICAgICAwLjUgKiB2aXNpYmxlUmVj
dC5oZWlnaHQoKSArIHNjcm9sbERlbHRhLnkoKSwgMCk7Ci0gICAgICAgIHNjcm9sbGVkTGF5ZXJN
YXRyaXguc2NhbGUzZCgxLCAtMSwgMSk7Ci0KLSAgICAgICAgY29uc3QgUmVuZGVyU3VyZmFjZUNo
cm9taXVtOjpTaGFyZWRWYWx1ZXMqIHJzdiA9IHJlbmRlclN1cmZhY2VTaGFyZWRWYWx1ZXMoKTsK
LSAgICAgICAgdXNlU2hhZGVyKHJzdi0+c2hhZGVyUHJvZ3JhbSgpKTsKLSAgICAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT51bmlmb3JtMWkocnN2LT5zaGFkZXJTYW1wbGVyTG9j
YXRpb24oKSwgMCkpOwotICAgICAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKG1f
Y29udGV4dC5nZXQoKSwgbV9wcm9qZWN0aW9uTWF0cml4LCBzY3JvbGxlZExheWVyTWF0cml4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSZWN0LndpZHRo
KCksIHZpc2libGVSZWN0LmhlaWdodCgpLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJzdi0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgcnN2LT5zaGFkZXJBbHBo
YUxvY2F0aW9uKCkpOwotCi0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
Y29weVRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAs
IDAsIDAsIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKSk7Ci0gICAg
fQotCiAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwotfQotCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QoY29uc3QgSW50
UmVjdCYgdXBkYXRlUmVjdCkKLXsKLSAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsK
LQotICAgIGlmICghbV9yb290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHJv
b3QgbGF5ZXIgdGV4dHVyZS4KLSAgICBBU1NFUlQoKHVwZGF0ZVJlY3QucmlnaHQoKSAgPD0gbV9y
b290TGF5ZXJUZXh0dXJlV2lkdGgpCi0gICAgICAgICAgICYmICh1cGRhdGVSZWN0LmJvdHRvbSgp
IDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOwotCi0jaWYgUExBVEZPUk0oU0tJQSkKLSAg
ICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0
bWFwKGZhbHNlKTsKLSAgICBBU1NFUlQoYml0bWFwLndpZHRoKCkgPT0gdXBkYXRlUmVjdC53aWR0
aCgpICYmIGJpdG1hcC5oZWlnaHQoKSA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICB2b2lk
KiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7Ci0jZWxpZiBQTEFURk9STShDRykKLSAgICAv
LyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJDR0NvbnRleHQu
Z2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1h
cENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVS
ZWN0LmhlaWdodCgpKTsKLSAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJhY2tpbmdTdG9y
ZS5kYXRhKCk7Ci0jZWxzZQotI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0
Zm9ybS4iCi0jZW5kaWYKLSAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCBy
ZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBk
YXRlUmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQotewotICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwog
CiAgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IG1fcm9vdExheWVyLT5tX3JlbmRlclN1cmZh
Y2UuZ2V0KCk7CiAgICAgaWYgKCFtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKQpAQCAtMzA1LDIyICsy
NjMsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIG1fY29udGV4dC0+Y2xlYXJDb2xv
cigwLCAwLCAxLCAxKTsKICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9CVUZGRVJfQklUKTsKIAotICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4
dHVyZUlkKSk7Ci0KLSAgICAvLyBSZW5kZXIgdGhlIHJvb3QgbGF5ZXIgdXNpbmcgYSBxdWFkIHRo
YXQgdGFrZXMgdXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEgb2YgdGhlIHdpbmRvdy4KLSAgICAv
LyBXZSByZXVzZSB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCBieSBDb250ZW50TGF5ZXJDaHJvbWl1
bS4KLSAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50
TGF5ZXJWYWx1ZXMgPSBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKLSAgICB1c2VTaGFkZXIo
Y29udGVudExheWVyVmFsdWVzLT5jb250ZW50U2hhZGVyUHJvZ3JhbSgpKTsKLSAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnVuaWZvcm0xaShjb250ZW50TGF5ZXJWYWx1ZXMtPnNo
YWRlclNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgLy8gTWFzayBvdXQgd3JpdGVzIHRvIGFs
cGhhIGNoYW5uZWw6IENsZWFyVHlwZSB2aWEgU2tpYSByZXN1bHRzIGluIGludmFsaWQKLSAgICAv
LyB6ZXJvIGFscGhhIHZhbHVlcyBvbiB0ZXh0IGdseXBocy4gVGhlIHJvb3QgbGF5ZXIgaXMgYWx3
YXlzIG9wYXF1ZS4KLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNvbG9yTWFz
ayh0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxh
eWVyTWF0cml4OwotICAgIGxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKHZpc2libGVSZWN0LndpZHRo
KCkgKiAwLjVmLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAqIDAuNWYsIDApOwotICAgIExheWVyQ2hy
b21pdW06OmRyYXdUZXh0dXJlZFF1YWQobV9jb250ZXh0LmdldCgpLCBtX3Byb2plY3Rpb25NYXRy
aXgsIGxheWVyTWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlz
aWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlck1hdHJpeExv
Y2F0aW9uKCksIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKLSAg
ICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0
cnVlLCB0cnVlKSk7CisgICAgdXBkYXRlQW5kRHJhd1Jvb3RMYXllcih0aWxlUGFpbnQsIHNjcm9s
bGJhclBhaW50LCB2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOwogCiAgICAgLy8gU2V0IHRoZSBy
b290IHZpc2libGUvY29udGVudCByZWN0cyAtLS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXll
cnMgY2FsbHMuCiAgICAgbV9yb290VmlzaWJsZVJlY3QgPSB2aXNpYmxlUmVjdDsKQEAgLTM5MCw2
ICszMzMsMTYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXNlbnQoKQogICAgIG1f
Y29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyKQoreworICAg
IG1fcm9vdExheWVyID0gbGF5ZXI7CisgICAgbV9yb290TGF5ZXJUaWxlci0+aW52YWxpZGF0ZUVu
dGlyZUxheWVyKCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyKQorICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7Cisg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJUaWxlcikKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhclRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKK30KKwogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQocmVjdC5yaWdodCgpIDw9IHJvb3RMYXllclRleHR1
cmVTaXplKCkud2lkdGgoKQpAQCAtNzgzLDE5ICs3MzYsNiBAQCBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogewogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogCi0gICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSBvYmplY3QgdG8gaG9sZCB0aGUgY29u
dGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXJUZXh0dXJlSWQgPSBjcmVh
dGVMYXllclRleHR1cmUoKTsKLSAgICBpZiAoIW1fcm9vdExheWVyVGV4dHVyZUlkKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0ZXh0dXJlIGZvciByb290IGxheWVyIik7
Ci0gICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgLy8gVHVybiBvZmYgZmlsdGVyaW5nIGZvciB0aGUgcm9vdCBsYXllciB0byBh
dm9pZCBibHVycmluZyBmcm9tIHRoZSByZXBlYXRlZAotICAgIC8vIHdyaXRlcyBhbmQgcmVhZHMg
dG8gdGhlIGZyYW1lYnVmZmVyIHRoYXQgaGFwcGVuIHdoaWxlIHNjcm9sbGluZy4KLSAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOwotICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6Ok5FQVJFU1QpKTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7Ci0K
ICAgICAvLyBHZXQgdGhlIG1heCB0ZXh0dXJlIHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0u
CiAgICAgbV9tYXhUZXh0dXJlU2l6ZSA9IDA7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwg
Jm1fbWF4VGV4dHVyZVNpemUpKTsKQEAgLTgzMCwxMiArNzcwLDYgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKCkKICAgICBtX3ZpZGVvTGF5ZXJTaGFy
ZWRWYWx1ZXMuY2xlYXIoKTsKICAgICBtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7
CiAgICAgbV9yZW5kZXJTdXJmYWNlU2hhcmVkVmFsdWVzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9y
b290TGF5ZXJUZXh0dXJlSWQpIHsKLSAgICAgICAgZGVsZXRlTGF5ZXJUZXh0dXJlKG1fcm9vdExh
eWVyVGV4dHVyZUlkKTsKLSAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSWQgPSAwOwotICAgIH0K
LQogICAgIGlmIChtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpCiAgICAgICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFtZWJ1
ZmZlcklkKSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGMwZTYxMGEzMGZiMTQ0Y2U0OGUw
NGM2MzIwZTQwOTk3YzYyN2QzM2YuLjY0NzQyNjlkZmMyNThhNTUwYTNkNGU2NTk2YjdjN2VmMzkw
NjM0NDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKQEAgLTY3LDE0ICs2OCwxMiBAQCBwdWJsaWM6
CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwogCi0gICAgLy8gdXBkYXRlcyBz
aXplIG9mIHJvb3QgdGV4dHVyZSwgaWYgbmVlZGVkLCBhbmQgc2Nyb2xscyB0aGUgYmFja2J1ZmZl
ci4KLSAgICB2b2lkIHByZXBhcmVUb0RyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24pOworICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpOwogCi0gICAgLy8gdXBkYXRlcyBhIHJlY3RhbmdsZSB3aXRoaW4gdGhlIHJvb3Qg
bGF5ZXIgdGV4dHVyZQotICAgIHZvaWQgdXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QoY29uc3Qg
SW50UmVjdCYgdXBkYXRlUmVjdCk7Ci0KLSAgICAvLyBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMg
b250byB0aGUgYmFja2J1ZmZlcgotICAgIHZvaWQgZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2
aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIC8vIHVwZGF0ZXMg
YW5kIGRyYXdzIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBiYWNrYnVmZmVyCisgICAgdm9p
ZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBv
c2l0aW9uLCBUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwKKyAgICAgICAgICAgICAgICAg
ICAgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCk7CiAKICAgICAvLyB3YWl0cyBm
b3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZvaWQgZmluaXNoKCk7CkBAIC04Miw3ICs4MSw3
IEBAIHB1YmxpYzoKICAgICAvLyBwdXRzIGJhY2tidWZmZXIgb25zY3JlZW4KICAgICB2b2lkIHBy
ZXNlbnQoKTsKIAotICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbGF5ZXIpIHsgbV9yb290TGF5ZXIgPSBsYXllcjsgfQorICAgIHZvaWQgc2V0Um9vdExheWVy
KFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpOwogICAgIExheWVyQ2hyb21pdW0qIHJv
b3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAgICAgdm9pZCB0cmFuc2Zl
clJvb3RMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIG90aGVyKSB7IG90aGVyLT5tX3Jvb3RM
YXllciA9IG1fcm9vdExheWVyLnJlbGVhc2UoKTsgfQogCkBAIC0xMjYsNiArMTI1LDggQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgZHJhd0xheWVyKExheWVyQ2hyb21pdW0qLCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qKTsKIAorICAgIHZvaWQgdXBkYXRlQW5kRHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJ
bnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCwg
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsK
KwogICAgIGJvb2wgaXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwogCiAgICAgdm9pZCBz
ZXREcmF3Vmlld3BvcnRSZWN0KGNvbnN0IEludFJlY3QmLCBib29sIGZsaXBZKTsKQEAgLTEzOSwx
MyArMTQwLDE4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygp
OwogICAgIHZvaWQgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIAotICAgIHVuc2lnbmVkIG1fcm9v
dExheWVyVGV4dHVyZUlkOworICAgIHN0YXRpYyBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyUmVj
dChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
OworICAgIHN0YXRpYyBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXJSZWN0KGNvbnN0IEludFJl
Y3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICBpbnQg
bV9yb290TGF5ZXJUZXh0dXJlV2lkdGg7CiAgICAgaW50IG1fcm9vdExheWVyVGV4dHVyZUhlaWdo
dDsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJpeDsKIAogICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKKyAgICBPd25QdHI8TGF5ZXJUaWxl
ckNocm9taXVtPiBtX3Jvb3RMYXllclRpbGVyOworICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21p
dW0+IG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyOworICAgIE93blB0cjxMYXllclRpbGVyQ2hy
b21pdW0+IG1fdmVydGljYWxTY3JvbGxiYXJUaWxlcjsKIAogICAgIEludFBvaW50IG1fc2Nyb2xs
UG9zaXRpb247CiAgICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjk0NTk4Zjc2MzQ1MDdjZGM5NjcxNjcxZDEwYjg0Y2U0N2UxODAxYgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUaWxlckNocm9taXVtLmNwcApAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgorCisjaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNr
aWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjZWxpZiBQTEFURk9STShD
RykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+CisjZW5kaWYKKwor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVh
dGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSkKK3sKKyAgICBpZiAoIWxheWVyUmVuZGVyZXIgfHwgdGlsZVNpemUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxl
ckNocm9taXVtKGxheWVyUmVuZGVyZXIsIHRpbGVTaXplKSk7Cit9CisKK0xheWVyVGlsZXJDaHJv
bWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCisgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5
ZXJSZW5kZXJlcikKK3sKKyAgICBzZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7Cit9CisKK0xheWVyVGls
ZXJDaHJvbWl1bTo6fkxheWVyVGlsZXJDaHJvbWl1bSgpCit7CisgICAgcmVzZXQoKTsKK30KKwor
R3JhcGhpY3NDb250ZXh0M0QqIExheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRl
eHQoKSBjb25zdAoreworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworICAgIHJldHVybiBs
YXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06
OnNldFRpbGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fdGlsZVNpemUg
PT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVzZXQoKTsKKworICAgIG1fdGlsZVNp
emUgPSBzaXplOworICAgIG1fdGlsZVBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3Rb
bV90aWxlU2l6ZS53aWR0aCgpICogbV90aWxlU2l6ZS5oZWlnaHQoKSAqIDRdKTsKK30KKwordm9p
ZCBMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3RpbGVzW2ldKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+ZGVsZXRlTGF5ZXJU
ZXh0dXJlKG1fdGlsZXNbaV0tPnJlbGVhc2VUZXh0dXJlSWQoKSk7CisgICAgfQorICAgIG1fdGls
ZXMuY2xlYXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW51c2VkVGlsZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3VudXNlZFRpbGVzW2ldKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+ZGVsZXRlTGF5ZXJUZXh0dXJlKG1f
dW51c2VkVGlsZXNbaV0tPnJlbGVhc2VUZXh0dXJlSWQoKSk7CisgICAgfQorICAgIG1fdW51c2Vk
VGlsZXMuY2xlYXIoKTsKKworICAgIG1fbGF5ZXJTaXplID0gSW50U2l6ZSgpOworICAgIG1fbGF5
ZXJUaWxlU2l6ZSA9IEludFNpemUoKTsKKyAgICBtX2xhc3RVcGRhdGVMYXllclJlY3QgPSBJbnRS
ZWN0KCk7Cit9CisKK0xheWVyVGlsZXJDaHJvbWl1bTo6VGlsZSogTGF5ZXJUaWxlckNocm9taXVt
OjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikKK3sKKyAgICBjb25zdCBpbnQgaW5kZXggPSB0aWxl
SW5kZXgoaSwgaik7CisgICAgQVNTRVJUKCFtX3RpbGVzW2luZGV4XSk7CisKKyAgICBpZiAobV91
bnVzZWRUaWxlcy5zaXplKCkgPiAwKSB7CisgICAgICAgIG1fdGlsZXNbaW5kZXhdID0gbV91bnVz
ZWRUaWxlcy5sYXN0KCkucmVsZWFzZSgpOworICAgICAgICBtX3VudXNlZFRpbGVzLnJlbW92ZUxh
c3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGV4dHVyZUlk
ID0gbGF5ZXJSZW5kZXJlcigpLT5jcmVhdGVMYXllclRleHR1cmUoKTsKKyAgICAgICAgT3duUHRy
PFRpbGU+IHRpbGUgPSBhZG9wdFB0cihuZXcgVGlsZSh0ZXh0dXJlSWQpKTsKKworICAgICAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV90aWxlU2l6ZS53aWR0aCgp
LCBtX3RpbGVTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApKTsKKworICAgICAgICBtX3RpbGVzW2luZGV4
XSA9IHRpbGUucmVsZWFzZSgpOworICAgIH0KKworICAgIG1fdGlsZXNbaW5kZXhdLT5tX2RpcnR5
TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVjdChpLCBqKTsKKyAgICByZXR1cm4gbV90aWxlc1tpbmRl
eF0uZ2V0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlkYXRlVGlsZXMo
Y29uc3QgSW50UmVjdCYgb2xkTGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBuZXdMYXllclJlY3Qp
Cit7CisgICAgaWYgKCFtX3RpbGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50
UmVjdCBvbGRDb250ZW50UmVjdCA9IGxheWVyUmVjdFRvQ29udGVudFJlY3Qob2xkTGF5ZXJSZWN0
KTsKKyAgICBpbnQgb2xkTGVmdCwgb2xkVG9wLCBvbGRSaWdodCwgb2xkQm90dG9tOworICAgIGNv
bnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhvbGRDb250ZW50UmVjdCwgb2xkTGVmdCwgb2xkVG9wLCBv
bGRSaWdodCwgb2xkQm90dG9tKTsKKworICAgIEludFJlY3QgbmV3Q29udGVudFJlY3QgPSBsYXll
clJlY3RUb0NvbnRlbnRSZWN0KG5ld0xheWVyUmVjdCk7CisgICAgaW50IG5ld0xlZnQsIG5ld1Rv
cCwgbmV3UmlnaHQsIG5ld0JvdHRvbTsKKyAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMobmV3
Q29udGVudFJlY3QsIG5ld0xlZnQsIG5ld1RvcCwgbmV3UmlnaHQsIG5ld0JvdHRvbSk7CisKKyAg
ICAvLyBJdGVyYXRpbmcgdGhyb3VnaCBqdXN0IHRoZSBvbGQgdGlsZSBpbmRpY2VzIGlzIGFuIG9w
dGltaXphdGlvbiB0byBhdm9pZAorICAgIC8vIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbnRpcmUg
bV90aWxlcyBhcnJheS4KKyAgICBmb3IgKGludCBqID0gb2xkVG9wOyBqIDw9IG9sZEJvdHRvbTsg
KytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBvbGRMZWZ0OyBpIDw9IG9sZFJpZ2h0OyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChpID49IG5ld0xlZnQgJiYgaSA8PSBuZXdSaWdodCAmJiBqID49
IG5ld1RvcCAmJiBqIDw9IG5ld0JvdHRvbSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgY29uc3QgaW50IGluZGV4ID0gdGlsZUluZGV4KGksIGopOworICAgICAgICAg
ICAgaWYgKG1fdGlsZXNbaW5kZXhdKQorICAgICAgICAgICAgICAgIG1fdW51c2VkVGlsZXMuYXBw
ZW5kKG1fdGlsZXNbaW5kZXhdLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGludCAmbGVmdCwgaW50ICZ0b3AsIGludCAmcmlnaHQsIGludCAm
Ym90dG9tKSBjb25zdAoreworICAgIGNvbnN0IEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJl
Y3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7CisKKyAgICBsZWZ0ID0gbGF5ZXJSZWN0LngoKSAv
IG1fdGlsZVNpemUud2lkdGgoKTsKKyAgICB0b3AgPSBsYXllclJlY3QueSgpIC8gbV90aWxlU2l6
ZS5oZWlnaHQoKTsKKyAgICByaWdodCA9IChsYXllclJlY3QucmlnaHQoKSAtIDEpIC8gbV90aWxl
U2l6ZS53aWR0aCgpOworICAgIGJvdHRvbSA9IChsYXllclJlY3QuYm90dG9tKCkgLSAxKSAvIG1f
dGlsZVNpemUuaGVpZ2h0KCk7Cit9CisKK0ludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjpjb250
ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAorewor
ICAgIEludFBvaW50IHBvcyhjb250ZW50UmVjdC54KCkgLSBtX2xheWVyUG9zaXRpb24ueCgpLCBj
b250ZW50UmVjdC55KCkgLSBtX2xheWVyUG9zaXRpb24ueSgpKTsKKyAgICBJbnRSZWN0IGxheWVy
UmVjdChwb3MsIGNvbnRlbnRSZWN0LnNpemUoKSk7CisKKyAgICAvLyBDbGlwIHRvIHRoZSBwb3Np
dGlvbi4KKyAgICBpZiAocG9zLngoKSA8IDAgfHwgcG9zLnkoKSA8IDApCisgICAgICAgIGxheWVy
UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoY29udGVudFJlY3Qud2lkdGgo
KSArIHBvcy54KCksIGNvbnRlbnRSZWN0LmhlaWdodCgpICsgcG9zLnkoKSkpOworICAgIHJldHVy
biBsYXllclJlY3Q7Cit9CisKK0ludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjpsYXllclJlY3RU
b0NvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IGNvbnRlbnRSZWN0ID0gbGF5ZXJSZWN0OworICAgIGNvbnRlbnRSZWN0Lm1vdmUobV9sYXll
clBvc2l0aW9uLngoKSwgbV9sYXllclBvc2l0aW9uLnkoKSk7CisgICAgcmV0dXJuIGNvbnRlbnRS
ZWN0OworfQorCitpbnQgTGF5ZXJUaWxlckNocm9taXVtOjp0aWxlSW5kZXgoaW50IGksIGludCBq
KSBjb25zdAoreworICAgIEFTU0VSVChpID49IDAgJiYgaiA+PSAwICYmIGkgPCBtX2xheWVyVGls
ZVNpemUud2lkdGgoKSAmJiBqIDwgbV9sYXllclRpbGVTaXplLmhlaWdodCgpKTsKKyAgICByZXR1
cm4gaSArIGogKiBtX2xheWVyVGlsZVNpemUud2lkdGgoKTsKK30KKworSW50UmVjdCBMYXllclRp
bGVyQ2hyb21pdW06OnRpbGVDb250ZW50UmVjdChpbnQgaSwgaW50IGopIGNvbnN0Cit7CisgICAg
SW50UG9pbnQgYW5jaG9yKG1fbGF5ZXJQb3NpdGlvbi54KCkgKyBpICogbV90aWxlU2l6ZS53aWR0
aCgpLCBtX2xheWVyUG9zaXRpb24ueSgpICsgaiAqIG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAg
IEludFJlY3QgdGlsZShhbmNob3IsIG1fdGlsZVNpemUpOworICAgIHJldHVybiB0aWxlOworfQor
CitJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUxheWVyUmVjdChpbnQgaSwgaW50IGop
IGNvbnN0Cit7CisgICAgSW50UG9pbnQgYW5jaG9yKGkgKiBtX3RpbGVTaXplLndpZHRoKCksIGog
KiBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICBJbnRSZWN0IHRpbGUoYW5jaG9yLCBtX3RpbGVT
aXplKTsKKyAgICByZXR1cm4gdGlsZTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmIChjb250
ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGdyb3dMYXllclRvQ29u
dGFpbihjb250ZW50UmVjdCk7CisKKyAgICAvLyBEaXJ0eSByZWN0cyBhcmUgYWx3YXlzIGluIGxh
eWVyIHNwYWNlLCBhcyB0aGUgbGF5ZXIgY291bGQgYmUgcmVwb3NpdGlvbmVkCisgICAgLy8gYWZ0
ZXIgaW52YWxpZGF0aW9uLgorICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xh
eWVyUmVjdChjb250ZW50UmVjdCk7CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7
CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAg
ICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleChpLCBqKV0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBJ
bnRSZWN0IGJvdW5kID0gdGlsZUxheWVyUmVjdChpLCBqKTsKKyAgICAgICAgICAgIGJvdW5kLmlu
dGVyc2VjdChsYXllclJlY3QpOworICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdC51
bml0ZShib3VuZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9t
aXVtOjppbnZhbGlkYXRlRW50aXJlTGF5ZXIoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV90aWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV90aWxlc1tpXSkKKyAgICAg
ICAgICAgIG1fdW51c2VkVGlsZXMuYXBwZW5kKG1fdGlsZXNbaV0ucmVsZWFzZSgpKTsKKyAgICB9
CisgICAgbV90aWxlcy5jbGVhcigpOworCisgICAgbV9sYXllclNpemUgPSBJbnRTaXplKCk7Cisg
ICAgbV9sYXllclRpbGVTaXplID0gSW50U2l6ZSgpOworICAgIG1fbGFzdFVwZGF0ZUxheWVyUmVj
dCA9IEludFJlY3QoKTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShUaWxl
UGFpbnRJbnRlcmZhY2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQorewor
ICAgIC8vIEludmFsaWRhdGUgb2xkIHRpbGVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHVzZWQgYnV0
IGFyZW4ndCBpbiB1c2UgdGhpcworICAgIC8vIGZyYW1lIHNvIHRoYXQgdGhleSBjYW4gZ2V0IHJl
dXNlZCBmb3IgbmV3IHRpbGVzLgorICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RU
b0xheWVyUmVjdChjb250ZW50UmVjdCk7CisgICAgaW52YWxpZGF0ZVRpbGVzKG1fbGFzdFVwZGF0
ZUxheWVyUmVjdCwgbGF5ZXJSZWN0KTsKKyAgICBtX2xhc3RVcGRhdGVMYXllclJlY3QgPSBsYXll
clJlY3Q7CisKKyAgICBncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOworCisgICAgLy8g
Q3JlYXRlIHRpbGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWlu
IGFsbAorICAgIC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KKyAg
ICBJbnRSZWN0IGRpcnR5TGF5ZXJSZWN0OworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b207CisgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2op
IHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAg
ICAgICAgVGlsZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KGksIGopXS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBq
KTsKKyAgICAgICAgICAgIGRpcnR5TGF5ZXJSZWN0LnVuaXRlKHRpbGUtPm1fZGlydHlMYXllclJl
Y3QpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgSW50UmVjdCBwYWludFJlY3QgPSBsYXll
clJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisjaWYgUExBVEZPUk0oU0tJQSkK
KyAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IGNhbnZhcyhuZXcgc2tpYTo6UGxhdGZv
cm1DYW52YXMocGFpbnRSZWN0LndpZHRoKCksIHBhaW50UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsK
KyAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gc2tpYUNvbnRleHQobmV3IFBsYXRmb3Jt
Q29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
Z3JhcGhpY3NDb250ZXh0KG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCo+KHNraWFDb250ZXh0LmdldCgpKSkpOworCisgICAgLy8gQnJp
bmcgdGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVj
dC4KKyAgICBjYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50UmVj
dC54KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXBhaW50UmVjdC55KCkpKTsKKworICAgIHBh
aW50ZXIucGFpbnQoKmdyYXBoaWNzQ29udGV4dCwgcGFpbnRSZWN0KTsKKworICAgIC8vIEdldCB0
aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCYgYml0
bWFwID0gY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBBU1NF
UlQoYml0bWFwLndpZHRoKCkgPT0gcGFpbnRSZWN0LndpZHRoKCkgJiYgYml0bWFwLmhlaWdodCgp
ID09IHBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgdWludDhfdCogcGFpbnRQaXhlbHMgPSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4oYml0bWFwLmdldFBpeGVscygpKTsKKyNlbGlmIFBMQVRGT1JNKENH
KQorICAgIFZlY3Rvcjx1aW50OF90PiBjYW52YXNQaXhlbHM7CisgICAgaW50IHJvd0J5dGVzID0g
NCAqIHBhaW50UmVjdC53aWR0aCgpOworICAgIGNhbnZhc1BpeGVscy5yZXNpemUocm93Qnl0ZXMg
KiBwYWludFJlY3QuaGVpZ2h0KCkpOworICAgIG1lbXNldChjYW52YXNQaXhlbHMuZGF0YSgpLCAw
LCBjYW52YXNQaXhlbHMuc2l6ZSgpKTsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBj
b2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICBS
ZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBtX2NnQ29udGV4dDsKKyAgICBtX2NnQ29udGV4dC5hZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZShjYW52YXNQaXhlbHMuZGF0YSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50UmVjdC53
aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9z
dCkpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShtX2NnQ29udGV4dC5nZXQoKSwgMCwgcGFp
bnRSZWN0LmhlaWdodCgpKTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShtX2NnQ29udGV4dC5nZXQo
KSwgMSwgLTEpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IG1fZ3JhcGhpY3NDb250ZXh0
KG5ldyBHcmFwaGljc0NvbnRleHQobV9jZ0NvbnRleHQuZ2V0KCkpKTsKKworICAgIC8vIEJyaW5n
IHRoZSBDb3JlR3JhcGhpY3MgY29udGV4dCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0
aGUgcGFpbnQgcmVjdC4KKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obV9jZ0NvbnRleHQuZ2V0
KCksIC1wYWludFJlY3QueCgpLCAtcGFpbnRSZWN0LnkoKSk7CisgICAgcGFpbnRlci5wYWludCgq
bV9ncmFwaGljc0NvbnRleHQsIHBhaW50UmVjdCk7CisKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRz
IG9mIHRoZSB1cGRhdGVkIHJlY3QuCisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRt
YXBDb250ZXh0R2V0V2lkdGgobV9jZ0NvbnRleHQuZ2V0KCkpKSA9PSBwYWludFJlY3Qud2lkdGgo
KSAmJiBzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldEhlaWdodChtX2NnQ29udGV4
dC5nZXQoKSkpID09IHBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgdWludDhfdCogcGFpbnRQaXhl
bHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oY2FudmFzUGl4ZWxzLmRhdGEoKSk7CisjZWxzZQor
I2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCisjZW5kaWYKKwor
ICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVGlsZSogdGlsZSA9
IG1fdGlsZXNbdGlsZUluZGV4KGksIGopXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdGlsZS0+
ZGlydHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gQ2Fs
Y3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIGNvcHkgZnJvbS4KKyAgICAgICAgICAgIElu
dFJlY3Qgc291cmNlUmVjdCA9IHRpbGVDb250ZW50UmVjdChpLCBqKTsKKyAgICAgICAgICAgIGNv
bnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgICAg
IHNvdXJjZVJlY3QuaW50ZXJzZWN0KGxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0
eUxheWVyUmVjdCkpOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0
YW5nbGUgdG8gdXBsb2FkIGludG8uCisgICAgICAgICAgICBJbnRSZWN0IGRlc3RSZWN0KEludFBv
aW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNob3Iu
eSgpKSwgc291cmNlUmVjdC5zaXplKCkpOworCisgICAgICAgICAgICAvLyBPZmZzZXQgZnJvbSBw
YWludCByZWN0YW5nbGUgdG8gdGhpcyB0aWxlJ3MgZGlydHkgcmVjdGFuZ2xlLgorICAgICAgICAg
ICAgSW50UG9pbnQgcGFpbnRPZmZzZXQoc291cmNlUmVjdC54KCkgLSBwYWludFJlY3QueCgpLCBz
b3VyY2VSZWN0LnkoKSAtIHBhaW50UmVjdC55KCkpOworCisgICAgICAgICAgICB1aW50OF90KiBw
aXhlbFNvdXJjZTsKKyAgICAgICAgICAgIGlmIChwYWludFJlY3Qud2lkdGgoKSA9PSBzb3VyY2VS
ZWN0LndpZHRoKCkgJiYgIXBhaW50T2Zmc2V0LngoKSkKKyAgICAgICAgICAgICAgICBwaXhlbFNv
dXJjZSA9ICZwYWludFBpeGVsc1s0ICogcGFpbnRPZmZzZXQueSgpICogcGFpbnRSZWN0LndpZHRo
KCldOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU3RyaWRlcyBub3Qg
ZXF1YWwsIHNvIGRvIGEgcm93LWJ5LXJvdyBtZW1jcHkgZnJvbSB0aGUKKyAgICAgICAgICAgICAg
ICAvLyBwYWludCByZXN1bHRzIGludG8gYSB0ZW1wIGJ1ZmZlciBmb3IgdXBsb2FkaW5nLgorICAg
ICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRlc3RSZWN0LmhlaWdodCgpOyAr
K3JvdykKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZtX3RpbGVQaXhlbHNbZGVzdFJlY3Qu
d2lkdGgoKSAqIDQgKiByb3ddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhaW50UGl4
ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgpICsgKHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBwYWlu
dFJlY3Qud2lkdGgoKSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lk
dGgoKSAqIDQpOworCisgICAgICAgICAgICAgICAgcGl4ZWxTb3VyY2UgPSAmbV90aWxlUGl4ZWxz
WzBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRpbGUtPnRleHR1cmVJ
ZCgpKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55
KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVsU291cmNlKSk7
CisKKyAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldExheWVyUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmIGxheWVyUG9zaXRpb24pCit7CisgICAgbV9sYXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlv
bjsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpCit7CisgICAgLy8gV2UgcmV1c2UgdGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgYnkg
Q29udGVudExheWVyQ2hyb21pdW0uCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBs
YXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpT
aGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclZhbHVlcyA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGVu
dExheWVyU2hhcmVkVmFsdWVzKCk7CisgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoY29u
dGVudExheWVyVmFsdWVzLT5jb250ZW50U2hhZGVyUHJvZ3JhbSgpKTsKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dW5pZm9ybTFpKGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyU2FtcGxlckxv
Y2F0aW9uKCksIDApKTsKKworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAg
Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVGls
ZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KGksIGopXS5nZXQoKTsKKyAgICAgICAgICAgIEFT
U0VSVCh0aWxlKTsKKworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0aWxlLT50ZXh0dXJlSWQoKSkpOwor
CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxlTWF0cml4OworICAgICAgICAg
ICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVDb250ZW50UmVjdChpLCBqKTsKKyAgICAgICAgICAg
IHRpbGVNYXRyaXgudHJhbnNsYXRlM2QodGlsZVJlY3QueCgpIC0gY29udGVudFJlY3QueCgpICsg
dGlsZVJlY3Qud2lkdGgoKSAvIDIuMCwgdGlsZVJlY3QueSgpIC0gY29udGVudFJlY3QueSgpICsg
dGlsZVJlY3QuaGVpZ2h0KCkgLyAyLjAsIDApOworCisgICAgICAgICAgICBMYXllckNocm9taXVt
OjpkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1h
dHJpeCgpLCB0aWxlTWF0cml4LCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0
KCksIDEsIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgY29udGVu
dExheWVyVmFsdWVzLT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cmVzaXplTGF5ZXIoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpZiAobV9sYXllclNpemUgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50IHdpZHRoID0gKHNpemUud2lkdGgoKSArIG1fdGlsZVNpemUud2lkdGgoKSAtIDEp
IC8gbV90aWxlU2l6ZS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSAoc2l6ZS5oZWlnaHQoKSAr
IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSAxKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7CisKKyAgICBW
ZWN0b3I8T3duUHRyPFRpbGU+ID4gbmV3VGlsZXM7CisgICAgbmV3VGlsZXMucmVzaXplKHdpZHRo
ICogaGVpZ2h0KTsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IG1fbGF5ZXJUaWxlU2l6ZS5oZWln
aHQoKTsgKytqKQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbGF5ZXJUaWxlU2l6ZS53
aWR0aCgpOyArK2kpCisgICAgICAgICAgICBuZXdUaWxlc1tpICsgaiAqIHdpZHRoXS5zd2FwKG1f
dGlsZXNbaSArIGogKiBtX2xheWVyVGlsZVNpemUud2lkdGgoKV0pOworCisgICAgbV90aWxlcy5z
d2FwKG5ld1RpbGVzKTsKKyAgICBtX2xheWVyU2l6ZSA9IHNpemU7CisgICAgbV9sYXllclRpbGVT
aXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBMYXllclRpbGVyQ2hyb21p
dW06Omdyb3dMYXllclRvQ29udGFpbihjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAg
ICAvLyBHcm93IHRoZSB0aWxlIGFycmF5IHRvIGNvbnRhaW4gdGhpcyBjb250ZW50IHJlY3QuCisg
ICAgSW50UmVjdCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0
KTsKKyAgICBJbnRSZWN0IGxheWVyKEludFBvaW50KDAsIDApLCBtX2xheWVyU2l6ZSk7CisgICAg
bGF5ZXIudW5pdGUobGF5ZXJSZWN0KTsKKyAgICByZXNpemVMYXllcihsYXllci5zaXplKCkpOwor
fQorCitMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6On5UaWxlKCkKK3sKKyAgICAvLyBFYWNoIHRp
bGUgZG9lc24ndCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0LCBzbyBjYW4ndCBjbGVh
biB1cAorICAgIC8vIGl0cyBvd24gdGV4dHVyZS4gIElmIHRoaXMgYXNzZXJ0IGlzIGhpdCwgdGhl
biB0aGUgTGF5ZXJUaWxlckNocm9taXVtCisgICAgLy8gZGVzdHJ1Y3RvciBkaWRuJ3QgY2xlYW4g
dGhpcyB1cC4KKyAgICBBU1NFUlQoIW1fdGV4dHVyZUlkKTsKK30KKwordW5zaWduZWQgaW50IExh
eWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6cmVsZWFzZVRleHR1cmVJZCgpCit7CisgICAgdW5zaWdu
ZWQgaW50IGlkID0gbV90ZXh0dXJlSWQ7CisgICAgbV90ZXh0dXJlSWQgPSAwOworICAgIHJldHVy
biBpZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzA2NmZkZjZjMDk5
YTBkNWZjMzZjM2M0YTk0NWRmM2JkYjFlZDhlMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKQEAgLTAsMCAr
MSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgTGF5ZXJUaWxlckNocm9taXVtX2gKKyNkZWZpbmUg
TGF5ZXJUaWxlckNocm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2Ns
YXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKKworY2xhc3MgVGlsZVBhaW50SW50ZXJmYWNlIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgPSAwOworfTsKKworY2xhc3MgTGF5ZXJUaWxl
ckNocm9taXVtIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKTsKKworICAgIH5MYXllclRp
bGVyQ2hyb21pdW0oKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpOworICAgIHZvaWQgaW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CisgICAgdm9p
ZCB1cGRhdGUoVGlsZVBhaW50SW50ZXJmYWNlJiBwYWludGVyLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCk7CisgICAgdm9pZCBkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwor
ICAgIC8vIFNldCBwb3NpdGlvbiBvZiB0aGlzIHRpbGVkIGxheWVyIGluIGNvbnRlbnQgc3BhY2Uu
CisgICAgdm9pZCBzZXRMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbik7Cisg
ICAgLy8gQ2hhbmdlIHRoZSB0aWxlIHNpemUuICBUaGlzIG1heSBpbnZhbGlkYXRlIGFsbCB0aGUg
ZXhpc3RpbmcgdGlsZXMuCisgICAgdm9pZCBzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KTsKKworcHJpdmF0ZToKKyAgICBMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSk7CisKKyAgICBjbGFz
cyBUaWxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IFRpbGUodW5zaWduZWQgaW50
IHRleHR1cmVJZCkgOiBtX3RleHR1cmVJZCh0ZXh0dXJlSWQpIHsgfQorICAgICAgICB+VGlsZSgp
OworCisgICAgICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmVJZDsgfQorICAgICAgICB1bnNpZ25lZCBpbnQgcmVsZWFzZVRleHR1cmVJZCgpOworCisg
ICAgICAgIGJvb2wgZGlydHkoKSBjb25zdCB7IHJldHVybiAhbV9kaXJ0eUxheWVyUmVjdC5pc0Vt
cHR5KCk7IH0KKyAgICAgICAgdm9pZCBjbGVhckRpcnR5KCkgeyBtX2RpcnR5TGF5ZXJSZWN0ID0g
SW50UmVjdCgpOyB9CisKKyAgICAgICAgLy8gTGF5ZXItc3BhY2UgZGlydHkgcmVjdGFuZ2xlIHRo
YXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLgorICAgICAgICBJbnRSZWN0IG1fZGlydHlMYXllclJl
Y3Q7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgaW50IG1fdGV4dHVyZUlkOworICAg
IH07CisKKyAgICB2b2lkIHJlc2l6ZUxheWVyKGNvbnN0IEludFNpemUmIHNpemUpOworICAgIC8v
IEdyb3cgbGF5ZXIgc2l6ZSB0byBjb250YWluIHRoaXMgcmVjdGFuZ2xlLgorICAgIHZvaWQgZ3Jv
d0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJS
ZW5kZXJlcjsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4dCgp
IGNvbnN0OworICAgIFRpbGUqIGNyZWF0ZVRpbGUoaW50IGksIGludCBqKTsKKyAgICAvLyBJbnZh
bGlkYXRlIGFueSB0aWxlcyB3aGljaCBkbyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIG5ld0xheWVy
UmVjdC4KKyAgICB2b2lkIGludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBvbGRMYXllclJl
Y3QsIGNvbnN0IEludFJlY3QmIG5ld0xheWVyUmVjdCk7CisgICAgdm9pZCByZXNldCgpOworICAg
IHZvaWQgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBpbnQgJmxlZnQsIGludCAmdG9wLCBpbnQgJnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29uc3Q7Cisg
ICAgSW50UmVjdCBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KSBjb25zdDsKKyAgICBJbnRSZWN0IGxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50
UmVjdCYgbGF5ZXJSZWN0KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIGluZGV4IGludG8g
bV90aWxlcyBmb3IgYSBnaXZlbiB0aWxlIGxvY2F0aW9uLgorICAgIGludCB0aWxlSW5kZXgoaW50
IGksIGludCBqKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRoZSBib3VuZHMgaW4gY29udGVudCBz
cGFjZSBmb3IgYSBnaXZlbiB0aWxlIGxvY2F0aW9uLgorICAgIEludFJlY3QgdGlsZUNvbnRlbnRS
ZWN0KGludCBpLCBpbnQgaikgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0aGUgYm91bmRzIGluIGxh
eWVyIHNwYWNlIGZvciBhIGdpdmVuIHRpbGUgbG9jYXRpb24uCisgICAgSW50UmVjdCB0aWxlTGF5
ZXJSZWN0KGludCBpLCBpbnQgaikgY29uc3Q7CisKKyAgICBJbnRTaXplIG1fdGlsZVNpemU7Cisg
ICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKKyAgICBJbnRTaXplIG1fbGF5ZXJUaWxlU2l6ZTsKKyAg
ICBJbnRSZWN0IG1fbGFzdFVwZGF0ZUxheWVyUmVjdDsKKyAgICBJbnRQb2ludCBtX2xheWVyUG9z
aXRpb247CisKKyAgICAvLyBMb2dpY2FsIDJEIGFycmF5IG9mIHRpbGVzIChkaW1lbnNpb25zIG9m
IG1fbGF5ZXJUaWxlU2l6ZSkKKyAgICBWZWN0b3I8T3duUHRyPFRpbGU+ID4gbV90aWxlczsKKyAg
ICAvLyBMaW5lYXIgYXJyYXkgb2YgdW51c2VkIHRpbGVzLgorICAgIFZlY3RvcjxPd25QdHI8VGls
ZT4gPiBtX3VudXNlZFRpbGVzOworCisgICAgLy8gQ2FjaGUgYSB0aWxlLXNpemVkIHBpeGVsIGJ1
ZmZlciB0byBkcmF3IGludG8uCisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV90aWxlUGl4ZWxz
OworCisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCit9
CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggZWM5N2NiZjBlYTMxMjMxZTZjNGE4OGRmYzA5OWUyOTVjNDRlZDRhMS4uNjY3
ZTcxNjM1MDAzNzU4Mzg2ZjU1NDMwYTk0YzU5N2Y3YzEwMTVjMSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjUgQEAKKzIwMTAtMTItMjAgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIFRpbGUgcm9vdCBsYXllciBvZiB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTQ3CisKKyAgICAgICAgUmVmYWN0
b3Igcm9vdCBsYXllciBsb2dpYyBvdXQgb2YgV2ViVmlld0ltcGwgYW5kIGludG8KKyAgICAgICAg
TGF5ZXJUaWxlckNocm9taXVtLiAgVGhlIHBhaW50aW5nIGlzIG5vdyBkb25lIHRocm91Z2ggYW4g
aW50ZXJmYWNlCisgICAgICAgIHJhdGhlciB0aGFuIGRpcmVjdGx5IGluIFdlYlZpZXdJbXBsLgor
CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGxUaWxlUGFpbnRJbnRlcmZhY2U6OldlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGxUaWxlUGFpbnRJbnRlcmZhY2U6OnBh
aW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGxTY3JvbGxiYXJQYWludEludGVyZmFj
ZTo6V2ViVmlld0ltcGxTY3JvbGxiYXJQYWludEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRJbnRlcmZhY2U6OnBhaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0lt
cGwuaDoKKwogMjAxMC0xMi0yMCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAppbmRleCBhYzA1ZGQyYjc5YjM3OWNiNzNkYzM2MDAwMjg2YjUwMDlmYmU5MDAy
Li5hN2M0YWExY2U4ZDkyNjlkNGVjMDY3NmJkYWQzY2JlOGE5Y2FlZDU5IDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMjI2OCw3MCArMjI2OCw2IEBAIHZvaWQgV2ViVmlld0lt
cGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNjcm9s
bFJvb3RMYXllclJlY3QoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KQogewotICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwotICAgIC8vIENvbXB1
dGUgdGhlIGRhbWFnZSByZWN0IGluIHZpZXdwb3J0IHNwYWNlLgotICAgIFdlYkZyYW1lSW1wbCog
d2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7Ci0gICAgaWYgKCF3ZWJmcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKLSAg
ICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgY29udGVudFJlY3Qg
PSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpOwotICAgIEludFJlY3Qgc2NyZWVuUmVj
dCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGVudFJlY3QpOwotCi0gICAgLy8gV2Ugc3Vw
cG9ydCBmYXN0IHNjcm9sbGluZyBpbiBvbmUgZGlyZWN0aW9uIGF0IGEgdGltZS4KLSAgICBpZiAo
c2Nyb2xsRGVsdGEud2lkdGgoKSAmJiBzY3JvbGxEZWx0YS5oZWlnaHQoKSkgewotICAgICAgICBp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChXZWJSZWN0KHNjcmVlblJlY3QpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiB3ZSB3aWxsIGV4cG9zZSBi
eSBzY3JvbGxpbmcuIFdlIHVzZSB0aGUKLSAgICAvLyBjb250ZW50IHJlY3QgZm9yIGludmFsaWRh
dGlvbi4gIFVzaW5nIHRoaXMgc3BhY2UgZm9yIGRhbWFnZQotICAgIC8vIHJlY3RzIGFsbG93cyB1
cyB0byBpbnRlcm1peCBpbnZhbGlkYXRlcyB3aXRoIHNjcm9sbHMuCi0gICAgSW50UmVjdCBkYW1h
Z2VkQ29udGVudHNSZWN0OwotICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCgpKSB7Ci0gICAgICAg
IGludCBkeCA9IHNjcm9sbERlbHRhLndpZHRoKCk7Ci0gICAgICAgIGRhbWFnZWRDb250ZW50c1Jl
Y3Quc2V0WShzY3JlZW5SZWN0LnkoKSk7Ci0gICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0
SGVpZ2h0KHNjcmVlblJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAg
ICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFgoc2NyZWVuUmVjdC54KCkpOwotICAgICAg
ICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aChkeCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFgoc2NyZWVuUmVjdC5yaWdodCgp
ICsgZHgpOwotICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aCgtZHgpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVp
Z2h0KCk7Ci0gICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChzY3JlZW5SZWN0LngoKSk7
Ci0gICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoc2NyZWVuUmVjdC53aWR0aCgp
KTsKLSAgICAgICAgaWYgKGR5ID4gMCkgewotICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVj
dC5zZXRZKHNjcmVlblJlY3QueSgpKTsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Qu
c2V0SGVpZ2h0KGR5KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRhbWFnZWRDb250
ZW50c1JlY3Quc2V0WShzY3JlZW5SZWN0LmJvdHRvbSgpICsgZHkpOwotICAgICAgICAgICAgZGFt
YWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoLWR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIE1vdmUgdGhlIHByZXZpb3VzIGRhbWFnZQotICAgIG1fcm9vdExheWVyU2Nyb2xsRGFtYWdl
Lm1vdmUoc2Nyb2xsRGVsdGEud2lkdGgoKSwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOwotICAgIC8v
IFVuaW9uIHdpdGggdGhlIG5ldyBkYW1hZ2UgcmVjdC4KLSAgICBtX3Jvb3RMYXllclNjcm9sbERh
bWFnZS51bml0ZShkYW1hZ2VkQ29udGVudHNSZWN0KTsKLQotICAgIC8vIFNjcm9sbCBhbnkgZXhp
c3RpbmcgZGFtYWdlIHRoYXQgaW50ZXJzZWN0cyB3aXRoIGNsaXAgcmVjdAotICAgIGlmIChjbGlw
UmVjdC5pbnRlcnNlY3RzKG1fcm9vdExheWVyRGlydHlSZWN0KSkgewotICAgICAgICAvLyBGaW5k
IHRoZSBpbm5lciBkYW1hZ2UKLSAgICAgICAgSW50UmVjdCBpbm5lckRhbWFnZShjbGlwUmVjdCk7
Ci0gICAgICAgIGlubmVyRGFtYWdlLmludGVyc2VjdChtX3Jvb3RMYXllckRpcnR5UmVjdCk7Ci0K
LSAgICAgICAgLy8gTW92ZSB0aGUgZGFtYWdlCi0gICAgICAgIGlubmVyRGFtYWdlLm1vdmUoc2Ny
b2xsRGVsdGEud2lkdGgoKSwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIE1l
cmdlIGl0IGJhY2sgaW50byB0aGUgZGFtYWdlZCByZWN0Ci0gICAgICAgIG1fcm9vdExheWVyRGly
dHlSZWN0LnVuaXRlKGlubmVyRGFtYWdlKTsKLSAgICB9Ci0KICAgICBzZXRSb290TGF5ZXJOZWVk
c0Rpc3BsYXkoKTsKIH0KIApAQCAtMjM0Miw5ICsyMjc4LDEyIEBAIHZvaWQgV2ViVmlld0ltcGw6
OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKCFw
YWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBhZGQgYSBzbWFydGVyIGRh
bWFnZSBhZ2dyZWdhdGlvbiBsb2dpYyBhbmQvb3IgdW5pZnkgd2l0aAotICAgIC8vIExheWVyQ2hy
b21pdW0ncyBkYW1hZ2UgbG9naWMKLSAgICBtX3Jvb3RMYXllckRpcnR5UmVjdC51bml0ZShyZWN0
KTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7Cisg
ICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7
CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVl
KTsKKworICAgIEludFJlY3QgZGlydHlSZWN0ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhyZWN0
KTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRpcnR5UmVj
dCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3Bs
YXkoKTsKIH0KIApAQCAtMjM2MSw4OSArMjMwMCw3NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJ
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIGlmICht
X2xheWVyUmVuZGVyZXIpCiAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOyAv
LyBmaW5pc2ggYWxsIEdMIHJlbmRlcmluZyBiZWZvcmUgd2UgaGlkZSB0aGUgd2luZG93PwogICAg
ICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGZhbHNlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKKyAg
ICB9IGVsc2UgaWYgKG1fbGF5ZXJSZW5kZXJlcikgewogICAgICAgICBtX2lzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7CiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVzaXpl
T25zY3JlZW5Db250ZW50KFdlYkNvcmU6OkludFNpemUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSkpOwogCiAgICAgICAgIG1fY2xp
ZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBt
X3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QucmVsZWFzZSgpOwotICAgIGlmICgh
Y29udGV4dCkgewotICAgICAgICBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShn
ZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53
aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKLSAgICB9Ci0gICAgbV9sYXllclJl
bmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCkp
OwotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2
YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsKLSAgICAgICAgbV9pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwotICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZh
aWxlZCA9IGZhbHNlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoZmFsc2UpOwotICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZh
aWxlZCA9IHRydWU7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7CisgICAgICAg
IGlmICghY29udGV4dCkgeworICAgICAgICAgICAgY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21l
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAg
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBlKHN0
ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKKyAg
ICAgICAgfQorICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZShjb250ZXh0LnJlbGVhc2UoKSk7CisgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIp
IHsKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmcodHJ1ZSk7CisgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9
IHRydWU7CisgICAgICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZCA9IGZhbHNlOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoZmFsc2UpOworICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25G
YWlsZWQgPSB0cnVlOworICAgICAgICB9CiAgICAgfQorICAgIGlmIChwYWdlKCkpCisgICAgICAg
IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0Q2xpcHNSZXBhaW50cyghbV9pc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVS
b290TGF5ZXJDb250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghaXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkZy
YW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7Ci0gICAgaWYgKCF3ZWJmcmFtZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZp
ZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheWVyQ2hyb21p
dW0qIHJvb3RMYXllciA9IG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCk7Ci0gICAgaWYgKHJv
b3RMYXllcikgewotICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KHRydWUpOwotCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Um9vdExheWVy
Q2FudmFzU2l6ZShJbnRTaXplKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotICAgICAg
ICBHcmFwaGljc0NvbnRleHQqIHJvb3RMYXllckNvbnRleHQgPSBtX2xheWVyUmVuZGVyZXItPnJv
b3RMYXllckdyYXBoaWNzQ29udGV4dCgpOwotCi0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICAgICAg
UGxhdGZvcm1Db250ZXh0U2tpYSogc2tpYUNvbnRleHQgPSByb290TGF5ZXJDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIHBsYXRmb3JtQ2Fu
dmFzID0gc2tpYUNvbnRleHQtPmNhbnZhcygpOwotCi0gICAgICAgIHBsYXRmb3JtQ2FudmFzLT5z
YXZlKCk7Ci0KLSAgICAgICAgLy8gQnJpbmcgdGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRl
IHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KLSAgICAgICAgcGxhdGZvcm1DYW52YXMtPnRyYW5z
bGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2Fs
YXI+KC1yZWN0LnkoKSkpOwotCi0gICAgICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKLQot
ICAgICAgICB3ZWJmcmFtZS0+cGFpbnRXaXRoQ29udGV4dCgqcm9vdExheWVyQ29udGV4dCwgcmVj
dCk7Ci0gICAgICAgIHJvb3RMYXllckNvbnRleHQtPnJlc3RvcmUoKTsKK2NsYXNzIFdlYlZpZXdJ
bXBsVGlsZVBhaW50SW50ZXJmYWNlIDogcHVibGljIFRpbGVQYWludEludGVyZmFjZSB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgV2ViVmlld0ltcGxUaWxlUGFpbnRJbnRlcmZhY2UoV2ViVmlld0lt
cGwqIHdlYlZpZXdJbXBsKQorICAgICAgICA6IG1fd2ViVmlld0ltcGwod2ViVmlld0ltcGwpCisg
ICAgeworICAgIH0KIAotICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+cmVzdG9yZSgpOwotI2VsaWYg
UExBVEZPUk0oQ0cpCi0gICAgICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSByb290TGF5ZXJD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKKyAgICB7Cisg
ICAgICAgIFBhZ2UqIHBhZ2UgPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCk7CisgICAgICAgIGlmICgh
cGFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFn
ZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgdmlldy0+cGFpbnRDb250ZW50cygmY29u
dGV4dCwgY29udGVudFJlY3QpOworICAgIH0KIAotICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KGNnQ29udGV4dCk7Citwcml2YXRlOgorICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwor
fTsKIAotICAgICAgICAvLyBCcmluZyB0aGUgQ29yZUdyYXBoaWNzIGNvbnRleHQgaW50byB0aGUg
Y29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAgICAgIENHQ29udGV4dFRy
YW5zbGF0ZUNUTShjZ0NvbnRleHQsIC1yZWN0LngoKSwgLXJlY3QueSgpKTsKIAotICAgICAgICBy
b290TGF5ZXJDb250ZXh0LT5zYXZlKCk7CitjbGFzcyBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50
SW50ZXJmYWNlIDogcHVibGljIFRpbGVQYWludEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgV2ViVmlld0ltcGxTY3JvbGxiYXJQYWludEludGVyZmFjZShXZWJWaWV3SW1wbCogd2Vi
Vmlld0ltcGwpCisgICAgICAgIDogbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKKyAgICB7Cisg
ICAgfQogCi0gICAgICAgIHdlYmZyYW1lLT5wYWludFdpdGhDb250ZXh0KCpyb290TGF5ZXJDb250
ZXh0LCByZWN0KTsKLSAgICAgICAgcm9vdExheWVyQ29udGV4dC0+cmVzdG9yZSgpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KQorICAgIHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fd2ViVmlld0ltcGwt
PnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwogCi0gICAgICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2dDb250ZXh0KTsKLSNlbHNlCi0jZXJyb3IgTXVzdCBw
b3J0IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRpZgorICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSh2
aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSk7CisgICAgICAgIEludFJlY3Qgd2luZG93
UmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGVudFJlY3QpOworICAgICAgICB2aWV3
LT5wYWludFNjcm9sbGJhcnMoJmNvbnRleHQsIHdpbmRvd1JlY3QpOwogICAgIH0KLX0KKworcHJp
dmF0ZToKKyAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKK307CiAKIHZvaWQgV2ViVmll
d0ltcGw6OmRvQ29tcG9zaXRlKCkKIHsKQEAgLTI0NTUsMzIgKzIzODIsMTIgQEAgdm9pZCBXZWJW
aWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRlcyBz
Y3JvbGxiYXJzIHdoZXJlYXMgdGhlIGNvbnRlbnRSZWN0IGRvZXNuJ3QuCiAgICAgSW50UmVjdCB2
aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKICAgICBJbnRSZWN0
IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKLSAgICBJbnRS
ZWN0IHZpZXdQb3J0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQp
OwotCi0gICAgLy8gR2l2ZSB0aGUgY29tcG9zaXRvciBhIGNoYW5jZSB0byBzZXR1cC9yZXNpemUg
dGhlIHJvb3QgdGV4dHVyZSBoYW5kbGUgYW5kIHBlcmZvcm0gc2Nyb2xsaW5nLgotICAgIG1fbGF5
ZXJSZW5kZXJlci0+cHJlcGFyZVRvRHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3Qs
IEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7CisgICAgSW50UG9p
bnQgc2Nyb2xsKHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKTsKIAotICAgIC8vIERy
YXcgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAgIFZlY3RvcjxJbnRSZWN0PiBk
YW1hZ2VSZWN0czsKLSAgICBkYW1hZ2VSZWN0cy5hcHBlbmQobV9yb290TGF5ZXJTY3JvbGxEYW1h
Z2UpOwotICAgIGRhbWFnZVJlY3RzLmFwcGVuZChtX3Jvb3RMYXllckRpcnR5UmVjdCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYW1hZ2VSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAg
ICBJbnRSZWN0IGRhbWFnZWRSZWN0ID0gZGFtYWdlUmVjdHNbaV07Ci0KLSAgICAgICAgLy8gSW50
ZXJzZWN0IHRoaXMgcmVjdGFuZ2xlIHdpdGggdGhlIHZpZXdQb3J0LgotICAgICAgICBkYW1hZ2Vk
UmVjdC5pbnRlcnNlY3Qodmlld1BvcnQpOwotCi0gICAgICAgIC8vIE5vdyByZW5kZXIgaXQuCi0g
ICAgICAgIGlmIChkYW1hZ2VkUmVjdC53aWR0aCgpICYmIGRhbWFnZWRSZWN0LmhlaWdodCgpKSB7
Ci0gICAgICAgICAgICB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhkYW1hZ2VkUmVjdCk7Ci0gICAg
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGRhbWFn
ZWRSZWN0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX3Jvb3RMYXllckRpcnR5UmVjdCA9IElu
dFJlY3QoKTsKLSAgICBtX3Jvb3RMYXllclNjcm9sbERhbWFnZSA9IEludFJlY3QoKTsKKyAgICBX
ZWJWaWV3SW1wbFRpbGVQYWludEludGVyZmFjZSB0aWxlUGFpbnQodGhpcyk7CiAKLSAgICAvLyBE
cmF3IHRoZSBhY3R1YWwgbGF5ZXJzLi4uCi0gICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJz
KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CisgICAgV2ViVmlld0ltcGxTY3JvbGxiYXJQYWlu
dEludGVyZmFjZSBzY3JvbGxiYXJQYWludCh0aGlzKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRy
YXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBzY3JvbGwsIHRpbGVQYWludCwgc2Ny
b2xsYmFyUGFpbnQpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIo
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDZlOGRjYWNkNTg2MzgzOWQ2NmZiOTU5
Nzg4ZTI4Yjk5YzMzMmZiM2MuLjgwYWJmODEzZWViZjk2MjE2NWUyMGU5OTUyYmRkNjljYWMwMmYx
ZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTM5Niw3ICszOTYsNiBAQCBwcml2
YXRlOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOwotICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZvaWQgZG9Db21wb3Np
dGUoKTsKICAgICB2b2lkIGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyosIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOwpAQCAt
NTI4LDcgKzUyNyw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbW91
c2VDYXB0dXJlTm9kZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBX
ZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVyRGlydHlSZWN0OwogICAgIFdlYkNvcmU6OkludFJl
Y3QgbV9yb290TGF5ZXJTY3JvbGxEYW1hZ2U7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77231</attachid>
            <date>2010-12-22 10:40:47 -0800</date>
            <delta_ts>2022-02-28 00:07:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49947-20101222104046.patch</filename>
            <type>text/plain</type>
            <size>63033</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGJhNTQ0MTBmZjhmZGEyNzQxNDhhOGY3ZmZhNTA3NWY2YzkyOWY0NC4uODRmOWEzMjQ1ZjNhNjU4
OTUzY2U2M2FjOTllZTg5Y2Y0ZDZkYTg4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAxMC0xMi0yMCAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gVGlsZSByb290IGxheWVyIG9mIHRo
ZSBjb21wb3NpdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDk5NDcKKworICAgICAgICBSZWZhY3RvciByb290IGxheWVyIHVwZGF0ZSBhbmQgZHJh
d2luZyBmcm9tIExheWVyUmVuZGVyZXJDaHJvbWl1bSBpbnRvCisgICAgICAgIExheWVyVGlsZXJD
aHJvbWl1bS4gIFRoZSByb290IGxheWVyIGlzIG5vdyBkcmF3biBhcyBtdWx0aXBsZSB0aWxlcwor
ICAgICAgICByYXRoZXIgdGhhbiBhcyBvbmUgc2luZ2xlIGxhcmdlIHRleHR1cmUuICBTY3JvbGxi
YXJzIGFyZSBub3cgZHJhd24KKyAgICAgICAgc2VwYXJhdGVseSByYXRoZXIgdGhhbiBhcyBwYXJ0
IG9mIHRoZSByb290IGxheWVyLgorCisgICAgICAgIFRlc3Q6IExheW91dFRlc3RzL2NvbXBvc2l0
aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5n
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
OjpzZXRDbGlwc1JlcGFpbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpjbGlwc1JlcGFpbnRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVy
ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVz
ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZlcnRp
Y2FsU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06Omhvcml6b250YWxTY3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9vdExheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFJvb3RMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJl
ZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGlsZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjpMYXllclRpbGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjp+TGF5ZXJUaWxlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJD
aHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Q2hyb21pdW06OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6
Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmludmFs
aWRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmNvbnRl
bnRSZWN0VG9UaWxlSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21p
dW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpsYXllclJlY3RUb0NvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXJDaHJvbWl1bTo6dGlsZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6dGlsZUxheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Q2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJD
aHJvbWl1bTo6aW52YWxpZGF0ZUVudGlyZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VGlsZXJDaHJvbWl1bTo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJv
bWl1bTo6c2V0TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hy
b21pdW06OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpyZXNp
emVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06Omdyb3dMYXll
clRvQ29udGFpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6
On5UaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6cmVs
ZWFzZVRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUaWxlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNo
cm9taXVtOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1
bTo6VGlsZTo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1
bTo6VGlsZTo6ZGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpU
aWxlOjpjbGVhckRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6
bGF5ZXJSZW5kZXJlcik6CisKIDIwMTAtMTItMjEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxv
dkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggZmNhOGNmYzQyZDI0YjcxODlkZTk4YWFhMWZmNmVmOTk0YzI3NDUxOC4uMmZhNDFiMzll
YzM2NGRhYzE3OTllZjEwY2FiZmY4MTM2ZTU3ZWU2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI1OTksNiArMjU5OSw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwJywK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKaW5kZXggMjQ4NDg2MGU5NWQ5MGMyYWE2ZTBhNTFhZmZkZjQzOGM5ZGZiZWFi
MC4uZDFlOGQxNTg1NjViNWExMjlkZDMwMmRiMGY1YTE1ZWZkZDljMjY1ZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTEzMTQsNyArMTMxNCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpyZXBhaW50Q29udGVudFJl
Y3RhbmdsZShjb25zdCBJbnRSZWN0JiByLCBib29sIGltbWVkaWF0ZSkKICAgICBkb3VibGUgZGVs
YXkgPSBhZGp1c3RlZERlZmVycmVkUmVwYWludERlbGF5KCk7CiAgICAgaWYgKChtX2RlZmVycmlu
Z1JlcGFpbnRzIHx8IG1fZGVmZXJyZWRSZXBhaW50VGltZXIuaXNBY3RpdmUoKSB8fCBkZWxheSkg
JiYgIWltbWVkaWF0ZSkgewogICAgICAgICBJbnRSZWN0IHBhaW50UmVjdCA9IHI7Ci0gICAgICAg
IGlmICghcGFpbnRzRW50aXJlQ29udGVudHMoKSkKKyAgICAgICAgaWYgKGNsaXBzUmVwYWludHMo
KSAmJiAhcGFpbnRzRW50aXJlQ29udGVudHMoKSkKICAgICAgICAgICAgIHBhaW50UmVjdC5pbnRl
cnNlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOwogICAgICAgICBpZiAocGFpbnRSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsVmlldy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCmluZGV4IDdk
OWU3OTJmYTliODcxYzY5YTYyZGU4YzUzYWNlMzIzMTAyN2ViOWUuLjU3YTU5MTgyMDY4NzRjYzc1
MmZiMTNmNTkxZGM4NThhOTdhMDUzNjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtNTMs
NiArNTMsNyBAQCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKICAgICAsIG1fZHJhd1BhblNjcm9s
bEljb24oZmFsc2UpCiAgICAgLCBtX3VzZUZpeGVkTGF5b3V0KGZhbHNlKQogICAgICwgbV9wYWlu
dHNFbnRpcmVDb250ZW50cyhmYWxzZSkKKyAgICAsIG1fY2xpcHNSZXBhaW50cyh0cnVlKQogICAg
ICwgbV9kZWxlZ2F0ZXNTY3JvbGxpbmcoZmFsc2UpCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CkBA
IC0yMDIsNiArMjAzLDExIEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0UGFpbnRzRW50aXJlQ29udGVu
dHMoYm9vbCBwYWludHNFbnRpcmVDb250ZW50cykKICAgICBtX3BhaW50c0VudGlyZUNvbnRlbnRz
ID0gcGFpbnRzRW50aXJlQ29udGVudHM7CiB9CiAKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0Q2xpcHNS
ZXBhaW50cyhib29sIGNsaXBzUmVwYWludHMpCit7CisgICAgbV9jbGlwc1JlcGFpbnRzID0gY2xp
cHNSZXBhaW50czsKK30KKwogdm9pZCBTY3JvbGxWaWV3OjpzZXREZWxlZ2F0ZXNTY3JvbGxpbmco
Ym9vbCBkZWxlZ2F0ZXNTY3JvbGxpbmcpCiB7CiAgICAgbV9kZWxlZ2F0ZXNTY3JvbGxpbmcgPSBk
ZWxlZ2F0ZXNTY3JvbGxpbmc7CkBAIC03OTQsNyArODAwLDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojpm
cmFtZVJlY3RzQ2hhbmdlZCgpCiB2b2lkIFNjcm9sbFZpZXc6OnJlcGFpbnRDb250ZW50UmVjdGFu
Z2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgbm93KQogewogICAgIEludFJlY3QgcGFpbnRS
ZWN0ID0gcmVjdDsKLSAgICBpZiAoIXBhaW50c0VudGlyZUNvbnRlbnRzKCkpCisgICAgaWYgKGNs
aXBzUmVwYWludHMoKSAmJiAhcGFpbnRzRW50aXJlQ29udGVudHMoKSkKICAgICAgICAgcGFpbnRS
ZWN0LmludGVyc2VjdCh2aXNpYmxlQ29udGVudFJlY3QoKSk7CiAgICAgaWYgKHBhaW50UmVjdC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNTUsNCArMTE2MSwzIEBAIGJvb2wgU2Ny
b2xsVmlldzo6cGxhdGZvcm1Jc09mZnNjcmVlbigpIGNvbnN0CiAjZW5kaWYKIAogfQotCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsVmlldy5oCmluZGV4IGVkMzMwOThmOGE1YjJjZjVhMzM0YmY3NGY5NGFiMjVkOGM2MWVm
NWEuLjY2YjRjMDliZGIyYmRlNTVhMDUxNzI1ZDI3ZjNmMGZmOTFmZGVlNTggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5oCkBAIC0xMTEsNiArMTExLDExIEBAIHB1YmxpYzoKICAgICBib29sIHBhaW50c0Vu
dGlyZUNvbnRlbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludHNFbnRpcmVDb250ZW50czsgfQog
ICAgIHZvaWQgc2V0UGFpbnRzRW50aXJlQ29udGVudHMoYm9vbCk7CiAKKyAgICAvLyBCeSBkZWZh
dWx0LCBwYWludCBldmVudHMgYXJlIGNsaXBwZWQgdG8gdGhlIHZpc2libGUgYXJlYS4gIElmIHNl
dCB0bworICAgIC8vIGZhbHNlLCBwYWludCBldmVudHMgYXJlIG5vIGxvbmdlciBjbGlwcGVkLiAg
cGFpbnRzRW50aXJlQ29udGVudHMoKSBpbXBsaWVzICFjbGlwc1JlcGFpbnRzKCkuCisgICAgYm9v
bCBjbGlwc1JlcGFpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwc1JlcGFpbnRzOyB9CisgICAg
dm9pZCBzZXRDbGlwc1JlcGFpbnRzKGJvb2wpOworCiAgICAgLy8gQnkgZGVmYXVsdCBwcm9ncmFt
bWF0aWMgc2Nyb2xsaW5nIGlzIGhhbmRsZWQgYnkgV2ViQ29yZSBhbmQgbm90IGJ5IHRoZSBVSSBh
cHBsaWNhdGlvbi4KICAgICAvLyBJbiB0aGUgY2FzZSBvZiB1c2luZyBhIHRpbGVkIGJhY2tpbmcg
c3RvcmUsIHRoaXMgbW9kZSBjYW4gYmUgc2V0LCBzbyB0aGF0IHRoZSBzY3JvbGwgcmVxdWVzdHMK
ICAgICAvLyBhcmUgZGVsZWdhdGVkIHRvIHRoZSBVSSBhcHBsaWNhdGlvbi4KQEAgLTMyNSw2ICsz
MzAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91c2VGaXhlZExheW91dDsKIAogICAgIGJvb2wg
bV9wYWludHNFbnRpcmVDb250ZW50czsKKyAgICBib29sIG1fY2xpcHNSZXBhaW50czsKICAgICBi
b29sIG1fZGVsZWdhdGVzU2Nyb2xsaW5nOwogCiAgICAgLy8gVGhlcmUgYXJlIDggcG9zc2libGUg
Y29tYmluYXRpb25zIG9mIHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0aW9uLiAgU2Nyb2xsIG9yaWdp
biB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4IG9yIHkgYXhpcwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhYzk1Mjg1MTE3
Mzk1MDYwMzU3NzBlZDNmMWI2YjgxMDY1NzdlNzQ1Li5hMGE2OTBmOWFiZGJmODE5NGYzNDM1MDcy
YmEwZDljODU1YzA0ZmQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNjAsNiArNjAsNyBAQCBjbGFzcyBMYXllclJlbmRl
cmVyQ2hyb21pdW07CiAvLyB0aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1Ymxp
YyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKICAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOworICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4
IDg4MmJhYWU4Mjc0ZThhZjI0M2EzMzYzYzYzM2I0M2E0Y2E1YjY4YTUuLjBmNTY3NzcwYTYwZWZi
NDU0M2VjZjQwZTU3NzQ3NzFlNTMxNDhkNTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAg
LTEwMCw4ICsxMDAsNyBAQCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaAogfQogCiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0KQotICAgIDogbV9yb290TGF5ZXJUZXh0dXJlSWQoMCkKLSAgICAsIG1f
cm9vdExheWVyVGV4dHVyZVdpZHRoKDApCisgICAgOiBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCgw
KQogICAgICwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KDApCiAgICAgLCBtX3Jvb3RMYXllcigw
KQogICAgICwgbV9zY3JvbGxQb3NpdGlvbihJbnRQb2ludCgtMSwgLTEpKQpAQCAtMTEyLDExICsx
MTEsMTkgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGUKICAgICAsIG1fZGVmYXVsdFJlbmRlclN1
cmZhY2UoMCkKIHsKICAgICBtX2hhcmR3YXJlQ29tcG9zaXRpbmcgPSBpbml0aWFsaXplU2hhcmVk
T2JqZWN0cygpOworICAgIG1fcm9vdExheWVyVGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNy
ZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSk7CisgICAgQVNTRVJUKG1fcm9vdExheWVyVGls
ZXIpOwogfQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJlbmRlcmVyQ2hyb21pdW0o
KQogewogICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CisKKyAgICAvLyBCZWNhdXNlIHRoZSB0
aWxlcnMgbmVlZCB0byBjbGVhbiB1cCB0ZXh0dXJlcywgY2xlYW4gdGhlbSB1cCBleHBsaWNpdGx5
CisgICAgLy8gYmVmb3JlIHRoZSBHcmFwaGljc0NvbnRleHQzRCBpcyBkZXN0cm95ZWQuCisgICAg
bV9yb290TGF5ZXJUaWxlci5jbGVhcigpOworICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVy
LmNsZWFyKCk7CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLmNsZWFyKCk7CiB9CiAKIEdy
YXBoaWNzQ29udGV4dDNEKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQoKQpAQCAtMTMx
LDU0ICsxMzgsODMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxsKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogICAgICAgICBMT0dfRVJST1Io
IkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNvbW1hbmQ6ICVzLCBl
cnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8aW50PihlcnJvcikp
OwogfQogCi0vLyBDcmVhdGVzIGEgY2FudmFzIGFuZCBhbiBhc3NvY2lhdGVkIGdyYXBoaWNzIGNv
bnRleHQgdGhhdCB0aGUgcm9vdCBsYXllciB3aWxsCi0vLyByZW5kZXIgaW50by4KLXZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUm
IHNpemUpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuc2lnbmVkIHBy
b2dyYW1JZCkKIHsKLSAgICBpZiAoc2l6ZSA9PSBtX3Jvb3RMYXllckNhbnZhc1NpemUpCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAocHJvZ3JhbUlkICE9IG1fY3VycmVudFNoYWRlcikgeworICAg
ICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbUlk
KSk7CisgICAgICAgIG1fY3VycmVudFNoYWRlciA9IHByb2dyYW1JZDsKKyAgICB9Cit9CiAKLSNp
ZiBQTEFURk9STShTS0lBKQotICAgIC8vIENyZWF0ZSBuZXcgY2FudmFzIGFuZCBjb250ZXh0LiBP
d25QdHIgdGFrZXMgY2FyZSBvZiBmcmVlaW5nIHVwCi0gICAgLy8gdGhlIG9sZCBvbmVzLgotICAg
IG1fcm9vdExheWVyQ2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOwotICAgIG1fcm9vdExheWVyU2tpYUNvbnRleHQgPSBu
ZXcgUGxhdGZvcm1Db250ZXh0U2tpYShtX3Jvb3RMYXllckNhbnZhcy5nZXQoKSk7Ci0gICAgbV9y
b290TGF5ZXJHcmFwaGljc0NvbnRleHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0
X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihtX3Jvb3RMYXllclNraWFDb250ZXh0Lmdl
dCgpKSk7Ci0jZWxpZiBQTEFURk9STShDRykKLSAgICAvLyBSZWxlYXNlIHRoZSBwcmV2aW91cyBD
R0JpdG1hcENvbnRleHQgYmVmb3JlIHJlYWxsb2NhdGluZyB0aGUgYmFja2luZyBzdG9yZSBhcyBh
IHByZWNhdXRpb24uCi0gICAgbV9yb290TGF5ZXJDR0NvbnRleHQuYWRvcHRDRigwKTsKLSAgICBp
bnQgcm93Qnl0ZXMgPSA0ICogc2l6ZS53aWR0aCgpOwotICAgIG1fcm9vdExheWVyQmFja2luZ1N0
b3JlLnJlc2l6ZShyb3dCeXRlcyAqIHNpemUuaGVpZ2h0KCkpOwotICAgIG1lbXNldChtX3Jvb3RM
YXllckJhY2tpbmdTdG9yZS5kYXRhKCksIDAsIG1fcm9vdExheWVyQmFja2luZ1N0b3JlLnNpemUo
KSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBD
R0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgbV9yb290TGF5ZXJDR0NvbnRleHQu
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0
YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZS5n
ZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVy
MzJIb3N0KSk7Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKG1fcm9vdExheWVyQ0dDb250ZXh0
LmdldCgpLCAwLCBzaXplLmhlaWdodCgpKTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShtX3Jvb3RM
YXllckNHQ29udGV4dC5nZXQoKSwgMSwgLTEpOwotICAgIG1fcm9vdExheWVyR3JhcGhpY3NDb250
ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4dChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSk7Ci0j
ZWxzZQotI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCi0jZW5k
aWYKK0ludFJlY3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2ZXJ0aWNhbFNjcm9sbGJhclJlY3Qo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQor
eworICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJlY3Qucmln
aHQoKSwgY29udGVudFJlY3QueSgpKSwgSW50U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpIC0gY29u
dGVudFJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gdmVy
dGljYWxTY3JvbGxiYXI7Cit9CiAKLSAgICBtX3Jvb3RMYXllckNhbnZhc1NpemUgPSBzaXplOwor
SW50UmVjdCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omhvcml6b250YWxTY3JvbGxiYXJSZWN0KGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sK
KyAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJlY3QueCgp
LCBjb250ZW50UmVjdC5ib3R0b20oKSksIEludFNpemUodmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkgLSBjb250ZW50UmVjdC5oZWlnaHQoKSkpOworICAgIHJldHVybiBo
b3Jpem9udGFsU2Nyb2xsYmFyOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNl
U2hhZGVyKHVuc2lnbmVkIHByb2dyYW1JZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsKLSAgICBp
ZiAocHJvZ3JhbUlkICE9IG1fY3VycmVudFNoYWRlcikgewotICAgICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbUlkKSk7Ci0gICAgICAgIG1fY3Vy
cmVudFNoYWRlciA9IHByb2dyYW1JZDsKKyAgICBpZiAoY29udGVudFJlY3QuaW50ZXJzZWN0cyhk
aXJ0eVJlY3QpKQorICAgICAgICBtX3Jvb3RMYXllclRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0
eVJlY3QpOworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlcikgeworICAgICAgICBJ
bnRSZWN0IHNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0LCBj
b250ZW50UmVjdCk7CisgICAgICAgIGlmIChkaXJ0eVJlY3QuaW50ZXJzZWN0cyhzY3JvbGxiYXIp
KSB7CisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+c2V0TGF5ZXJQb3Np
dGlvbihzY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXJUaWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyKSB7CisgICAgICAgIEludFJlY3Qgc2Ny
b2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7
CisgICAgICAgIGlmIChkaXJ0eVJlY3QuaW50ZXJzZWN0cyhzY3JvbGxiYXIpKSB7CisgICAgICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9zaXRpb24oc2Nyb2xsYmFy
LmxvY2F0aW9uKCkpOworICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5pbnZh
bGlkYXRlUmVjdChkaXJ0eVJlY3QpOworICAgICAgICB9CiAgICAgfQogfQogCi0vLyBUaGlzIG1l
dGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHVwZGF0ZXMgYXJlIG1hZGUgdG8g
dGhlCi0vLyByb290IGxheWVyIHRleHR1cmUuIEl0IHJlc2l6ZXMgdGhlIHJvb3QgbGF5ZXIgdGV4
dHVyZSBhbmQgc2Nyb2xscyBpdHMKLS8vIGNvbnRlbnRzIGFzIG5lZWRlZC4gSXQgYWxzbyBzZXRz
IHVwIGNvbW1vbiBHTCBzdGF0ZSB1c2VkIGJ5IHRoZSByZXN0Ci0vLyBvZiB0aGUgbGF5ZXIgZHJh
d2luZyBjb2RlLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUFuZERyYXdSb290TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQsIFRpbGVQ
YWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICAvLyBNYXNrIG91dCB3cml0ZXMg
dG8gYWxwaGEgY2hhbm5lbDogc3VicGl4ZWwgYW50aWFsaWFzaW5nIHZpYSBTa2lhIHJlc3VsdHMg
aW4gaW52YWxpZAorICAgIC8vIHplcm8gYWxwaGEgdmFsdWVzIG9uIHRleHQgZ2x5cGhzLiBUaGUg
cm9vdCBsYXllciBpcyBhbHdheXMgb3BhcXVlLgorICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1f
Y29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKSk7CisKKyAgICBtX3Jv
b3RMYXllclRpbGVyLT51cGRhdGUodGlsZVBhaW50LCB2aXNpYmxlUmVjdCk7CisgICAgbV9yb290
TGF5ZXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7CisKKyAgICBpZiAodmlzaWJsZVJlY3Qud2lk
dGgoKSA+IGNvbnRlbnRSZWN0LndpZHRoKCkpIHsKKyAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNj
cm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3Qp
OworICAgICAgICBJbnRTaXplIHRpbGVTaXplID0gdmVydGljYWxTY3JvbGxiYXIuc2l6ZSgpLnNo
cnVua1RvKEludFNpemUobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkpOworICAg
ICAgICBpZiAoIW1fdmVydGljYWxTY3JvbGxiYXJUaWxlcikKKyAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXJUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVT
aXplKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVy
LT5zZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxl
ci0+c2V0TGF5ZXJQb3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT51cGRhdGUoc2Nyb2xsYmFyUGFpbnQsIHZpc2li
bGVSZWN0KTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5kcmF3KHZpc2libGVS
ZWN0KTsKKyAgICB9CisKKyAgICBpZiAodmlzaWJsZVJlY3QuaGVpZ2h0KCkgPiBjb250ZW50UmVj
dC5oZWlnaHQoKSkgeworICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXIgPSBob3Jp
em9udGFsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAgICAgICBJ
bnRTaXplIHRpbGVTaXplID0gaG9yaXpvbnRhbFNjcm9sbGJhci5zaXplKCkuc2hydW5rVG8oSW50
U2l6ZShtX21heFRleHR1cmVTaXplLCBtX21heFRleHR1cmVTaXplKSk7CisgICAgICAgIGlmICgh
bV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXJUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVTaXplKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnNl
dFRpbGVTaXplKHRpbGVTaXplKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIt
PnNldExheWVyUG9zaXRpb24oaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnVwZGF0ZShzY3JvbGxiYXJQYWludCwgdmlz
aWJsZVJlY3QpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+ZHJhdyh2aXNp
YmxlUmVjdCk7CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24sIFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3Jv
bGxiYXJQYWludCkKIHsKICAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIApAQCAt
MTg3LDEwICsyMjMsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJh
d0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29ucwogCiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJ
ZCkpOwotCi0gICAgYm9vbCBza2lwU2Nyb2xsID0gZmFsc2U7Ci0KICAgICAvLyBJZiB0aGUgc2l6
ZSBvZiB0aGUgdmlzaWJsZSBhcmVhIGhhcyBjaGFuZ2VkIHRoZW4gYWxsb2NhdGUgYSBuZXcgdGV4
dHVyZQogICAgIC8vIHRvIHN0b3JlIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllciBhbmQg
YWRqdXN0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeAogICAgIC8vIGFuZCB2aWV3cG9ydC4KQEAgLTE5
OSwxNSArMjMxLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3
TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zCiAgICAgaWYgKHZpc2libGVS
ZWN0V2lkdGggIT0gbV9yb290TGF5ZXJUZXh0dXJlV2lkdGggfHwgdmlzaWJsZVJlY3RIZWlnaHQg
IT0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSB7CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVy
ZVdpZHRoID0gdmlzaWJsZVJlY3RXaWR0aDsKICAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVp
Z2h0ID0gdmlzaWJsZVJlY3RIZWlnaHQ7Ci0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdpZHRo
LCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOwogCiAgICAgICAgIC8vIFJlc2V0IHRo
ZSBjdXJyZW50IHJlbmRlciBzdXJmYWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmlld3Bv
cnQgYW5kCiAgICAgICAgIC8vIHByb2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJT
dXJmYWNlIGlzIGNhbGxlZC4KICAgICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7Ci0K
LSAgICAgICAgLy8gVGhlIHJvb3QgbGF5ZXIgdGV4dHVyZSB3YXMganVzdCByZXNpemVkIHNvIGl0
cyBjb250ZW50cyBhcmUgbm90Ci0gICAgICAgIC8vIHVzZWZ1bCBmb3Igc2Nyb2xsaW5nLgotICAg
ICAgICBza2lwU2Nyb2xsID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQg
Y292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMu
CkBAIC0yMjMsNzUgKzI1MCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJl
VG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zCiAgICAgLy8gQmxl
bmRpbmcgZGlzYWJsZWQgYnkgZGVmYXVsdC4gUm9vdCBsYXllciBhbHBoYSBjaGFubmVsIG9uIFdp
bmRvd3MgaXMgaW5jb3JyZWN0IHdoZW4gU2tpYSB1c2VzIENsZWFyVHlwZS4KICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
KSk7CiAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBJbnRQb2ludCgtMSwgLTEpKSB7Ci0g
ICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKLSAgICAgICAgc2tpcFNj
cm9sbCA9IHRydWU7Ci0gICAgfQotCi0gICAgSW50UG9pbnQgc2Nyb2xsRGVsdGEgPSB0b1BvaW50
KHNjcm9sbFBvc2l0aW9uIC0gbV9zY3JvbGxQb3NpdGlvbik7Ci0KLSAgICAvLyBTY3JvbGxpbmcg
bGFyZ2VyIHRoYW4gdGhlIGNvbnRlbnRSZWN0IHNpemUgZG9lcyBub3QgcHJlc2VydmUgYW55IG9m
IHRoZSBwaXhlbHMsIHNvIHRoZXJlIGlzCi0gICAgLy8gbm8gbmVlZCB0byBjb3B5IGZyYW1lYnVm
ZmVyIHBpeGVscyBiYWNrIGludG8gdGhlIHRleHR1cmUuCi0gICAgaWYgKGFicyhzY3JvbGxEZWx0
YS55KCkpID4gY29udGVudFJlY3QuaGVpZ2h0KCkgfHwgYWJzKHNjcm9sbERlbHRhLngoKSkgPiBj
b250ZW50UmVjdC53aWR0aCgpKQotICAgICAgICBza2lwU2Nyb2xsID0gdHJ1ZTsKLQotICAgIC8v
IFNjcm9sbCB0aGUgYmFja2J1ZmZlcgotICAgIGlmICghc2tpcFNjcm9sbCAmJiAoc2Nyb2xsRGVs
dGEueCgpIHx8IHNjcm9sbERlbHRhLnkoKSkpIHsKLSAgICAgICAgLy8gU2Nyb2xsaW5nIHdvcmtz
IGFzIGZvbGxvd3M6IFdlIHJlbmRlciBhIHF1YWQgd2l0aCB0aGUgY3VycmVudCByb290IGxheWVy
IGNvbnRlbnRzCi0gICAgICAgIC8vIHRyYW5zbGF0ZWQgYnkgdGhlIGFtb3VudCB0aGUgcGFnZSBo
YXMgc2Nyb2xsZWQgc2luY2UgdGhlIGxhc3QgdXBkYXRlIGFuZCB0aGVuIHJlYWQgdGhlCi0gICAg
ICAgIC8vIHBpeGVscyBvZiB0aGUgY29udGVudCBhcmVhICh2aXNpYmxlIGFyZWEgZXhjbHVkaW5n
IHRoZSBzY3JvbGwgYmFycykgYmFjayBpbnRvIHRoZQotICAgICAgICAvLyByb290IGxheWVyIHRl
eHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEgd2lsbCBiZSBmaWxsZWQgYnkgYSBzdWJzZXF1
ZW50IGRyYXdMYXllcnNJbnRvUmVjdCBjYWxsCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHNjcm9sbGVkTGF5ZXJNYXRyaXg7Ci0KLSAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC50cmFu
c2xhdGUzZCgwLjUgKiB2aXNpYmxlUmVjdC53aWR0aCgpIC0gc2Nyb2xsRGVsdGEueCgpLAotICAg
ICAgICAgICAgMC41ICogdmlzaWJsZVJlY3QuaGVpZ2h0KCkgKyBzY3JvbGxEZWx0YS55KCksIDAp
OwotICAgICAgICBzY3JvbGxlZExheWVyTWF0cml4LnNjYWxlM2QoMSwgLTEsIDEpOwotCi0gICAg
ICAgIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiByc3YgPSByZW5k
ZXJTdXJmYWNlU2hhcmVkVmFsdWVzKCk7Ci0gICAgICAgIHVzZVNoYWRlcihyc3YtPnNoYWRlclBy
b2dyYW0oKSk7Ci0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dW5pZm9y
bTFpKHJzdi0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICAgICAgTGF5ZXJDaHJv
bWl1bTo6ZHJhd1RleHR1cmVkUXVhZChtX2NvbnRleHQuZ2V0KCksIG1fcHJvamVjdGlvbk1hdHJp
eCwgc2Nyb2xsZWRMYXllck1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3YtPnNoYWRlck1hdHJpeExv
Y2F0aW9uKCksIHJzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKLQotICAgICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCAwLCAwLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250
ZW50UmVjdC5oZWlnaHQoKSkpOwotICAgIH0KLQogICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3Jv
bGxQb3NpdGlvbjsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RM
YXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCi17Ci0gICAgQVNTRVJU
KG1faGFyZHdhcmVDb21wb3NpdGluZyk7Ci0KLSAgICBpZiAoIW1fcm9vdExheWVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkp
OwotCi0gICAgLy8gVXBkYXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgQVNTRVJUKCh1
cGRhdGVSZWN0LnJpZ2h0KCkgIDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQotICAgICAgICAg
ICAmJiAodXBkYXRlUmVjdC5ib3R0b20oKSA8PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsK
LQotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBk
YXRlZCByZWN0LgotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX3Jvb3RMYXllckNhbnZh
cy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Ci0gICAgQVNTRVJUKGJpdG1hcC53
aWR0aCgpID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBiaXRtYXAuaGVpZ2h0KCkgPT0gdXBkYXRl
UmVjdC5oZWlnaHQoKSk7Ci0gICAgdm9pZCogcGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOwot
I2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRl
ZCByZWN0LgotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdp
ZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYm
IHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dD
b250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgdm9pZCogcGl4ZWxz
ID0gbV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwotI2Vsc2UKLSNlcnJvciAiTmVlZCB0
byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgotI2VuZGlmCi0gICAgLy8gQ29weSB0aGUg
Y29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgot
ICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgp
LCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7Ci19
Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBBU1NFUlQo
bV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIAogICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSBt
X3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOwogICAgIGlmICghbV9kZWZhdWx0UmVu
ZGVyU3VyZmFjZSkKQEAgLTMwNCwyMiArMjYzLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QK
ICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CiAgICAgbV9jb250ZXh0LT5j
bGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAKLSAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOwotCi0gICAgLy8gUmVuZGVyIHRoZSBy
b290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRoZSBlbnRpcmUgdmlzaWJsZSBh
cmVhIG9mIHRoZSB3aW5kb3cuCi0gICAgLy8gV2UgcmV1c2UgdGhlIHNoYWRlciBwcm9ncmFtIHVz
ZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCi0gICAgY29uc3QgQ29udGVudExheWVyQ2hyb21p
dW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0gY29udGVudExheWVyU2hhcmVk
VmFsdWVzKCk7Ci0gICAgdXNlU2hhZGVyKGNvbnRlbnRMYXllclZhbHVlcy0+Y29udGVudFNoYWRl
clByb2dyYW0oKSk7Ci0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT51bmlmb3Jt
MWkoY29udGVudExheWVyVmFsdWVzLT5zaGFkZXJTYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAg
IC8vIE1hc2sgb3V0IHdyaXRlcyB0byBhbHBoYSBjaGFubmVsOiBDbGVhclR5cGUgdmlhIFNraWEg
cmVzdWx0cyBpbiBpbnZhbGlkCi0gICAgLy8gemVybyBhbHBoYSB2YWx1ZXMgb24gdGV4dCBnbHlw
aHMuIFRoZSByb290IGxheWVyIGlzIGFsd2F5cyBvcGFxdWUuCi0gICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpKTsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck1hdHJpeDsKLSAgICBsYXllck1hdHJpeC50cmFu
c2xhdGUzZCh2aXNpYmxlUmVjdC53aWR0aCgpICogMC41ZiwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkg
KiAwLjVmLCAwKTsKLSAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKG1fY29udGV4
dC5nZXQoKSwgbV9wcm9qZWN0aW9uTWF0cml4LCBsYXllck1hdHJpeCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0Lmhl
aWdodCgpLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudExh
eWVyVmFsdWVzLT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBjb250ZW50TGF5ZXJWYWx1ZXMtPnNo
YWRlckFscGhhTG9jYXRpb24oKSk7Ci0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpOworICAgIHVwZGF0ZUFuZERyYXdS
b290TGF5ZXIodGlsZVBhaW50LCBzY3JvbGxiYXJQYWludCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRS
ZWN0KTsKIAogICAgIC8vIFNldCB0aGUgcm9vdCB2aXNpYmxlL2NvbnRlbnQgcmVjdHMgLS0tIHVz
ZWQgYnkgc3Vic2VxdWVudCBkcmF3TGF5ZXJzIGNhbGxzLgogICAgIG1fcm9vdFZpc2libGVSZWN0
ID0gdmlzaWJsZVJlY3Q7CkBAIC0zODksNiArMzMzLDE2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpwcmVzZW50KCkKICAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CiB9CiAK
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXll
ckNocm9taXVtPiBsYXllcikKK3sKKyAgICBtX3Jvb3RMYXllciA9IGxheWVyOworICAgIG1fcm9v
dExheWVyVGlsZXItPmludmFsaWRhdGVFbnRpcmVMYXllcigpOworICAgIGlmIChtX2hvcml6b250
YWxTY3JvbGxiYXJUaWxlcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPmlu
dmFsaWRhdGVFbnRpcmVMYXllcigpOworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXIp
CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+aW52YWxpZGF0ZUVudGlyZUxheWVy
KCk7Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBpeGVs
cyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKHJlY3Qu
cmlnaHQoKSA8PSByb290TGF5ZXJUZXh0dXJlU2l6ZSgpLndpZHRoKCkKQEAgLTc4MiwxOSArNzM2
LDYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3Rz
KCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIC8vIENyZWF0ZSBhIHRleHR1
cmUgb2JqZWN0IHRvIGhvbGQgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAgIG1f
cm9vdExheWVyVGV4dHVyZUlkID0gY3JlYXRlTGF5ZXJUZXh0dXJlKCk7Ci0gICAgaWYgKCFtX3Jv
b3RMYXllclRleHR1cmVJZCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUg
dGV4dHVyZSBmb3Igcm9vdCBsYXllciIpOwotICAgICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFR1cm4gb2ZmIGZpbHRlcmlu
ZyBmb3IgdGhlIHJvb3QgbGF5ZXIgdG8gYXZvaWQgYmx1cnJpbmcgZnJvbSB0aGUgcmVwZWF0ZWQK
LSAgICAvLyB3cml0ZXMgYW5kIHJlYWRzIHRvIHRoZSBmcmFtZWJ1ZmZlciB0aGF0IGhhcHBlbiB3
aGlsZSBzY3JvbGxpbmcuCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJl
SWQpKTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7Ci0gICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVCkpOwotCiAgICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBzaXpl
IHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgogICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwogICAg
IEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKSk7CkBAIC04MjksMTIg
Kzc3MCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cygpCiAgICAgbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CiAgICAgbV9wbHVnaW5M
YXllclNoYXJlZFZhbHVlcy5jbGVhcigpOwogICAgIG1fcmVuZGVyU3VyZmFjZVNoYXJlZFZhbHVl
cy5jbGVhcigpOwotCi0gICAgaWYgKG1fcm9vdExheWVyVGV4dHVyZUlkKSB7Ci0gICAgICAgIGRl
bGV0ZUxheWVyVGV4dHVyZShtX3Jvb3RMYXllclRleHR1cmVJZCk7Ci0gICAgICAgIG1fcm9vdExh
eWVyVGV4dHVyZUlkID0gMDsKLSAgICB9Ci0KICAgICBpZiAobV9vZmZzY3JlZW5GcmFtZWJ1ZmZl
cklkKQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRlbGV0ZUZyYW1l
YnVmZmVyKG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApp
bmRleCBjMGU2MTBhMzBmYjE0NGNlNDhlMDRjNjMyMGU0MDk5N2M2MjdkMzNmLi42NDc0MjY5ZGZj
MjU4YTU1MGEzZDRlNjU5NmI3YzdlZjM5MDYzNDQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAg
LTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5
ZXJUaWxlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCkBA
IC02NywxNCArNjgsMTIgQEAgcHVibGljOgogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQoKTsKIAotICAgIC8vIHVwZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwg
YW5kIHNjcm9sbHMgdGhlIGJhY2tidWZmZXIuCi0gICAgdm9pZCBwcmVwYXJlVG9EcmF3TGF5ZXJz
KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwg
Y29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKKyAgICB2b2lkIGludmFsaWRhdGVSb290
TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKIAotICAgIC8vIHVwZGF0ZXMgYSBy
ZWN0YW5nbGUgd2l0aGluIHRoZSByb290IGxheWVyIHRleHR1cmUKLSAgICB2b2lkIHVwZGF0ZVJv
b3RMYXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOwotCi0gICAgLy8g
ZHJhd3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKLSAgICB2b2lkIGRy
YXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KTsKKyAgICAvLyB1cGRhdGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250
byB0aGUgYmFja2J1ZmZlcgorICAgIHZvaWQgZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsCisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxl
UGFpbnQsCisgICAgICAgICAgICAgICAgICAgIFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFy
UGFpbnQpOwogCiAgICAgLy8gd2FpdHMgZm9yIHJlbmRlcmluZyB0byBmaW5pc2gKICAgICB2b2lk
IGZpbmlzaCgpOwpAQCAtODIsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgLy8gcHV0cyBiYWNrYnVm
ZmVyIG9uc2NyZWVuCiAgICAgdm9pZCBwcmVzZW50KCk7CiAKLSAgICB2b2lkIHNldFJvb3RMYXll
cihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyKSB7IG1fcm9vdExheWVyID0gbGF5ZXI7
IH0KKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVy
KTsKICAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5n
ZXQoKTsgfQogICAgIHZvaWQgdHJhbnNmZXJSb290TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBvdGhlcikgeyBvdGhlci0+bV9yb290TGF5ZXIgPSBtX3Jvb3RMYXllci5yZWxlYXNlKCk7IH0K
IApAQCAtMTI2LDYgKzEyNSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdMYXllcihMYXll
ckNocm9taXVtKiwgUmVuZGVyU3VyZmFjZUNocm9taXVtKik7CiAKKyAgICB2b2lkIHVwZGF0ZUFu
ZERyYXdSb290TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQsIFRpbGVQYWludElu
dGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICBib29sIGlzTGF5ZXJWaXNpYmxlKExheWVy
Q2hyb21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEludFJlY3QmIHZp
c2libGVSZWN0KTsKIAogICAgIHZvaWQgc2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0
JiwgYm9vbCBmbGlwWSk7CkBAIC0xMzksMTMgKzE0MCwxOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsKICAgICB2b2lkIGNsZWFudXBTaGFyZWRPYmplY3Rz
KCk7CiAKLSAgICB1bnNpZ25lZCBtX3Jvb3RMYXllclRleHR1cmVJZDsKKyAgICBzdGF0aWMgSW50
UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICBzdGF0aWMgSW50UmVjdCBob3Jpem9udGFs
U2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpOworCiAgICAgaW50IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoOwogICAgIGlu
dCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X3Byb2plY3Rpb25NYXRyaXg7CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290TGF5
ZXI7CisgICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV9yb290TGF5ZXJUaWxlcjsKKyAg
ICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlcjsK
KyAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXI7
CiAKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogICAgIGJvb2wgbV9oYXJkd2FyZUNv
bXBvc2l0aW5nOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0OWY0NjJiN2Y2YjQwOWNm
MThlMDdmMDA0ZjQ5MDQ4N2M2ZDA1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSw0
MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKworI2lmIFBMQVRGT1JNKFNLSUEp
CisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgorI2VsaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0
bWFwQ29udGV4dC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+
IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCit7CisgICAgaWYgKCFsYXllclJlbmRl
cmVyIHx8IHRpbGVTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bShsYXllclJlbmRlcmVyLCB0aWxlU2l6
ZSkpOworfQorCitMYXllclRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bShMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKQor
ICAgIDogbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpCit7CisgICAgc2V0VGlsZVNpemUo
dGlsZVNpemUpOworfQorCitMYXllclRpbGVyQ2hyb21pdW06On5MYXllclRpbGVyQ2hyb21pdW0o
KQoreworICAgIHJlc2V0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBMYXllclRpbGVyQ2hy
b21pdW06OmxheWVyUmVuZGVyZXJDb250ZXh0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5ZXJS
ZW5kZXJlcigpKTsKKyAgICByZXR1cm4gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7Cit9CisK
K3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQoreworICAgIGlmIChtX3RpbGVTaXplID09IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAg
IHJlc2V0KCk7CisKKyAgICBtX3RpbGVTaXplID0gc2l6ZTsKKyAgICBtX3RpbGVQaXhlbHMgPSBh
ZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W21fdGlsZVNpemUud2lkdGgoKSAqIG1fdGlsZVNpemUu
aGVpZ2h0KCkgKiA0XSk7Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNldCgpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmICghbV90aWxlc1tpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBsYXll
clJlbmRlcmVyKCktPmRlbGV0ZUxheWVyVGV4dHVyZShtX3RpbGVzW2ldLT5yZWxlYXNlVGV4dHVy
ZUlkKCkpOworICAgIH0KKyAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3VudXNlZFRpbGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghbV91bnVz
ZWRUaWxlc1tpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBsYXllclJlbmRlcmVy
KCktPmRlbGV0ZUxheWVyVGV4dHVyZShtX3VudXNlZFRpbGVzW2ldLT5yZWxlYXNlVGV4dHVyZUlk
KCkpOworICAgIH0KKyAgICBtX3VudXNlZFRpbGVzLmNsZWFyKCk7CisKKyAgICBtX2xheWVyU2l6
ZSA9IEludFNpemUoKTsKKyAgICBtX2xheWVyVGlsZVNpemUgPSBJbnRTaXplKCk7CisgICAgbV9s
YXN0VXBkYXRlTGF5ZXJSZWN0ID0gSW50UmVjdCgpOworfQorCitMYXllclRpbGVyQ2hyb21pdW06
OlRpbGUqIExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCit7Cisg
ICAgY29uc3QgaW50IGluZGV4ID0gdGlsZUluZGV4KGksIGopOworICAgIEFTU0VSVCghbV90aWxl
c1tpbmRleF0pOworCisgICAgaWYgKG1fdW51c2VkVGlsZXMuc2l6ZSgpID4gMCkgeworICAgICAg
ICBtX3RpbGVzW2luZGV4XSA9IG1fdW51c2VkVGlsZXMubGFzdCgpLnJlbGVhc2UoKTsKKyAgICAg
ICAgbV91bnVzZWRUaWxlcy5yZW1vdmVMYXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IGxheWVyUmVuZGVyZXIoKS0+Y3JlYXRlTGF5ZXJU
ZXh0dXJlKCk7CisgICAgICAgIE93blB0cjxUaWxlPiB0aWxlID0gYWRvcHRQdHIobmV3IFRpbGUo
dGV4dHVyZUlkKSk7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyQ29udGV4dCgpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1h
Z2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIG1fdGlsZVNpemUud2lkdGgoKSwgbV90aWxlU2l6ZS5oZWlnaHQo
KSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFKSk7CisKKyAgICAgICAgbV90aWxlc1tpbmRleF0gPSB0aWxlLnJlbGVhc2UoKTsKKyAg
ICB9CisKKyAgICBtX3RpbGVzW2luZGV4XS0+bV9kaXJ0eUxheWVyUmVjdCA9IHRpbGVMYXllclJl
Y3QoaSwgaik7CisgICAgcmV0dXJuIG1fdGlsZXNbaW5kZXhdLmdldCgpOworfQorCit2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIG9sZExheWVy
UmVjdCwgY29uc3QgSW50UmVjdCYgbmV3TGF5ZXJSZWN0KQoreworICAgIGlmICghbV90aWxlcy5z
aXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3Qgb2xkQ29udGVudFJlY3QgPSBs
YXllclJlY3RUb0NvbnRlbnRSZWN0KG9sZExheWVyUmVjdCk7CisgICAgaW50IG9sZExlZnQsIG9s
ZFRvcCwgb2xkUmlnaHQsIG9sZEJvdHRvbTsKKyAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMo
b2xkQ29udGVudFJlY3QsIG9sZExlZnQsIG9sZFRvcCwgb2xkUmlnaHQsIG9sZEJvdHRvbSk7CisK
KyAgICBJbnRSZWN0IG5ld0NvbnRlbnRSZWN0ID0gbGF5ZXJSZWN0VG9Db250ZW50UmVjdChuZXdM
YXllclJlY3QpOworICAgIGludCBuZXdMZWZ0LCBuZXdUb3AsIG5ld1JpZ2h0LCBuZXdCb3R0b207
CisgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG5ld0NvbnRlbnRSZWN0LCBuZXdMZWZ0LCBu
ZXdUb3AsIG5ld1JpZ2h0LCBuZXdCb3R0b20pOworCisgICAgLy8gSXRlcmF0aW5nIHRocm91Z2gg
anVzdCB0aGUgb2xkIHRpbGUgaW5kaWNlcyBpcyBhbiBvcHRpbWl6YXRpb24gdG8gYXZvaWQKKyAg
ICAvLyBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZW50aXJlIG1fdGlsZXMgYXJyYXkuCisgICAgZm9y
IChpbnQgaiA9IG9sZFRvcDsgaiA8PSBvbGRCb3R0b207ICsraikgeworICAgICAgICBmb3IgKGlu
dCBpID0gb2xkTGVmdDsgaSA8PSBvbGRSaWdodDsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSA+
PSBuZXdMZWZ0ICYmIGkgPD0gbmV3UmlnaHQgJiYgaiA+PSBuZXdUb3AgJiYgaiA8PSBuZXdCb3R0
b20pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNvbnN0IGludCBp
bmRleCA9IHRpbGVJbmRleChpLCBqKTsKKyAgICAgICAgICAgIGlmIChtX3RpbGVzW2luZGV4XSkK
KyAgICAgICAgICAgICAgICBtX3VudXNlZFRpbGVzLmFwcGVuZChtX3RpbGVzW2luZGV4XS5yZWxl
YXNlKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6
Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQg
JmxlZnQsIGludCAmdG9wLCBpbnQgJnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29uc3QKK3sKKyAgICBj
b25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJl
Y3QpOworCisgICAgbGVmdCA9IGxheWVyUmVjdC54KCkgLyBtX3RpbGVTaXplLndpZHRoKCk7Cisg
ICAgdG9wID0gbGF5ZXJSZWN0LnkoKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7CisgICAgcmlnaHQg
PSAobGF5ZXJSZWN0LnJpZ2h0KCkgLSAxKSAvIG1fdGlsZVNpemUud2lkdGgoKTsKKyAgICBib3R0
b20gPSAobGF5ZXJSZWN0LmJvdHRvbSgpIC0gMSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworfQor
CitJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJlY3RUb0xheWVyUmVjdChjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb3MoY29udGVu
dFJlY3QueCgpIC0gbV9sYXllclBvc2l0aW9uLngoKSwgY29udGVudFJlY3QueSgpIC0gbV9sYXll
clBvc2l0aW9uLnkoKSk7CisgICAgSW50UmVjdCBsYXllclJlY3QocG9zLCBjb250ZW50UmVjdC5z
aXplKCkpOworCisgICAgLy8gQ2xpcCB0byB0aGUgcG9zaXRpb24uCisgICAgaWYgKHBvcy54KCkg
PCAwIHx8IHBvcy55KCkgPCAwKQorICAgICAgICBsYXllclJlY3QgPSBJbnRSZWN0KEludFBvaW50
KDAsIDApLCBJbnRTaXplKGNvbnRlbnRSZWN0LndpZHRoKCkgKyBwb3MueCgpLCBjb250ZW50UmVj
dC5oZWlnaHQoKSArIHBvcy55KCkpKTsKKyAgICByZXR1cm4gbGF5ZXJSZWN0OworfQorCitJbnRS
ZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJSZWN0VG9Db250ZW50UmVjdChjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGxheWVy
UmVjdDsKKyAgICBjb250ZW50UmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQ
b3NpdGlvbi55KCkpOworICAgIHJldHVybiBjb250ZW50UmVjdDsKK30KKworaW50IExheWVyVGls
ZXJDaHJvbWl1bTo6dGlsZUluZGV4KGludCBpLCBpbnQgaikgY29uc3QKK3sKKyAgICBBU1NFUlQo
aSA+PSAwICYmIGogPj0gMCAmJiBpIDwgbV9sYXllclRpbGVTaXplLndpZHRoKCkgJiYgaiA8IG1f
bGF5ZXJUaWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGkgKyBqICogbV9sYXllclRpbGVT
aXplLndpZHRoKCk7Cit9CisKK0ludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjp0aWxlQ29udGVu
dFJlY3QoaW50IGksIGludCBqKSBjb25zdAoreworICAgIEludFBvaW50IGFuY2hvcihtX2xheWVy
UG9zaXRpb24ueCgpICsgaSAqIG1fdGlsZVNpemUud2lkdGgoKSwgbV9sYXllclBvc2l0aW9uLnko
KSArIGogKiBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICBJbnRSZWN0IHRpbGUoYW5jaG9yLCBt
X3RpbGVTaXplKTsKKyAgICByZXR1cm4gdGlsZTsKK30KKworSW50UmVjdCBMYXllclRpbGVyQ2hy
b21pdW06OnRpbGVMYXllclJlY3QoaW50IGksIGludCBqKSBjb25zdAoreworICAgIEludFBvaW50
IGFuY2hvcihpICogbV90aWxlU2l6ZS53aWR0aCgpLCBqICogbV90aWxlU2l6ZS5oZWlnaHQoKSk7
CisgICAgSW50UmVjdCB0aWxlKGFuY2hvciwgbV90aWxlU2l6ZSk7CisgICAgcmV0dXJuIHRpbGU7
Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOworCisg
ICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFjZSwgYXMgdGhlIGxheWVy
IGNvdWxkIGJlIHJlcG9zaXRpb25lZAorICAgIC8vIGFmdGVyIGludmFsaWRhdGlvbi4KKyAgICBJ
bnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwor
CisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBjb250ZW50UmVjdFRvVGls
ZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9y
IChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0g
bGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBUaWxlKiB0aWxlID0gbV90aWxl
c1t0aWxlSW5kZXgoaSwgaildLmdldCgpOworICAgICAgICAgICAgaWYgKCF0aWxlKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgSW50UmVjdCBib3VuZCA9IHRpbGVMYXll
clJlY3QoaSwgaik7CisgICAgICAgICAgICBib3VuZC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKKyAg
ICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QudW5pdGUoYm91bmQpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZUVudGlyZUxh
eWVyKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fdGlsZXNbaV0pCisgICAgICAgICAgICBtX3VudXNlZFRpbGVzLmFw
cGVuZChtX3RpbGVzW2ldLnJlbGVhc2UoKSk7CisgICAgfQorICAgIG1fdGlsZXMuY2xlYXIoKTsK
KworICAgIG1fbGF5ZXJTaXplID0gSW50U2l6ZSgpOworICAgIG1fbGF5ZXJUaWxlU2l6ZSA9IElu
dFNpemUoKTsKKyAgICBtX2xhc3RVcGRhdGVMYXllclJlY3QgPSBJbnRSZWN0KCk7Cit9CisKK3Zv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGUoVGlsZVBhaW50SW50ZXJmYWNlJiBwYWludGVy
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICAvLyBJbnZhbGlkYXRlIG9sZCB0
aWxlcyB0aGF0IHdlcmUgcHJldmlvdXNseSB1c2VkIGJ1dCBhcmVuJ3QgaW4gdXNlIHRoaXMKKyAg
ICAvLyBmcmFtZSBzbyB0aGF0IHRoZXkgY2FuIGdldCByZXVzZWQgZm9yIG5ldyB0aWxlcy4KKyAg
ICBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3Qp
OworICAgIGludmFsaWRhdGVUaWxlcyhtX2xhc3RVcGRhdGVMYXllclJlY3QsIGxheWVyUmVjdCk7
CisgICAgbV9sYXN0VXBkYXRlTGF5ZXJSZWN0ID0gbGF5ZXJSZWN0OworCisgICAgZ3Jvd0xheWVy
VG9Db250YWluKGNvbnRlbnRSZWN0KTsKKworICAgIC8vIENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQs
IGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29udGFpbiBhbGwKKyAgICAvLyB0aGUgZGlydHkg
cmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24uCisgICAgSW50UmVjdCBkaXJ0eUxheWVyUmVj
dDsKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIGNvbnRlbnRSZWN0VG9U
aWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBm
b3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIFRpbGUqIHRpbGUgPSBtX3Rp
bGVzW3RpbGVJbmRleChpLCBqKV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXRpbGUpCisgICAg
ICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CisgICAgICAgICAgICBkaXJ0eUxh
eWVyUmVjdC51bml0ZSh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbnN0IEludFJlY3QgcGFpbnRSZWN0ID0gbGF5ZXJSZWN0VG9Db250ZW50UmVjdChkaXJ0
eUxheWVyUmVjdCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRl
cmVyQ29udGV4dCgpOworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgT3duUHRyPHNraWE6OlBsYXRm
b3JtQ2FudmFzPiBjYW52YXMobmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHBhaW50UmVjdC53aWR0
aCgpLCBwYWludFJlY3QuaGVpZ2h0KCksIGZhbHNlKSk7CisgICAgT3duUHRyPFBsYXRmb3JtQ29u
dGV4dFNraWE+IHNraWFDb250ZXh0KG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKGNhbnZhcy5nZXQo
KSkpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dChuZXcgR3Jh
cGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihz
a2lhQ29udGV4dC5nZXQoKSkpKTsKKworICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUg
Y29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCisgICAgY2FudmFzLT50cmFuc2xh
dGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1wYWludFJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tT
Y2FsYXI+KC1wYWludFJlY3QueSgpKSk7CisKKyAgICBwYWludGVyLnBhaW50KCpncmFwaGljc0Nv
bnRleHQsIHBhaW50UmVjdCk7CisKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRh
dGVkIHJlY3QuCisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGNhbnZhcy0+Z2V0RGV2aWNl
KCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7CisgICAgQVNTRVJUKGJpdG1hcC53aWR0aCgpID09IHBh
aW50UmVjdC53aWR0aCgpICYmIGJpdG1hcC5oZWlnaHQoKSA9PSBwYWludFJlY3QuaGVpZ2h0KCkp
OworICAgIHVpbnQ4X3QqIHBhaW50UGl4ZWxzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJpdG1h
cC5nZXRQaXhlbHMoKSk7CisjZWxpZiBQTEFURk9STShDRykKKyAgICBWZWN0b3I8dWludDhfdD4g
Y2FudmFzUGl4ZWxzOworICAgIGludCByb3dCeXRlcyA9IDQgKiBwYWludFJlY3Qud2lkdGgoKTsK
KyAgICBjYW52YXNQaXhlbHMucmVzaXplKHJvd0J5dGVzICogcGFpbnRSZWN0LmhlaWdodCgpKTsK
KyAgICBtZW1zZXQoY2FudmFzUGl4ZWxzLmRhdGEoKSwgMCwgY2FudmFzUGl4ZWxzLnNpemUoKSk7
CisgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0Nv
bG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4g
bV9jZ0NvbnRleHQ7CisgICAgbV9jZ0NvbnRleHQuYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGUoY2FudmFzUGl4ZWxzLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYWludFJlY3Qud2lkdGgoKSwgcGFpbnRSZWN0LmhlaWdo
dCgpLCA4LCByb3dCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKKyAgICBDR0NvbnRleHRUcmFu
c2xhdGVDVE0obV9jZ0NvbnRleHQuZ2V0KCksIDAsIHBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAg
Q0dDb250ZXh0U2NhbGVDVE0obV9jZ0NvbnRleHQuZ2V0KCksIDEsIC0xKTsKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBtX2dyYXBoaWNzQ29udGV4dChuZXcgR3JhcGhpY3NDb250ZXh0KG1f
Y2dDb250ZXh0LmdldCgpKSk7CisKKyAgICAvLyBCcmluZyB0aGUgQ29yZUdyYXBoaWNzIGNvbnRl
eHQgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCisgICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKG1fY2dDb250ZXh0LmdldCgpLCAtcGFpbnRSZWN0LngoKSwgLXBh
aW50UmVjdC55KCkpOworICAgIHBhaW50ZXIucGFpbnQoKm1fZ3JhcGhpY3NDb250ZXh0LCBwYWlu
dFJlY3QpOworCisgICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0Lgor
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fY2dD
b250ZXh0LmdldCgpKSkgPT0gcGFpbnRSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihD
R0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9jZ0NvbnRleHQuZ2V0KCkpKSA9PSBwYWludFJlY3Qu
aGVpZ2h0KCkpOworICAgIHVpbnQ4X3QqIHBhaW50UGl4ZWxzID0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGNhbnZhc1BpeGVscy5kYXRhKCkpOworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1l
bnQgZm9yIHlvdXIgcGxhdGZvcm0uIgorI2VuZGlmCisKKyAgICBmb3IgKGludCBqID0gdG9wOyBq
IDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0
OyArK2kpIHsKKyAgICAgICAgICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleChpLCBq
KV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXRpbGUtPmRpcnR5KCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3Rh
bmdsZSB0byBjb3B5IGZyb20uCisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxl
Q29udGVudFJlY3QoaSwgaik7CisgICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBz
b3VyY2VSZWN0LmxvY2F0aW9uKCk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChs
YXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3QpKTsKKworICAgICAg
ICAgICAgLy8gQ2FsY3VsYXRlIHRpbGUtc3BhY2UgcmVjdGFuZ2xlIHRvIHVwbG9hZCBpbnRvLgor
ICAgICAgICAgICAgSW50UmVjdCBkZXN0UmVjdChJbnRQb2ludChzb3VyY2VSZWN0LngoKSAtIGFu
Y2hvci54KCksIHNvdXJjZVJlY3QueSgpIC0gYW5jaG9yLnkoKSksIHNvdXJjZVJlY3Quc2l6ZSgp
KTsKKworICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMg
dGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KKyAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0
KHNvdXJjZVJlY3QueCgpIC0gcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBwYWludFJl
Y3QueSgpKTsKKworICAgICAgICAgICAgdWludDhfdCogcGl4ZWxTb3VyY2U7CisgICAgICAgICAg
ICBpZiAocGFpbnRSZWN0LndpZHRoKCkgPT0gc291cmNlUmVjdC53aWR0aCgpICYmICFwYWludE9m
ZnNldC54KCkpCisgICAgICAgICAgICAgICAgcGl4ZWxTb3VyY2UgPSAmcGFpbnRQaXhlbHNbNCAq
IHBhaW50T2Zmc2V0LnkoKSAqIHBhaW50UmVjdC53aWR0aCgpXTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIFN0cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJvdy1ieS1y
b3cgbWVtY3B5IGZyb20gdGhlCisgICAgICAgICAgICAgICAgLy8gcGFpbnQgcmVzdWx0cyBpbnRv
IGEgdGVtcCBidWZmZXIgZm9yIHVwbG9hZGluZy4KKyAgICAgICAgICAgICAgICBmb3IgKGludCBy
b3cgPSAwOyByb3cgPCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCisgICAgICAgICAgICAgICAg
ICAgIG1lbWNweSgmbV90aWxlUGl4ZWxzW2Rlc3RSZWN0LndpZHRoKCkgKiA0ICogcm93XSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZwYWludFBpeGVsc1s0ICogKHBhaW50T2Zmc2V0Lngo
KSArIChwYWludE9mZnNldC55KCkgKyByb3cpICogcGFpbnRSZWN0LndpZHRoKCkpXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsKKworICAgICAgICAg
ICAgICAgIHBpeGVsU291cmNlID0gJm1fdGlsZVBpeGVsc1swXTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCB0aWxlLT50ZXh0dXJlSWQoKSkpOworICAgICAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBk
ZXN0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbFNvdXJjZSkpOworCisgICAgICAgICAgICB0aWxlLT5j
bGVhckRpcnR5KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9t
aXVtOjpzZXRMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBsYXllclBvc2l0aW9uKQorewor
ICAgIG1fbGF5ZXJQb3NpdGlvbiA9IGxheWVyUG9zaXRpb247Cit9CisKK3ZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjpkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIC8vIFdl
IHJldXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENvbnRlbnRMYXllckNocm9taXVtLgor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsK
KyAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5
ZXJWYWx1ZXMgPSBsYXllclJlbmRlcmVyKCktPmNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygpOwor
ICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKGNvbnRlbnRMYXllclZhbHVlcy0+Y29udGVu
dFNoYWRlclByb2dyYW0oKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShj
b250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlclNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisKKyAgICBp
bnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNl
cyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBq
ID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBp
IDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzW3RpbGVJ
bmRleChpLCBqKV0uZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQodGlsZSk7CisKKyAgICAgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgdGlsZS0+dGV4dHVyZUlkKCkpKTsKKworICAgICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdGlsZU1hdHJpeDsKKyAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0
aWxlQ29udGVudFJlY3QoaSwgaik7CisgICAgICAgICAgICB0aWxlTWF0cml4LnRyYW5zbGF0ZTNk
KHRpbGVSZWN0LngoKSAtIGNvbnRlbnRSZWN0LngoKSArIHRpbGVSZWN0LndpZHRoKCkgLyAyLjAs
IHRpbGVSZWN0LnkoKSAtIGNvbnRlbnRSZWN0LnkoKSArIHRpbGVSZWN0LmhlaWdodCgpIC8gMi4w
LCAwKTsKKworICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb250
ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgdGlsZU1hdHJpeCwgbV90
aWxlU2l6ZS53aWR0aCgpLCBtX3RpbGVTaXplLmhlaWdodCgpLCAxLCBjb250ZW50TGF5ZXJWYWx1
ZXMtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyQWxw
aGFMb2NhdGlvbigpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMYXllclRpbGVyQ2hy
b21pdW06OnJlc2l6ZUxheWVyKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fbGF5
ZXJTaXplID09IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB3aWR0aCA9IChzaXpl
LndpZHRoKCkgKyBtX3RpbGVTaXplLndpZHRoKCkgLSAxKSAvIG1fdGlsZVNpemUud2lkdGgoKTsK
KyAgICBpbnQgaGVpZ2h0ID0gKHNpemUuaGVpZ2h0KCkgKyBtX3RpbGVTaXplLmhlaWdodCgpIC0g
MSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworCisgICAgVmVjdG9yPE93blB0cjxUaWxlPiA+IG5l
d1RpbGVzOworICAgIG5ld1RpbGVzLnJlc2l6ZSh3aWR0aCAqIGhlaWdodCk7CisgICAgZm9yIChp
bnQgaiA9IDA7IGogPCBtX2xheWVyVGlsZVNpemUuaGVpZ2h0KCk7ICsraikKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX2xheWVyVGlsZVNpemUud2lkdGgoKTsgKytpKQorICAgICAgICAg
ICAgbmV3VGlsZXNbaSArIGogKiB3aWR0aF0uc3dhcChtX3RpbGVzW2kgKyBqICogbV9sYXllclRp
bGVTaXplLndpZHRoKCldKTsKKworICAgIG1fdGlsZXMuc3dhcChuZXdUaWxlcyk7CisgICAgbV9s
YXllclNpemUgPSBzaXplOworICAgIG1fbGF5ZXJUaWxlU2l6ZSA9IEludFNpemUod2lkdGgsIGhl
aWdodCk7Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4o
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJh
eSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0LgorICAgIEludFJlY3QgbGF5ZXJSZWN0ID0g
Y29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7CisgICAgSW50UmVjdCBsYXllcihJ
bnRQb2ludCgwLCAwKSwgbV9sYXllclNpemUpOworICAgIGxheWVyLnVuaXRlKGxheWVyUmVjdCk7
CisgICAgcmVzaXplTGF5ZXIobGF5ZXIuc2l6ZSgpKTsKK30KKworTGF5ZXJUaWxlckNocm9taXVt
OjpUaWxlOjp+VGlsZSgpCit7CisgICAgLy8gRWFjaCB0aWxlIGRvZXNuJ3QgaGF2ZSBhIHJlZmVy
ZW5jZSB0byB0aGUgY29udGV4dCwgc28gY2FuJ3QgY2xlYW4gdXAKKyAgICAvLyBpdHMgb3duIHRl
eHR1cmUuICBJZiB0aGlzIGFzc2VydCBpcyBoaXQsIHRoZW4gdGhlIExheWVyVGlsZXJDaHJvbWl1
bQorICAgIC8vIGRlc3RydWN0b3IgZGlkbid0IGNsZWFuIHRoaXMgdXAuCisgICAgQVNTRVJUKCFt
X3RleHR1cmVJZCk7Cit9CisKK3Vuc2lnbmVkIGludCBMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6
OnJlbGVhc2VUZXh0dXJlSWQoKQoreworICAgIHVuc2lnbmVkIGludCBpZCA9IG1fdGV4dHVyZUlk
OworICAgIG1fdGV4dHVyZUlkID0gMDsKKyAgICByZXR1cm4gaWQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNo
cm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJD
aHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwNjZmZGY2YzA5OWEwZDVmYzM2YzNjNGE5NDVkZjNiZGIx
ZWQ4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIExheWVyVGlsZXJDaHJvbWl1bV9oCisjZGVmaW5lIExheWVyVGlsZXJDaHJvbWl1bV9oCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21p
dW07CisKK2NsYXNzIFRpbGVQYWludEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpID0gMDsKK307CisKK2NsYXNzIExheWVyVGlsZXJDaHJvbWl1bSA6IHB1YmxpYyBOb25j
b3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9t
aXVtPiBjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSk7CisKKyAgICB+TGF5ZXJUaWxlckNocm9taXVtKCk7CisKKyAgICB2
b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICB2b2lk
IGludmFsaWRhdGVFbnRpcmVMYXllcigpOworICAgIHZvaWQgdXBkYXRlKFRpbGVQYWludEludGVy
ZmFjZSYgcGFpbnRlciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHZvaWQgZHJh
dyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAvLyBTZXQgcG9zaXRpb24gb2Yg
dGhpcyB0aWxlZCBsYXllciBpbiBjb250ZW50IHNwYWNlLgorICAgIHZvaWQgc2V0TGF5ZXJQb3Np
dGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pOworICAgIC8vIENoYW5nZSB0aGUgdGlsZSBz
aXplLiAgVGhpcyBtYXkgaW52YWxpZGF0ZSBhbGwgdGhlIGV4aXN0aW5nIHRpbGVzLgorICAgIHZv
aWQgc2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisKK3ByaXZhdGU6CisgICAgTGF5
ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUpOworCisgICAgY2xhc3MgVGlsZSB7CisgICAgcHVibGljOgor
ICAgICAgICBleHBsaWNpdCBUaWxlKHVuc2lnbmVkIGludCB0ZXh0dXJlSWQpIDogbV90ZXh0dXJl
SWQodGV4dHVyZUlkKSB7IH0KKyAgICAgICAgflRpbGUoKTsKKworICAgICAgICB1bnNpZ25lZCBp
bnQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICAgICAgdW5z
aWduZWQgaW50IHJlbGVhc2VUZXh0dXJlSWQoKTsKKworICAgICAgICBib29sIGRpcnR5KCkgY29u
c3QgeyByZXR1cm4gIW1fZGlydHlMYXllclJlY3QuaXNFbXB0eSgpOyB9CisgICAgICAgIHZvaWQg
Y2xlYXJEaXJ0eSgpIHsgbV9kaXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQorCisgICAgICAg
IC8vIExheWVyLXNwYWNlIGRpcnR5IHJlY3RhbmdsZSB0aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRl
ZC4KKyAgICAgICAgSW50UmVjdCBtX2RpcnR5TGF5ZXJSZWN0OworICAgIHByaXZhdGU6CisgICAg
ICAgIHVuc2lnbmVkIGludCBtX3RleHR1cmVJZDsKKyAgICB9OworCisgICAgdm9pZCByZXNpemVM
YXllcihjb25zdCBJbnRTaXplJiBzaXplKTsKKyAgICAvLyBHcm93IGxheWVyIHNpemUgdG8gY29u
dGFpbiB0aGlzIHJlY3RhbmdsZS4KKyAgICB2b2lkIGdyb3dMYXllclRvQ29udGFpbihjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXI7IH0KKyAgICBHcmFwaGlj
c0NvbnRleHQzRCogbGF5ZXJSZW5kZXJlckNvbnRleHQoKSBjb25zdDsKKyAgICBUaWxlKiBjcmVh
dGVUaWxlKGludCBpLCBpbnQgaik7CisgICAgLy8gSW52YWxpZGF0ZSBhbnkgdGlsZXMgd2hpY2gg
ZG8gbm90IGludGVyc2VjdCB3aXRoIHRoZSBuZXdMYXllclJlY3QuCisgICAgdm9pZCBpbnZhbGlk
YXRlVGlsZXMoY29uc3QgSW50UmVjdCYgb2xkTGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBuZXdM
YXllclJlY3QpOworICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGNvbnRlbnRSZWN0VG9UaWxl
SW5kaWNlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgaW50ICZsZWZ0LCBpbnQgJnRvcCwg
aW50ICZyaWdodCwgaW50ICZib3R0b20pIGNvbnN0OworICAgIEludFJlY3QgY29udGVudFJlY3RU
b0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAgSW50UmVj
dCBsYXllclJlY3RUb0NvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkgY29uc3Q7
CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBpbnRvIG1fdGlsZXMgZm9yIGEgZ2l2ZW4gdGls
ZSBsb2NhdGlvbi4KKyAgICBpbnQgdGlsZUluZGV4KGludCBpLCBpbnQgaikgY29uc3Q7CisgICAg
Ly8gUmV0dXJucyB0aGUgYm91bmRzIGluIGNvbnRlbnQgc3BhY2UgZm9yIGEgZ2l2ZW4gdGlsZSBs
b2NhdGlvbi4KKyAgICBJbnRSZWN0IHRpbGVDb250ZW50UmVjdChpbnQgaSwgaW50IGopIGNvbnN0
OworICAgIC8vIFJldHVybnMgdGhlIGJvdW5kcyBpbiBsYXllciBzcGFjZSBmb3IgYSBnaXZlbiB0
aWxlIGxvY2F0aW9uLgorICAgIEludFJlY3QgdGlsZUxheWVyUmVjdChpbnQgaSwgaW50IGopIGNv
bnN0OworCisgICAgSW50U2l6ZSBtX3RpbGVTaXplOworICAgIEludFNpemUgbV9sYXllclNpemU7
CisgICAgSW50U2l6ZSBtX2xheWVyVGlsZVNpemU7CisgICAgSW50UmVjdCBtX2xhc3RVcGRhdGVM
YXllclJlY3Q7CisgICAgSW50UG9pbnQgbV9sYXllclBvc2l0aW9uOworCisgICAgLy8gTG9naWNh
bCAyRCBhcnJheSBvZiB0aWxlcyAoZGltZW5zaW9ucyBvZiBtX2xheWVyVGlsZVNpemUpCisgICAg
VmVjdG9yPE93blB0cjxUaWxlPiA+IG1fdGlsZXM7CisgICAgLy8gTGluZWFyIGFycmF5IG9mIHVu
dXNlZCB0aWxlcy4KKyAgICBWZWN0b3I8T3duUHRyPFRpbGU+ID4gbV91bnVzZWRUaWxlczsKKwor
ICAgIC8vIENhY2hlIGEgdGlsZS1zaXplZCBwaXhlbCBidWZmZXIgdG8gZHJhdyBpbnRvLgorICAg
IE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fdGlsZVBpeGVsczsKKworICAgIExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbV9sYXllclJlbmRlcmVyOworfTsKKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGZmYzhiOTAyMDBk
MjVlZGViNjRmMWE2NjJmZjMzMGE0ODJlMGEyZDQuLjAzNTZmMWQ1YzFhYTBkNmE1MjliM2FmOWM2
ZTY5YTU2MjY1ZmQ3N2EgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEwLTEyLTIw
ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBUaWxlIHJvb3QgbGF5ZXIg
b2YgdGhlIGNvbXBvc2l0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00OTk0NworCisgICAgICAgIFJlZmFjdG9yIHJvb3QgbGF5ZXIgbG9naWMgb3V0
IG9mIFdlYlZpZXdJbXBsIGFuZCBpbnRvCisgICAgICAgIExheWVyVGlsZXJDaHJvbWl1bS4gIFRo
ZSBwYWludGluZyBpcyBub3cgZG9uZSB0aHJvdWdoIGFuIGludGVyZmFjZQorICAgICAgICByYXRo
ZXIgdGhhbiBkaXJlY3RseSBpbiBXZWJWaWV3SW1wbC4KKworICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsVGlsZVBhaW50SW50
ZXJmYWNlOjpXZWJWaWV3SW1wbFRpbGVQYWludEludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNlOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRJbnRlcmZhY2U6OldlYlZpZXdJbXBsU2Nyb2xsYmFy
UGFpbnRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbFNjcm9sbGJhclBh
aW50SW50ZXJmYWNlOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0Nv
bXBvc2l0ZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAtMTItMjEgIFpo
ZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRo
IFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGFjMDVkZDJiNzli
Mzc5Y2I3M2RjMzYwMDAyODZiNTAwOWZiZTkwMDIuLmE3YzRhYTFjZThkOTI2OWQ0ZWMwNjc2YmRh
ZDNjYmU4YTljYWVkNTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0yMjY4
LDcwICsyMjY4LDYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5
KCkKIAogdm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBJbnRTaXpl
JiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgQVNTRVJUKG1f
bGF5ZXJSZW5kZXJlcik7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgZGFtYWdlIHJlY3QgaW4gdmlld3Bv
cnQgc3BhY2UuCi0gICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsK
LSAgICBpZiAoIXdlYmZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiB2aWV3
ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChm
YWxzZSk7Ci0gICAgSW50UmVjdCBzY3JlZW5SZWN0ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhj
b250ZW50UmVjdCk7Ci0KLSAgICAvLyBXZSBzdXBwb3J0IGZhc3Qgc2Nyb2xsaW5nIGluIG9uZSBk
aXJlY3Rpb24gYXQgYSB0aW1lLgotICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCgpICYmIHNjcm9s
bERlbHRhLmhlaWdodCgpKSB7Ci0gICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KFdlYlJl
Y3Qoc2NyZWVuUmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgcmVnaW9uIHdlIHdpbGwgZXhwb3NlIGJ5IHNjcm9sbGluZy4gV2UgdXNlIHRoZQotICAg
IC8vIGNvbnRlbnQgcmVjdCBmb3IgaW52YWxpZGF0aW9uLiAgVXNpbmcgdGhpcyBzcGFjZSBmb3Ig
ZGFtYWdlCi0gICAgLy8gcmVjdHMgYWxsb3dzIHVzIHRvIGludGVybWl4IGludmFsaWRhdGVzIHdp
dGggc2Nyb2xscy4KLSAgICBJbnRSZWN0IGRhbWFnZWRDb250ZW50c1JlY3Q7Ci0gICAgaWYgKHNj
cm9sbERlbHRhLndpZHRoKCkpIHsKLSAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgo
KTsKLSAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKHNjcmVlblJlY3QueSgpKTsKLSAg
ICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoc2NyZWVuUmVjdC5oZWlnaHQoKSk7
Ci0gICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Qu
c2V0WChzY3JlZW5SZWN0LngoKSk7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNl
dFdpZHRoKGR4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRhbWFnZWRDb250ZW50
c1JlY3Quc2V0WChzY3JlZW5SZWN0LnJpZ2h0KCkgKyBkeCk7Ci0gICAgICAgICAgICBkYW1hZ2Vk
Q29udGVudHNSZWN0LnNldFdpZHRoKC1keCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0YS5oZWlnaHQoKTsKLSAgICAgICAgZGFtYWdlZENvbnRl
bnRzUmVjdC5zZXRYKHNjcmVlblJlY3QueCgpKTsKLSAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVj
dC5zZXRXaWR0aChzY3JlZW5SZWN0LndpZHRoKCkpOwotICAgICAgICBpZiAoZHkgPiAwKSB7Ci0g
ICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFkoc2NyZWVuUmVjdC55KCkpOwotICAg
ICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoZHkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKHNjcmVlblJlY3QuYm90
dG9tKCkgKyBkeSk7Ci0gICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdodCgt
ZHkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTW92ZSB0aGUgcHJldmlvdXMgZGFtYWdl
Ci0gICAgbV9yb290TGF5ZXJTY3JvbGxEYW1hZ2UubW92ZShzY3JvbGxEZWx0YS53aWR0aCgpLCBz
Y3JvbGxEZWx0YS5oZWlnaHQoKSk7Ci0gICAgLy8gVW5pb24gd2l0aCB0aGUgbmV3IGRhbWFnZSBy
ZWN0LgotICAgIG1fcm9vdExheWVyU2Nyb2xsRGFtYWdlLnVuaXRlKGRhbWFnZWRDb250ZW50c1Jl
Y3QpOwotCi0gICAgLy8gU2Nyb2xsIGFueSBleGlzdGluZyBkYW1hZ2UgdGhhdCBpbnRlcnNlY3Rz
IHdpdGggY2xpcCByZWN0Ci0gICAgaWYgKGNsaXBSZWN0LmludGVyc2VjdHMobV9yb290TGF5ZXJE
aXJ0eVJlY3QpKSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIGlubmVyIGRhbWFnZQotICAgICAgICBJ
bnRSZWN0IGlubmVyRGFtYWdlKGNsaXBSZWN0KTsKLSAgICAgICAgaW5uZXJEYW1hZ2UuaW50ZXJz
ZWN0KG1fcm9vdExheWVyRGlydHlSZWN0KTsKLQotICAgICAgICAvLyBNb3ZlIHRoZSBkYW1hZ2UK
LSAgICAgICAgaW5uZXJEYW1hZ2UubW92ZShzY3JvbGxEZWx0YS53aWR0aCgpLCBzY3JvbGxEZWx0
YS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gTWVyZ2UgaXQgYmFjayBpbnRvIHRoZSBkYW1hZ2Vk
IHJlY3QKLSAgICAgICAgbV9yb290TGF5ZXJEaXJ0eVJlY3QudW5pdGUoaW5uZXJEYW1hZ2UpOwot
ICAgIH0KLQogICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogfQogCkBAIC0yMzQyLDkg
KzIyNzgsMTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gRklYTUU6IGFkZCBhIHNtYXJ0ZXIgZGFtYWdlIGFnZ3JlZ2F0aW9uIGxvZ2ljIGFuZC9v
ciB1bmlmeSB3aXRoCi0gICAgLy8gTGF5ZXJDaHJvbWl1bSdzIGRhbWFnZSBsb2dpYwotICAgIG1f
cm9vdExheWVyRGlydHlSZWN0LnVuaXRlKHJlY3QpOworICAgIEZyYW1lVmlldyogdmlldyA9IHBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmll
dy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0g
dmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOworCisgICAgSW50UmVjdCBkaXJ0eVJlY3Qg
PSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJlY3QpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+aW52
YWxpZGF0ZVJvb3RMYXllclJlY3QoZGlydHlSZWN0LCB2aXNpYmxlUmVjdCwgY29udGVudFJlY3Qp
OwogICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogfQogCkBAIC0yMzYxLDg5ICsyMzAw
LDc3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZShib29sIGFjdGl2ZSkKICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7IC8vIGZpbmlzaCBhbGwgR0wgcmVuZGVyaW5nIGJl
Zm9yZSB3ZSBoaWRlIHRoZSB3aW5kb3c/CiAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgeworICAgIH0gZWxzZSBpZiAobV9sYXllclJlbmRlcmVy
KSB7CiAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAg
ICAgICAgbV9sYXllclJlbmRlcmVyLT5yZXNpemVPbnNjcmVlbkNvbnRlbnQoV2ViQ29yZTo6SW50
U2l6ZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6
ZS5oZWlnaHQpKSk7CiAKICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZyh0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0Nv
bnRleHQzRC5yZWxlYXNlKCk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGNvbnRleHQg
PSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRl
cygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOwotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhl
aWdodCkpOwotICAgIH0KLSAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZShjb250ZXh0LnJlbGVhc2UoKSk7Ci0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikg
ewotICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRy
dWUpOwotICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7Ci0g
ICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkID0gZmFsc2U7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKLSAgICAg
ICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhmYWxzZSk7Ci0g
ICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNz
Q29udGV4dDNELnJlbGVhc2UoKTsKKyAgICAgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgICAg
ICBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4
dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3Rk
OjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgICAgICB9CisgICAgICAgIG1fbGF5ZXJSZW5k
ZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQucmVsZWFzZSgpKTsK
KyAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgeworICAgICAgICAgICAgbV9jbGllbnQtPmRp
ZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsKKyAgICAgICAgICAgIG1faXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fY29tcG9z
aXRvckNyZWF0aW9uRmFpbGVkID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAg
bV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhmYWxzZSk7CisgICAg
ICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZCA9IHRydWU7CisgICAgICAgIH0KICAg
ICB9CisgICAgaWYgKHBhZ2UoKSkKKyAgICAgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
LT5zZXRDbGlwc1JlcGFpbnRzKCFtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk7CiB9
CiAKLXZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFt
ZUltcGwoKTsKLSAgICBpZiAoIXdlYmZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVW
aWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOwotICAgIGlmICghdmlldykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyID0gbV9sYXllclJlbmRl
cmVyLT5yb290TGF5ZXIoKTsKLSAgICBpZiAocm9vdExheWVyKSB7Ci0gICAgICAgIEludFJlY3Qg
dmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0KLSAgICAgICAg
bV9sYXllclJlbmRlcmVyLT5zZXRSb290TGF5ZXJDYW52YXNTaXplKEludFNpemUocmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVy
Q29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCk7Ci0K
LSNpZiBQTEFURk9STShTS0lBKQotICAgICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBza2lhQ29u
dGV4dCA9IHJvb3RMYXllckNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgICAgICBza2lh
OjpQbGF0Zm9ybUNhbnZhcyogcGxhdGZvcm1DYW52YXMgPSBza2lhQ29udGV4dC0+Y2FudmFzKCk7
Ci0KLSAgICAgICAgcGxhdGZvcm1DYW52YXMtPnNhdmUoKTsKLQotICAgICAgICAvLyBCcmluZyB0
aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0Lgot
ICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigt
cmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSgpKSk7Ci0KLSAgICAgICAg
cm9vdExheWVyQ29udGV4dC0+c2F2ZSgpOwotCi0gICAgICAgIHdlYmZyYW1lLT5wYWludFdpdGhD
b250ZXh0KCpyb290TGF5ZXJDb250ZXh0LCByZWN0KTsKLSAgICAgICAgcm9vdExheWVyQ29udGV4
dC0+cmVzdG9yZSgpOworY2xhc3MgV2ViVmlld0ltcGxUaWxlUGFpbnRJbnRlcmZhY2UgOiBwdWJs
aWMgVGlsZVBhaW50SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJWaWV3SW1w
bFRpbGVQYWludEludGVyZmFjZShXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpCisgICAgICAgIDog
bV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKKyAgICB7CisgICAgfQogCi0gICAgICAgIHBsYXRm
b3JtQ2FudmFzLT5yZXN0b3JlKCk7Ci0jZWxpZiBQTEFURk9STShDRykKLSAgICAgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IHJvb3RMYXllckNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KQorICAgIHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fd2ViVmll
d0ltcGwtPnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOworICAg
ICAgICB2aWV3LT5wYWludENvbnRlbnRzKCZjb250ZXh0LCBjb250ZW50UmVjdCk7CisgICAgfQog
Ci0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKK3ByaXZhdGU6CisgICAg
V2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7Cit9OwogCi0gICAgICAgIC8vIEJyaW5nIHRoZSBD
b3JlR3JhcGhpY3MgY29udGV4dCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFp
bnQgcmVjdC4KLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgLXJlY3Qu
eCgpLCAtcmVjdC55KCkpOwogCi0gICAgICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKK2Ns
YXNzIFdlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRJbnRlcmZhY2UgOiBwdWJsaWMgVGlsZVBhaW50
SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJWaWV3SW1wbFNjcm9sbGJhclBh
aW50SW50ZXJmYWNlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkKKyAgICAgICAgOiBtX3dlYlZp
ZXdJbXBsKHdlYlZpZXdJbXBsKQorICAgIHsKKyAgICB9CiAKLSAgICAgICAgd2ViZnJhbWUtPnBh
aW50V2l0aENvbnRleHQoKnJvb3RMYXllckNvbnRleHQsIHJlY3QpOwotICAgICAgICByb290TGF5
ZXJDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCisgICAgeworICAgICAg
ICBQYWdlKiBwYWdlID0gbV93ZWJWaWV3SW1wbC0+cGFnZSgpOworICAgICAgICBpZiAoIXBhZ2Up
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCk7CiAKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjZ0Nv
bnRleHQpOwotI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQotI2VuZGlm
CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xs
WSgpKTsKKyAgICAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gdmlldy0+Y29udGVudHNUb1dpbmRv
dyhjb250ZW50UmVjdCk7CisgICAgICAgIHZpZXctPnBhaW50U2Nyb2xsYmFycygmY29udGV4dCwg
d2luZG93UmVjdCk7CiAgICAgfQotfQorCitwcml2YXRlOgorICAgIFdlYlZpZXdJbXBsKiBtX3dl
YlZpZXdJbXBsOworfTsKIAogdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogewpAQCAt
MjQ1NSwzMiArMjM4MiwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiAgICAg
Ly8gVGhlIHZpc2libGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJhcnMgd2hlcmVhcyB0aGUgY29udGVu
dFJlY3QgZG9lc24ndC4KICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KHRydWUpOwogICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxl
Q29udGVudFJlY3QoZmFsc2UpOwotICAgIEludFJlY3Qgdmlld1BvcnQgPSBJbnRSZWN0KDAsIDAs
IG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0KLSAgICAvLyBHaXZlIHRoZSBjb21wb3Np
dG9yIGEgY2hhbmNlIHRvIHNldHVwL3Jlc2l6ZSB0aGUgcm9vdCB0ZXh0dXJlIGhhbmRsZSBhbmQg
cGVyZm9ybSBzY3JvbGxpbmcuCi0gICAgbV9sYXllclJlbmRlcmVyLT5wcmVwYXJlVG9EcmF3TGF5
ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgSW50UG9pbnQodmlldy0+c2Nyb2xsWCgpLCB2
aWV3LT5zY3JvbGxZKCkpKTsKKyAgICBJbnRQb2ludCBzY3JvbGwodmlldy0+c2Nyb2xsWCgpLCB2
aWV3LT5zY3JvbGxZKCkpOwogCi0gICAgLy8gRHJhdyB0aGUgY29udGVudHMgb2YgdGhlIHJvb3Qg
bGF5ZXIuCi0gICAgVmVjdG9yPEludFJlY3Q+IGRhbWFnZVJlY3RzOwotICAgIGRhbWFnZVJlY3Rz
LmFwcGVuZChtX3Jvb3RMYXllclNjcm9sbERhbWFnZSk7Ci0gICAgZGFtYWdlUmVjdHMuYXBwZW5k
KG1fcm9vdExheWVyRGlydHlSZWN0KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhbWFn
ZVJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEludFJlY3QgZGFtYWdlZFJlY3QgPSBkYW1h
Z2VSZWN0c1tpXTsKLQotICAgICAgICAvLyBJbnRlcnNlY3QgdGhpcyByZWN0YW5nbGUgd2l0aCB0
aGUgdmlld1BvcnQuCi0gICAgICAgIGRhbWFnZWRSZWN0LmludGVyc2VjdCh2aWV3UG9ydCk7Ci0K
LSAgICAgICAgLy8gTm93IHJlbmRlciBpdC4KLSAgICAgICAgaWYgKGRhbWFnZWRSZWN0LndpZHRo
KCkgJiYgZGFtYWdlZFJlY3QuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVJvb3RMYXll
ckNvbnRlbnRzKGRhbWFnZWRSZWN0KTsKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBk
YXRlUm9vdExheWVyVGV4dHVyZVJlY3QoZGFtYWdlZFJlY3QpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIG1fcm9vdExheWVyRGlydHlSZWN0ID0gSW50UmVjdCgpOwotICAgIG1fcm9vdExheWVyU2Ny
b2xsRGFtYWdlID0gSW50UmVjdCgpOworICAgIFdlYlZpZXdJbXBsVGlsZVBhaW50SW50ZXJmYWNl
IHRpbGVQYWludCh0aGlzKTsKIAotICAgIC8vIERyYXcgdGhlIGFjdHVhbCBsYXllcnMuLi4KLSAg
ICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsK
KyAgICBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNlIHNjcm9sbGJhclBhaW50KHRo
aXMpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVu
dFJlY3QsIHNjcm9sbCwgdGlsZVBhaW50LCBzY3JvbGxiYXJQYWludCk7CiB9CiAKIHZvaWQgV2Vi
Vmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
aW5kZXggNmU4ZGNhY2Q1ODYzODM5ZDY2ZmI5NTk3ODhlMjhiOTljMzMyZmIzYy4uODBhYmY4MTNl
ZWJmOTYyMTY1ZTIwZTk5NTJiZGQ2OWNhYzAyZjFkYSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaApAQCAtMzk2LDcgKzM5Niw2IEBAIHByaXZhdGU6CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
Ym9vbCk7Ci0gICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CiAgICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwogICAgIHZvaWQgZG9QaXhlbFJlYWRi
YWNrVG9DYW52YXMoV2ViQ2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZv
aWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7CkBAIC01MjgsNyArNTI3LDYgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9tb3VzZUNhcHR1cmVOb2RlOwogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFdlYkNvcmU6OkludFJlY3QgbV9yb290TGF5ZXJE
aXJ0eVJlY3Q7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Jvb3RMYXllclNjcm9sbERhbWFnZTsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVy
ZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsK
</data>
<flag name="review"
          id="68294"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>