<?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>73350</bug_id>
          
          <creation_ts>2011-11-29 12:36:53 -0800</creation_ts>
          <short_desc>[chromium] Allow scrolling non-root layers in the compositor thread</short_desc>
          <delta_ts>2012-06-15 05:53:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76663</dependson>
    
    <dependson>81546</dependson>
    
    <dependson>88972</dependson>
          <blocked>74196</blocked>
    
    <blocked>77477</blocked>
    
    <blocked>78862</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sami Kyostila">skyostil</reporter>
          <assigned_to name="Sami Kyostila">skyostil</assigned_to>
          <cc>aelias</cc>
    
    <cc>andersca</cc>
    
    <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>rjkroege</cc>
    
    <cc>sam</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>511011</commentid>
    <comment_count>0</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-11-29 12:36:53 -0800</bug_when>
    <thetext>We should allow scrolling non-root layers directly in the compositor thread to avoid having to fall back to the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511016</commentid>
    <comment_count>1</comment_count>
      <attachid>117024</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-11-29 12:43:05 -0800</bug_when>
    <thetext>Created attachment 117024
Work-in-progress patch

Added work-in-progress patch that implements scrolling non-root layers. Note that this requires: https://bugs.webkit.org/show_bug.cgi?id=73345

Notable TODOs:
 - Communicate layer scroll geometry to the compositor without going through GraphicsLayer.
 - Make it possible to look up layers by id in WebViewImpl without having to walk the entire tree.
 - Process page scale changes properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511989</commentid>
    <comment_count>2</comment_count>
      <attachid>117245</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-11-30 12:08:56 -0800</bug_when>
    <thetext>Created attachment 117245
Work-in-progress patch

Changes:
 - Scrollable layers are now registered through ChromeClient and nothing needs to be added to GraphicsLayer.
 - WebViewImpl is now also informed about scrollable layers, so it can efficiently apply the scroll commits.

TODO:
 - Split patch into Chromium and WebCore part.
 - Page scale support -- I&apos;ll revisit this in a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512792</commentid>
    <comment_count>3</comment_count>
      <attachid>117425</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-01 08:30:28 -0800</bug_when>
    <thetext>Created attachment 117425
WebCore patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512793</commentid>
    <comment_count>4</comment_count>
      <attachid>117426</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-01 08:30:54 -0800</bug_when>
    <thetext>Created attachment 117426
Chromium patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512928</commentid>
    <comment_count>5</comment_count>
      <attachid>117426</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-01 11:24:45 -0800</bug_when>
    <thetext>Comment on attachment 117426
Chromium patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:302
&gt; +    layer-&gt;setMaxScrollPosition(m_maxScrollPosition);

How does this interact with CCLayerTreeHostImpl::updateMaxScrollPosition calculating and overwriting the max scroll independently on the impl thread, taking page scale into account? This patch probably needs a test where page scale delta != 1.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:313
&gt; +    if (!layerImpl-&gt;bounds().isEmpty()) {
&gt; +        IntPoint contentPoint(layerImpl-&gt;screenSpaceTransform().inverse().mapPoint(windowPoint));
&gt; +        if (!IntRect(IntPoint::zero(), layerImpl-&gt;bounds()).contains(contentPoint))
&gt; +            return 0;
&gt; +    }

Maybe I&apos;m misreading this, but if a layer has valid bounds but the point is not contained, then all of its children are skipped? The layer tree is not a bounding box hierarchy, so I think you still need to check the children.  Can you add a test for this case?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:350
&gt; +        // Reset the pending delta completely to zero if the layer was able to move in that direction. This is
&gt; +        // to ensure it is possible to scroll exactly to the beginning or end of the scroll area regardless of
&gt; +        // the scroll step.

Does this cause any hitch when flinging?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:440
&gt; -    bool didMove = m_scrollLayerImpl &amp;&amp; (!m_scrollLayerImpl-&gt;scrollDelta().isZero() || m_pageScaleDelta != 1.0f);
&gt; -    if (!didMove || m_pinchGestureActive) {
&gt; +    if (m_pinchGestureActive || !collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get())) {

Can you explain why you dropped the m_pageScaleDelta check here? I think that&apos;s needed so that pinch zooms are sent back even when there are no scrolls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513965</commentid>
    <comment_count>6</comment_count>
      <attachid>117426</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-02 11:21:49 -0800</bug_when>
    <thetext>Comment on attachment 117426
Chromium patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:302
&gt;&gt; +    layer-&gt;setMaxScrollPosition(m_maxScrollPosition);
&gt; 
&gt; How does this interact with CCLayerTreeHostImpl::updateMaxScrollPosition calculating and overwriting the max scroll independently on the impl thread, taking page scale into account? This patch probably needs a test where page scale delta != 1.

Agreed, the coverage for page scaling isn&apos;t nearly as good as I&apos;d like it to be, mainly because of the difficulty in testing that feature interactively. I considered adding some rudimentary UI for page scaling for this purpose, but did not get that far yet.

I think I&apos;ll need to do another pass with a focus on page scaling interactions. I&apos;ll keep your comment in mind while doing that.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:313
&gt;&gt; +    }
&gt; 
&gt; Maybe I&apos;m misreading this, but if a layer has valid bounds but the point is not contained, then all of its children are skipped? The layer tree is not a bounding box hierarchy, so I think you still need to check the children.  Can you add a test for this case?

Good catch. I thought that layers were bounded by their parents but clearly that isn&apos;t the case. I&apos;ve changed this to always recurse through the children and check the content point against layerImpl-&gt;visibleLayerRect() since that also takes scrolling into account. I&apos;ll make sure this is tested as well.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:350
&gt;&gt; +        // the scroll step.
&gt; 
&gt; Does this cause any hitch when flinging?

I doesn&apos;t, because the fling range is limited so that the flung element comes to rest exactly at the edge of its scroll area. The fling should not affect the parent element -- unless the element was already flush against the scroll area edge when the gesture began, in which case we fling one of its parents instead.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:440
&gt;&gt; +    if (m_pinchGestureActive || !collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get())) {
&gt; 
&gt; Can you explain why you dropped the m_pageScaleDelta check here? I think that&apos;s needed so that pinch zooms are sent back even when there are no scrolls.

Well spotted, that was my mistake. I&apos;ll make sure there&apos;s a test for this as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518373</commentid>
    <comment_count>7</comment_count>
      <attachid>118602</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-09 12:00:35 -0800</bug_when>
    <thetext>Created attachment 118602
Chromium patch

- Added support and tests for page scaling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518376</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-09 12:03:27 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518429</commentid>
    <comment_count>9</comment_count>
      <attachid>118602</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-12-09 12:55:39 -0800</bug_when>
    <thetext>Comment on attachment 118602
Chromium patch

I defer to jamesr for the WebKit API change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518484</commentid>
    <comment_count>10</comment_count>
      <attachid>118602</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-09 14:00:11 -0800</bug_when>
    <thetext>Comment on attachment 118602
Chromium patch

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

I haven&apos;t looked through everything in detail, but have found some issues.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:170
&gt;      void scrollBy(const IntSize&amp; scroll);
&gt; +    void scrollBy(const FloatSize&amp; scroll);

it&apos;s very rarely a good idea to override a function like this with such similar types when the implementations do fairly different things. what&apos;s the story?

do we actually intend to support scrolling by non-integer amounts?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:245
&gt; +    // Tracks if this layer or a descendant was scrolled since the last sync.
&gt; +    bool m_subtreeWasScrolled;

if i understand correctly, this is an optimization to avoid having to walk the full layer tree every commit to check for scrolls on sublayers, correct? would this be better done as a bit on the LTHI? this seems somewhat overdone for a small win

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:262
&gt; +    FloatSize m_scrollDeltaResidue;

what is the &apos;scroll delta residue&apos;?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:485
&gt; +    for (size_t i = 0; i &lt; info.scrolls.size(); ++i) {
&gt; +        if (m_rootScrollLayer &amp;&amp; info.scrolls[i].layerId == m_rootScrollLayer-&gt;id())
&gt; +            m_client-&gt;applyRootLayerScrollAndScale(info.scrolls[i].scrollDelta, info.pageScaleDelta);

this logic makes me wonder if trying to be generic about scroll on the root layer is a mistake and if we should instead keep the root scroll + page scale delta separate from scrolls on sublayers

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:335
&gt; +CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::beginScrollingInnermostLayerAtPoint(CCLayerImpl* layerImpl, const IntPoint&amp; windowPoint)

what does &quot;window&quot; mean in &quot;window point&quot;? we don&apos;t have a defined notion of a window in the compositor today. viewport, perhaps? is this scaled or unscaled?

&gt; Source/WebKit/chromium/public/platform/WebLayerTreeViewClient.h:48
&gt; +    // Applies a scroll delta to a non-root layer. This is triggered by events
&gt; +    // sent to the compositor thread through the WebCompositor interface.
&gt; +    virtual void applyLayerScroll(int layerId, const WebSize&amp; scrollDelta) = 0;

I don&apos;t think this makes sense on this interface - why would you talk about a sublayer through the WebLayerTreeViewClient instead of via that layer? How would you expect this API to be used?

We also do not (and should not) expose layer IDs via the public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518536</commentid>
    <comment_count>11</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2011-12-09 14:38:17 -0800</bug_when>
    <thetext>I think instead of introducing m_scrollDeltaResidue, we should simply change m_scrollDelta and m_sentScrollDelta to be FloatSize, and make all operations on it likewise float-based.  I was also considering doing this, and this would also slightly improve the accuracy of pinch gestures.  We can round to int when sending down to the non-Impl side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519368</commentid>
    <comment_count>12</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-12 11:58:09 -0800</bug_when>
    <thetext>I&apos;d also be in favor of making the scroll offset float. It might lead to some small snapping artifacts when we sync with to the main thread and get integer offsets back, but all in all it would simplify this code quite a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519377</commentid>
    <comment_count>13</comment_count>
      <attachid>118602</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-12 12:27:28 -0800</bug_when>
    <thetext>Comment on attachment 118602
Chromium patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:170
&gt;&gt; +    void scrollBy(const FloatSize&amp; scroll);
&gt; 
&gt; it&apos;s very rarely a good idea to override a function like this with such similar types when the implementations do fairly different things. what&apos;s the story?
&gt; 
&gt; do we actually intend to support scrolling by non-integer amounts?

Based on offline discussion I&apos;ll change the layer scroll coordinates to be floating point instead.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:245
&gt;&gt; +    bool m_subtreeWasScrolled;
&gt; 
&gt; if i understand correctly, this is an optimization to avoid having to walk the full layer tree every commit to check for scrolls on sublayers, correct? would this be better done as a bit on the LTHI? this seems somewhat overdone for a small win

Yes, that&apos;s the idea. The problem with having the bit in the LTHI is that CCLayerImpl doesn&apos;t have a reference back to it (perhaps rightly so), so scrollBy() cannot go an flip that bit.

Perhaps this is a premature optimization, so I&apos;ll drop it for now and scan the whole layer tree instead.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:262
&gt;&gt; +    FloatSize m_scrollDeltaResidue;
&gt; 
&gt; what is the &apos;scroll delta residue&apos;?

It is the fractional part of the scroll offset, but with floating point coordinates I can get rid of it.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:485
&gt;&gt; +            m_client-&gt;applyRootLayerScrollAndScale(info.scrolls[i].scrollDelta, info.pageScaleDelta);
&gt; 
&gt; this logic makes me wonder if trying to be generic about scroll on the root layer is a mistake and if we should instead keep the root scroll + page scale delta separate from scrolls on sublayers

I see what you mean. For the root layer the scroll offset and the page scale delta are tightly coupled, whereas the sublayers only care about scroll offset. I&apos;ll try to separate the two concepts.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:335
&gt;&gt; +CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::beginScrollingInnermostLayerAtPoint(CCLayerImpl* layerImpl, const IntPoint&amp; windowPoint)
&gt; 
&gt; what does &quot;window&quot; mean in &quot;window point&quot;? we don&apos;t have a defined notion of a window in the compositor today. viewport, perhaps? is this scaled or unscaled?

It refers to the target space of CCLAyerImpl::screenSpaceTransform(). View coordinate sounds good to me. The page scale does not affect view coordinates, but you have to apply the inverse of the page scale when going from view to content coordinates.

&gt;&gt; Source/WebKit/chromium/public/platform/WebLayerTreeViewClient.h:48
&gt;&gt; +    virtual void applyLayerScroll(int layerId, const WebSize&amp; scrollDelta) = 0;
&gt; 
&gt; I don&apos;t think this makes sense on this interface - why would you talk about a sublayer through the WebLayerTreeViewClient instead of via that layer? How would you expect this API to be used?
&gt; 
&gt; We also do not (and should not) expose layer IDs via the public API.

Ah, I guess I picked the wrong path to feed back the scroll offsets to the main thread. I&apos;ll rework this use the individual layers instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520161</commentid>
    <comment_count>14</comment_count>
      <attachid>119032</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-13 10:30:55 -0800</bug_when>
    <thetext>Created attachment 119032
Chromium patch

- CCLayerImpl scroll delta is now floating point.
- Separated root and sublayer scroll deltas.
- Don&apos;t route sublayer scroll deltas back through WebViewImpl.
- Use viewport coordinates instead of window coordinates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520163</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 10:32:12 -0800</bug_when>
    <thetext>Attachment 119032 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:980:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:1028:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:132:  The parameter name &quot;layerImpl&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:426:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:486:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 5 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520174</commentid>
    <comment_count>16</comment_count>
      <attachid>119036</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-13 10:45:07 -0800</bug_when>
    <thetext>Created attachment 119036
Chromium patch

- Fixed style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520179</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 10:48:25 -0800</bug_when>
    <thetext>Attachment 119036 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:1027:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520185</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 10:50:20 -0800</bug_when>
    <thetext>Are y&apos;all using webkit-patch upload? That will tell you about style errors before you upload and save a lot of round-trips.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520216</commentid>
    <comment_count>19</comment_count>
      <attachid>119050</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-13 11:29:37 -0800</bug_when>
    <thetext>Created attachment 119050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520217</commentid>
    <comment_count>20</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-13 11:30:18 -0800</bug_when>
    <thetext>Ah, I somehow missed the fact that webkit-patch also works with git. Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520282</commentid>
    <comment_count>21</comment_count>
      <attachid>119065</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-13 12:23:32 -0800</bug_when>
    <thetext>Created attachment 119065
Patch

aelias pointed out that the scrolling logic can be simplified now that the coordinates are floating point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520299</commentid>
    <comment_count>22</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2011-12-13 12:52:44 -0800</bug_when>
    <thetext>Looking good, thanks.  One final concern: we should make sure that m_currentlyScrollingLayerImpl doesn&apos;t get into a bad state.

1. I&apos;d suggest adding m_currentlyScrollingLayerImpl.clear(); to the beginning of scrollBegin().  That way we&apos;re more robust to bugs in the caller like forgetting to call ScrollEnd.
2. It could be that m_currentlyScrollingLayerImpl goes away during a commit.  I guess we could validate that it&apos;s still present in the tree in commitComplete()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521245</commentid>
    <comment_count>23</comment_count>
      <attachid>119285</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-14 13:33:25 -0800</bug_when>
    <thetext>Created attachment 119285
Patch

- Check that the currently scrolling layer still exists after a commit.
- Always clear the currently scrolling layer in scrollBegin().
- Apply the page scale to the layer visible rect instead of the content point.
- Don&apos;t collect scroll deltas if pinch zooming or a page scale animation is in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521366</commentid>
    <comment_count>24</comment_count>
      <attachid>119285</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 15:34:52 -0800</bug_when>
    <thetext>Comment on attachment 119285
Patch

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

R- for several layering violations. I think a good place to start for this is to think about where the interface boundaries lie between the compositor and the thing that&apos;s scrolling, then go from there to figure out the proper interface boundaries.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:39
&gt; +#include &quot;Node.h&quot;

no no no, you can&apos;t depend on Node in here. This is in WebCore/platform so it can&apos;t depend on anything in WebCore outside of WebCore/platform.

are you sure you want to be talking about Nodes here anyway? there are things that aren&apos;t Nodes that need to scroll. are you perhaps looking for ScrollableArea? the fact that you are taking an actual reference here really scares me

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:32
&gt; +#include &quot;RenderBox.h&quot;

you can&apos;t use code from WebCore/rendering/ here (nor do i think you want to)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523081</commentid>
    <comment_count>25</comment_count>
      <attachid>119683</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-16 15:11:34 -0800</bug_when>
    <thetext>Created attachment 119683
Patch

- Reworked scroll delta feedback by extending CCLayerDelegate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524066</commentid>
    <comment_count>26</comment_count>
      <attachid>119683</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 11:37:57 -0800</bug_when>
    <thetext>Comment on attachment 119683
Patch

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

High level design looks good to me. Still going through the details, but here&apos;s some initial easy-to-resolve feedback.

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:699
&gt; +        m_scrollableArea-&gt;scroll(scrollDelta.width() &gt; 0 ? ScrollRight : ScrollLeft, ScrollByPixel, abs(scrollDelta.width()));
&gt; +    if (scrollDelta.height())
&gt; +        m_scrollableArea-&gt;scroll(scrollDelta.height() &gt; 0 ? ScrollDown : ScrollUp, ScrollByPixel, abs(scrollDelta.height()));

I&apos;m pretty sure you need to use the ..WithoutAnimation() variants here or WebKit will attempt to apply animation here, which doesn&apos;t make sense for scrolls initiated from the impl thread (which we&apos;ve presumably already animated in the appropriate way)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:32
&gt; +#include &quot;RenderBox.h&quot;

you don&apos;t actually need this include any more, do you? it&apos;s a layering violation

&gt; Source/WebKit/chromium/src/ChromeClientImpl.h:36
&gt; +#include &quot;GraphicsLayer.h&quot;

can GraphicsLayer be forward declared?

&gt; Source/WebKit/chromium/src/ChromeClientImpl.h:44
&gt; +class Node;

don&apos;t think you need this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524102</commentid>
    <comment_count>27</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-19 12:12:58 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 119683 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119683&amp;action=review
&gt; 
&gt; High level design looks good to me. Still going through the details, but here&apos;s some initial easy-to-resolve feedback.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:699
&gt; &gt; +        m_scrollableArea-&gt;scroll(scrollDelta.width() &gt; 0 ? ScrollRight : ScrollLeft, ScrollByPixel, abs(scrollDelta.width()));
&gt; &gt; +    if (scrollDelta.height())
&gt; &gt; +        m_scrollableArea-&gt;scroll(scrollDelta.height() &gt; 0 ? ScrollDown : ScrollUp, ScrollByPixel, abs(scrollDelta.height()));
&gt; 
&gt; I&apos;m pretty sure you need to use the ..WithoutAnimation() variants here or WebKit will attempt to apply animation here, which doesn&apos;t make sense for scrolls initiated from the impl thread (which we&apos;ve presumably already animated in the appropriate way)

Good point, scrollToOffsetWithoutAnimation() sounds like the right thing to do here.
 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:32
&gt; &gt; +#include &quot;RenderBox.h&quot;
&gt; 
&gt; you don&apos;t actually need this include any more, do you? it&apos;s a layering violation

No I don&apos;t. This was left over by mistake.
 
&gt; &gt; Source/WebKit/chromium/src/ChromeClientImpl.h:36
&gt; &gt; +#include &quot;GraphicsLayer.h&quot;
&gt; 
&gt; can GraphicsLayer be forward declared?

Indeed it can. I was using PlatformLayer here before which is a typedef and cannot be forward declared.

&gt; &gt; Source/WebKit/chromium/src/ChromeClientImpl.h:44
&gt; &gt; +class Node;
&gt; 
&gt; don&apos;t think you need this

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524103</commentid>
    <comment_count>28</comment_count>
      <attachid>119898</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-19 12:14:09 -0800</bug_when>
    <thetext>Created attachment 119898
Patch

- Use scrollToOffsetWithout animation to avoid WebKit-side scroll animations.
- Remove useless includes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524250</commentid>
    <comment_count>29</comment_count>
      <attachid>119898</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 16:06:06 -0800</bug_when>
    <thetext>Comment on attachment 119898
Patch

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

R=me, but I&apos;d appreciate it if you let aelias@ take a pass over the page scale apply/unapply logic to make sure it&apos;s all consistent.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:626
&gt; +    bool didMove = m_scrollLayerImpl &amp;&amp; (didScrollSubtree(m_scrollLayerImpl.get()) || m_pageScaleDelta != 1.0f);

webkit style nit: the comparison should be written as &quot;m_pageScaleDelta != 1&quot;, without the &quot;.0f&quot; qualifier.

&gt; Source/WebKit/chromium/src/ChromeClientImpl.cpp:68
&gt; +#include &quot;RenderLayer.h&quot;

pretty sure you don&apos;t need this #include any more now either (it isn&apos;t wrong in terms of code layering, just unnecessary)

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:172
&gt; +    RefPtr&lt;CCLayerImpl&gt; root = CCLayerImpl::create(0);
&gt; +    root-&gt;setScrollable(false);
&gt; +    RefPtr&lt;CCLayerImpl&gt; child = CCLayerImpl::create(0);

nit: i think it&apos;s generally a bad idea to construct CCLayerImpls with overlapping IDs in tests since we maintain the invariant that we never reuse IDs in the normal code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524264</commentid>
    <comment_count>30</comment_count>
      <attachid>119898</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 16:17:12 -0800</bug_when>
    <thetext>Comment on attachment 119898
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:477
&gt; +CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::beginScrollingInnermostLayerAtPoint(CCLayerImpl* layerImpl, const IntPoint&amp; viewportPoint)

sorry to reverse myself earlier here but now that I think about this more I don&apos;t think this is right. just finding the first most-nested layer is not going to find what the user really wants, especially if the tree order doesn&apos;t match the z-order very well

instead of iterating through the layer tree in tree order, you really need to walk in z-order here by going through the CCRenderSurface list

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:488
&gt; +    IntPoint contentPoint(layerImpl-&gt;screenSpaceTransform().inverse().mapPoint(viewportPoint));

if the layer&apos;s screenSpaceTransform is not invertible, inverse() will return an identity transform which will probably _not_ do what you expect here. if the screenSpaceTransform is not invertible we probably do not want to let it scroll, since that means that some dimension got mapped to zero and the layer isn&apos;t actually visible

also do you need to consider layer backfaces here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524288</commentid>
    <comment_count>31</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2011-12-19 16:43:37 -0800</bug_when>
    <thetext>LGTM on the page scale logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524767</commentid>
    <comment_count>32</comment_count>
      <attachid>120063</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-20 12:53:57 -0800</bug_when>
    <thetext>Created attachment 120063
Patch

- Find scrollable layer in reverse painting order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524769</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-20 13:01:05 -0800</bug_when>
    <thetext>Lots of merge conflicts on this, would you mind rebasing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524774</commentid>
    <comment_count>34</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-20 13:05:56 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=119898&amp;action=review

Thanks for taking a look. The layer walking order should indeed be corrected since the user may get some unexpected results. The latest version of the patch fixes this.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:477
&gt;&gt; +CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::beginScrollingInnermostLayerAtPoint(CCLayerImpl* layerImpl, const IntPoint&amp; viewportPoint)
&gt; 
&gt; sorry to reverse myself earlier here but now that I think about this more I don&apos;t think this is right. just finding the first most-nested layer is not going to find what the user really wants, especially if the tree order doesn&apos;t match the z-order very well
&gt; 
&gt; instead of iterating through the layer tree in tree order, you really need to walk in z-order here by going through the CCRenderSurface list

Good catch. I&apos;ll rework this to walk the layers in reverse z-order so we scroll what the user actually sees.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:488
&gt;&gt; +    IntPoint contentPoint(layerImpl-&gt;screenSpaceTransform().inverse().mapPoint(viewportPoint));
&gt; 
&gt; if the layer&apos;s screenSpaceTransform is not invertible, inverse() will return an identity transform which will probably _not_ do what you expect here. if the screenSpaceTransform is not invertible we probably do not want to let it scroll, since that means that some dimension got mapped to zero and the layer isn&apos;t actually visible
&gt; 
&gt; also do you need to consider layer backfaces here?

I&apos;ve added a check against non-invertible transforms. The latest revision of the patch is walking the list of render surface layers which does not include single sided backfacing layers. Double sided backfacing layers I think we should just scroll normally.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:626
&gt;&gt; +    bool didMove = m_scrollLayerImpl &amp;&amp; (didScrollSubtree(m_scrollLayerImpl.get()) || m_pageScaleDelta != 1.0f);
&gt; 
&gt; webkit style nit: the comparison should be written as &quot;m_pageScaleDelta != 1&quot;, without the &quot;.0f&quot; qualifier.

Done.

&gt;&gt; Source/WebKit/chromium/src/ChromeClientImpl.cpp:68
&gt;&gt; +#include &quot;RenderLayer.h&quot;
&gt; 
&gt; pretty sure you don&apos;t need this #include any more now either (it isn&apos;t wrong in terms of code layering, just unnecessary)

Done.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:172
&gt;&gt; +    RefPtr&lt;CCLayerImpl&gt; child = CCLayerImpl::create(0);
&gt; 
&gt; nit: i think it&apos;s generally a bad idea to construct CCLayerImpls with overlapping IDs in tests since we maintain the invariant that we never reuse IDs in the normal code.

Looks like I confused the ID with LayerChromium&apos;s delegate pointer. I&apos;ll replace these with unique numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524786</commentid>
    <comment_count>35</comment_count>
      <attachid>120067</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2011-12-20 13:22:48 -0800</bug_when>
    <thetext>Created attachment 120067
Patch

 - Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525063</commentid>
    <comment_count>36</comment_count>
      <attachid>120067</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-20 20:15:33 -0800</bug_when>
    <thetext>Comment on attachment 120067
Patch

Looks good, R=me.

This looks like a really good use case for the layer tree iterators underway here: https://bugs.webkit.org/show_bug.cgi?id=74203.  Sami, when you get a chance could you add some unit tests for the hit testing order in various cases (no render surfaces, render surfaces that overlap, backface of single-sided, etc) so that we can transition the collect*Layers() logic over to using iterators with confidence that we aren&apos;t regressing behavior?

Set cq? when this is ready to land and myself or any committer can mark it cq+.  I&apos;m not sure if there are conflicts or overlaps with other patches, so I&apos;m not setting it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525064</commentid>
    <comment_count>37</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-20 20:16:03 -0800</bug_when>
    <thetext>+cc Dana as this looks like some code that could use these iterators: https://bugs.webkit.org/show_bug.cgi?id=74203</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532344</commentid>
    <comment_count>38</comment_count>
      <attachid>121696</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-01-09 11:16:43 -0800</bug_when>
    <thetext>Created attachment 121696
Patch

Thanks James. Here&apos;s a rebased patch with the following additional changes:
- Move added methods in ChromeClientImpl.h inside USE(ACCELERATED_COMPOSITING)
- LayerChromium::setMaxScrollPosition() now triggers commit
- Reset currently scrolling layer if the root layer goes away in CCLayerTreeHostImpl::setRootLayer()

I&apos;ll follow up with more test coverage for the cases you mentioned in a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532442</commentid>
    <comment_count>39</comment_count>
      <attachid>121696</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 12:58:07 -0800</bug_when>
    <thetext>Comment on attachment 121696
Patch

Attachment 121696 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11186608</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533152</commentid>
    <comment_count>40</comment_count>
      <attachid>121861</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-01-10 09:56:29 -0800</bug_when>
    <thetext>Created attachment 121861
Patch

 - Fixed EWS build failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533968</commentid>
    <comment_count>41</comment_count>
      <attachid>122041</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-01-11 09:47:14 -0800</bug_when>
    <thetext>Created attachment 122041
Patch

 - Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534781</commentid>
    <comment_count>42</comment_count>
      <attachid>122229</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-01-12 06:24:58 -0800</bug_when>
    <thetext>Created attachment 122229
Patch

 - Rebased.
 - Check whether scrollable layer still exists in CCLayerTreeHostImpl::setRootLayer() instead as walking up CCLayerImpl::parent() pointers is not safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539023</commentid>
    <comment_count>43</comment_count>
      <attachid>122229</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-19 14:13:45 -0800</bug_when>
    <thetext>Comment on attachment 122229
Patch

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

Overall I think this is nearly ready to go. I think we need to wait for https://bugs.webkit.org/show_bug.cgi?id=76663 to land to clean up the delegate stuff, and I&apos;m hoping that the layer iterators can clean up some of the iteration logic. Otherwise we should be good to go.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:63
&gt; +    virtual void scrollBy(const IntSize&amp; scrollDelta) = 0;

I&apos;d really prefer that you not grow the interface required for every LayerChromium.  In https://bugs.webkit.org/show_bug.cgi?id=76663 i&apos;m getting rid of CCLayerDelegate and moving the paintContents() down to ContentLayerChromium. I think you can do the same thing with scrollBy(), the only layers that we actually support scrolling are GraphicsLayerChromium::m_layer&apos;s, right? That way you won&apos;t have to provide empty implementations in so many classes (like WebLayerImpl) where scrollBy() makes no sense

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:141
&gt; +    static void collectLayersInPaintOrder(CCLayerList&amp;, CCRenderSurface*);
&gt; +    static void collectNonDrawingScrollableLayers(CCLayerList&amp;, CCLayerImpl*);
&gt; +    static void collectAllLayers(CCLayerList&amp;, CCLayerImpl*);

now that layer iterators have landed (http://trac.webkit.org/changeset/104626) can we use those instead of adding a set of new utility functions?

if we do need these, please separate the static functions from the member functions and add some documentation of what they do

&gt; Source/WebKit/chromium/src/ChromeClientImpl.cpp:877
&gt; +    PlatformLayer* platformLayer = layer-&gt;platformLayer();

since we&apos;re in chromium specific code here the PlatformLayer typedef is unnecessary abstraction here - just use LayerChromium here

&gt; Source/WebKit/chromium/src/ChromeClientImpl.cpp:888
&gt; +    PlatformLayer* platformLayer = layer-&gt;platformLayer();

same here re: using LayerChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544501</commentid>
    <comment_count>44</comment_count>
      <attachid>124395</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-01-27 16:28:07 -0800</bug_when>
    <thetext>Created attachment 124395
Patch

 - Remove custom iterators in favor of layer iterators.
 - Move scrollBy() from LayerChromium to ContentLayerChromium.
 - Use LayerChromium instead of PlatformLayer in ChromeClientImpl.
 - The inverse screen space transform for a non-composited content layer does not introduce page scale, so no need to undo it in isContentPointWithinLayer().
 - Add new tests for hit testing against a backfacing layer and a normal or non-composited layer with page scaling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550021</commentid>
    <comment_count>45</comment_count>
      <attachid>125653</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-02-06 08:28:01 -0800</bug_when>
    <thetext>Created attachment 125653
Patch

- Rebased.
- Scroll non-composited content layer via the outer scroll layer like before. The latter is not drawn so the iterator was skipping it. Added test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553177</commentid>
    <comment_count>46</comment_count>
      <attachid>126307</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-02-09 07:59:41 -0800</bug_when>
    <thetext>Created attachment 126307
Patch

- Cosmetic changes based on downstream review -- mainly renamed ContentLayerDelegate::scrollBy() =&gt; wasScrolled()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557548</commentid>
    <comment_count>47</comment_count>
      <attachid>126307</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-15 14:26:21 -0800</bug_when>
    <thetext>Comment on attachment 126307
Patch

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

I like this patch and would like to see it move forward, but I think we&apos;ll want to adjust the ScrollableArea-related hookups a bit (see https://bugs.webkit.org/show_bug.cgi?id=78401).  Would you mind splitting those bits out of this patch?

Also it seems that we&apos;re going to need to propagate more information about the scroll down through the CCInputHandler if we want to be maximally efficient - for instance, if one layer in the page listens to wheel events we need to know that we can&apos;t accept scrolls if they are initiated by mouse wheel events *and* we hit test in that layer.  We can address this separately if we need to.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:50
&gt; +    virtual void wasScrolled(const IntSize&amp;) = 0;

our naming convention for these sorts of calls is either &quot;willXXX&quot; or &quot;didXXX&quot; - think this is a &quot;didXXX&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:622
&gt; +            static_cast&lt;ContentLayerChromium*&gt;(layer)-&gt;scrollBy(info.scrolls[i].scrollDelta);

rather than downcast can we make this virtual on LayerChromium with a no-op impl for the base class?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:203
&gt; +    // During testing we may not have an active renderer.
&gt; +    const int kDefaultMaxTextureSize = 256;

i would much rather fix tests rather than adding production code to deal with this case. it&apos;s very easy to instantiate a real LRC in unit tests today. if that&apos;s not an option in this case then we could do something like mock out capabilities</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557935</commentid>
    <comment_count>48</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-02-15 23:18:52 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; (From update of attachment 126307 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126307&amp;action=review
&gt; 
&gt; I like this patch and would like to see it move forward, but I think we&apos;ll want to adjust the ScrollableArea-related hookups a bit (see https://bugs.webkit.org/show_bug.cgi?id=78401).  Would you mind splitting those bits out of this patch?

Yeah, we&apos;ll need to integrate that with the scroll coordinator.
 
&gt; Also it seems that we&apos;re going to need to propagate more information about the scroll down through the CCInputHandler if we want to be maximally efficient - for instance, if one layer in the page listens to wheel events we need to know that we can&apos;t accept scrolls if they are initiated by mouse wheel events *and* we hit test in that layer.  We can address this separately if we need to.

This sounds like it could be folded into 74196.

&gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:50
&gt; &gt; +    virtual void wasScrolled(const IntSize&amp;) = 0;
&gt; 
&gt; our naming convention for these sorts of calls is either &quot;willXXX&quot; or &quot;didXXX&quot; - think this is a &quot;didXXX&quot;

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:622
&gt; &gt; +            static_cast&lt;ContentLayerChromium*&gt;(layer)-&gt;scrollBy(info.scrolls[i].scrollDelta);
&gt; 
&gt; rather than downcast can we make this virtual on LayerChromium with a no-op impl for the base class?

Yes, that&apos;s much safer.
 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:203
&gt; &gt; +    // During testing we may not have an active renderer.
&gt; &gt; +    const int kDefaultMaxTextureSize = 256;
&gt; 
&gt; i would much rather fix tests rather than adding production code to deal with this case. it&apos;s very easy to instantiate a real LRC in unit tests today. if that&apos;s not an option in this case then we could do something like mock out capabilities

Agreed. Turns out it&apos;s not very difficult to have an LRC in all the relevant tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557936</commentid>
    <comment_count>49</comment_count>
      <attachid>127318</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-02-15 23:23:11 -0800</bug_when>
    <thetext>Created attachment 127318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561481</commentid>
    <comment_count>50</comment_count>
      <attachid>127318</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-21 19:04:57 -0800</bug_when>
    <thetext>Comment on attachment 127318
Patch

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

I think this looks pretty great.  I think that we might want to tweak the way we sync changes back from LayerChromium-&gt;GraphicsLayer-&gt;beyond, but I think we should move forward with the rest of this code first.

I would suggest that you first break out the Int-&gt;Float change for scrollDeltas into a separate patch, since I think that&apos;s pretty separable and would be generally pretty useful, and take out the GraphicsLayerChromium stuff from this patch (just leave a stub for didScroll).

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:62
&gt; +    bool isLayerInDescendants(int layerId) const;

this doesn&apos;t appear to consider mask and reflection layers at all. for scrolling, i believe that&apos;s right, but as a generic function this might surprised some callers. can you update the function name and/or documentation (ideally both) describing exactly what this does?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:58
&gt; +    IntSize rootScrollDelta;

why does this have to be separate and not simply an entry in &apos;scrolls&apos;?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:191
&gt; +void CCLayerTreeHostImpl::calculateRenderSurfaces(CCLayerList&amp; renderSurfaceLayerList)

this looks like a bad merge - did you mean to change this?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:478
&gt; +CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::beginScrollingLayer(CCLayerImpl* layerImpl, const IntPoint&amp; viewportPoint)

it feels like most of this belongs on CCLayerImpl and the host can take care of setting m_currentlyScrollingLayerImpl if appropriate.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:507
&gt; +    CCLayerList renderSurfaceLayerList;
&gt; +    calculateRenderSurfaces(renderSurfaceLayerList);

yuck yuck! we should definitely not need to recalculate all our transforms, etc on every scrollBegin. Just use the transforms from the most recent frame.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:513
&gt; +        // A non-composited content layer should be scrolled via the root scroll layer.
&gt; +        if (layerImpl-&gt;isNonCompositedContent())

this feels fishy. in general, we need to support scrolling a layer that isn&apos;t the content in order to be able to scroll any FrameViews, not just the NCCH.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:538
&gt; +            // Since scrollDelta is in window coordinates, it already has the page scale applied.
&gt; +            // This matches what the root scroll layer expects, but child layers are scrolled using
&gt; +            // unscaled content coordinates instead, so we have to undo the scaling for them. The
&gt; +            // page scale delta needs to be unapplied with both layer types since the scroll
&gt; +            // coordinates do not respect it.

this is really hard to maintain. it&apos;s a bit beyond this patch, but can we normalize the scales somewhere else (LayerChromium? GraphicsLayerChromium?) and not have to deal with it throughout the compositor code?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:642
&gt; +    bool didMove = m_scrollLayerImpl &amp;&amp; (didScrollSubtree(m_scrollLayerImpl.get()) || m_pageScaleDelta != 1);

we&apos;re doing a recursive walk through layers here to check if anything has a scrollDelta...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:648
&gt; +    collectScrollDeltas(scrollInfo.get(), m_scrollLayerImpl.get());

and then we do another walk here. seems unnecessary - can&apos;t we just do one walk and if we don&apos;t have any scroll deltas just send an empty scrollInfo over?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:179
&gt; +    initializeLayerRenderer();

would you mind converting the other CCLayerTreeHostImplTest tests that initialize the layer renderer to using this helper as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589973</commentid>
    <comment_count>51</comment_count>
      <attachid>127318</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-28 08:11:30 -0700</bug_when>
    <thetext>Comment on attachment 127318
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:62
&gt;&gt; +    bool isLayerInDescendants(int layerId) const;
&gt; 
&gt; this doesn&apos;t appear to consider mask and reflection layers at all. for scrolling, i believe that&apos;s right, but as a generic function this might surprised some callers. can you update the function name and/or documentation (ideally both) describing exactly what this does?

Right. I&apos;ve now made the function consider mask and replicated layers, renamed it function and added some documentation.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:58
&gt;&gt; +    IntSize rootScrollDelta;
&gt; 
&gt; why does this have to be separate and not simply an entry in &apos;scrolls&apos;?

This used to be separate because of how the root scroll and page scale deltas were paired, but now all the scroll deltas are in &apos;scrolls&apos;.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:191
&gt;&gt; +void CCLayerTreeHostImpl::calculateRenderSurfaces(CCLayerList&amp; renderSurfaceLayerList)
&gt; 
&gt; this looks like a bad merge - did you mean to change this?

It was intentional in the old version of the patch where scrollBegin() recalculated the layer geometry, but it&apos;s not needed any longer.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:478
&gt;&gt; +CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::beginScrollingLayer(CCLayerImpl* layerImpl, const IntPoint&amp; viewportPoint)
&gt; 
&gt; it feels like most of this belongs on CCLayerImpl and the host can take care of setting m_currentlyScrollingLayerImpl if appropriate.

Agreed, I&apos;ve now moved this logic there.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:507
&gt;&gt; +    calculateRenderSurfaces(renderSurfaceLayerList);
&gt; 
&gt; yuck yuck! we should definitely not need to recalculate all our transforms, etc on every scrollBegin. Just use the transforms from the most recent frame.

The reason I opted for this approach earlier was that otherwise you couldn&apos;t scroll without having rendered first. From the user&apos;s point of view this makes sense since they need to see what they are pointing at, but from a scene graph point of view it felt like a weird restriction.

I&apos;ve now changed the code to save a list of visible layers from the most recent frame and use that for hit testing. There&apos;s a subtle edge case where we can get input events after tree synchronization but before prepareToDraw() was called. For this reason the visible layer list uses soft references to be able to persist across tree synchronizations.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:513
&gt;&gt; +        if (layerImpl-&gt;isNonCompositedContent())
&gt; 
&gt; this feels fishy. in general, we need to support scrolling a layer that isn&apos;t the content in order to be able to scroll any FrameViews, not just the NCCH.

Yeah, I&apos;ve now replaced this with a generic helper function that should cover all needed scroll/content layer configurations.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:538
&gt;&gt; +            // coordinates do not respect it.
&gt; 
&gt; this is really hard to maintain. it&apos;s a bit beyond this patch, but can we normalize the scales somewhere else (LayerChromium? GraphicsLayerChromium?) and not have to deal with it throughout the compositor code?

Yeah, this kind of code gives me nightmares. The latest revision now expects the ScrollingCoordinator interfacing code (TBD) to normalize the scroll positions and ranges so that every layer uses scaled coordinates. I&apos;ve also dropped the scale fudging for layer hit detection and nonFastScrollableRegion(), so that stuff will also need to be fixed when the data is pushed to the impl side. So, the patch is no longer correct in terms of page scale, but we&apos;ll fix that in further installments.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:648
&gt;&gt; +    collectScrollDeltas(scrollInfo.get(), m_scrollLayerImpl.get());
&gt; 
&gt; and then we do another walk here. seems unnecessary - can&apos;t we just do one walk and if we don&apos;t have any scroll deltas just send an empty scrollInfo over?

I think I did it this way because collecting the scroll deltas also reset the sent deltas and that interfered with the pinch and scale animations. In the latest version we only need to do one walk since the pinch and scale animations synthesize their own scroll events.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:179
&gt;&gt; +    initializeLayerRenderer();
&gt; 
&gt; would you mind converting the other CCLayerTreeHostImplTest tests that initialize the layer renderer to using this helper as well?

This helper is now initializeLayerRendererAndDrawFrame(), and I&apos;ve changed existing tests to use it where it made sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589989</commentid>
    <comment_count>52</comment_count>
      <attachid>134303</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-28 08:42:54 -0700</bug_when>
    <thetext>Created attachment 134303
Patch

- Removed page scaling hacks from this patch; let&apos;s normalize the coordinates further upstream instead.
- Avoid recalculating layer transforms on scrollBegin().
- Removed some assumptions about scroll layer hierarchy.
- Avoid traversing tree twice when calculating scroll deltas.
- Removed ScrollableArea bits.
- Added several tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590010</commentid>
    <comment_count>53</comment_count>
      <attachid>134303</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-28 09:06:51 -0700</bug_when>
    <thetext>Comment on attachment 134303
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:628
&gt; +    if (layer-&gt;id() == id)
&gt; +        return layer;
&gt; +
&gt; +    for (size_t i = 0; i &lt; layer-&gt;children().size(); ++i) {
&gt; +        LayerChromium* found = findLayerById(layer-&gt;children()[i].get(), id);
&gt; +        if (found)
&gt; +            return found;
&gt; +    }
&gt; +
&gt; +    return 0;

bikeshed: Why not just return layer-&gt;findLayerInSubtree(id)? Is this to avoid the masks/replicas of the topmost layer in the search? Or just call layer-&gt;findLayerInSubtree() directly, with an earlyout if m_rootLayer == NULL?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:656
&gt; +    for (size_t i = 0; i &lt; info.scrolls.size(); ++i) {
&gt; +        LayerChromium* layer = findLayerById(m_rootLayer.get(), info.scrolls[i].layerId);
&gt; +        if (!layer)
&gt; +            continue;

If m_rootLayer == null, this will loop through the whole array continuing each time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590067</commentid>
    <comment_count>54</comment_count>
      <attachid>134303</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-28 10:02:22 -0700</bug_when>
    <thetext>Comment on attachment 134303
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:628
&gt;&gt; +    return 0;
&gt; 
&gt; bikeshed: Why not just return layer-&gt;findLayerInSubtree(id)? Is this to avoid the masks/replicas of the topmost layer in the search? Or just call layer-&gt;findLayerInSubtree() directly, with an earlyout if m_rootLayer == NULL?

findLayerInSubtree() is in CCLayerImpl, while we are searching through the LayerChromium tree here. I suppose I could&apos;ve added the same helper in LayerChromium too for symmetry, but I didn&apos;t do it as this code is used in just one place. Also, the operation is O(N) and people might be more tempted to use if it was part of the class :) I can still do that if you prefer.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:656
&gt;&gt; +            continue;
&gt; 
&gt; If m_rootLayer == null, this will loop through the whole array continuing each time?

That&apos;s right. Are you suggesting an early out for that case? Usually when we do not have a root layer we should not see any scroll deltas from the impl thread either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590667</commentid>
    <comment_count>55</comment_count>
      <attachid>134303</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-28 17:44:23 -0700</bug_when>
    <thetext>Comment on attachment 134303
Patch

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

Can you walk me through the data flow here? Scrolling a layer sets its scroll delta.  The scroll delta is used temporarily on the impl thread to affect the position of a layer.  It&apos;s then synced back and merged into the scroll position on the main thread which...does what? For the root layer, we call out to FrameView, scroll the frame, and then update layer positions.  I think you&apos;re going to have to do the same thing here--scrolling a non-root layer on the main thread actually adjusts the layer position (GraphicsLayer::position).  You&apos;re also going to have to figure out how to get the correct maximum scroll for non-root layers and set layers as properly being scrollable.

Also, can you hook this up more so that some non-example page can be tested locally? I feel like that would help to clear this up immensely.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:147
&gt; +void ContentLayerChromium::scrollBy(const IntSize&amp; scrollDelta)

Only content layers get to scroll?

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:151
&gt; +    if (m_delegate)
&gt; +        m_delegate-&gt;didScroll(scrollDelta);

This delegate needs to do something real.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:389
&gt; +void LayerChromium::setMaxScrollPosition(const IntSize&amp; maxScrollPosition)
&gt; +{
&gt; +    if (m_maxScrollPosition == maxScrollPosition)
&gt; +        return;
&gt; +    m_maxScrollPosition = maxScrollPosition;
&gt; +    setNeedsCommit();
&gt; +}

You need to set this from somewhere other than tests.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:675
&gt; +        if (layerImpl-&gt;tryScroll(viewportPoint, type) == ScrollFailed &amp;&amp; false)

...?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:686
&gt; +        // If any layer wants to divert the scroll event to the main thread, abort.
&gt; +        if (status == ScrollFailed)
&gt; +            return ScrollFailed;

I don&apos;t follow this.  If I have a scrollable child layer contained within a non-fast scrollable parent layer, this code appears to not scroll the child layer, because the parent layer will bail out? Is this because you don&apos;t want to partially scroll one layer and then have to transfer it to a non-fast layer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591013</commentid>
    <comment_count>56</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-29 03:38:52 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; (From update of attachment 134303 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134303&amp;action=review
&gt; 
&gt; Can you walk me through the data flow here? Scrolling a layer sets its scroll delta.  The scroll delta is used temporarily on the impl thread to affect the position of a layer.  It&apos;s then synced back and merged into the scroll position on the main thread which...does what? For the root layer, we call out to FrameView, scroll the frame, and then update layer positions.  I think you&apos;re going to have to do the same thing here--scrolling a non-root layer on the main thread actually adjusts the layer position (GraphicsLayer::position).  You&apos;re also going to have to figure out how to get the correct maximum scroll for non-root layers and set layers as properly being scrollable.
&gt; 
&gt; Also, can you hook this up more so that some non-example page can be tested locally? I feel like that would help to clear this up immensely.

I&apos;m sorry, I can see how this can be confusing. This particular patch only implements the necessary bits on the impl side to allow layer scrolling to happen. Setting up the proper layer metadata as well as feeding back the scroll deltas to the objects on the main thread is the subject of an upcoming patch, which is why those parts are stubbed out here.

Unfortunately without those bits you can&apos;t really test this stuff in practice. I&apos;m working on the main thread patch and can give you a hacky preview if you&apos;d like.

Comment 50 also touches on this.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:147
&gt;&gt; +void ContentLayerChromium::scrollBy(const IntSize&amp; scrollDelta)
&gt; 
&gt; Only content layers get to scroll?

For now, yes. Please see comment 43. I admit I haven&apos;t given much though to scrolling other layer types -- do other layer types even have the concept of overflow? I guess an image layer could, but at least canvas, WebGL and video seem to get squashed to the available content box.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:675
&gt;&gt; +        if (layerImpl-&gt;tryScroll(viewportPoint, type) == ScrollFailed &amp;&amp; false)
&gt; 
&gt; ...?

*facepalm* Gah, I&apos;ve fixed this and added a test to actually exercise the condition. Apologies.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:686
&gt;&gt; +            return ScrollFailed;
&gt; 
&gt; I don&apos;t follow this.  If I have a scrollable child layer contained within a non-fast scrollable parent layer, this code appears to not scroll the child layer, because the parent layer will bail out? Is this because you don&apos;t want to partially scroll one layer and then have to transfer it to a non-fast layer?

Yes, that&apos;s right. The code in scrollBy() walks up the layer hierarchy while scrolling, and currently we can&apos;t transition from a fast scroll to a slow scroll. Now that we have the nonFastScrollableRegion logic in place, I don&apos;t think this case happens often enough to justify the effort in making the fast-&gt;slow transition work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591017</commentid>
    <comment_count>57</comment_count>
      <attachid>134541</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-29 03:52:10 -0700</bug_when>
    <thetext>Created attachment 134541
Patch

- Removed debugging code left in by mistake and added test (scrollBlockedByContentLayer)
- Prioritize ScrollFailed over ScrollIgnored in CCLayerImpl::tryScroll.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591256</commentid>
    <comment_count>58</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-29 09:45:26 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (In reply to comment #55)
&gt; &gt; (From update of attachment 134303 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134303&amp;action=review
&gt; 
&gt; Unfortunately without those bits you can&apos;t really test this stuff in practice. I&apos;m working on the main thread patch and can give you a hacky preview if you&apos;d like.
&gt; 
&gt; Comment 50 also touches on this.

Ack, sorry for the noise.  I read through this giant thread again, but I missed that part.

&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:147
&gt; &gt;&gt; +void ContentLayerChromium::scrollBy(const IntSize&amp; scrollDelta)
&gt; &gt; 
&gt; &gt; Only content layers get to scroll?
&gt; 
&gt; For now, yes. Please see comment 43. I admit I haven&apos;t given much though to scrolling other layer types -- do other layer types even have the concept of overflow? I guess an image layer could, but at least canvas, WebGL and video seem to get squashed to the available content box.

I see.  This is in the context of GTFO.

&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:686
&gt; &gt;&gt; +            return ScrollFailed;
&gt; &gt; 
&gt; &gt; I don&apos;t follow this.  If I have a scrollable child layer contained within a non-fast scrollable parent layer, this code appears to not scroll the child layer, because the parent layer will bail out? Is this because you don&apos;t want to partially scroll one layer and then have to transfer it to a non-fast layer?
&gt; 
&gt; Yes, that&apos;s right. The code in scrollBy() walks up the layer hierarchy while scrolling, and currently we can&apos;t transition from a fast scroll to a slow scroll. Now that we have the nonFastScrollableRegion logic in place, I don&apos;t think this case happens often enough to justify the effort in making the fast-&gt;slow transition work.

Ok, thanks for the explanation.  If it ends up blocking fast scrolls more often than we want, there can always be a follow-up patch.

(In reply to comment #57)
&gt;
&gt; - Prioritize ScrollFailed over ScrollIgnored in CCLayerImpl::tryScroll.

With respect to this change, can you leave some comments about the relationship between scrollable() and shouldScrollOnMainThread() in the header or in tryScroll? It seems like they are independent from looking at the code, but it&apos;s not very obvious from their names why shouldScrollOnMainThread() could be true when scrollable() is false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591371</commentid>
    <comment_count>59</comment_count>
      <attachid>134627</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-29 11:33:02 -0700</bug_when>
    <thetext>Created attachment 134627
Patch

- Added comment describing logic in CCLayerImpl::tryScroll.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600020</commentid>
    <comment_count>60</comment_count>
      <attachid>134627</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-10 21:51:37 -0700</bug_when>
    <thetext>Comment on attachment 134627
Patch

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

Sorry for the long delay in getting back to this.  Some high-level comments:

Syncing offsets back into WebCore is something to consider, but I don&apos;t think we need to do it here and I honestly don&apos;t think it&apos;ll be that difficult.  We&apos;re trying to get back to some scrollable thing.  The GraphicsLayerClient implementations are:

- NonCompositedContentHost - scrolls via WebViewImpl
- RenderLayerCompositor - associated with a FrameView, which is a ScrollableArea
- RenderLayerBacking - associated with a RenderLayer, which is a ScrollableArea

but we can deal with that later.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:614
&gt; +static LayerChromium* findLayerById(LayerChromium* layer, int id)

why does this function skip mask/replica layers? that may make sense in the context of this caller but it&apos;s not clear from the name

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:373
&gt; +void CCLayerTreeHostImpl::calculateVisibleLayers(CCLayerTreeHostImpl::FrameData&amp; frame, CCLayerGeometryList&amp; visibleLayers)

I&apos;m not sure I understand why this intermediate representation is useful

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:520
&gt; +    if (m_currentlyScrollingLayerImpl) {
&gt; +        if (!m_rootLayerImpl || !m_rootLayerImpl-&gt;findLayerInSubtree(m_currentlyScrollingLayerImpl-&gt;id()))

webkit style would prefer a few early returns here instead of nested if()s. the second is a bit hard to read and the extra nesting level isn&apos;t helping much

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:721
&gt; +    for (CCLayerImpl* layerImpl = m_currentlyScrollingLayerImpl; layerImpl &amp;&amp; !pendingDelta.isZero(); layerImpl = layerImpl-&gt;parent()) {

For wheel scrolls we need to stop the scroll as soon as we move the target layer at all.  IOW, if we get a scrollBy(50) and the scroll target has 30px left of scrollable area, then the desired behavior is to scroll that layer by 30px and do nothing else.  This is so you can scroll content to the end of a scrollable area without moving it.

Touch is definitely different, so we need to map the scroll type into this function somehow.  Perhaps we could track the scroll type between the scrollBegin / scrollEnd calls?  The sequence for wheel is always a scrollBegin(), exactly one scrollBy(), then a scrollEnd().

we should also have test coverage for this (currently since only the root is scrollable there&apos;s no way to scroll past the end, so it hasn&apos;t come up)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:207
&gt; +    // List of visible layers in the most recent frame in front-to-back order.

I don&apos;t understand why we are keeping this list instead of retaining the last frame&apos;s CCLayerList, since we have to calculate the latter anyway.  Why not just keep that and iterate front-to-back?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600193</commentid>
    <comment_count>61</comment_count>
      <attachid>134627</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-11 04:18:48 -0700</bug_when>
    <thetext>Comment on attachment 134627
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:614
&gt;&gt; +static LayerChromium* findLayerById(LayerChromium* layer, int id)
&gt; 
&gt; why does this function skip mask/replica layers? that may make sense in the context of this caller but it&apos;s not clear from the name

Agreed, I&apos;ll have it walk through all the layers in the tree.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:520
&gt;&gt; +        if (!m_rootLayerImpl || !m_rootLayerImpl-&gt;findLayerInSubtree(m_currentlyScrollingLayerImpl-&gt;id()))
&gt; 
&gt; webkit style would prefer a few early returns here instead of nested if()s. the second is a bit hard to read and the extra nesting level isn&apos;t helping much

Sure, I&apos;ll clean this up.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:721
&gt;&gt; +    for (CCLayerImpl* layerImpl = m_currentlyScrollingLayerImpl; layerImpl &amp;&amp; !pendingDelta.isZero(); layerImpl = layerImpl-&gt;parent()) {
&gt; 
&gt; For wheel scrolls we need to stop the scroll as soon as we move the target layer at all.  IOW, if we get a scrollBy(50) and the scroll target has 30px left of scrollable area, then the desired behavior is to scroll that layer by 30px and do nothing else.  This is so you can scroll content to the end of a scrollable area without moving it.
&gt; 
&gt; Touch is definitely different, so we need to map the scroll type into this function somehow.  Perhaps we could track the scroll type between the scrollBegin / scrollEnd calls?  The sequence for wheel is always a scrollBegin(), exactly one scrollBy(), then a scrollEnd().
&gt; 
&gt; we should also have test coverage for this (currently since only the root is scrollable there&apos;s no way to scroll past the end, so it hasn&apos;t come up)

Right now this function works like you described for wheel events -- assuming the wheel scrolls only on one axis. There&apos;s also a test (CCLayerTreeHostImplTest::scrollChildBeyondLimit).

As you said, touch is different in that you might have multiple scrollBys in a single scroll transaction. However, I think the snap-to-end behavior also makes sense for touch events, because it makes it easier to exactly reach the end of a scrollable region both when flinging or finger-dragging. Further calls to scrollBy() will start moving an ancestor layer, if any, so if you keep moving your finger, things will respond as you would expect.

So, I think the current code covers your requirements. I can of course make it more explicit by tracking the scroll type and having scrollBy() call scrollEnd() after moving, but that won&apos;t really change anything since a wheel event is always a single scrollBegin/By/End sequence anyway.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:207
&gt;&gt; +    // List of visible layers in the most recent frame in front-to-back order.
&gt; 
&gt; I don&apos;t understand why we are keeping this list instead of retaining the last frame&apos;s CCLayerList, since we have to calculate the latter anyway.  Why not just keep that and iterate front-to-back?

The reason for the list was that sometimes we get an input event right after syncing but before drawing. Syncing removes the layer tree ownership from CCLayerTreeHostImpl, so the previous render surface layer list becomes potentially invalid.

I thought of a couple of ways of solving this:

1. Require that we always draw before handling input events. Bad because of the increase to input event latency.
2. Drop input events to the floor if we haven&apos;t drawn yet. Yeah, no.
3. Keep the previous layer tree around for an extra sync cycle. Not really feasible since CCLayerImpl&apos;s would need to become refcounted again.
4. Detect this situation in scrollBegin() and calculate the layer geometry on demand. Workable, but it seems weird to have scrollBegin() call prepareToDraw().
5. Keep soft references to the previous layer tree.

I&apos;ll rework the patch to do #4 to see how it pans out, but personally I&apos;m also happy with the soft reference approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600359</commentid>
    <comment_count>62</comment_count>
      <attachid>136690</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-11 10:19:27 -0700</bug_when>
    <thetext>Created attachment 136690
Patch

 - Consider all layer types in findLayerById.
 - Clean up logic in setRootLayer().
 - Save most recent render surface layer list and walk it in scrollBegin().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600372</commentid>
    <comment_count>63</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-11 10:30:33 -0700</bug_when>
    <thetext>This patch uses the render surface layer list from the previous frame for hit testing. If we didn&apos;t draw since the last root layer reset, scrollBy() will recompute this list on demand.

Note that I chose not to reuse the list calculated by scrollBy() in prepareToDraw() to make sure the latter will always return the latest frame data. Depending on the sync/framerate ratio this can increase the amount of computation we do. I tested with a mouse wheel that the previous frame&apos;s list is reused most of the time, unless you spin the wheel really fast, causing up to 2 out of 3 input events to trigger render pass calculation. I didn&apos;t try with touch inputs.

So, this approach isn&apos;t as efficient as the soft references from the earlier patch, but it&apos;s most definitely simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605471</commentid>
    <comment_count>64</comment_count>
      <attachid>137869</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-19 03:22:46 -0700</bug_when>
    <thetext>Created attachment 137869
Patch

- Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605580</commentid>
    <comment_count>65</comment_count>
      <attachid>137869</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-19 07:54:49 -0700</bug_when>
    <thetext>Comment on attachment 137869
Patch

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

OK, I think we&apos;re nearly there.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:67
&gt; +    virtual void scrollBy(const IntSize&amp;);

OVERRIDE

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:116
&gt; +    virtual void didScroll(const IntSize&amp;) { }

OVERRIDE

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:574
&gt; +static LayerChromium* findLayerById(LayerChromium* layer, int id)

why is this structured differently from CCLayerImpl::findLayerById()? why isn&apos;t it the same function just templatized?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:681
&gt; +    // Scroll event is ignored because the hit layer is not facing the viewer.

shouldn&apos;t the hit test just skip the layer in this case? why would the backface of a layer cause us to eat the scroll?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605650</commentid>
    <comment_count>66</comment_count>
      <attachid>137869</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-19 10:04:28 -0700</bug_when>
    <thetext>Comment on attachment 137869
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:67
&gt;&gt; +    virtual void scrollBy(const IntSize&amp;);
&gt; 
&gt; OVERRIDE

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:116
&gt;&gt; +    virtual void didScroll(const IntSize&amp;) { }
&gt; 
&gt; OVERRIDE

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:574
&gt;&gt; +static LayerChromium* findLayerById(LayerChromium* layer, int id)
&gt; 
&gt; why is this structured differently from CCLayerImpl::findLayerById()? why isn&apos;t it the same function just templatized?

Great idea! I&apos;ve now replaced both functions with a single template.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:681
&gt;&gt; +    // Scroll event is ignored because the hit layer is not facing the viewer.
&gt; 
&gt; shouldn&apos;t the hit test just skip the layer in this case? why would the backface of a layer cause us to eat the scroll?

You&apos;re right, that&apos;s what&apos;s happening but this comment was just obtuse about it. The backfacing layer will never end up in the list of hit tested layers, and since there are no other scrollable layers in this test, the scroll event is dropped.

I&apos;ve made the comment more precise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605666</commentid>
    <comment_count>67</comment_count>
      <attachid>137917</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-19 10:18:02 -0700</bug_when>
    <thetext>Created attachment 137917
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605692</commentid>
    <comment_count>68</comment_count>
      <attachid>137917</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-19 11:04:04 -0700</bug_when>
    <thetext>Comment on attachment 137917
Patch

Clearing flags on attachment: 137917

Committed r114651: &lt;http://trac.webkit.org/changeset/114651&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605693</commentid>
    <comment_count>69</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-19 11:04:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628151</commentid>
    <comment_count>70</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-18 15:27:59 -0700</bug_when>
    <thetext>Reverted in http://trac.webkit.org/changeset/1146142.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628153</commentid>
    <comment_count>71</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-18 15:28:22 -0700</bug_when>
    <thetext>(In reply to comment #70)
&gt; Reverted in http://trac.webkit.org/changeset/1146142.

Make that http://trac.webkit.org/changeset/116142.  Oops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644992</commentid>
    <comment_count>72</comment_count>
      <attachid>146640</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-08 13:35:44 -0700</bug_when>
    <thetext>Created attachment 146640
Patch

- Don&apos;t crash if the root layer loses its render surface after the most recent render.
- Fixed a bug in scrollBy() that always scheduled a commit when page scale delta != 1.
- Renamed ScrollFailed to ScrollOnMainThread to make its purpose clearer.
- Added a test to make sure non-scrollable layers don&apos;t block scrolling their ancestors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646092</commentid>
    <comment_count>73</comment_count>
      <attachid>146873</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-11 10:45:48 -0700</bug_when>
    <thetext>Created attachment 146873
Patch

- Don&apos;t reset sent scroll deltas while a pinch zoom or page scale animation is in progress.
- Added tests for the above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646431</commentid>
    <comment_count>74</comment_count>
      <attachid>146873</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-11 16:50:36 -0700</bug_when>
    <thetext>Comment on attachment 146873
Patch

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

Thanks for adding all the new tests.  I think we need a little more refinement on this before landing, but it&apos;s not in bad shape.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:49
&gt; +    virtual void didScroll(const IntSize&amp;) = 0;

After having more time to think about it, I really think that scrolling should be a separate delegate type and hang off of the base LayerChromium class (and be optional).  Even in this patch you can see that you had to modify a number of ContentLayerDelegate implementations that aren&apos;t scrollable at all.  It&apos;s also a bit wrong that this patch only lets us scroll content layers - other types (like plugins) definitely should be scrollable as well.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:70
&gt; +    virtual void scrollBy(const IntSize&amp;) OVERRIDE;

if you move the scroll delegate up to LayerChromium, this should move up as well (and become non-virtual)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:190
&gt; +        TRACE_EVENT(&quot;tryScroll Failed shouldScrollOnMainThread&quot;, this, 0);

please use:

TRACE_EVENT0(&quot;cc&quot;, &quot;....&quot;);

style trace macros here and everywhere else inside cc so we get a useful component

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:397
&gt; +    m_mostRecentRenderSurfaceLayerList = frame.renderSurfaceLayerList;

Hmmm, a deep copy on every pass?  If we&apos;re making the renderSurfaceLayerList something persistent instead of something frame-transient, can we just generate the list into a member variable of CCLayerTreeHostImpl in the first place, instead of pretending it&apos;s part of FrameData (since it&apos;s no longer isolated to being used only on this frame)?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:545
&gt; +PassOwnPtr&lt;CCLayerImpl&gt; CCLayerTreeHostImpl::releaseRootLayer()
&gt; +{
&gt; +    m_scrollingLayerIdFromPreviousTree = m_currentlyScrollingLayerImpl ? m_currentlyScrollingLayerImpl-&gt;id() : -1;
&gt; +    m_currentlyScrollingLayerImpl = 0;

I think it&apos;s ugly to make this seemingly normal getter have strange side effects like this.  I assume you&apos;re doing this because currently the only caller to releaseRootLayer() is in the TreeSynchronizer call, right? I think it&apos;d be much better to have an explicit call to reset state like this or to rename this function to make it clearer what is going on.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:714
&gt; +    if (m_mostRecentRenderSurfaceLayerList.size() &amp;&amp; m_rootLayerImpl-&gt;renderSurface())

I&apos;m not sure I understand both of the checks here - why are we checking both?  If we haven&apos;t calculated a renderSurfaceLayerList I can understand that we need to calculate one, but what does the rootLayerImpl having a render surface have to do with it?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:739
&gt; +    // First find out which layer was hit by walking the saved list of visible layers from the most recent frame.
&gt; +    CCLayerImpl* layerImpl = 0;

this looks like a generic hit testing function - could you extract it out into one and provide dedicated tests, etc?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:745
&gt; +    for (CCLayerIteratorType it = CCLayerIteratorType::begin(&amp;m_mostRecentRenderSurfaceLayerList); it != end; ++it) {
&gt; +        CCLayerImpl* renderSurfaceLayerImpl = (*it);

I think we should only care about the case where it.representsItself() == true, right? (see comments at the top of CCLayerIterator.h to see what this means).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647085</commentid>
    <comment_count>75</comment_count>
      <attachid>146873</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-12 11:04:04 -0700</bug_when>
    <thetext>Comment on attachment 146873
Patch

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

Thanks for taking a look James.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:49
&gt;&gt; +    virtual void didScroll(const IntSize&amp;) = 0;
&gt; 
&gt; After having more time to think about it, I really think that scrolling should be a separate delegate type and hang off of the base LayerChromium class (and be optional).  Even in this patch you can see that you had to modify a number of ContentLayerDelegate implementations that aren&apos;t scrollable at all.  It&apos;s also a bit wrong that this patch only lets us scroll content layers - other types (like plugins) definitely should be scrollable as well.

Yeah, that seems a little more orthogonal than limiting scrolling to content layers. I&apos;ll rework this part.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:190
&gt;&gt; +        TRACE_EVENT(&quot;tryScroll Failed shouldScrollOnMainThread&quot;, this, 0);
&gt; 
&gt; please use:
&gt; 
&gt; TRACE_EVENT0(&quot;cc&quot;, &quot;....&quot;);
&gt; 
&gt; style trace macros here and everywhere else inside cc so we get a useful component

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:397
&gt;&gt; +    m_mostRecentRenderSurfaceLayerList = frame.renderSurfaceLayerList;
&gt; 
&gt; Hmmm, a deep copy on every pass?  If we&apos;re making the renderSurfaceLayerList something persistent instead of something frame-transient, can we just generate the list into a member variable of CCLayerTreeHostImpl in the first place, instead of pretending it&apos;s part of FrameData (since it&apos;s no longer isolated to being used only on this frame)?

Right, we might as well just have one instance. I also like keeping the list inside CCLayerTreeHostImpl because it already owns the data in it.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:545
&gt;&gt; +    m_currentlyScrollingLayerImpl = 0;
&gt; 
&gt; I think it&apos;s ugly to make this seemingly normal getter have strange side effects like this.  I assume you&apos;re doing this because currently the only caller to releaseRootLayer() is in the TreeSynchronizer call, right? I think it&apos;d be much better to have an explicit call to reset state like this or to rename this function to make it clearer what is going on.

I wasn&apos;t thinking about TreeSynchronizer specifically here, but rather that we need to forget everything we know about the tree once we release it. I think I&apos;ll rename this to something more obvious like detachLayerTree().

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:714
&gt;&gt; +    if (m_mostRecentRenderSurfaceLayerList.size() &amp;&amp; m_rootLayerImpl-&gt;renderSurface())
&gt; 
&gt; I&apos;m not sure I understand both of the checks here - why are we checking both?  If we haven&apos;t calculated a renderSurfaceLayerList I can understand that we need to calculate one, but what does the rootLayerImpl having a render surface have to do with it?

This is needed because we can end up in a situation where we have calculated the render surface layer list, but since then the root render surface has been cleared (e.g., by initializeLayerRenderer()). Since CCLayerIterator doesn&apos;t work without a root render surface, I check for that here. This was the ChromeOS crash we were seeing from this patch.

Alternatively we could empty the render surface layer list every time the render surfaces are cleared, but since that can also be done outside CCLayerTreeHostImpl I prefer to have a defensive check here.

I also considered fixing CCLayerIterator to fail gracefully, but that would mean we&apos;d silently fail to hit anything if the root render surface is gone. Thinking about this more, I think it would be good for that case to not blow up, so I&apos;ve opened bug 88886 for it.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:739
&gt;&gt; +    CCLayerImpl* layerImpl = 0;
&gt; 
&gt; this looks like a generic hit testing function - could you extract it out into one and provide dedicated tests, etc?

Good idea. I&apos;ll pull this into CCLayerTreeHostCommon.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:745
&gt;&gt; +        CCLayerImpl* renderSurfaceLayerImpl = (*it);
&gt; 
&gt; I think we should only care about the case where it.representsItself() == true, right? (see comments at the top of CCLayerIterator.h to see what this means).

That would eliminate some potentially redundant hit tests, but it would also break some cases that seem like they should work. For example, if there&apos;s just a single layer in the tree, it&apos;ll be iterated over just once with it.representsItself() == false. Granted, having just a single root layer is really only used when testing, but OTOH it would seem like a strange restriction to have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647572</commentid>
    <comment_count>76</comment_count>
      <attachid>146873</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-12 18:34:12 -0700</bug_when>
    <thetext>Comment on attachment 146873
Patch


So I looked through this as much as I could and ended up with only one comment below.

Tonight I will pull out the hit testing loop and add unit tests, and submit it as a separate patch.  That should make Sami&apos;s life easier, and he can decide whether to assimilate that code or keep it as a separate patch.




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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:745
&gt;&gt;&gt; +        CCLayerImpl* renderSurfaceLayerImpl = (*it);
&gt;&gt; 
&gt;&gt; I think we should only care about the case where it.representsItself() == true, right? (see comments at the top of CCLayerIterator.h to see what this means).
&gt; 
&gt; That would eliminate some potentially redundant hit tests, but it would also break some cases that seem like they should work. For example, if there&apos;s just a single layer in the tree, it&apos;ll be iterated over just once with it.representsItself() == false. Granted, having just a single root layer is really only used when testing, but OTOH it would seem like a strange restriction to have.

Spoke with Dana about this.  We both feel that it.representsItself() == true would be much clearer here, also.   if a layer really does iterate only once with it.representsItself()==false, that means it was a renderSurface without drawing any content anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647682</commentid>
    <comment_count>77</comment_count>
      <attachid>146873</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-12 22:18:17 -0700</bug_when>
    <thetext>Comment on attachment 146873
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:203
&gt; +    if (!screenSpaceTransform().isInvertible()) {
&gt; +        TRACE_EVENT(&quot;tryScroll Ignored nonInvertibleTransform&quot;, this, 0);
&gt; +        return CCInputHandlerClient::ScrollIgnored;
&gt; +    }
&gt; +
&gt; +    IntPoint contentPoint(screenSpaceTransform().inverse().mapPoint(viewportPoint));
&gt; +    if (nonFastScrollableRegion().contains(contentPoint)) {
&gt; +        TRACE_EVENT(&quot;tryScroll Failed nonFastScrollableRegion&quot;, this, 0);
&gt; +        return CCInputHandlerClient::ScrollOnMainThread;
&gt; +    }

I think sreenSpaceTransform doesn&apos;t convert between layer&apos;s content space and screen space.  If I remember correctly, it converts between layer&apos;s &quot;layout space&quot; (with the origin at the top-left corner) and screen space.   So there needs to be an additional part of the transform that converts from the layer&apos;s origin space to the layer&apos;s content space.  The code I&apos;ll submit for hit testing tonight should have some code that can be assimilated here.

Additionally, after assimilating that hit testing code, it should no longer be necessary to check if the screenSpaceTransform is invertible.

Finally, I think its going to be a far more common case (and far more lightweight) to check if the layer is not scrollable.  Would it be equally correct to re-order these if-statements?  it would change semantics of which return values get returned, i&apos;m not sure if that may change the correctness of this code here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647779</commentid>
    <comment_count>78</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 00:46:04 -0700</bug_when>
    <thetext>
Hit testing patch at https://bugs.webkit.org/show_bug.cgi?id=88972.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648031</commentid>
    <comment_count>79</comment_count>
      <attachid>146873</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-13 08:12:17 -0700</bug_when>
    <thetext>Comment on attachment 146873
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:203
&gt;&gt; +    }
&gt; 
&gt; I think sreenSpaceTransform doesn&apos;t convert between layer&apos;s content space and screen space.  If I remember correctly, it converts between layer&apos;s &quot;layout space&quot; (with the origin at the top-left corner) and screen space.   So there needs to be an additional part of the transform that converts from the layer&apos;s origin space to the layer&apos;s content space.  The code I&apos;ll submit for hit testing tonight should have some code that can be assimilated here.
&gt; 
&gt; Additionally, after assimilating that hit testing code, it should no longer be necessary to check if the screenSpaceTransform is invertible.
&gt; 
&gt; Finally, I think its going to be a far more common case (and far more lightweight) to check if the layer is not scrollable.  Would it be equally correct to re-order these if-statements?  it would change semantics of which return values get returned, i&apos;m not sure if that may change the correctness of this code here.

Ya see CCOcclusionTracker::contentToScreenSpaceTransform for stealable code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648262</commentid>
    <comment_count>80</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-13 11:08:17 -0700</bug_when>
    <thetext>(In reply to comment #77)
&gt; Finally, I think its going to be a far more common case (and far more lightweight) to check if the layer is not scrollable.  Would it be equally correct to re-order these if-statements?  it would change semantics of which return values get returned, i&apos;m not sure if that may change the correctness of this code here.

There&apos;s one major constraint in ordering the checks here: ScrollOnMainThread must always take priority over the other cases. Otherwise we might neglect to send input events to the main thread for layers that expect that to happen.

However, I think we can avoid doing the projection if the nonFastScrollableRegion is empty, which is currently the case for all layers except the root scroll layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648284</commentid>
    <comment_count>81</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-13 11:30:54 -0700</bug_when>
    <thetext>This patch will now depend on the hit testing code from bug 88972.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648332</commentid>
    <comment_count>82</comment_count>
      <attachid>147383</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-13 12:07:48 -0700</bug_when>
    <thetext>Created attachment 147383
Patch

This patch incorporates all the review feedback so far *except* for the extracted hit testing function since that is still being finalized.

- Added a dedicated scroll delegate to LayerChromium.
- Use cc component for tracing.
- Only hit test against self-representing layers.
- Renamed releaseRootLayer() to detachLayerTree()
- Instead of separating renderSurfaceLayerList from FrameData, made FrameData refcounted so CCLayerTreeHostImpl can cache the most recent one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648405</commentid>
    <comment_count>83</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 13:25:31 -0700</bug_when>
    <thetext>Hi Sami,

Do you know whether nonFastScrollableRegion was in the layer&apos;s &quot;layout space&quot; with the origin at the top-left corner, or if it was in the layer&apos;s &quot;content space&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648474</commentid>
    <comment_count>84</comment_count>
      <attachid>147383</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 14:36:31 -0700</bug_when>
    <thetext>Comment on attachment 147383
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:122
&gt;      // ContentLayerDelegate implementation.
&gt;      virtual void paintContents(GraphicsContext&amp;, const IntRect&amp; clip);
&gt; +    virtual void didScroll(const IntSize&amp;) OVERRIDE { }

this isn&apos;t part of ContentLayerDelegate - mind adding another comment block?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:389
&gt; +    m_mostRecentFrameData = frame = FrameData::create();

this isn&apos;t what I meant - retaining the FrameData seems more problematic.

You specifically need the renderSurfaceLayerList to persist in order to hit test but the other frame-transient data is not interesting.  My idea was to move the renderSurfaceLayerList out and have FrameData refer to it by reference, but leave the other FrameData fields and FrameData itself transient.  Making all of FrameData refcounted has hugely bloated the patch and makes things more confusing, IMO

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:542
&gt; +PassOwnPtr&lt;CCLayerImpl&gt; CCLayerTreeHostImpl::detachLayerTree()

I think the new name does make this much clearer - thanks!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:737
&gt; +    scrollEnd();

not sure I fully understand this - my understanding of the CCInputHandler interface is that the caller has to make sure to call scrollEnd() after every successful scrollBegin(). are you finding that callers aren&apos;t doing this or that the API is overly restrictive? is this call just to update some internal state?

&gt; Source/WebKit/chromium/src/WebContentLayerImpl.h:45
&gt; +    virtual void didScroll(const WebCore::IntSize&amp;);

do you still need this?

if this had an OVERRIDE annotation then the compiler could help tell if it was actually overriding anything or not</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648613</commentid>
    <comment_count>85</comment_count>
      <attachid>147383</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 17:32:13 -0700</bug_when>
    <thetext>Comment on attachment 147383
Patch


Hi Sami, to make it a little easier for you - here are three simple steps for updating your existing patch to play nicely with the hit testing patch.

Thanks!


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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:199
&gt; +    if (!screenSpaceTransform().isInvertible()) {
&gt; +        TRACE_EVENT0(&quot;cc&quot;, &quot;CCLayerImpl::tryScroll: Ignored nonInvertibleTransform&quot;);
&gt; +        return CCInputHandlerClient::ScrollIgnored;
&gt; +    }

This code should stay, unlike what I suggested earlier

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:205
&gt; +    IntPoint contentPoint(screenSpaceTransform().inverse().mapPoint(viewportPoint));
&gt; +    if (nonFastScrollableRegion().contains(contentPoint)) {
&gt; +        TRACE_EVENT0(&quot;cc&quot;, &quot;CCLayerImpl::tryScroll: Failed nonFastScrollableRegion&quot;);
&gt; +        return CCInputHandlerClient::ScrollOnMainThread;
&gt; +    }

This code should be replaced with the following:

    bool clipped = false;
    FloatPoint hitTestPointInLocalSpace = CCMathUtil::projectPoint(localSpaceToScreenSpaceTransform.inverse(), FloatPoint(viewportPoint), clipped);
    if (!clipped &amp;&amp; nonFastScrollableRegion().contains(hitTestPointInLocalSpace)) {
        TRACE_EVENT0(&quot;cc&quot;, &quot;CCLayerImpl::tryScroll: Failed nonFastScrollableRegion&quot;);
        return CCInputHandlerClient::ScrollOnMainThread;
    }

Similar math has landed in the hit testing patch, you can compare to that for a sanity check =)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:762
&gt; +    // layers from the most recent frame.
&gt; +    CCLayerImpl* layerImpl = 0;
&gt; +
&gt; +    typedef CCLayerIterator&lt;CCLayerImpl, CCLayerList, CCRenderSurface, CCLayerIteratorActions::FrontToBack&gt; CCLayerIteratorType;
&gt; +    CCLayerIteratorType end = CCLayerIteratorType::end(&amp;m_mostRecentFrameData-&gt;renderSurfaceLayerList);
&gt; +    for (CCLayerIteratorType it = CCLayerIteratorType::begin(&amp;m_mostRecentFrameData-&gt;renderSurfaceLayerList); it != end; ++it) {
&gt; +        if (!it.representsItself())
&gt; +            continue;
&gt; +        CCLayerImpl* renderSurfaceLayerImpl = (*it);
&gt; +        if (!renderSurfaceLayerImpl-&gt;screenSpaceTransform().isInvertible())
&gt; +            continue;
&gt; +        IntPoint scrollLayerPoint(renderSurfaceLayerImpl-&gt;screenSpaceTransform().inverse().mapPoint(viewportPoint));
&gt; +        if (!renderSurfaceLayerImpl-&gt;visibleLayerRect().contains(scrollLayerPoint))
&gt; +            continue;
&gt; +        layerImpl = renderSurfaceLayerImpl;
&gt; +        break;
&gt;      }

The hit testing patch has landed; it should work to replace this code with the following:
CCLayerImpl* layerImpl = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(viewportPoint,  yourRenderSurfaceLayerList);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649173</commentid>
    <comment_count>86</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-14 07:53:41 -0700</bug_when>
    <thetext>(In reply to comment #84)
&gt; (From update of attachment 147383 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147383&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:122
&gt; &gt;      // ContentLayerDelegate implementation.
&gt; &gt;      virtual void paintContents(GraphicsContext&amp;, const IntRect&amp; clip);
&gt; &gt; +    virtual void didScroll(const IntSize&amp;) OVERRIDE { }
&gt; 
&gt; this isn&apos;t part of ContentLayerDelegate - mind adding another comment block?

Oops, I left that line in by mistake -- actually there&apos;s no need for didScroll() here at all. Oddly gcc didn&apos;t complain about the OVERRIDE.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:389
&gt; &gt; +    m_mostRecentFrameData = frame = FrameData::create();
&gt; 
&gt; this isn&apos;t what I meant - retaining the FrameData seems more problematic.
&gt; 
&gt; You specifically need the renderSurfaceLayerList to persist in order to hit test but the other frame-transient data is not interesting.  My idea was to move the renderSurfaceLayerList out and have FrameData refer to it by reference, but leave the other FrameData fields and FrameData itself transient.  Making all of FrameData refcounted has hugely bloated the patch and makes things more confusing, IMO

Right, gotcha. I just wanted to see if refcounted FrameData would be useful -- I recall reading somewhere that we might start preparing multiple animation frames in advance which seems to require independent FrameData instances. But let&apos;s keep things simple for now; I&apos;ll implement what you described above.
 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:737
&gt; &gt; +    scrollEnd();
&gt; 
&gt; not sure I fully understand this - my understanding of the CCInputHandler interface is that the caller has to make sure to call scrollEnd() after every successful scrollBegin(). are you finding that callers aren&apos;t doing this or that the API is overly restrictive? is this call just to update some internal state?

You&apos;re right, that&apos;s what the interface requires and that&apos;s also what happens. This call is here just to reset everything related to the currently scrolling layer in case we don&apos;t find a new layer to scroll. I didn&apos;t want to duplicate the code from scrollEnd() so I&apos;m just calling that function here.
 
&gt; &gt; Source/WebKit/chromium/src/WebContentLayerImpl.h:45
&gt; &gt; +    virtual void didScroll(const WebCore::IntSize&amp;);
&gt; 
&gt; do you still need this?
&gt; 
&gt; if this had an OVERRIDE annotation then the compiler could help tell if it was actually overriding anything or not

D&apos;oh, I missed this one too. Thanks for pointing it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649248</commentid>
    <comment_count>87</comment_count>
      <attachid>147607</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-14 09:51:18 -0700</bug_when>
    <thetext>Created attachment 147607
Patch

- Use new hit testing utilities. (Thanks Shawn!)
- Keep render surface layer list in CCLayerTreeHostImpl.
- Removed two unneeded didScroll() functions.
- Added test for the new scroll delegate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649260</commentid>
    <comment_count>88</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-14 10:00:26 -0700</bug_when>
    <thetext>(In reply to comment #86)
&gt; (In reply to comment #84)
&gt; &gt; (From update of attachment 147383 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147383&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:122
&gt; &gt; &gt;      // ContentLayerDelegate implementation.
&gt; &gt; &gt;      virtual void paintContents(GraphicsContext&amp;, const IntRect&amp; clip);
&gt; &gt; &gt; +    virtual void didScroll(const IntSize&amp;) OVERRIDE { }
&gt; &gt; 
&gt; &gt; this isn&apos;t part of ContentLayerDelegate - mind adding another comment block?
&gt; 
&gt; Oops, I left that line in by mistake -- actually there&apos;s no need for didScroll() here at all. Oddly gcc didn&apos;t complain about the OVERRIDE.
&gt; 

gcc doesn&apos;t understand OVERRIDE until 4.7 (or so) :/

It&apos;s easy to use clang on linux if you&apos;d like - ping me on gchat/email and I can send you some directions for getting it set up with google&apos;s setup.

&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:737
&gt; &gt; &gt; +    scrollEnd();
&gt; &gt; 
&gt; &gt; not sure I fully understand this - my understanding of the CCInputHandler interface is that the caller has to make sure to call scrollEnd() after every successful scrollBegin(). are you finding that callers aren&apos;t doing this or that the API is overly restrictive? is this call just to update some internal state?
&gt; 
&gt; You&apos;re right, that&apos;s what the interface requires and that&apos;s also what happens. This call is here just to reset everything related to the currently scrolling layer in case we don&apos;t find a new layer to scroll. I didn&apos;t want to duplicate the code from scrollEnd() so I&apos;m just calling that function here.

Can we have an internal function that does the state resetting and ASSERT() that we get the expected usage of the exposed APIs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649265</commentid>
    <comment_count>89</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-14 10:03:01 -0700</bug_when>
    <thetext>(In reply to comment #88)
&gt; gcc doesn&apos;t understand OVERRIDE until 4.7 (or so) :/
&gt; 
&gt; It&apos;s easy to use clang on linux if you&apos;d like - ping me on gchat/email and I can send you some directions for getting it set up with google&apos;s setup.

Thanks, I&apos;m already on clang with help from our local llvm evangelist :)

&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:737
&gt; &gt; &gt; &gt; +    scrollEnd();
&gt; &gt; &gt; 
&gt; &gt; &gt; not sure I fully understand this - my understanding of the CCInputHandler interface is that the caller has to make sure to call scrollEnd() after every successful scrollBegin(). are you finding that callers aren&apos;t doing this or that the API is overly restrictive? is this call just to update some internal state?
&gt; &gt; 
&gt; &gt; You&apos;re right, that&apos;s what the interface requires and that&apos;s also what happens. This call is here just to reset everything related to the currently scrolling layer in case we don&apos;t find a new layer to scroll. I didn&apos;t want to duplicate the code from scrollEnd() so I&apos;m just calling that function here.
&gt; 
&gt; Can we have an internal function that does the state resetting and ASSERT() that we get the expected usage of the exposed APIs?

Good idea, I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649295</commentid>
    <comment_count>90</comment_count>
      <attachid>147615</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-14 10:50:55 -0700</bug_when>
    <thetext>Created attachment 147615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649326</commentid>
    <comment_count>91</comment_count>
      <attachid>147615</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-14 11:22:02 -0700</bug_when>
    <thetext>Comment on attachment 147615
Patch

OK, looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649443</commentid>
    <comment_count>92</comment_count>
      <attachid>147615</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 13:42:40 -0700</bug_when>
    <thetext>Comment on attachment 147615
Patch

Rejecting attachment 147615 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
t 2 lines).
Hunk #7 succeeded at 450 (offset 2 lines).
Hunk #8 succeeded at 496 (offset 2 lines).
Hunk #9 succeeded at 807 (offset 2 lines).
patching file Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp
Hunk #1 succeeded at 2220 (offset 20 lines).
patching file Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;James Robi...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/12967111</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649496</commentid>
    <comment_count>93</comment_count>
      <attachid>147654</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-14 14:25:31 -0700</bug_when>
    <thetext>Created attachment 147654
Exact same patch rebased to tip of tree

It was just an innocent conflict in CCLayerTreeHostImpl.h.  Otherwise this patch should be _exactly_ the same.  I just wanted to push this to land sooner since its getting close to branch. Also double-checked that it still compiles and passes all unit tests after rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649690</commentid>
    <comment_count>94</comment_count>
      <attachid>147654</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 17:52:57 -0700</bug_when>
    <thetext>Comment on attachment 147654
Exact same patch rebased to tip of tree

Rejecting attachment 147654 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebKit/chromium/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/12953732</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649721</commentid>
    <comment_count>95</comment_count>
      <attachid>147700</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-14 18:40:45 -0700</bug_when>
    <thetext>Created attachment 147700
Exact same patch again

Sorry for the churn, it was completely my mistake, and should be fixed this time. Re-ran debug/release unit tests and release layout tests, no obvious regressions (running debug layout tests now, too).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650055</commentid>
    <comment_count>96</comment_count>
      <attachid>147779</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-15 03:11:01 -0700</bug_when>
    <thetext>Created attachment 147779
Patch

Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650097</commentid>
    <comment_count>97</comment_count>
      <attachid>147779</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-06-15 05:36:07 -0700</bug_when>
    <thetext>Comment on attachment 147779
Patch

Patch has already been reviewed, setting cq+ on request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650100</commentid>
    <comment_count>98</comment_count>
      <attachid>147779</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-15 05:46:12 -0700</bug_when>
    <thetext>Comment on attachment 147779
Patch

Clearing flags on attachment: 147779

Committed r120444: &lt;http://trac.webkit.org/changeset/120444&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650101</commentid>
    <comment_count>99</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-15 05:46:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650106</commentid>
    <comment_count>100</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-15 05:53:11 -0700</bug_when>
    <thetext>Just one short of a centi-bug :) Thanks to everyone who has helped this patch forward along the way!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117024</attachid>
            <date>2011-11-29 12:43:05 -0800</date>
            <delta_ts>2011-12-01 08:30:28 -0800</delta_ts>
            <desc>Work-in-progress patch</desc>
            <filename>0001-Implement-layer-scrolling-in-the-compositor-thread.patch</filename>
            <type>text/plain</type>
            <size>59978</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">RnJvbSBmMDY2ZmUxYTI3YTEzOGVjNGQxYTEwZWRiY2M1NjkyNjk2NjA4MWE2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEt5b3N0aWxhIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+
CkRhdGU6IFdlZCwgMjMgTm92IDIwMTEgMTY6MjI6MjggKzAwMDAKU3ViamVjdDogW1BBVENIXSBJ
bXBsZW1lbnQgbGF5ZXIgc2Nyb2xsaW5nIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZAoKVGhpcyBw
YXRjaCBhbGxvd3Mgc2Nyb2xsaW5nIG92ZXJmbG93IGRpdiBlbGVtZW50cyBpbiB0aGUgY29tcG9z
aXRvcgp0aHJlYWQuIEl0IGNvbnNpc3RzIG9mIHR3byBtYWpvciBwYXJ0czoKCjEuIFNwbGl0IHNj
cm9sbGFibGUgZWxlbWVudHMgaW4gYSBSZW5kZXJMYXllckJhY2tpbmcgaW50byB0aGUgc3RhdGlj
CiAgIGJhY2tncm91bmQgcGFydCBhbmQgdGhlIHNjcm9sbGluZyBvdmVyZmxvdyBwYXJ0LiBUaGlz
IHBhcnQgb2YgdGhlCiAgIGNvZGUgaXMgYmFzZWQgb24gdGhlIEFwcGxlIGlPUyA1IGltcGxlbWVu
dGF0aW9uIG9mIHRvdWNoIG92ZXJmbG93CiAgIHNjcm9sbGluZy4KCjIuIFByb2Nlc3Mgc2Nyb2xs
IGV2ZW50cyBmb3IgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZC4gVGhlIHNjcm9sbAog
ICBkZWx0YSBpcyBhY2N1bXVsYXRlZCBmb3IgZWFjaCBsYXllciBhbmQgc3luY2hyb25pemVkIHdp
dGggdGhlIEltcGwKICAgdGhyZWFkLgoKTm90ZSB0aGF0IG9ubHkgZWxlbWVudHMgaW4gY29tcG9z
aXRlZCBsYXllcnMgd2lsbCBnZXQgdGhpcyB0cmVhdG1lbnQuIEluCm90aGVyIHdvcmRzLCBzY3Jv
bGxhYmxlIGVsZW1lbnRzIGFyZSBub3QgcHJvbW90ZWQgaW50byBsYXllcnMKYXV0b21hdGljYWxs
eSwgYnV0IGluc3RlYWQgdGhleSBuZWVkIHRvIGhhdmUgYSBDU1MgdHJhbnNmb3JtIHRvIHRyaWdn
ZXIKbGF5ZXIgY3JlYXRpb24uCi0tLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oICAgfCAgIDE0ICsrLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJDbGllbnQuaCAgICAgICAgfCAgICAxICsKIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwICAgIHwgICAzNSArKysrKwogLi4uL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oICAgICAgfCAgICA0ICsKIC4uLi9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCAgIHwgICAgMSArCiAuLi4vcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oICAgICB8ICAgIDkgKysKIC4u
Li9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgIHwgICAyMyAr
KysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oICAgIHwg
ICAgNiArCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCAgICAg
ICB8ICAgNDAgKysrKystCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmggICAgICAgICB8ICAgIDYgKy0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcCAgIHwgIDEzNCArKysrKysrKysrKystLS0tLQogLi4uL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCAgICAgfCAgICAyICstCiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwICAgICAgICAgICB8ICAgIDYgKy0KIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oICAgICAgICAgICAgIHwgICAgMiArLQog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgICAgfCAgMTIy
ICsrKysrKysrKysrKysrKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuaCAgICAgIHwgICAgOCArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcCB8ICAgIDMgKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oICAgfCAgICAxICsKIC4uLi9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5
ZXJUcmVlVmlld0NsaWVudC5oICAgICAgIHwgICAgNiArLQogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuY3BwICAgfCAgICAyICstCiAuLi4vV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmggIHwgICAgMyArLQogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwICAgICAgICAgfCAgIDM2ICsrKysr
LQogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCAgICAgICAgICAgfCAg
ICAzICstCiAuLi4vY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwICAg
ICB8ICAgMTcgKysrCiAuLi4vV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwICB8ICAxNTEgKysrKysrKysrKysrKysrKysrKy0KIDI2IGZpbGVzIGNoYW5nZWQsIDU3
MSBpbnNlcnRpb25zKCspLCA3NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKaW5kZXggOGNkZjBkNy4uZTA1MDg4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
aApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm9k
ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTMwMCw2ICszMDEs
MTUgQEAgcHVibGljOgogICAgIEludFJlY3QgY29udGVudHNSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50c1JlY3Q7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0
IEludFJlY3QmIHIpIHsgbV9jb250ZW50c1JlY3QgPSByOyB9CiAgICAgCisgICAgSW50UG9pbnQg
c2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwKSB7IG1fc2Ny
b2xsUG9zaXRpb24gPSBwOyB9CisKKyAgICBJbnRTaXplIG1heFNjcm9sbFBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRN
YXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBzKSB7IG1fbWF4U2Nyb2xsUG9zaXRpb24g
PSBzOyB9CisKKyAgICBOb2RlKiBzY3JvbGxOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxO
b2RlLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE5vZGUoUGFzc1JlZlB0cjxO
b2RlPiBuKSB7IG1fc2Nyb2xsTm9kZSA9IG47IH0KKwogICAgIC8vIFRyYW5zaXRpb25zIGFyZSBp
ZGVudGlmaWVkIGJ5IGEgc3BlY2lhbCBhbmltYXRpb24gbmFtZSB0aGF0IGNhbm5vdCBjbGFzaCB3
aXRoIGEga2V5ZnJhbWUgaWRlbnRpZmllci4KICAgICBzdGF0aWMgU3RyaW5nIGFuaW1hdGlvbk5h
bWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlJRCk7CiAgICAgCkBAIC00NDYsNiArNDU2
LDkgQEAgcHJvdGVjdGVkOgogICAgIEZsb2F0UG9pbnQgbV9yZXBsaWNhdGVkTGF5ZXJQb3NpdGlv
bjsgLy8gRm9yIGEgcmVwbGljYSBsYXllciwgdGhlIHBvc2l0aW9uIG9mIHRoZSByZXBsaWNhLgog
CiAgICAgSW50UmVjdCBtX2NvbnRlbnRzUmVjdDsKKyAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0
aW9uOworICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKKyAgICBSZWZQdHI8Tm9kZT4g
bV9zY3JvbGxOb2RlOwogCiAgICAgaW50IG1fcmVwYWludENvdW50OwogCkBAIC00NjUsNCArNDc4
LDMgQEAgdm9pZCBzaG93R3JhcGhpY3NMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogbGF5ZXIpOwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAog
I2VuZGlmIC8vIEdyYXBoaWNzTGF5ZXJfaAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKaW5kZXggZGJlNmY2Zi4uZTFk
Mjg0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXJDbGllbnQuaApAQCAtNDAsNiArNDAsNyBAQCBlbnVtIEdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlIHsKICAgICBHcmFwaGljc0xheWVyUGFpbnRCYWNrZ3JvdW5kID0gKDEgPDwg
MCksCiAgICAgR3JhcGhpY3NMYXllclBhaW50Rm9yZWdyb3VuZCA9ICgxIDw8IDEpLAogICAgIEdy
YXBoaWNzTGF5ZXJQYWludE1hc2sgPSAoMSA8PCAyKSwKKyAgICBHcmFwaGljc0xheWVyUGFpbnRP
dmVyZmxvd0NvbnRlbnRzID0gKDEgPDwgMyksCiAgICAgR3JhcGhpY3NMYXllclBhaW50QWxsID0g
KEdyYXBoaWNzTGF5ZXJQYWludEJhY2tncm91bmQgfCBHcmFwaGljc0xheWVyUGFpbnRGb3JlZ3Jv
dW5kIHwgR3JhcGhpY3NMYXllclBhaW50TWFzaykKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDRiZWFhNTIuLjUzN2M2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtMzM3LDYgKzMzNywzMyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
dXBkYXRlQ29udGVudHNSZWN0KCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpz
ZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAg
aWYgKHNjcm9sbFBvc2l0aW9uID09IG1fc2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsK
KyAgICB1cGRhdGVMYXllclNjcm9sbFBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQ
b3NpdGlvbikKK3sKKyAgICBpZiAobWF4U2Nyb2xsUG9zaXRpb24gPT0gbV9tYXhTY3JvbGxQb3Np
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWF4U2Nyb2xs
UG9zaXRpb24obWF4U2Nyb2xsUG9zaXRpb24pOworICAgIHVwZGF0ZUxheWVyU2Nyb2xsUG9zaXRp
b24oKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFNjcm9sbE5vZGUoUGFz
c1JlZlB0cjxOb2RlPiBzY3JvbGxOb2RlKQoreworICAgIGlmIChzY3JvbGxOb2RlID09IG1fc2Ny
b2xsTm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2Nyb2xs
Tm9kZShzY3JvbGxOb2RlKTsKKyAgICB1cGRhdGVMYXllclNjcm9sbFBvc2l0aW9uKCk7Cit9CisK
IHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGlt
YWdlKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC02MjUsNiArNjUy
LDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllckJhY2tncm91bmRD
b2xvcigpCiAgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRp
Y19jYXN0PFJHQkEzMj4oMCkpOwogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlTGF5ZXJTY3JvbGxQb3NpdGlvbigpCit7CisgICAgbV9sYXllci0+c2V0U2Nyb2xsUG9zaXRp
b24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgbV9sYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
bV9tYXhTY3JvbGxQb3NpdGlvbik7CisgICAgbV9sYXllci0+c2V0U2Nyb2xsYWJsZSghbV9tYXhT
Y3JvbGxQb3NpdGlvbi5pc0VtcHR5KCkpOworICAgIG1fbGF5ZXItPnNldFNjcm9sbE5vZGUobV9z
Y3JvbGxOb2RlKTsKK30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzVmlkZW8oKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmgKaW5kZXggYjA1ZDA3Yi4uNWVmZTc0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmgKQEAgLTg1LDYgKzg1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBv
c2l0aW9uKGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNldE1heFNjcm9sbFBv
c2l0aW9uKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTm9kZShQ
YXNzUmVmUHRyPE5vZGU+KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2Uo
SW1hZ2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5
ZXIqKTsKQEAgLTEyMSw2ICsxMjQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
cmVzZXJ2ZXMzRCgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoKTsKICAgICB2
b2lkIHVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclNj
cm9sbFBvc2l0aW9uKCk7CiAKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzSW1hZ2UoKTsKICAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzVmlkZW8oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTRh
N2Y4OC4uYTk5OTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5OSw2ICsyOTksNyBA
QCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVy
KQogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+c2V0UHJl
c2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1f
c2Nyb2xsUG9zaXRpb24pOworICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNj
cm9sbFBvc2l0aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXll
clRyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CiAgICAg
bGF5ZXItPnNldFVwZGF0ZVJlY3QobV91cGRhdGVSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRl
eCA3MTNkZmIyLi5hOTJmNTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01NSw2ICs1NSw3IEBA
IGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NUZXh0
dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViTm9kZTsKIAog
Y2xhc3MgQ0NMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKQEAgLTEzMyw2ICsxMzQsMTIgQEAgcHVi
bGljOgogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsUG9zaXRpb247IH0KICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IElu
dFBvaW50JiBzY3JvbGxQb3NpdGlvbikgeyBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRp
b247IH0KIAorICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRp
b24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhTY3JvbGxQb3NpdGlv
biA9IG1heFNjcm9sbFBvc2l0aW9uOyB9CisKKyAgICBOb2RlKiBzY3JvbGxOb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxOb2RlLmdldCgpOyB9CisgICAgdm9pZCBzZXRTY3JvbGxOb2RlKFBh
c3NSZWZQdHI8Tm9kZT4gc2Nyb2xsTm9kZSkgeyBtX3Njcm9sbE5vZGUgPSBzY3JvbGxOb2RlOyB9
CisKICAgICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0K
ICAgICB2b2lkIHNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxhYmxlKSB7IG1fc2Nyb2xsYWJsZSA9
IHRydWU7ICBzZXROZWVkc0NvbW1pdCgpOyB9CiAKQEAgLTI1OCw2ICsyNjUsNyBAQCBwcml2YXRl
OgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7
CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1fbWF4U2Nyb2xs
UG9zaXRpb247CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0
aW9uOwogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKQEAgLTI3Miw2ICsyODAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV91c2VzTGF5ZXJDbGlwcGluZzsKICAgICBib29sIG1faXNOb25D
b21wb3NpdGVkQ29udGVudDsKICAgICBib29sIG1fcHJlc2VydmVzM0Q7CisgICAgUmVmUHRyPE5v
ZGU+IG1fc2Nyb2xsTm9kZTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3Jt
OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKaW5kZXggMTJkMjJlMi4uZWY2Njk0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcApAQCAtNDUsNiArNDUsNyBAQCBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlk
KQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQog
ICAgICwgbV9sYXllclByb3BlcnR5Q2hhbmdlZChmYWxzZSkKKyAgICAsIG1fZGVzY2VuZGFudFdh
c1Njcm9sbGVkKGZhbHNlKQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQogICAgICwgbV9v
cGFxdWUoZmFsc2UpCiAgICAgLCBtX29wYWNpdHkoMS4wKQpAQCAtMTI3LDYgKzEyOCwxNCBAQCB2
b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpCiAgICAgSW50
U2l6ZSBuZXdEZWx0YSA9IG1fc2Nyb2xsRGVsdGEgKyBzY3JvbGw7CiAgICAgSW50U2l6ZSBtaW5E
ZWx0YSA9IC10b1NpemUobV9zY3JvbGxQb3NpdGlvbik7CiAgICAgSW50U2l6ZSBtYXhEZWx0YSA9
IG1fbWF4U2Nyb2xsUG9zaXRpb24gLSB0b1NpemUobV9zY3JvbGxQb3NpdGlvbik7CisKKyAgICAv
LyBJZiB0aGlzIHdhcyB0aGUgZmlyc3Qgc2Nyb2xsIG9wZXJhdGlvbiBmb3IgdGhpcyBsYXllciwg
bm90aWZ5IHRoZSBhbmNlc3RvcnMuCisgICAgQ0NMYXllckltcGwqIGFuY2VzdG9yID0gcGFyZW50
KCk7CisgICAgd2hpbGUgKG1fc2Nyb2xsRGVsdGEuaXNaZXJvKCkgJiYgYW5jZXN0b3IpIHsKKyAg
ICAgICAgYW5jZXN0b3ItPnNldERlc2NlbmRhbnRXYXNTY3JvbGxlZCh0cnVlKTsKKyAgICAgICAg
YW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCk7CisgICAgfQorCiAgICAgLy8gQ2xhbXAgbmV3
RGVsdGEgc28gdGhhdCBwb3NpdGlvbiArIGRlbHRhIHN0YXlzIHdpdGhpbiBzY3JvbGwgYm91bmRz
LgogICAgIG1fc2Nyb2xsRGVsdGEgPSBuZXdEZWx0YS5leHBhbmRlZFRvKG1pbkRlbHRhKS5zaHJ1
bmtUbyhtYXhEZWx0YSk7CiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yU3VidHJlZSgp
OwpAQCAtMTgwLDcgKzE4OSwyMSBAQCB2b2lkIENDTGF5ZXJJbXBsOjp3cml0ZUluZGVudChUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCkKIHZvaWQgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3Bl
cnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiB7CiAgICAgd3JpdGVJbmRl
bnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgInRoaXM6ICIgPDwgdGhpcyA8PCAiXG4iOworICAg
IHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJpZDogIiA8PCBpZCgpIDw8ICJc
biI7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAgdHMgPDwgImJvdW5kczogIiA8
PCBib3VuZHMoKS53aWR0aCgpIDw8ICIsICIgPDwgYm91bmRzKCkuaGVpZ2h0KCkgPDwgIlxuIjsK
KyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAic2Nyb2xsYWJsZTogIiA8
PCBzY3JvbGxhYmxlKCkgPDwgIlxuIjsKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAg
ICB0cyA8PCAic2Nyb2xsUG9zaXRpb246ICIgPDwgc2Nyb2xsUG9zaXRpb24oKS54KCkgPDwgIiwg
IiA8PCBzY3JvbGxQb3NpdGlvbigpLnkoKSA8PCAiXG4iOworICAgIHdyaXRlSW5kZW50KHRzLCBp
bmRlbnQpOworICAgIHRzIDw8ICJtYXhTY3JvbGxQb3NpdGlvbjogIiA8PCBtYXhTY3JvbGxQb3Np
dGlvbigpLndpZHRoKCkgPDwgIiwgIiA8PCBtYXhTY3JvbGxQb3NpdGlvbigpLmhlaWdodCgpIDw8
ICJcbiI7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgInNjcm9sbERl
bHRhOiAiIDw8IHNjcm9sbERlbHRhKCkud2lkdGgoKSA8PCAiLCAiIDw8IHNjcm9sbERlbHRhKCku
aGVpZ2h0KCkgPDwgIlxuIjsKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8
PCAibm9uQ29tcG9zaXRlZENvbnRlbnQ6ICIgPDwgaXNOb25Db21wb3NpdGVkQ29udGVudCgpIDw8
ICJcbiI7CiAKICAgICBpZiAobV90YXJnZXRSZW5kZXJTdXJmYWNlKSB7CiAgICAgICAgIHdyaXRl
SW5kZW50KHRzLCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggYmY2YjY4ZS4uNTYw
MTcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNjgsNiArMTY4LDkgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpOwogCisgICAgYm9vbCBk
ZXNjZW5kYW50V2FzU2Nyb2xsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NlbmRhbnRXYXNTY3Jv
bGxlZDsgfQorICAgIHZvaWQgc2V0RGVzY2VuZGFudFdhc1Njcm9sbGVkKGJvb2wgZGVzY2VuZGFu
dFdhc1Njcm9sbGVkKSB7IG1fZGVzY2VuZGFudFdhc1Njcm9sbGVkID0gZGVzY2VuZGFudFdhc1Nj
cm9sbGVkOyB9CisKICAgICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGU7IH0KICAgICB2b2lkIHNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxhYmxlKSB7IG1fc2Ny
b2xsYWJsZSA9IHNjcm9sbGFibGU7IH0KIApAQCAtMjM2LDYgKzIzOSw5IEBAIHByaXZhdGU6CiAg
ICAgLy8gVHJhY2tzIGlmIGRyYXdpbmctcmVsYXRlZCBwcm9wZXJ0aWVzIGhhdmUgY2hhbmdlZCBz
aW5jZSBsYXN0IHJlZHJhdy4KICAgICBib29sIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7CiAKKyAg
ICAvLyBUcmFja3MgaWYgYSBkZXNjZW5kYW50IG9mIHRoaXMgbGF5ZXIgd2FzIHNjcm9sbGVkIHNp
bmNlIHRoZSBsYXN0IHN5bmMuCisgICAgYm9vbCBtX2Rlc2NlbmRhbnRXYXNTY3JvbGxlZDsKKwog
ICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OwogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRz
OwogICAgIGJvb2wgbV9vcGFxdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRl
eCA2YzhkYTQ2Li5kNDFjNTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAg
LTIyMSw2ICsyMjEsMTUgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkK
ICAgICAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiB9CiAKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0OjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5
ZXIpCit7CisgICAgaWYgKG1fcm9vdExheWVyID09IHJvb3RMYXllcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9yb290TGF5ZXIgPSByb290TGF5ZXI7CisgICAgbV9yb290U2Nyb2xsTGF5ZXIu
Y2xlYXIoKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IElu
dFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKICAgICBtX3ZpZXdwb3J0U2l6ZSA9IHZpZXdwb3J0U2l6
ZTsKQEAgLTQzMywxNSArNDQyLDM0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpjbGVhclBlbmRp
bmdVcGRhdGUoKQogICAgIG1fdXBkYXRlTGlzdC5jbGVhcigpOwogfQogCitzdGF0aWMgTGF5ZXJD
aHJvbWl1bSogZmluZFNjcm9sbExheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIGlm
ICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVyLT5zY3JvbGxhYmxl
KCkpCisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSog
Zm91bmQgPSBmaW5kU2Nyb2xsTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAg
ICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAg
cmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbEFuZFNjYWxl
KGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8pCiB7Ci0gICAgLy8gRklYTUU6IHB1c2hp
bmcgc2Nyb2xsIG9mZnNldHMgdG8gbm9uLXJvb3QgbGF5ZXJzIG5vdCBpbXBsZW1lbnRlZAotICAg
IGlmICghaW5mby5zY3JvbGxzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9y
b290U2Nyb2xsTGF5ZXIpCisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyID0gZmluZFNjcm9sbExh
eWVyKG1fcm9vdExheWVyLmdldCgpKTsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgp
ID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xs
RGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGlu
Zm8ucGFnZVNjYWxlRGVsdGEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zY3Jv
bGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3Jvb3RTY3JvbGxMYXllciAmJiBpbmZv
LnNjcm9sbHNbaV0ubGF5ZXJJZCA9PSBtX3Jvb3RTY3JvbGxMYXllci0+aWQoKSkKKyAgICAgICAg
ICAgIG1fY2xpZW50LT5hcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKGluZm8uc2Nyb2xsc1tp
XS5zY3JvbGxEZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fY2xpZW50LT5hcHBseUxheWVyU2Nyb2xsKGluZm8uc2Nyb2xsc1tpXS5sYXllcklk
LCBpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDQ4N2Q4ZjQuLjFlNTVlZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC01NCw3ICs1NCw4IEBAIGNsYXNzIFRleHR1cmVNYW5h
Z2VyOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0Q2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSwgZmxvYXQgcGFnZVNjYWxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5Um9vdExheWVy
U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2Fs
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUxheWVyU2Nyb2xsKGludCBwbGF0Zm9ybUxh
eWVySWQsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKSA9IDA7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1
Y2Nlc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgPSAw
OwpAQCAtMTYxLDcgKzE2Miw3IEBAIHB1YmxpYzoKIAogICAgIExheWVyQ2hyb21pdW0qIHJvb3RM
YXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJv
bWl1bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KLSAg
ICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllcikg
eyBtX3Jvb3RMYXllciA9IHJvb3RMYXllcjsgfQorICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3Mm
IHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQogCkBAIC0yMTIsNiArMjEz
LDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q0NQcm94eT4gbV9wcm94eTsKIAogICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bV9yb290U2Nyb2xsTGF5ZXI7CiAgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXI7CiAKICAgICBMYXllckxpc3QgbV91cGRhdGVMaXN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA5Yzk2ZTY1Li5jMDJhNjViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNDYsNyArNDYsNiBAQCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3Mm
IHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgICwgbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKICAg
ICAsIG1fZnJhbWVOdW1iZXIoMCkKICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCi0gICAgLCBt
X2lzU2Nyb2xsaW5nKGZhbHNlKQogICAgICwgbV92aXNpYmxlKHRydWUpCiAgICAgLCBtX2hhdmVX
aGVlbEV2ZW50SGFuZGxlcnMoZmFsc2UpCiAgICAgLCBtX3BhZ2VTY2FsZSgxKQpAQCAtMTM1LDcg
KzEzNCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4ZWxz
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZm
ZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Ny
b2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kUm9v
dFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTE0NCw3ICsxNDMsNyBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZp
bmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJldHVybiBsYXllcjsK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFNjcm9sbExheWVyKGxheWVy
LT5jaGlsZHJlbigpW2ldLmdldCgpKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmlu
ZFJvb3RTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiAgICAgICAgIGlm
IChmb3VuZCkKICAgICAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CkBAIC0xNTUsOSArMTU0
LDcgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxh
eWVyKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7Ci0KLSAg
ICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhlIGZpcnN0IHNjcm9sbGFi
bGUgbGF5ZXIuCi0gICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXIobV9yb290
TGF5ZXJJbXBsLmdldCgpKTsKKyAgICBtX3Njcm9sbExheWVySW1wbCA9IGZpbmRSb290U2Nyb2xs
TGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTIyMiwxNyArMjE5LDI3IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0IHBh
Z2VTY2FsZSwgZmxvYXQgbWluCiAgICAgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShw
YWdlU2NhbGVDaGFuZ2UpOwogfQogCitzdGF0aWMgdm9pZCBhZGp1c3RTY3JvbGxlZExheWVyc0Zv
clBhZ2VTY2FsZUNoYW5nZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVD
aGFuZ2UpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgc2Nyb2xs
RGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICBsYXllckltcGwtPnNldFNjcm9sbERl
bHRhKHNjcm9sbERlbHRhKTsKKworICAgIGlmIChsYXllckltcGwtPmRlc2NlbmRhbnRXYXNTY3Jv
bGxlZCgpKQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRy
ZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGFkanVzdFNjcm9sbGVkTGF5ZXJzRm9yUGFn
ZVNjYWxlQ2hhbmdlKGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFnZVNjYWxlQ2hh
bmdlKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphZGp1c3RTY3JvbGxzRm9yUGFn
ZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKIHsKICAgICBpZiAocGFnZVNjYWxl
Q2hhbmdlID09IDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGFsc28gbmVlZCB0byBj
b252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBzcGFjZS4KLSAgICBp
ZiAobV9zY3JvbGxMYXllckltcGwpIHsKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IG1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgICAgICBzY3JvbGxEZWx0YS5zY2Fs
ZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xs
RGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICBhZGp1c3RTY3JvbGxlZExheWVyc0ZvclBh
Z2VTY2FsZUNoYW5nZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIHBhZ2VTY2FsZUNoYW5nZSk7CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVs
dGEpCkBAIC0yOTcsMzggKzMwNCw3MyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5l
ZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsK
IH0KIAotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2lu
dCYpCitzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRJbm5lcm1vc3RTY3JvbGxhYmxlTGF5ZXJBdFBv
aW50KENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkK
IHsKLSAgICAvLyBUT0RPKHNreW9zdGlsKTogQ2hlY2sgZm9yIHNjcm9sbGFibGUgc3VibGF5ZXJz
LgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxhYmxlKCkpCisgICAgaWYgKCFsYXllckltcGwtPmJvdW5kcygpLmlzRW1wdHkoKSkgeworICAg
ICAgICBJbnRQb2ludCBjb250ZW50UG9pbnQobGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpLmludmVyc2UoKS5tYXBQb2ludCh3aW5kb3dQb2ludCkpOworICAgICAgICBpZiAoIUludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgbGF5ZXJJbXBsLT5ib3VuZHMoKSkuY29udGFpbnMoY29udGVu
dFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IENDTGF5ZXJJbXBsKiByZXN1bHQgPSBmaW5kSW5uZXJtb3N0U2Nyb2xsYWJsZUxheWVyQXRQb2lu
dChsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCksIHdpbmRvd1BvaW50KTsKKyAgICAgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYg
KGxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1cm4gbGF5ZXJJbXBsOworCisg
ICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4o
Y29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQoreworICAgIGlmICghbV9zY3JvbGxMYXllcklt
cGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1faXNTY3JvbGxpbmcgPSB0cnVlOwot
ICAgIHJldHVybiB0cnVlOworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gZmlu
ZElubmVybW9zdFNjcm9sbGFibGVMYXllckF0UG9pbnQobV9zY3JvbGxMYXllckltcGwuZ2V0KCks
IHdpbmRvd1BvaW50KTsKKworICAgIHJldHVybiBpc1Njcm9sbGluZygpOwogfQogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQog
ewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMs
IDApOwotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghbV9pc1Njcm9sbGluZykKKyAgICBpZiAoIW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJ
bXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnko
c2Nyb2xsRGVsdGEpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgp
OwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIEludFNp
emUgcGVuZGluZ0RlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBs
ID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuZ2V0KCk7CisgICAgZG8geworICAgICAg
ICBJbnRTaXplIHByZXZpb3VzRGVsdGEobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAg
ICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShwZW5kaW5nRGVsdGEpOworICAgICAgICAvLyBSZXNldCB0
aGUgcGVuZGluZyBkZWx0YSBjb21wbGV0ZWx5IHRvIHplcm8gaWYgdGhlIGxheWVyIHdhcyBhYmxl
IHRvIG1vdmUgaW4gdGhhdCBkaXJlY3Rpb24uIFRoaXMgaXMKKyAgICAgICAgLy8gdG8gZW5zdXJl
IGl0IGlzIHBvc3NpYmxlIHRvIHNjcm9sbCBleGFjdGx5IHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5k
IG9mIHRoZSBzY3JvbGwgYXJlYSByZWdhcmRsZXNzIG9mCisgICAgICAgIC8vIHRoZSBzY3JvbGwg
c3RlcC4KKyAgICAgICAgaWYgKHBlbmRpbmdEZWx0YS53aWR0aCgpICYmIHByZXZpb3VzRGVsdGEu
d2lkdGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAgICAgICAg
IHBlbmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgaWYgKHBlbmRpbmdEZWx0YS5oZWln
aHQoKSAmJiBwcmV2aW91c0RlbHRhLmhlaWdodCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEo
KS5oZWlnaHQoKSkKKyAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRIZWlnaHQoMCk7CisgICAg
ICAgIGRvCisgICAgICAgICAgICBsYXllckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpOworICAg
ICAgICB3aGlsZSAobGF5ZXJJbXBsICYmICFsYXllckltcGwtPnNjcm9sbGFibGUoKSk7CisgICAg
fSB3aGlsZSAoIXBlbmRpbmdEZWx0YS5pc1plcm8oKSAmJiBsYXllckltcGwpOworCisgICAgaWYg
KHBlbmRpbmdEZWx0YSAhPSBzY3JvbGxEZWx0YSkgeworICAgICAgICBtX2NsaWVudC0+c2V0TmVl
ZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3
T25JbXBsVGhyZWFkKCk7CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNj
cm9sbEVuZCgpCiB7Ci0gICAgbV9pc1Njcm9sbGluZyA9IGZhbHNlOworICAgIG1fY3VycmVudGx5
U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1w
bDo6aXNTY3JvbGxpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtX2lzU2Nyb2xsaW5nOworICAg
IHJldHVybiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKIH0KIAogYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpoYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkKQEAgLTM3MSwxMSArNDEzLDM2
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlRW5kKCkKICAgICBtX2Ns
aWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKIH0KIAorc3RhdGljIGJvb2wgY29s
bGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xheWVy
SW1wbCogbGF5ZXJJbXBsKQoreworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgewor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwor
ICAgICAgICBzY3JvbGwubGF5ZXJJZCA9IGxheWVySW1wbC0+aWQoKTsKKyAgICAgICAgc2Nyb2xs
LnNjcm9sbERlbHRhID0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOworICAgICAgICBzY3JvbGxJ
bmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOworCisgICAgICAgIGxheWVySW1wbC0+c2V0U2Ny
b2xsUG9zaXRpb24obGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEobGF5ZXJJ
bXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShJ
bnRTaXplKCkpOworICAgICAgICBsYXllckltcGwtPnNldFBvc2l0aW9uKGxheWVySW1wbC0+cG9z
aXRpb24oKSAtIGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgfQorCisgICAgaWYgKGxh
eWVySW1wbC0+ZGVzY2VuZGFudFdhc1Njcm9sbGVkKCkpIHsKKyAgICAgICAgbGF5ZXJJbXBsLT5z
ZXREZXNjZW5kYW50V2FzU2Nyb2xsZWQoZmFsc2UpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNv
bGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mbywgbGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdl
dCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCkgPiAw
OworfQorCiBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdElt
cGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogewogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxl
U2V0PiBzY3JvbGxJbmZvID0gYWRvcHRQdHIobmV3IENDU2Nyb2xsQW5kU2NhbGVTZXQoKSk7Ci0g
ICAgYm9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKCFtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDEuMGYpOwot
ICAgIGlmICghZGlkTW92ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2ZSkgeworICAgIGlmIChtX3Bp
bmNoR2VzdHVyZUFjdGl2ZSB8fCAhY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgp
LCBtX3Jvb3RMYXllckltcGwuZ2V0KCkpKSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRh
ID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSAxOwogICAgICAgICByZXR1cm4gc2Nyb2xs
SW5mby5yZWxlYXNlKCk7CiAgICAgfQpAQCAtMzg0LDE5ICs0NTEsNiBAQCBQYXNzT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0
YXMoKQogICAgIG1fcGFnZVNjYWxlID0gbV9wYWdlU2NhbGUgKiBtX3NlbnRQYWdlU2NhbGVEZWx0
YTsKICAgICBzZXRQYWdlU2NhbGVEZWx0YSgxKTsKIAotICAgIC8vIEZJWE1FOiB0cmFjayBzY3Jv
bGxzIGZyb20gbGF5ZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9sbC5sYXllcklkID0gbV9z
Y3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gbV9zY3JvbGxM
YXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQo
c2Nyb2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0UG9zaXRpb24obV9zY3JvbGxM
YXllckltcGwtPnBvc2l0aW9uKCkgLSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7
Ci0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShtX3Njcm9sbExheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKSk7Ci0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNjcm9sbERl
bHRhKEludFNpemUoKSk7Ci0KLSAgICBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKG1f
c2VudFBhZ2VTY2FsZURlbHRhKTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDdkMTg3OTAuLjhk
ZmIwN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEzMCw5ICsx
MzAsOSBAQCBwcml2YXRlOgogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5
ZXJSZW5kZXJlcjsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKICAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IG1fc2Nyb2xsTGF5ZXJJbXBsOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7CiAgICAgQ0NTZXR0aW5ncyBt
X3NldHRpbmdzOwogICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7Ci0gICAgYm9vbCBtX2lzU2Ny
b2xsaW5nOwogICAgIGJvb2wgbV92aXNpYmxlOwogICAgIGJvb2wgbV9oYXZlV2hlZWxFdmVudEhh
bmRsZXJzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAw
ZjgwNmJiLi44ZWUyOWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKQEAgLTM2MjcsNyArMzYyNyw3IEBAIENsaXBSZWN0IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5k
Q2xpcFJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnCiAKIHZvaWQg
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlclJlZ2lvbiogcmVnaW9uLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludERpcnR5UmVjdCwg
TGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xp
cFJlY3QmIG91dGxpbmVSZWN0LCBib29sIHRlbXBvcmFyeUNsaXBSZWN0cywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2
YW5jeSkgY29uc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSwgYm9vbCBjbGlwVG9PdmVyZmxvdykgY29uc3QK
IHsKICAgICBpZiAocm9vdExheWVyICE9IHRoaXMgJiYgcGFyZW50KCkpIHsKICAgICAgICAgYmFj
a2dyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3Qocm9vdExheWVyLCByZWdpb24sIHRlbXBv
cmFyeUNsaXBSZWN0cywgcmVsZXZhbmN5KTsKQEAgLTM2NDUsNyArMzY0NSw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJl
bmRlclJlZ2lvbiogcmVnCiAgICAgLy8gVXBkYXRlIHRoZSBjbGlwIHJlY3RzIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gY2hpbGQgbGF5ZXJzLgogICAgIGlmIChyZW5kZXJlcigpLT5oYXNPdmVyZmxv
d0NsaXAoKSB8fCByZW5kZXJlcigpLT5oYXNDbGlwKCkpIHsKICAgICAgICAgLy8gVGhpcyBsYXll
ciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgotICAgICAgICBpZiAocmVuZGVyZXIo
KS0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJm
bG93Q2xpcCgpICYmIGNsaXBUb092ZXJmbG93KSB7CiAgICAgICAgICAgICBmb3JlZ3JvdW5kUmVj
dC5pbnRlcnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3Qob2Zm
c2V0LCByZWdpb24sIHJlbGV2YW5jeSkpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCktPnN0
eWxlKCktPmhhc0JvcmRlclJhZGl1cygpKQogICAgICAgICAgICAgICAgIGZvcmVncm91bmRSZWN0
LnNldEhhc1JhZGl1cyh0cnVlKTsKQEAgLTM2NjksNyArMzY2OSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlclJl
Z2lvbiogcmVnCiAgICAgICAgICAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGxh
eWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93KTsgLy8gTGF5ZXJzIGFyZSBpbiBwaHlzaWNhbCBj
b29yZGluYXRlcywgc28gdGhlIG92ZXJmbG93IGhhcyB0byBiZSBmbGlwcGVkLgogICAgICAgICAg
ICAgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZUJ5KG9mZnNldCk7CiAgICAgICAg
ICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZs
b3cpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UgaWYgKGNsaXBUb092ZXJmbG93
KSB7CiAgICAgICAgICAgICAvLyBTaGlmdCB0aGUgYm91bmRzIHRvIGJlIGZvciBvdXIgcmVnaW9u
IG9ubHkuCiAgICAgICAgICAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHJlbmRlckJveCgpLT5ib3Jk
ZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uKTsKICAgICAgICAgICAgIGJvdW5kcy5tb3ZlQnkob2Zm
c2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggMzExZWVhNS4u
Mzc4OWM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTQ0NSw3
ICs0NDUsNyBAQCBwdWJsaWM6CiAgICAgLy8gZm9yIHBhaW50aW5nL2V2ZW50IGhhbmRsaW5nLgog
ICAgIHZvaWQgY2FsY3VsYXRlUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVu
ZGVyUmVnaW9uKiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIExheW91dFJlY3Qm
IGxheWVyQm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgQ2xpcFJlY3QmIGJhY2tncm91
bmRSZWN0LCBDbGlwUmVjdCYgZm9yZWdyb3VuZFJlY3QsIENsaXBSZWN0JiBvdXRsaW5lUmVjdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzID0gZmFsc2Us
IE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUpIGNvbnN0OworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0ZW1wb3JhcnlDbGlwUmVj
dHMgPSBmYWxzZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSwgYm9vbCBjbGlwVG9PdmVyZmxvdyA9IHRydWUpIGNvbnN0OwogCiAgICAg
Ly8gQ29tcHV0ZSBhbmQgY2FjaGUgY2xpcCByZWN0cyBjb21wdXRlZCB3aXRoIHRoZSBnaXZlbiBs
YXllciBhcyB0aGUgcm9vdAogICAgIHZvaWQgdXBkYXRlQ2xpcFJlY3RzKGNvbnN0IFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIFJlbmRlclJlZ2lvbiosIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBkMGU2ZTA0Li4wNjIzZDQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApA
QCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKIAogI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtOTUsNiArOTYsNyBA
QCBSZW5kZXJMYXllckJhY2tpbmc6On5SZW5kZXJMYXllckJhY2tpbmcoKQogICAgIHVwZGF0ZU92
ZXJmbG93Q29udHJvbHNMYXllcnMoZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgICAgdXBkYXRlRm9y
ZWdyb3VuZExheWVyKGZhbHNlKTsKICAgICB1cGRhdGVNYXNrTGF5ZXIoZmFsc2UpOworICAgIHVw
ZGF0ZVNjcm9sbGluZ0xheWVycyhmYWxzZSk7CiAgICAgZGVzdHJveUdyYXBoaWNzTGF5ZXJzKCk7
CiB9CiAKQEAgLTEzNyw2ICsxMzksOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6ZGVzdHJv
eUdyYXBoaWNzTGF5ZXJzKCkKICAgICBtX2ZvcmVncm91bmRMYXllciA9IG51bGxwdHI7CiAgICAg
bV9jbGlwcGluZ0xheWVyID0gbnVsbHB0cjsKICAgICBtX21hc2tMYXllciA9IG51bGxwdHI7CisK
KyAgICBtX3Njcm9sbGluZ0xheWVyID0gbnVsbHB0cjsKKyAgICBtX3Njcm9sbGluZ0NvbnRlbnRz
TGF5ZXIgPSBudWxscHRyOwogfQogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlTGF5
ZXJPcGFjaXR5KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTE2NCwxMCArMTY5LDEwIEBA
IHN0YXRpYyBib29sIGhhc05vblplcm9UcmFuc2Zvcm1PcmlnaW4oY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKICAgICAgICAgfHwgKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5ZKCkudHlwZSgp
ID09IEZpeGVkICYmIHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5ZKCkudmFsdWUoKSk7CiB9CiAKLXN0
YXRpYyBib29sIGxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWQoUmVuZGVyTGF5ZXIqIGxheWVy
KQorc3RhdGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yU2Nyb2xsaW5nKFJl
bmRlckxheWVyKiBsYXllcikKIHsKICAgICBmb3IgKFJlbmRlckxheWVyKiBjdXJyID0gbGF5ZXI7
IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY3Vyci0+aGFzVHJh
bnNmb3JtKCkpCisgICAgICAgIGlmIChjdXJyLT5oYXNUcmFuc2Zvcm0oKSB8fCBjdXJyLT5zY3Jv
bGxzT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAg
LTE5OSw3ICsyMDQsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRl
ZEJvdW5kcygpCiAgICAgLy8gV2UnZCBuZWVkIFJlbmRlck9iamVjdDo6Y29udmVydENvbnRhaW5l
clRvTG9jYWxRdWFkKCksIHdoaWNoIGRvZXNuJ3QgeWV0IGV4aXN0LiAgSWYgdGhpcwogICAgIC8v
IGlzIGEgZnVsbHNjcmVlbiByZW5kZXJlciwgZG9uJ3QgY2xpcCB0byB0aGUgdmlld3BvcnQsIGFz
IHRoZSByZW5kZXJlciB3aWxsIGJlIGFza2VkIHRvCiAgICAgLy8gZGlzcGxheSBvdXRzaWRlIG9m
IHRoZSB2aWV3cG9ydCBib3VuZHMuCi0gICAgaWYgKGNvbXBvc2l0b3IoKS0+Y29tcG9zaXRpbmdD
b25zdWx0c092ZXJsYXAoKSAmJiAhbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZChtX293bmlu
Z0xheWVyKSAKKyAgICBpZiAoY29tcG9zaXRvcigpLT5jb21wb3NpdGluZ0NvbnN1bHRzT3Zlcmxh
cCgpICYmICFsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcobV9vd25pbmdM
YXllcikKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgICAgICYmICFsYXllck9yQW5j
ZXN0b3JJc0Z1bGxTY3JlZW4obV9vd25pbmdMYXllcikKICNlbmRpZgpAQCAtMjc5LDYgKzI4NCw5
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJh
dGlvbigpCiAgICAgaWYgKHVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMocmVxdWlyZXNIb3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIoKSwgcmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyKCks
IHJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSkpCiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdl
ZCA9IHRydWU7CiAKKyAgICBpZiAodXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKG1fb3duaW5nTGF5ZXIt
PnNjcm9sbHNPdmVyZmxvdygpKSkKKyAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsK
KwogICAgIGlmIChsYXllckNvbmZpZ0NoYW5nZWQpCiAgICAgICAgIHVwZGF0ZUludGVybmFsSGll
cmFyY2h5KCk7CiAKQEAgLTM5NCwxMiArNDAyLDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQogICAgICAgICBncmFwaGljc0xheWVyUGFy
ZW50TG9jYXRpb24gPSBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCk7CiAgICAg
ZWxzZQogICAgICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24gPSByZW5kZXJlcigpLT52
aWV3KCktPmRvY3VtZW50UmVjdCgpLmxvY2F0aW9uKCk7CisKKyAgICBpZiAoY29tcEFuY2VzdG9y
ICYmIGNvbXBBbmNlc3Rvci0+c2Nyb2xsc092ZXJmbG93KCkpIHsKKyAgICAgICAgUmVuZGVyQm94
KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChjb21wQW5jZXN0b3ItPnJlbmRlcmVyKCkpOworICAg
ICAgICBMYXlvdXRSZWN0IHBhZGRpbmdCb3gocmVuZGVyQm94LT5ib3JkZXJMZWZ0KCksIHJlbmRl
ckJveC0+Ym9yZGVyVG9wKCksCisgICAgICAgICAgICByZW5kZXJCb3gtPndpZHRoKCkgLSByZW5k
ZXJCb3gtPmJvcmRlckxlZnQoKSAtIHJlbmRlckJveC0+Ym9yZGVyUmlnaHQoKSwKKyAgICAgICAg
ICAgIHJlbmRlckJveC0+aGVpZ2h0KCkgLSByZW5kZXJCb3gtPmJvcmRlclRvcCgpIC0gcmVuZGVy
Qm94LT5ib3JkZXJCb3R0b20oKSk7CisKKyAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQg
PSBjb21wQW5jZXN0b3ItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBncmFwaGlj
c0xheWVyUGFyZW50TG9jYXRpb24gPSBwYWRkaW5nQm94LmxvY2F0aW9uKCkgLSBzY3JvbGxPZmZz
ZXQ7CisgICAgfQogICAgIAogICAgIGlmIChjb21wQW5jZXN0b3IgJiYgbV9hbmNlc3RvckNsaXBw
aW5nTGF5ZXIpIHsKICAgICAgICAgLy8gQ2FsbCBjYWxjdWxhdGVSZWN0cyB0byBnZXQgdGhlIGJh
Y2tncm91bmRSZWN0IHdoaWNoIGlzIHdoYXQgaXMgdXNlZCB0byBjbGlwIHRoZSBjb250ZW50cyBv
ZiB0aGlzCiAgICAgICAgIC8vIGxheWVyLiBOb3RlIHRoYXQgd2UgY2FsbCBpdCB3aXRoIHRlbXBv
cmFyeUNsaXBSZWN0cyA9IHRydWUgYmVjYXVzZSBub3JtYWxseSB3aGVuIGNvbXB1dGluZyBjbGlw
IHJlY3RzCiAgICAgICAgIC8vIGZvciBhIGNvbXBvc2l0aW5nIGxheWVyLCByb290TGF5ZXIgaXMg
dGhlIGxheWVyIGl0c2VsZi4KLSAgICAgICAgTGF5b3V0UmVjdCBwYXJlbnRDbGlwUmVjdCA9IG1f
b3duaW5nTGF5ZXItPmJhY2tncm91bmRDbGlwUmVjdChjb21wQW5jZXN0b3IsIDAsIHRydWUpLnJl
Y3QoKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCisgICAgICAgIExheW91
dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBjb21wQW5jZXN0b3ItPnNjcm9sbHNPdmVyZmxvdygpID8g
cmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcyA6IG1fb3duaW5nTGF5ZXItPmJhY2tncm91bmRDbGlw
UmVjdChjb21wQW5jZXN0b3IsIDAsIHRydWUpLnJlY3QoKTsgLy8gRklYTUU6IEluY29ycmVjdCBm
b3IgQ1NTIHJlZ2lvbnMuCiAgICAgICAgIEFTU0VSVChwYXJlbnRDbGlwUmVjdCAhPSBQYWludElu
Zm86OmluZmluaXRlUmVjdCgpKTsKICAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQoKSArIChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZ3Jh
cGhpY3NMYXllclBhcmVudExvY2F0aW9uKSk7CiAgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xh
eWVyLT5zZXRTaXplKHBhcmVudENsaXBSZWN0LnNpemUoKSk7CkBAIC01MDksNiArNTI3LDM0IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQog
ICAgICAgICByZWZsZWN0aW9uQmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT5zZXRSZXBsaWNhdGVk
TGF5ZXJQb3NpdGlvbihGbG9hdFBvaW50KCkgKyAobGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJl
ZmxlY3Rpb25MYXllckJvdW5kcy5sb2NhdGlvbigpKSk7CiAgICAgfQogCisgICAgaWYgKG1fc2Ny
b2xsaW5nTGF5ZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fc2Nyb2xsaW5nQ29udGVudHNMYXllcik7
CisgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSk7
CisgICAgICAgIExheW91dFJlY3QgcGFkZGluZ0JveChyZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwg
cmVuZGVyQm94LT5ib3JkZXJUb3AoKSwgcmVuZGVyQm94LT53aWR0aCgpIC0gcmVuZGVyQm94LT5i
b3JkZXJMZWZ0KCkgLSByZW5kZXJCb3gtPmJvcmRlclJpZ2h0KCksIHJlbmRlckJveC0+aGVpZ2h0
KCkgLSByZW5kZXJCb3gtPmJvcmRlclRvcCgpIC0gcmVuZGVyQm94LT5ib3JkZXJCb3R0b20oKSk7
CisgICAgICAgIExheW91dFNpemUgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci0+c2Nyb2xs
ZWRDb250ZW50T2Zmc2V0KCk7CisKKyAgICAgICAgbV9zY3JvbGxpbmdMYXllci0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludCgpICsgKHBhZGRpbmdCb3gubG9jYXRpb24oKSAtIGxvY2FsQ29tcG9zaXRp
bmdCb3VuZHMubG9jYXRpb24oKSkpOworICAgICAgICBtX3Njcm9sbGluZ0xheWVyLT5zZXRTaXpl
KHBhZGRpbmdCb3guc2l6ZSgpKTsKKyAgICAgICAgbV9zY3JvbGxpbmdMYXllci0+c2V0T2Zmc2V0
RnJvbVJlbmRlcmVyKExheW91dFBvaW50KCkgLSBwYWRkaW5nQm94LmxvY2F0aW9uKCkpOworICAg
ICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBjb250ZW50cyBvZmZzZXQgdmlhIHRo
ZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhlciB0aGFuIGEgcG9zaXRpb24gb24g
dGhlIHN1YmxheWVyLgorICAgICAgICBtX3Njcm9sbGluZ0xheWVyLT5zZXRCb3VuZHNPcmlnaW4o
RmxvYXRQb2ludChzY3JvbGxPZmZzZXQud2lkdGgoKSwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSk7
CisKKyAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxTaXplKG1fb3duaW5nTGF5ZXItPnNjcm9sbFdp
ZHRoKCksIG1fb3duaW5nTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKKworICAgICAgICBtX3Njcm9s
bGluZ0NvbnRlbnRzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLXJlbmRlckJveC0+c2Ny
b2xsTGVmdCgpLCAtcmVuZGVyQm94LT5zY3JvbGxUb3AoKSkpOworCisgICAgICAgIGlmIChzY3Jv
bGxTaXplICE9IG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2l6ZSgpKQorICAgICAgICAgICAg
bV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKworICAgICAgICBt
X3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldFNpemUoc2Nyb2xsU2l6ZSk7CisgICAgICAgIG1f
c2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKHBhZGRpbmdCb3gu
bG9jYXRpb24oKSAtIExheW91dFBvaW50KCkgLSBzY3JvbGxPZmZzZXQpOworICAgICAgICBtX3Nj
cm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KHJlbmRlckJv
eC0+c2Nyb2xsTGVmdCgpLCByZW5kZXJCb3gtPnNjcm9sbFRvcCgpKSk7CisgICAgICAgIG1fc2Ny
b2xsaW5nQ29udGVudHNMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZShyZW5kZXJC
b3gtPnNjcm9sbFdpZHRoKCkgLSByZW5kZXJCb3gtPmNsaWVudFdpZHRoKCksIHJlbmRlckJveC0+
c2Nyb2xsSGVpZ2h0KCkgLSByZW5kZXJCb3gtPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgIG1f
c2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2V0U2Nyb2xsTm9kZShyZW5kZXJlcigpLT5ub2RlKCkp
OworCisgICAgICAgIC8vY29tcG9zaXRvcigpLT5zY3JvbGxpbmdMYXllckFkZGVkT3JVcGRhdGVk
KG1fb3duaW5nTGF5ZXIsIG1fc2Nyb2xsaW5nTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgbV9zY3Jv
bGxpbmdDb250ZW50c0xheWVyLT5wbGF0Zm9ybUxheWVyKCksIHNjcm9sbFNpemUpOworICAgIH0K
KwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNSZWN0KGNvbnRlbnRzQm94KCkpOwog
ICAgIHVwZGF0ZURyYXdzQ29udGVudCgpOwogICAgIHVwZGF0ZUFmdGVyV2lkZ2V0UmVzaXplKCk7
CkBAIC01NDQsNiArNTkwLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbnRl
cm5hbEhpZXJhcmNoeSgpCiAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZENoaWxkKG1f
bGF5ZXJGb3JTY3JvbGxDb3JuZXIuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQorICAgIGlmICht
X3Njcm9sbGluZ0xheWVyKSB7CisgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKKyAgICAgICAgcGFyZW50Rm9yU3VibGF5ZXJzKCktPmFkZENoaWxkKG1fc2Nyb2xs
aW5nTGF5ZXIuZ2V0KCkpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZURyYXdzQ29udGVudCgpCkBAIC02OTMsNiArNzQzLDQ4IEBAIGJvb2wgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVNYXNrTGF5ZXIoYm9vbCBuZWVkc01hc2tMYXllcikKICAgICByZXR1cm4g
bGF5ZXJDaGFuZ2VkOwogfQogCitib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xs
aW5nTGF5ZXJzKGJvb2wgc2Nyb2xsaW5nTGF5ZXJzKQoreworICAgIGJvb2wgbGF5ZXJDaGFuZ2Vk
ID0gZmFsc2U7CisgICAgaWYgKHNjcm9sbGluZ0xheWVycykgeworICAgICAgICBpZiAoIW1fc2Ny
b2xsaW5nTGF5ZXIpIHsKKyAgICAgICAgICAgIC8vIE91dGVyIGxheWVyIHdoaWNoIGNvcnJlc3Bv
bmRzIHdpdGggdGhlIHNjcm9sbCB2aWV3LgorICAgICAgICAgICAgbV9zY3JvbGxpbmdMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAg
ICBtX3Njcm9sbGluZ0xheWVyLT5zZXROYW1lKCJTY3JvbGxpbmcgY29udGFpbmVyIik7CisjZW5k
aWYKKyAgICAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7
CisgICAgICAgICAgICBtX3Njcm9sbGluZ0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwor
CisgICAgICAgICAgICAvLyBJbm5lciBsYXllciB3aGljaCByZW5kZXJzIHRoZSBjb250ZW50IHRo
YXQgc2Nyb2xscy4KKyAgICAgICAgICAgIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICBtX3Nj
cm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldE5hbWUoIlNjcm9sbGluZyBDb250ZW50cyIpOworI2Vu
ZGlmCisgICAgICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2V0UGFpbnRp
bmdQaGFzZShzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZT4oR3JhcGhpY3NM
YXllclBhaW50Rm9yZWdyb3VuZCB8IEdyYXBoaWNzTGF5ZXJQYWludE92ZXJmbG93Q29udGVudHMp
KTsKKyAgICAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPmFkZENoaWxkKG1fc2Nyb2xsaW5nQ29u
dGVudHNMYXllci5nZXQoKSk7CisKKyAgICAgICAgICAgIGxheWVyQ2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAvL2NvbXBvc2l0b3IoKS0+c2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRlZCht
X293bmluZ0xheWVyLCBtX3Njcm9sbGluZ0xheWVyLT5wbGF0Zm9ybUxheWVyKCksIG1fc2Nyb2xs
aW5nQ29udGVudHNMYXllci0+cGxhdGZvcm1MYXllcigpLCBMYXlvdXRTaXplKG1fb3duaW5nTGF5
ZXItPnNjcm9sbFdpZHRoKCksIG1fb3duaW5nTGF5ZXItPnNjcm9sbEhlaWdodCgpKSk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fc2Nyb2xsaW5nTGF5ZXIpIHsKKyAgICAgICAgLy9pZiAo
IXJlbmRlcmVyKCktPmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkKKyAgICAgICAgICAgIC8vY29t
cG9zaXRvcigpLT5zY3JvbGxpbmdMYXllclJlbW92ZWQobV9vd25pbmdMYXllciwgbV9zY3JvbGxp
bmdMYXllci0+cGxhdGZvcm1MYXllcigpLCBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKSk7CisKKyAgICAgICAgbV9zY3JvbGxpbmdMYXllciA9IG51bGxwdHI7CisgICAg
ICAgIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllciA9IG51bGxwdHI7CisgICAgICAgIGxheWVyQ2hh
bmdlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGxheWVyQ2hhbmdlZCkgeworICAgICAgICB1
cGRhdGVJbnRlcm5hbEhpZXJhcmNoeSgpOworICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFBh
aW50aW5nUGhhc2UocGFpbnRpbmdQaGFzZUZvclByaW1hcnlMYXllcigpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbGF5ZXJDaGFuZ2VkOworfQorCiBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBS
ZW5kZXJMYXllckJhY2tpbmc6OnBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdAog
ewogICAgIHVuc2lnbmVkIHBoYXNlID0gR3JhcGhpY3NMYXllclBhaW50QmFja2dyb3VuZDsKQEAg
LTcwMSw2ICs3OTMsOSBAQCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBSZW5kZXJMYXllckJh
Y2tpbmc6OnBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjbwogICAgIGlmICghbV9tYXNr
TGF5ZXIpCiAgICAgICAgIHBoYXNlIHw9IEdyYXBoaWNzTGF5ZXJQYWludE1hc2s7CiAKKyAgICBp
ZiAobV9zY3JvbGxpbmdDb250ZW50c0xheWVyKQorICAgICAgICBwaGFzZSAmPSB+R3JhcGhpY3NM
YXllclBhaW50Rm9yZWdyb3VuZDsKKwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZT4ocGhhc2UpOwogfQogCkBAIC0xMDU4LDYgKzExNTMsOSBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheSgpCiAKICAgICBpZiAo
bV9tYXNrTGF5ZXIgJiYgbV9tYXNrTGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICBtX21h
c2tMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICBpZiAobV9zY3JvbGxpbmdDb250ZW50
c0xheWVyICYmIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAg
ICAgIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKIC8v
IHIgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIGxheWVyJ3MgcmVuZGVyIG9iamVj
dApAQCAtMTA4MCw2ICsxMTc4LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250
ZW50c05lZWREaXNwbGF5SW5SZWN0KGNvbnN0IExheW91dFJlY3QmIHIpCiAgICAgICAgIGxheWVy
RGlydHlSZWN0Lm1vdmUoLW1fbWFza0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7CiAgICAg
ICAgIG1fbWFza0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QpOwog
ICAgIH0KKworICAgIGlmIChtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxpbmdD
b250ZW50c0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBMYXlvdXRSZWN0IGxheWVy
RGlydHlSZWN0ID0gcjsKKyAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxpbmdD
b250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7CisgICAgICAgIG1fc2Nyb2xsaW5n
Q29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVyRGlydHlSZWN0KTsKKyAg
ICB9CiB9CiAKIC8vIFNoYXJlIHRoaXMgd2l0aCBSZW5kZXJMYXllcjo6cGFpbnRMYXllciwgd2hp
Y2ggd291bGQgaGF2ZSB0byBiZSBlZHVjYXRlZCBhYm91dCBHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZT8KQEAgLTExMDAsNyArMTIwNCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWlu
dEludG9MYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0NvbnRleHQqCiAgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCiAgICAgTGF5b3V0UmVj
dCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHks
IG91dGxpbmVSZWN0OwotICAgIG1fb3duaW5nTGF5ZXItPmNhbGN1bGF0ZVJlY3RzKHJvb3RMYXll
ciwgMCwgcGFpbnREaXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRv
QXBwbHksIG91dGxpbmVSZWN0KTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMu
CisgICAgbV9vd25pbmdMYXllci0+Y2FsY3VsYXRlUmVjdHMocm9vdExheWVyLCAwLCBwYWludERp
cnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGlu
ZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplLCAhKHBhaW50aW5nUGhhc2UgJiBHcmFwaGljc0xheWVyUGFpbnRP
dmVyZmxvd0NvbnRlbnRzKSk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgog
CiAgICAgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQgPSB0b1BvaW50KGxheWVyQm91bmRzLmxvY2F0
aW9uKCkgLSBtX293bmluZ0xheWVyLT5yZW5kZXJCb3hMb2NhdGlvbigpKTsKIApAQCAtMTIwMiw3
ICsxMzA3LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKIC8vIFVwLWNhbGwgZnJvbSBjb21w
b3NpdGluZyBsYXllciBkcmF3aW5nIGNhbGxiYWNrLgogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBwYWludGluZ1Bo
YXNlLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwKQogewotICAgIGlmIChncmFwaGljc0xheWVyID09
IG1fZ3JhcGhpY3NMYXllci5nZXQoKSB8fCBncmFwaGljc0xheWVyID09IG1fZm9yZWdyb3VuZExh
eWVyLmdldCgpIHx8IGdyYXBoaWNzTGF5ZXIgPT0gbV9tYXNrTGF5ZXIuZ2V0KCkpIHsKKyAgICBp
ZiAoZ3JhcGhpY3NMYXllciA9PSBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCkgfHwgZ3JhcGhpY3NMYXll
ciA9PSBtX2ZvcmVncm91bmRMYXllci5nZXQoKSB8fCBncmFwaGljc0xheWVyID09IG1fbWFza0xh
eWVyLmdldCgpIHx8IGdyYXBoaWNzTGF5ZXIgPT0gbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLmdl
dCgpKSB7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQYWludChtX293bmluZ0xheWVyLT5yZW5kZXJl
cigpLT5mcmFtZSgpLCBjbGlwKTsKIAogICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGdyYXBo
aWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwpAQCAtMTIxMiw4ICsxMzE3LDkgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllciwgR3JhcGgKICAgICAgICAgY2xpcFJlY3QubW92ZShvZmZzZXQpOwogCiAg
ICAgICAgIC8vIFRoZSBkaXJ0eVJlY3QgaXMgaW4gdGhlIGNvb3JkcyBvZiB0aGUgcGFpbnRpbmcg
cm9vdC4KLSAgICAgICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3QgPSBjb21wb3NpdGVkQm91bmRzKCk7
Ci0gICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOworICAgICAgICBMYXlvdXRS
ZWN0IGRpcnR5UmVjdCA9IGNsaXBSZWN0OworICAgICAgICBpZiAoIShwYWludGluZ1BoYXNlICYg
R3JhcGhpY3NMYXllclBhaW50T3ZlcmZsb3dDb250ZW50cykpCisgICAgICAgICAgICBkaXJ0eVJl
Y3QuaW50ZXJzZWN0KGNvbXBvc2l0ZWRCb3VuZHMoKSk7CiAKICAgICAgICAgLy8gV2UgaGF2ZSB0
byB1c2UgdGhlIHNhbWUgcm9vdCBhcyBmb3IgaGl0IHRlc3RpbmcsIGJlY2F1c2UgYm90aCBtZXRo
b2RzIGNhbiBjb21wdXRlIGFuZCBjYWNoZSBjbGlwUmVjdHMuCiAgICAgICAgIHBhaW50SW50b0xh
eWVyKG1fb3duaW5nTGF5ZXIsICZjb250ZXh0LCBkaXJ0eVJlY3QsIFBhaW50QmVoYXZpb3JOb3Jt
YWwsIHBhaW50aW5nUGhhc2UsIHJlbmRlcmVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5oCmluZGV4IDJjNjQ2ZjguLjM4YzA4OGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTgzLDYgKzgz
LDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fZm9yZWdyb3VuZExheWVyICE9IDA7IH0KICAgICBHcmFwaGljc0xheWVyKiBmb3JlZ3Jv
dW5kTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZvcmVncm91bmRMYXllci5nZXQoKTsgfQorCisg
ICAgYm9vbCBoYXNTY3JvbGxpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5
ZXI7IH0KKyAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsaW5nTGF5ZXIuZ2V0KCk7IH0KKyAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxpbmdD
b250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLmdl
dCgpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNNYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21h
c2tMYXllciAhPSAwOyB9CiAKQEAgLTE2MSw2ICsxNjUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdDsKICAgICBib29sIHJlcXVp
cmVzVmVydGljYWxTY3JvbGxiYXJMYXllcigpIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNTY3Jv
bGxDb3JuZXJMYXllcigpIGNvbnN0OworICAgIGJvb2wgdXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJv
b2wgc2Nyb2xsaW5nTGF5ZXJzKTsKIAogICAgIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIHBh
aW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdDsKICAgICAKQEAgLTIxMSw2ICsyMTYs
OSBAQCBwcml2YXRlOgogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXI7CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fbGF5ZXJGb3JTY3JvbGxD
b3JuZXI7CiAKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9zY3JvbGxpbmdMYXllcjsgICAg
ICAgICAvLyBvbmx5IHVzZWQgaWYgdGhlIGxheWVyIGlzIHNjcm9sbGFibGUuCisgICAgT3duUHRy
PEdyYXBoaWNzTGF5ZXI+IG1fc2Nyb2xsaW5nQ29udGVudHNMYXllcjsgLy8gb25seSB1c2VkIGlm
IHRoZSBsYXllciBpcyBzY3JvbGxhYmxlLgorCiAgICAgTGF5b3V0UmVjdCBtX2NvbXBvc2l0ZWRC
b3VuZHM7CiAKICAgICBib29sIG1fYXJ0aWZpY2lhbGx5SW5mbGF0ZWRCb3VuZHM7ICAgICAgLy8g
Ym91bmRzIGhhZCB0byBiZSBtYWRlIG5vbi16ZXJvIHRvIG1ha2UgdHJhbnNmb3JtLW9yaWdpbiB3
b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCmluZGV4IGY5M2EzOTkuLjA3M2RkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC05MjQsNiArOTI0LDkgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZShS
ZW5kZXJMYXllciogbGF5ZXIsIGNvbnMKICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5p
c1JlbmRlclBhcnQoKSkKICAgICAgICAgICAgIHBhcmVudGVkID0gcGFyZW50RnJhbWVDb250ZW50
TGF5ZXJzKHRvUmVuZGVyUGFydChsYXllci0+cmVuZGVyZXIoKSkpOwogCisgICAgICAgIGlmIChH
cmFwaGljc0xheWVyKiBzY3JvbGxpbmdMYXllciA9IGxheWVyQmFja2luZy0+c2Nyb2xsaW5nTGF5
ZXIoKSkKKyAgICAgICAgICAgIGNoaWxkTGlzdC5hcHBlbmQoc2Nyb2xsaW5nTGF5ZXIpOworCiAg
ICAgICAgIGlmICghcGFyZW50ZWQpCiAgICAgICAgICAgICBsYXllckJhY2tpbmctPnBhcmVudEZv
clN1YmxheWVycygpLT5zZXRDaGlsZHJlbihsYXllckNoaWxkcmVuKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IGE4YWQzOTYu
LmJjMTNmNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgKQEAgLTI4NCw2ICsyODQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWly
ZXNDb21wb3NpdGluZ0ZvckZ1bGxTY3JlZW4oUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgYm9v
bCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsYWJsZUZyYW1lKCkgY29uc3Q7CiAgICAgYm9v
bCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyTGF5ZXIqKSBjb25zdDsKKyAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JTY3JvbGxp
bmcoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKICAgICBib29sIHJlcXVpcmVzU2Nyb2xsTGF5ZXIo
Um9vdExheWVyQXR0YWNobWVudCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0hvcml6b250YWxT
Y3JvbGxiYXJMYXllcigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCmluZGV4IDZmNTAwOTYuLmJmNWJmNjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZp
ZXdDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRy
ZWVWaWV3Q2xpZW50LmgKQEAgLTQxLDcgKzQxLDExIEBAIHB1YmxpYzoKICAgICAvLyBzY2FsZSBm
YWN0b3IgdGhhdCBtYXkgYXBwbHkgYSBDU1MgdHJhbnNmb3JtIG9uIHRoZSB3aG9sZSBkb2N1bWVu
dCAodXNlZAogICAgIC8vIGZvciBtb2JpbGUtZGV2aWNlIHBpbmNoIHpvb21pbmcpLiBUaGlzIGlz
IHRyaWdnZXJlZCBieSBldmVudHMgc2VudCB0byB0aGUKICAgICAvLyBjb21wb3NpdG9yIHRocmVh
ZCB0aHJvdWdoIHRoZSBXZWJDb21wb3NpdG9yIGludGVyZmFjZS4KLSAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgc2Nh
bGVGYWN0b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSb290TGF5ZXJTY3JvbGxBbmRT
Y2FsZShjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgc2NhbGVGYWN0b3IpID0gMDsK
KworICAgIC8vIEFwcGxpZXMgYSBzY3JvbGwgZGVsdGEgdG8gYSBub24tcm9vdCBsYXllci4gVGhp
cyBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzCisgICAgLy8gc2VudCB0byB0aGUgY29tcG9zaXRvciB0
aHJlYWQgdGhyb3VnaCB0aGUgV2ViQ29tcG9zaXRvciBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5TGF5ZXJTY3JvbGwoaW50IHBsYXRmb3JtTGF5ZXJJZCwgY29uc3QgV2ViU2l6ZSYg
c2Nyb2xsRGVsdGEpID0gMDsKIAogICAgIC8vIENyZWF0ZXMgYSAzRCBjb250ZXh0IHN1aXRhYmxl
IGZvciB0aGUgY29tcG9zaXRpbmcuIFRoaXMgbWF5IGJlIGNhbGxlZAogICAgIC8vIG1vcmUgdGhh
biBvbmNlIGlmIHRoZSBjb250ZXh0IGdldHMgbG9zdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmNwcAppbmRleCAzM2M5ODM2Li5iODM3YTdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuY3Bw
CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW1wbDo6aGFuZGxlSW5wdXRF
dmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2NsaWVudCk7CiAKLSAgICBpZiAoZXZlbnQudHlw
ZSA9PSBXZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVsICYmICFtX2lucHV0SGFuZGxlckNsaWVudC0+
aGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpKSB7CisgICAgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5w
dXRFdmVudDo6TW91c2VXaGVlbCAvKiYmICFtX2lucHV0SGFuZGxlckNsaWVudC0+aGF2ZVdoZWVs
RXZlbnRIYW5kbGVycygpKi8pIHsKICAgICAgICAgY29uc3QgV2ViTW91c2VXaGVlbEV2ZW50JiB3
aGVlbEV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZldmVu
dCk7CiAgICAgICAgIGlmIChtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQod2hlZWxFdmVudC54LCB3aGVlbEV2ZW50LnkpKSkgewogICAgICAgICAgICAgbV9pbnB1dEhh
bmRsZXJDbGllbnQtPnNjcm9sbEJ5KEludFNpemUoLXdoZWVsRXZlbnQuZGVsdGFYLCAtd2hlZWxF
dmVudC5kZWx0YVkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkxheWVyVHJlZVZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVyVHJlZVZpZXdJbXBsLmNwcAppbmRleCA4Yzg2ODRiLi5lM2MxZWY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCkBAIC02
NSwxMCArNjUsMTYgQEAgdm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91
dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCiAgICAgICAgIG1fY2xpZW50LT5hbmltYXRlQW5kTGF5
b3V0KGZyYW1lQmVnaW5UaW1lKTsKIH0KIAotdm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBw
bHlTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxv
YXQgcGFnZVNjYWxlKQordm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlSb290TGF5ZXJT
Y3JvbGxBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQg
cGFnZVNjYWxlKQogewogICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmFwcGx5
U2Nyb2xsQW5kU2NhbGUoV2ViU2l6ZShzY3JvbGxEZWx0YSksIHBhZ2VTY2FsZSk7CisgICAgICAg
IG1fY2xpZW50LT5hcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKFdlYlNpemUoc2Nyb2xsRGVs
dGEpLCBwYWdlU2NhbGUpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseUxh
eWVyU2Nyb2xsKGludCBwbGF0Zm9ybUxheWVySWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbERlbHRhKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5
TGF5ZXJTY3JvbGwocGxhdGZvcm1MYXllcklkLCBXZWJTaXplKHNjcm9sbERlbHRhKSk7CiB9CiAK
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVh
dGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oCmluZGV4IDBjZmMyODMuLjJkNmUzNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaApA
QCAtNDIsNyArNDIsOCBAQCBwcml2YXRlOgogICAgIFdlYkxheWVyVHJlZVZpZXdJbXBsKFdlYkxh
eWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJU
cmVlVmlldzo6U2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVWaWV3SW1wbCgp
OwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSk7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Ny
b2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJT
Y3JvbGwoaW50IHBsYXRmb3JtTGF5ZXJJZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
RGVsdGEpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRDb21taXRBbmREcmF3RnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAppbmRleCBhMzlhMzFkLi5lNzZhOTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0yODk3LDcgKzI4OTcsNDEgQEAgdm9pZCBXZWJW
aWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCiAgICAgbGF5
b3V0KCk7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZURlbHRhKQorc3RhdGljIGJvb2wg
YXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIsIGlu
dCBwbGF0Zm9ybUxheWVySWQsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIGlm
IChsYXllci0+cGxhdGZvcm1MYXllcigpLT5pZCgpID09IHBsYXRmb3JtTGF5ZXJJZCkgeworICAg
ICAgICBOb2RlKiBub2RlID0gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2Nyb2xsTm9kZSgpOwor
CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYg
KHJlbmRlcmVyLT5pc0JveCgpICYmIHJlbmRlcmVyLT5lbmNsb3NpbmdCb3goKSkgeworICAgICAg
ICAgICAgUmVuZGVyQm94KiBlbmNsb3NpbmdCb3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94KCk7
CisgICAgICAgICAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSkKKyAgICAgICAgICAgICAgICBl
bmNsb3NpbmdCb3gtPnNjcm9sbChzY3JvbGxEZWx0YS53aWR0aCgpID4gMCA/IFNjcm9sbFJpZ2h0
IDogU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhlbCwgYWJzKHNjcm9sbERlbHRhLndpZHRoKCkpKTsK
KyAgICAgICAgICAgIGlmIChzY3JvbGxEZWx0YS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBl
bmNsb3NpbmdCb3gtPnNjcm9sbChzY3JvbGxEZWx0YS5oZWlnaHQoKSA+IDAgPyBTY3JvbGxEb3du
IDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGFicyhzY3JvbGxEZWx0YS5oZWlnaHQoKSkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChh
cHBseVNjcm9sbFRvQ2hpbGRMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXSwgcGxhdGZvcm1MYXll
cklkLCBzY3JvbGxEZWx0YSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwoaW50IHBsYXRm
b3JtTGF5ZXJJZCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgaWYgKCFtX3Jv
b3RHcmFwaGljc0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RPKHNreW9zdGls
KTogTG9vayB1cCB0aGUgbGF5ZXJzIGJ5IGlkIGluc3RlYWQgb2Ygd2Fsa2luZyB0aGUgbGF5ZXIg
dHJlZQorICAgIGFwcGx5U2Nyb2xsVG9DaGlsZExheWVyKG1fcm9vdEdyYXBoaWNzTGF5ZXIsIHBs
YXRmb3JtTGF5ZXJJZCwgc2Nyb2xsRGVsdGEpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjphcHBs
eVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9h
dCBwYWdlU2NhbGVEZWx0YSkKIHsKICAgICBpZiAoIW1haW5GcmFtZUltcGwoKSB8fCAhbWFpbkZy
YW1lSW1wbCgpLT5mcmFtZVZpZXcoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggNmVkNzViMy4uMjFlZmJjYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0yMzAsNyArMjMwLDggQEAgcHVi
bGljOgogCiAgICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGFu
aW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxvYXQpOworICAg
IHZpcnR1YWwgdm9pZCBhcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBmbG9hdCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJTY3JvbGwoaW50
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGVkZjE0M2Qu
LjNjNmNmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xNzQsNiArMTc0LDIzIEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3RhdGVmdWxTY3JvbGxpbmcpCiAgICAgQVNTRVJUX0VR
KHJvb3QtPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkgKyBzY3JvbGxEZWx0YSk7CiB9CiAK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm90aWZ5QW5jZXN0b3JMYXllcnNBYm91
dFNjcm9sbGluZykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDEwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSgxMSk7CisKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBj
aGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIG1faG9z
dEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisK
KyAgICBBU1NFUlRfRkFMU0Uocm9vdC0+ZGVzY2VuZGFudFdhc1Njcm9sbGVkKCkpOworICAgIGNo
aWxkLT5zY3JvbGxCeShJbnRTaXplKDE1LCAxNikpOworICAgIEFTU0VSVF9UUlVFKHJvb3QtPmRl
c2NlbmRhbnRXYXNTY3JvbGxlZCgpKTsKKyAgICBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVs
dGFzKCk7CisgICAgQVNTRVJUX0ZBTFNFKHJvb3QtPmRlc2NlbmRhbnRXYXNTY3JvbGxlZCgpKTsK
K30KKwogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21t
aXRBbmRSZWRyYXcpCiB7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDRhNDE3OTYuLjIzNjk2NmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApA
QCAtNTgsNyArNTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25D
Q1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNvbW1p
dENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiwgZmxvYXQp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKGNvbnN0
IEludFNpemUmLCBmbG9hdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJTY3JvbGwo
aW50IGxheWVySWQsIGNvbnN0IEludFNpemUmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQogfTsKIApAQCAtMTU1LDkgKzE1
NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fdGVzdEhvb2tzLT5hbmltYXRlQW5kTGF5b3V0KGZy
YW1lQmVnaW5UaW1lKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRT
Y2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgc2NhbGUpCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGZsb2F0IHNjYWxlKQogICAgIHsKLSAgICAgICAgbV90ZXN0SG9va3MtPmFwcGx5U2Ny
b2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIHNjYWxlKTsKKyAgICAgICAgbV90ZXN0SG9va3MtPmFw
cGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIHNjYWxlKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlMYXllclNjcm9sbChpbnQgcGxhdGZvcm1MYXllcklkLCBj
b25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKKyAgICB7CisgICAgICAgIG1fdGVzdEhvb2tzLT5h
cHBseUxheWVyU2Nyb2xsKHBsYXRmb3JtTGF5ZXJJZCwgc2Nyb2xsRGVsdGEpOwogICAgIH0KIAog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVl
SG9zdENvbnRleHQzRCgpCkBAIC03NjcsNyArNzczLDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHNjYWxlKQorICAgIHZpcnR1YWwgdm9pZCBhcHBseVJvb3RM
YXllclNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2Fs
ZSkKICAgICB7CiAgICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gbV9sYXllclRyZWVIb3N0LT5y
b290TGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5y
b290TGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CkBA
IC04NDQsNyArODUwLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdmlydHVh
bCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZs
b2F0IHNjYWxlKQorICAgIHZpcnR1YWwgdm9pZCBhcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxl
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZSkKICAgICB7CiAgICAgICAg
IEludFBvaW50IHBvc2l0aW9uID0gbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+c2Nyb2xs
UG9zaXRpb24oKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+c2V0U2Ny
b2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CkBAIC05MDQsNiArOTEwLDE0MSBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldFZpc2libGUsIHJ1bk11bHRpVGhyZWFkKQog
ICAgIHJ1blRlc3QodHJ1ZSk7CiB9CiAKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxC
YXNlIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fcm9vdFNjcm9sbExh
eWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXll
ci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVy
LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0TWF4
U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RTY3JvbGxMYXllcik7CisgICAgICAgIG1f
Y2hpbGRMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9jaGlsZExh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5z
ZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldE1heFNjcm9sbFBv
c2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPmFk
ZENoaWxkKG1fY2hpbGRMYXllcik7CisgICAgICAgIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFpblRo
cmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVJvb3RMYXllclNjcm9sbEFu
ZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCkKKyAgICB7CisgICAgICAg
IEludFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7
CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiAr
IHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlMYXllclNjcm9s
bChpbnQgcGxhdGZvcm1MYXllcklkLCBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKKyAgICB7
CisgICAgICAgIExheWVyQ2hyb21pdW0qIHJvb3QgPSBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXll
cigpOworICAgICAgICBFWFBFQ1RfRVEoYXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIocm9vdCwgcGxh
dGZvcm1MYXllcklkLCBzY3JvbGxEZWx0YSksIHRydWUpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgYm9vbCBhcHBs
eVNjcm9sbFRvQ2hpbGRMYXllcihMYXllckNocm9taXVtKiBsYXllciwgaW50IHBsYXRmb3JtTGF5
ZXJJZCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCisgICAgeworICAgICAgICBpZiAobGF5
ZXItPmlkKCkgPT0gcGxhdGZvcm1MYXllcklkKSB7CisgICAgICAgICAgICBJbnRQb2ludCBwb3Np
dGlvbiA9IGxheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgbGF5ZXItPnNldFNj
cm9sbFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGlmIChhcHBseVNjcm9sbFRvQ2hp
bGRMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGxhdGZvcm1MYXllcklkLCBzY3Jv
bGxEZWx0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9jaGlsZExheWVyOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RTY3JvbGxMYXllcjsKK307CisKK2NsYXNz
IENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyIDogcHVibGljIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxCYXNlIHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllcigpCisgICAgICAgIDogbV9zY3JvbGxBbW91bnQoMiwgMSkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKG1fcm9vdFNjcm9sbExh
eWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVy
VHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExh
eWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQo
KSArIG1fc2Nyb2xsQW1vdW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVy
c09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlm
IChpbXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJl
Z2luKEludFBvaW50KDUsIDUpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGltcGwtPmlzU2Ny
b2xsaW5nKCkpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOwor
ICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+
ZnJhbWVOdW1iZXIoKSA9PSAyKSB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0K
KyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IEludFNpemUgbV9zY3JvbGxBbW91bnQ7Cit9Owor
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIsIHJ1bk11bHRpVGhy
ZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQorCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0IDogcHVibGljIENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxCYXNlIHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xs
Q2hpbGRMYXllckJleW9uZExpbWl0KCkKKyAgICAgICAgOiBtX2luaXRpYWxSb290U2Nyb2xsUG9z
aXRpb24oMTAsIDEwKQorICAgICAgICAsIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24oMjAs
IDApCisgICAgICAgICwgbV9zY3JvbGxBbW91bnQoLTI1LCAtNSkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhv
c3RUZXN0U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVy
LT5zZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24pOworICAgICAg
ICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbENoaWxkU2Nyb2xsUG9z
aXRpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgQ0NMYXllckltcGwqIHJv
b3QgPSBpbXBsLT5yb290TGF5ZXIoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxS
b290ID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBs
KiBjaGlsZCA9IHNjcm9sbFJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsUm9vdFNjcm9s
bFBvc2l0aW9uICsgSW50U2l6ZSgwLCAtNSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxk
LT5zY3JvbGxQb3NpdGlvbigpLCBtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uICsgSW50U2l6
ZSgtMjAsIDApKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5
ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAg
aWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgaW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoNSwgNSkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaW1wbC0+aXNT
Y3JvbGxpbmcoKSk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7
CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBs
LT5mcmFtZU51bWJlcigpID09IDIpIHsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAg
fQorICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0aWFsUm9vdFNjcm9s
bFBvc2l0aW9uOworICAgIGNvbnN0IEludFBvaW50IG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRp
b247CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0LCBydW5NdWx0aVRocmVh
ZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsKK30KKwogY2xhc3MgVGVzdE9wYWNpdHlDaGFu
Z2VMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAg
VGVzdE9wYWNpdHlDaGFuZ2VMYXllckRlbGVnYXRlKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3Qp
Ci0tIAoxLjcuMy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117245</attachid>
            <date>2011-11-30 12:08:56 -0800</date>
            <delta_ts>2011-12-01 08:30:28 -0800</delta_ts>
            <desc>Work-in-progress patch</desc>
            <filename>0001-Implement-layer-scrolling-in-the-compositor-thread.patch</filename>
            <type>text/plain</type>
            <size>64336</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">RnJvbSBhODhiODI5YzhiYzkwNDZjYmE1NjdkOWM1ZmFiMTJjNzI5MjM1YzZkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEt5b3N0aWxhIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+
CkRhdGU6IFdlZCwgMjMgTm92IDIwMTEgMTY6MjI6MjggKzAwMDAKU3ViamVjdDogW1BBVENIXSBJ
bXBsZW1lbnQgbGF5ZXIgc2Nyb2xsaW5nIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZAoKVGhpcyBw
YXRjaCBhbGxvd3Mgc2Nyb2xsaW5nIG92ZXJmbG93IGRpdiBlbGVtZW50cyBpbiB0aGUgY29tcG9z
aXRvcgp0aHJlYWQuIEl0IGNvbnNpc3RzIG9mIHR3byBtYWpvciBwYXJ0czoKCjEuIFNwbGl0IHNj
cm9sbGFibGUgZWxlbWVudHMgaW4gYSBSZW5kZXJMYXllckJhY2tpbmcgaW50byB0aGUgc3RhdGlj
CiAgIGJhY2tncm91bmQgcGFydCBhbmQgdGhlIHNjcm9sbGluZyBvdmVyZmxvdyBwYXJ0LiBUaGlz
IHBhcnQgb2YgdGhlCiAgIGNvZGUgaXMgYmFzZWQgb24gdGhlIEFwcGxlIGlPUyA1IGltcGxlbWVu
dGF0aW9uIG9mIHRvdWNoIG92ZXJmbG93CiAgIHNjcm9sbGluZy4KCjIuIFByb2Nlc3Mgc2Nyb2xs
IGV2ZW50cyBmb3IgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZC4gVGhlIHNjcm9sbAog
ICBkZWx0YSBpcyBhY2N1bXVsYXRlZCBmb3IgZWFjaCBsYXllciBhbmQgc3luY2hyb25pemVkIHdp
dGggdGhlIG1haW4KICAgdGhyZWFkLgoKTm90ZSB0aGF0IG9ubHkgZWxlbWVudHMgaW4gY29tcG9z
aXRlZCBsYXllcnMgd2lsbCBnZXQgdGhpcyB0cmVhdG1lbnQuIEluCm90aGVyIHdvcmRzLCBzY3Jv
bGxhYmxlIGVsZW1lbnRzIGFyZSBub3QgcHJvbW90ZWQgaW50byBsYXllcnMKYXV0b21hdGljYWxs
eSwgYnV0IGluc3RlYWQgdGhleSBuZWVkIHRvIGhhdmUgYSBDU1MgdHJhbnNmb3JtIHRvIHRyaWdn
ZXIKbGF5ZXIgY3JlYXRpb24uCi0tLQogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5oICAgICAgICAgICAgICAgfCAgICAzICsKIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xp
ZW50LmggICAgICAgICAgICAgICAgIHwgICAgNCArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmggICB8ICAgIDEgLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXJDbGllbnQuaCAgICAgICAgfCAgICAxICsKIC4uLi9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCAgIHwgICAgMSArCiAuLi4vcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oICAgICB8ICAgIDQgKwogLi4uL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCAgfCAgICA5ICsrCiAuLi4v
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCAgICB8ICAgIDYgKwog
Li4uL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgICAgICAgfCAgIDQw
ICsrKysrLQogLi4uL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oICAgICAg
ICAgfCAgICA2ICstCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAgICB8ICAxMjYgKysrKysrKysrKysrLS0tLS0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggICAgIHwgICAgMSArCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwICAgICAgICAgICB8ICAgIDYgKy0KIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgICAgfCAgMTE2ICsrKysrKysr
KysrKysrLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oICAg
ICAgfCAgICA4ICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwIHwgICA3NSArKysrKysrKystCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmggICB8ICAgMTIgKysKIC4uLi9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5
ZXJUcmVlVmlld0NsaWVudC5oICAgICAgIHwgICAgNiArLQogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgICAgfCAgIDE4ICsrKwogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oICAgICAgfCAgICA0ICsKIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmNwcCAgIHwgICAgMiArLQogLi4uL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwICAgfCAgIDEwICstCiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oICB8ICAgIDMg
Ky0KIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCAgICAgICAgIHwg
ICAzMiArKysrLQogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCAgICAg
ICAgICAgfCAgICA2ICstCiAuLi4vY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwICAgICB8ICAgMTcgKysrCiAuLi4vV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwICB8ICAxNDkgKysrKysrKysrKysrKysrKysrKy0KIDI4IGZpbGVzIGNo
YW5nZWQsIDU5OCBpbnNlcnRpb25zKCspLCA3MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggZGYxNWVkYy4uMjJiZmY4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9FbXB0eUNsaWVudHMuaApAQCAtMjI1LDYgKzIyNSw5IEBAIHB1YmxpYzoKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91Y2hFdmVudHMoYm9vbCkg
eyB9CiAjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBhZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVy
KE5vZGUqLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1MYXllciosIGNvbnN0IEludFNpemUmKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoTm9kZSosIFBsYXRmb3Jt
TGF5ZXIqLCBQbGF0Zm9ybUxheWVyKikgeyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIG51bVdo
ZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQpIHsgfQogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmgKaW5kZXggMGIxZmQ1NS4uYTRhOTk4NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24u
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAj
aW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCkBAIC0y
MTEsNiArMjEyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBwYWludEN1c3RvbU92ZXJoYW5nQXJlYShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKIAorICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihOb2RlKiwgUGxhdGZvcm1MYXllciogc2Nyb2xs
aW5nTGF5ZXIsIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIsIGNvbnN0IEludFNpemUmIHNj
cm9sbFNpemUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVNjcm9sbGluZ0xheWVy
KE5vZGUqLCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29u
dGVudHNMYXllcikgPSAwOworCiAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSBhbGwgcG9y
dHMgYXJlIHVzaW5nIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbi4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzczCiAgICAgICAgIC8vIEZvciBjbGllbnQtYmFzZWQg
Z2VvbG9jYXRpb24sIHRoZXNlIHR3byBtZXRob2RzIGhhdmUgbW92ZWQgdG8gR2VvbG9jYXRpb25D
bGllbnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDA2MQogICAg
ICAgICAvLyBUaGlzIGNhbiBiZSBlaXRoZXIgYSBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMg
Y2FsbC4gVGhlIENocm9tZUNsaWVudCBjYW4gZGlzcGxheSBVSSBhc2tpbmcgdGhlIHVzZXIgZm9y
IHBlcm1pc3Npb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaAppbmRleCA4Y2RmMGQ3Li44ZGJkZDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC00NjUsNCArNDY1LDMgQEAg
dm9pZCBzaG93R3JhcGhpY3NMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
bGF5ZXIpOwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2VuZGlm
IC8vIEdyYXBoaWNzTGF5ZXJfaAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKaW5kZXggZGJlNmY2Zi4uZTFkMjg0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXJDbGllbnQuaApAQCAtNDAsNiArNDAsNyBAQCBlbnVtIEdyYXBoaWNzTGF5ZXJQYWludGlu
Z1BoYXNlIHsKICAgICBHcmFwaGljc0xheWVyUGFpbnRCYWNrZ3JvdW5kID0gKDEgPDwgMCksCiAg
ICAgR3JhcGhpY3NMYXllclBhaW50Rm9yZWdyb3VuZCA9ICgxIDw8IDEpLAogICAgIEdyYXBoaWNz
TGF5ZXJQYWludE1hc2sgPSAoMSA8PCAyKSwKKyAgICBHcmFwaGljc0xheWVyUGFpbnRPdmVyZmxv
d0NvbnRlbnRzID0gKDEgPDwgMyksCiAgICAgR3JhcGhpY3NMYXllclBhaW50QWxsID0gKEdyYXBo
aWNzTGF5ZXJQYWludEJhY2tncm91bmQgfCBHcmFwaGljc0xheWVyUGFpbnRGb3JlZ3JvdW5kIHwg
R3JhcGhpY3NMYXllclBhaW50TWFzaykKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
NTRhN2Y4OC4uYTk5OTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5OSw2ICsyOTks
NyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxh
eWVyKQogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+c2V0
UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24pOworICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21h
eFNjcm9sbFBvc2l0aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJs
YXllclRyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CiAg
ICAgbGF5ZXItPnNldFVwZGF0ZVJlY3QobV91cGRhdGVSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApp
bmRleCA3MTNkZmIyLi4wNWYwOWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMzMsNiArMTMz
LDkgQEAgcHVibGljOgogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9u
KGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikgeyBtX3Njcm9sbFBvc2l0aW9uID0gc2Ny
b2xsUG9zaXRpb247IH0KIAorICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0TWF4U2Ny
b2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhTY3Jv
bGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICBib29sIHNjcm9sbGFibGUo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KICAgICB2b2lkIHNldFNjcm9sbGFibGUo
Ym9vbCBzY3JvbGxhYmxlKSB7IG1fc2Nyb2xsYWJsZSA9IHRydWU7ICBzZXROZWVkc0NvbW1pdCgp
OyB9CiAKQEAgLTI1OCw2ICsyNjEsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3VuZHM7
CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQ
b3NpdGlvbjsKKyAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX3Nj
cm9sbGFibGU7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9h
bmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAxMmQyMmUyLi4zOGI2NzMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC00NSw2ICs0NSw3IEBAIENDTGF5ZXJJbXBs
OjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX3Njcm9sbGFibGUoZmFsc2UpCiAgICAgLCBt
X2RvdWJsZVNpZGVkKHRydWUpCiAgICAgLCBtX2xheWVyUHJvcGVydHlDaGFuZ2VkKGZhbHNlKQor
ICAgICwgbV9kZXNjZW5kYW50V2FzU2Nyb2xsZWQoZmFsc2UpCiAgICAgLCBtX21hc2tzVG9Cb3Vu
ZHMoZmFsc2UpCiAgICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAsIG1fb3BhY2l0eSgxLjApCkBA
IC0xMjcsNiArMTI4LDE0IEBAIHZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNp
emUmIHNjcm9sbCkKICAgICBJbnRTaXplIG5ld0RlbHRhID0gbV9zY3JvbGxEZWx0YSArIHNjcm9s
bDsKICAgICBJbnRTaXplIG1pbkRlbHRhID0gLXRvU2l6ZShtX3Njcm9sbFBvc2l0aW9uKTsKICAg
ICBJbnRTaXplIG1heERlbHRhID0gbV9tYXhTY3JvbGxQb3NpdGlvbiAtIHRvU2l6ZShtX3Njcm9s
bFBvc2l0aW9uKTsKKworICAgIC8vIElmIHRoaXMgd2FzIHRoZSBmaXJzdCBzY3JvbGwgb3BlcmF0
aW9uIGZvciB0aGlzIGxheWVyLCBub3RpZnkgdGhlIGFuY2VzdG9ycy4KKyAgICBDQ0xheWVySW1w
bCogYW5jZXN0b3IgPSBwYXJlbnQoKTsKKyAgICB3aGlsZSAobV9zY3JvbGxEZWx0YS5pc1plcm8o
KSAmJiBhbmNlc3RvcikgeworICAgICAgICBhbmNlc3Rvci0+c2V0RGVzY2VuZGFudFdhc1Njcm9s
bGVkKHRydWUpOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKTsKKyAgICB9
CisKICAgICAvLyBDbGFtcCBuZXdEZWx0YSBzbyB0aGF0IHBvc2l0aW9uICsgZGVsdGEgc3RheXMg
d2l0aGluIHNjcm9sbCBib3VuZHMuCiAgICAgbV9zY3JvbGxEZWx0YSA9IG5ld0RlbHRhLmV4cGFu
ZGVkVG8obWluRGVsdGEpLnNocnVua1RvKG1heERlbHRhKTsKICAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBiZjZiNjhlLi41
NjAxNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE2OCw2ICsxNjgsOSBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbCk7CiAKKyAgICBib29s
IGRlc2NlbmRhbnRXYXNTY3JvbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFudFdhc1Nj
cm9sbGVkOyB9CisgICAgdm9pZCBzZXREZXNjZW5kYW50V2FzU2Nyb2xsZWQoYm9vbCBkZXNjZW5k
YW50V2FzU2Nyb2xsZWQpIHsgbV9kZXNjZW5kYW50V2FzU2Nyb2xsZWQgPSBkZXNjZW5kYW50V2Fz
U2Nyb2xsZWQ7IH0KKwogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsYWJsZTsgfQogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpIHsgbV9z
Y3JvbGxhYmxlID0gc2Nyb2xsYWJsZTsgfQogCkBAIC0yMzYsNiArMjM5LDkgQEAgcHJpdmF0ZToK
ICAgICAvLyBUcmFja3MgaWYgZHJhd2luZy1yZWxhdGVkIHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2Vk
IHNpbmNlIGxhc3QgcmVkcmF3LgogICAgIGJvb2wgbV9sYXllclByb3BlcnR5Q2hhbmdlZDsKIAor
ICAgIC8vIFRyYWNrcyBpZiBhIGRlc2NlbmRhbnQgb2YgdGhpcyBsYXllciB3YXMgc2Nyb2xsZWQg
c2luY2UgdGhlIGxhc3Qgc3luYy4KKyAgICBib29sIG1fZGVzY2VuZGFudFdhc1Njcm9sbGVkOwor
CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3Vu
ZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmlu
ZGV4IDZjOGRhNDYuLmQ0MWM1MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApA
QCAtMjIxLDYgKzIyMSwxNSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXco
KQogICAgICAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0KIAordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RM
YXllcikKK3sKKyAgICBpZiAobV9yb290TGF5ZXIgPT0gcm9vdExheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3Jvb3RMYXllciA9IHJvb3RMYXllcjsKKyAgICBtX3Jvb3RTY3JvbGxMYXll
ci5jbGVhcigpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3Qg
SW50U2l6ZSYgdmlld3BvcnRTaXplKQogewogICAgIG1fdmlld3BvcnRTaXplID0gdmlld3BvcnRT
aXplOwpAQCAtNDMzLDE1ICs0NDIsMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVu
ZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKK3N0YXRpYyBMYXll
ckNocm9taXVtKiBmaW5kU2Nyb2xsTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAg
aWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPnNjcm9sbGFi
bGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVt
KiBmb3VuZCA9IGZpbmRTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cisg
ICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2Nh
bGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVz
aGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0g
ICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFt
X3Jvb3RTY3JvbGxMYXllcikKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXIgPSBmaW5kU2Nyb2xs
TGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOwogCi0gICAgQVNTRVJUKGluZm8uc2Nyb2xscy5zaXpl
KCkgPT0gMSk7Ci0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IGluZm8uc2Nyb2xsc1swXS5zY3Jv
bGxEZWx0YTsKLSAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShzY3JvbGxEZWx0YSwg
aW5mby5wYWdlU2NhbGVEZWx0YSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmZvLnNj
cm9sbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcm9vdFNjcm9sbExheWVyICYmIGlu
Zm8uc2Nyb2xsc1tpXS5sYXllcklkID09IG1fcm9vdFNjcm9sbExheWVyLT5pZCgpKQorICAgICAg
ICAgICAgbV9jbGllbnQtPmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoaW5mby5zY3JvbGxz
W2ldLnNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9jbGllbnQtPmFwcGx5TGF5ZXJTY3JvbGwoaW5mby5zY3JvbGxzW2ldLmxheWVy
SWQsIGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YSk7CisgICAgfQogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggNDg3ZDhmNC4uOGU1YzU3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTU0LDcgKzU0LDggQEAgY2xhc3MgVGV4dHVyZU1h
bmFnZXI7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhLCBmbG9hdCBwYWdlU2NhbGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSb290TGF5
ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNj
YWxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJTY3JvbGwoaW50IGxheWVySWQs
IGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3Mp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgPSAwOwpAQCAt
MTYxLDcgKzE2Miw3IEBAIHB1YmxpYzoKIAogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigp
IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSog
cm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllcikgeyBtX3Jv
b3RMYXllciA9IHJvb3RMYXllcjsgfQorICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRp
bmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQogCkBAIC0yMTIsNiArMjEzLDcgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8Q0NQcm94eT4gbV9wcm94eTsKIAogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290
U2Nyb2xsTGF5ZXI7CiAgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX2NvbnRlbnRzVGV4dHVy
ZU1hbmFnZXI7CiAKICAgICBMYXllckxpc3QgbV91cGRhdGVMaXN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBkNGMxMDE0Li4yOTAwOGFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxz
LCByZWN0KTsKIH0KIAotc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXll
ckltcGwqIGxheWVyKQorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kUm9vdFNjcm9sbExheWVyKEND
TGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllcihD
Q0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJldHVybiBsYXllcjsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Q0NMYXllckltcGwqIGZvdW5kID0gZmluZFNjcm9sbExheWVyKGxheWVyLT5jaGlsZHJlbigpW2ld
LmdldCgpKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFJvb3RTY3JvbGxMYXll
cihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiAgICAgICAgIGlmIChmb3VuZCkKICAgICAg
ICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CkBAIC0xNTQsOSArMTU0LDcgQEAgc3RhdGljIEND
TGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5
ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7Ci0KLSAgICAvLyBGSVhNRTogQ3Vy
cmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhlIGZpcnN0IHNjcm9sbGFibGUgbGF5ZXIuCi0gICAg
bV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgp
KTsKKyAgICBtX3Njcm9sbExheWVySW1wbCA9IGZpbmRSb290U2Nyb2xsTGF5ZXIobV9yb290TGF5
ZXJJbXBsLmdldCgpKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxl
KGJvb2wgdmlzaWJsZSkKQEAgLTIyMSwxNyArMjE5LDI3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQg
bWluCiAgICAgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShwYWdlU2NhbGVDaGFuZ2Up
OwogfQogCitzdGF0aWMgdm9pZCBhZGp1c3RTY3JvbGxlZExheWVyc0ZvclBhZ2VTY2FsZUNoYW5n
ZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCit7CisgICAg
aWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUgc2Nyb2xsRGVs
dGEgPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFn
ZVNjYWxlQ2hhbmdlKTsKKyAgICBsYXllckltcGwtPnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRh
KTsKKworICAgIGlmIChsYXllckltcGwtPmRlc2NlbmRhbnRXYXNTY3JvbGxlZCgpKQorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIGFkanVzdFNjcm9sbGVkTGF5ZXJzRm9yUGFnZVNjYWxlQ2hhbmdlKGxh
eWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFnZVNjYWxlQ2hhbmdlKTsKK30KKwogdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZs
b2F0IHBhZ2VTY2FsZUNoYW5nZSkKIHsKICAgICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwtc2lk
ZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBzcGFjZS4KLSAgICBpZiAobV9zY3JvbGxMYXll
ckltcGwpIHsKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpOwotICAgICAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFu
Z2UpOwotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVs
dGEpOwotICAgIH0KKyAgICBhZGp1c3RTY3JvbGxlZExheWVyc0ZvclBhZ2VTY2FsZUNoYW5nZSht
X3Jvb3RMYXllckltcGwuZ2V0KCksIHBhZ2VTY2FsZUNoYW5nZSk7CiB9CiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEpCkBAIC0yOTYsMjgg
KzMwNCw2OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAotYm9vbCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYpCitzdGF0aWMgQ0NM
YXllckltcGwqIGZpbmRJbm5lcm1vc3RTY3JvbGxhYmxlTGF5ZXJBdFBvaW50KENDTGF5ZXJJbXBs
KiBsYXllckltcGwsIGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKK3sKKyAgICBpZiAoIWxh
eWVySW1wbC0+Ym91bmRzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEludFBvaW50IGNvbnRlbnRQ
b2ludChsYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50
KHdpbmRvd1BvaW50KSk7CisgICAgICAgIGlmICghSW50UmVjdChJbnRQb2ludDo6emVybygpLCBs
YXllckltcGwtPmJvdW5kcygpKS5jb250YWlucyhjb250ZW50UG9pbnQpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwt
PmNoaWxkcmVuKCkuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlc3VsdCA9
IGZpbmRJbm5lcm1vc3RTY3JvbGxhYmxlTGF5ZXJBdFBvaW50KGxheWVySW1wbC0+Y2hpbGRyZW4o
KVtpXS5nZXQoKSwgd2luZG93UG9pbnQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAobGF5ZXJJbXBsLT5zY3JvbGxhYmxl
KCkpCisgICAgICAgIHJldHVybiBsYXllckltcGw7CisKKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgd2luZG93
UG9pbnQpCiB7Ci0gICAgLy8gVE9ETyhza3lvc3RpbCk6IENoZWNrIGZvciBzY3JvbGxhYmxlIHN1
YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsYWJsZSgpKQorICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiB0cnVlOworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5n
TGF5ZXJJbXBsID0gZmluZElubmVybW9zdFNjcm9sbGFibGVMYXllckF0UG9pbnQobV9zY3JvbGxM
YXllckltcGwuZ2V0KCksIHdpbmRvd1BvaW50KTsKKworICAgIHJldHVybiBtX2N1cnJlbnRseVNj
cm9sbGluZ0xheWVySW1wbDsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxC
eShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5
ZXJJbXBsKQorICAgIGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7
Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0gICAgbV9jbGll
bnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgSW50U2l6ZSBwZW5kaW5nRGVs
dGEoc2Nyb2xsRGVsdGEpOworICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBtX2N1cnJlbnRs
eVNjcm9sbGluZ0xheWVySW1wbC5nZXQoKTsKKyAgICBkbyB7CisgICAgICAgIEludFNpemUgcHJl
dmlvdXNEZWx0YShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgICAgICBsYXllckltcGwt
PnNjcm9sbEJ5KHBlbmRpbmdEZWx0YSk7CisgICAgICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIGRl
bHRhIGNvbXBsZXRlbHkgdG8gemVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8gbW92ZSBpbiB0
aGF0IGRpcmVjdGlvbi4gVGhpcyBpcworICAgICAgICAvLyB0byBlbnN1cmUgaXQgaXMgcG9zc2li
bGUgdG8gc2Nyb2xsIGV4YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIHNjcm9s
bCBhcmVhIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICAgLy8gdGhlIHNjcm9sbCBzdGVwLgorICAgICAg
ICBpZiAocGVuZGluZ0RlbHRhLndpZHRoKCkgJiYgcHJldmlvdXNEZWx0YS53aWR0aCgpICE9IGxh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgpKQorICAgICAgICAgICAgcGVuZGluZ0RlbHRh
LnNldFdpZHRoKDApOworICAgICAgICBpZiAocGVuZGluZ0RlbHRhLmhlaWdodCgpICYmIHByZXZp
b3VzRGVsdGEuaGVpZ2h0KCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmhlaWdodCgpKQor
ICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICAgICAgZG8KKyAgICAg
ICAgICAgIGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxlIChs
YXllckltcGwgJiYgIWxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKTsKKyAgICB9IHdoaWxlICghcGVu
ZGluZ0RlbHRhLmlzWmVybygpICYmIGxheWVySW1wbCk7CisKKyAgICBpZiAocGVuZGluZ0RlbHRh
ICE9IHNjcm9sbERlbHRhKSB7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1w
bFRocmVhZCgpOworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQo
KTsKKyAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKCkKIHsK
KyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigpOwogfQogCiBib29sIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoKQpAQCAtMzYwLDExICs0
MDgsMzYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVFbmQoKQogICAg
IG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogfQogCitzdGF0aWMgYm9v
bCBjb2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIEND
TGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygp
KSB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3Jv
bGw7CisgICAgICAgIHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgpOworICAgICAgICBz
Y3JvbGwuc2Nyb2xsRGVsdGEgPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgICAgIHNj
cm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7CisKKyAgICAgICAgbGF5ZXJJbXBsLT5z
ZXRTY3JvbGxQb3NpdGlvbihsYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBsYXllckltcGwt
PnNjcm9sbERlbHRhKCkpOworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShs
YXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgICAgICBsYXllckltcGwtPnNldFNjcm9sbERl
bHRhKEludFNpemUoKSk7CisgICAgICAgIGxheWVySW1wbC0+c2V0UG9zaXRpb24obGF5ZXJJbXBs
LT5wb3NpdGlvbigpIC0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICB9CisKKyAgICBp
ZiAobGF5ZXJJbXBsLT5kZXNjZW5kYW50V2FzU2Nyb2xsZWQoKSkgeworICAgICAgICBsYXllcklt
cGwtPnNldERlc2NlbmRhbnRXYXNTY3JvbGxlZChmYWxzZSk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLCBsYXllckltcGwtPmNoaWxkcmVuKClb
aV0uZ2V0KCkpOworICAgIH0KKworICAgIHJldHVybiBzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUo
KSA+IDA7Cit9CisKIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVI
b3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5k
U2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgp
KTsKLSAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4w
Zik7Ci0gICAgaWYgKCFkaWRNb3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlKSB7CisgICAgaWYg
KG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8ICFjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8u
Z2V0KCksIG1fcm9vdExheWVySW1wbC5nZXQoKSkpIHsKICAgICAgICAgbV9zZW50UGFnZVNjYWxl
RGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IDE7CiAgICAgICAgIHJldHVybiBz
Y3JvbGxJbmZvLnJlbGVhc2UoKTsKICAgICB9CkBAIC0zNzMsMTkgKzQ0Niw2IEBAIFBhc3NPd25Q
dHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9s
bERlbHRhcygpCiAgICAgbV9wYWdlU2NhbGUgPSBtX3BhZ2VTY2FsZSAqIG1fc2VudFBhZ2VTY2Fs
ZURlbHRhOwogICAgIHNldFBhZ2VTY2FsZURlbHRhKDEpOwogCi0gICAgLy8gRklYTUU6IHRyYWNr
IHNjcm9sbHMgZnJvbSBsYXllcnMgb3RoZXIgdGhhbiB0aGUgcm9vdAotICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQg
PSBtX3Njcm9sbExheWVySW1wbC0+aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKLSAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFw
cGVuZChzY3JvbGwpOwotCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNjcm9sbFBvc2l0aW9u
KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwt
PnNjcm9sbERlbHRhKCkpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRQb3NpdGlvbihtX3Nj
cm9sbExheWVySW1wbC0+cG9zaXRpb24oKSAtIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0
YSgpKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Ny
b2xsRGVsdGEoSW50U2l6ZSgpKTsKLQotICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFu
Z2UobV9zZW50UGFnZVNjYWxlRGVsdGEpOwotCiAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFz
ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggODY1MzMx
Ni4uNmFkMzIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTI5
LDYgKzEyOSw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
bV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBs
OwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9zY3JvbGxMYXllckltcGw7CisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKICAgICBDQ1NldHRp
bmdzIG1fc2V0dGluZ3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBib29sIG1f
dmlzaWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDBm
ODA2YmIuLjhlZTI5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cApAQCAtMzYyNyw3ICszNjI3LDcgQEAgQ2xpcFJlY3QgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRD
bGlwUmVjdChjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWcKIAogdm9pZCBS
ZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
UmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExheW91dFJlY3QmIHBhaW50RGlydHlSZWN0LCBM
YXlvdXRSZWN0JiBsYXllckJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENsaXBSZWN0JiBiYWNrZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIGZvcmVncm91bmRSZWN0LCBDbGlw
UmVjdCYgb3V0bGluZVJlY3QsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZh
bmN5KSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5LCBib29sIGNsaXBUb092ZXJmbG93KSBjb25zdAog
ewogICAgIGlmIChyb290TGF5ZXIgIT0gdGhpcyAmJiBwYXJlbnQoKSkgewogICAgICAgICBiYWNr
Z3JvdW5kUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHJlZ2lvbiwgdGVtcG9y
YXJ5Q2xpcFJlY3RzLCByZWxldmFuY3kpOwpAQCAtMzY0NSw3ICszNjQ1LDcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVu
ZGVyUmVnaW9uKiByZWcKICAgICAvLyBVcGRhdGUgdGhlIGNsaXAgcmVjdHMgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byBjaGlsZCBsYXllcnMuCiAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93
Q2xpcCgpIHx8IHJlbmRlcmVyKCktPmhhc0NsaXAoKSkgewogICAgICAgICAvLyBUaGlzIGxheWVy
IGVzdGFibGlzaGVzIGEgY2xpcCBvZiBzb21lIGtpbmQuCi0gICAgICAgIGlmIChyZW5kZXJlcigp
LT5oYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICBpZiAocmVuZGVyZXIoKS0+aGFzT3ZlcmZs
b3dDbGlwKCkgJiYgY2xpcFRvT3ZlcmZsb3cpIHsKICAgICAgICAgICAgIGZvcmVncm91bmRSZWN0
LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS0+b3ZlcmZsb3dDbGlwUmVjdChvZmZz
ZXQsIHJlZ2lvbiwgcmVsZXZhbmN5KSk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS0+c3R5
bGUoKS0+aGFzQm9yZGVyUmFkaXVzKCkpCiAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3Qu
c2V0SGFzUmFkaXVzKHRydWUpOwpAQCAtMzY2OSw3ICszNjY5LDcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVn
aW9uKiByZWcKICAgICAgICAgICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUobGF5
ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOyAvLyBMYXllcnMgYXJlIGluIHBoeXNpY2FsIGNv
b3JkaW5hdGVzLCBzbyB0aGUgb3ZlcmZsb3cgaGFzIHRvIGJlIGZsaXBwZWQuCiAgICAgICAgICAg
ICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3ZlQnkob2Zmc2V0KTsKICAgICAgICAg
ICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxv
dyk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZSBpZiAoY2xpcFRvT3ZlcmZsb3cp
IHsKICAgICAgICAgICAgIC8vIFNoaWZ0IHRoZSBib3VuZHMgdG8gYmUgZm9yIG91ciByZWdpb24g
b25seS4KICAgICAgICAgICAgIExheW91dFJlY3QgYm91bmRzID0gcmVuZGVyQm94KCktPmJvcmRl
ckJveFJlY3RJblJlZ2lvbihyZWdpb24pOwogICAgICAgICAgICAgYm91bmRzLm1vdmVCeShvZmZz
ZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAzMTFlZWE1Li4z
Nzg5YzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNDQ1LDcg
KzQ0NSw3IEBAIHB1YmxpYzoKICAgICAvLyBmb3IgcGFpbnRpbmcvZXZlbnQgaGFuZGxpbmcuCiAg
ICAgdm9pZCBjYWxjdWxhdGVSZWN0cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5k
ZXJSZWdpb24qLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludERpcnR5UmVjdCwgTGF5b3V0UmVjdCYg
bGF5ZXJCb3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBDbGlwUmVjdCYgYmFja2dyb3Vu
ZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxpbmVSZWN0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0ZW1wb3JhcnlDbGlwUmVjdHMgPSBmYWxzZSwg
T3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSkgY29uc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRlbXBvcmFyeUNsaXBSZWN0
cyA9IGZhbHNlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplLCBib29sIGNsaXBUb092ZXJmbG93ID0gdHJ1ZSkgY29uc3Q7CiAKICAgICAv
LyBDb21wdXRlIGFuZCBjYWNoZSBjbGlwIHJlY3RzIGNvbXB1dGVkIHdpdGggdGhlIGdpdmVuIGxh
eWVyIGFzIHRoZSByb290CiAgICAgdm9pZCB1cGRhdGVDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGQwZTZlMDQuLmM2NTMwNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBA
IC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCkBAIC05NSw2ICs5Niw3IEBA
IFJlbmRlckxheWVyQmFja2luZzo6flJlbmRlckxheWVyQmFja2luZygpCiAgICAgdXBkYXRlT3Zl
cmZsb3dDb250cm9sc0xheWVycyhmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgICB1cGRhdGVGb3Jl
Z3JvdW5kTGF5ZXIoZmFsc2UpOwogICAgIHVwZGF0ZU1hc2tMYXllcihmYWxzZSk7CisgICAgdXBk
YXRlU2Nyb2xsaW5nTGF5ZXJzKGZhbHNlKTsKICAgICBkZXN0cm95R3JhcGhpY3NMYXllcnMoKTsK
IH0KIApAQCAtMTM3LDYgKzEzOSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpkZXN0cm95
R3JhcGhpY3NMYXllcnMoKQogICAgIG1fZm9yZWdyb3VuZExheWVyID0gbnVsbHB0cjsKICAgICBt
X2NsaXBwaW5nTGF5ZXIgPSBudWxscHRyOwogICAgIG1fbWFza0xheWVyID0gbnVsbHB0cjsKKwor
ICAgIG1fc2Nyb2xsaW5nTGF5ZXIgPSBudWxscHRyOworICAgIG1fc2Nyb2xsaW5nQ29udGVudHNM
YXllciA9IG51bGxwdHI7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVMYXll
ck9wYWNpdHkoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQpAQCAtMTY0LDEwICsxNjksMTAgQEAg
c3RhdGljIGJvb2wgaGFzTm9uWmVyb1RyYW5zZm9ybU9yaWdpbihjb25zdCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogICAgICAgICB8fCAoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblkoKS50eXBlKCkg
PT0gRml4ZWQgJiYgc3R5bGUtPnRyYW5zZm9ybU9yaWdpblkoKS52YWx1ZSgpKTsKIH0KIAotc3Rh
dGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZChSZW5kZXJMYXllciogbGF5ZXIp
CitzdGF0aWMgYm9vbCBsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcoUmVu
ZGVyTGF5ZXIqIGxheWVyKQogewogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSBsYXllcjsg
Y3VycjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5oYXNUcmFu
c2Zvcm0oKSkKKyAgICAgICAgaWYgKGN1cnItPmhhc1RyYW5zZm9ybSgpIHx8IGN1cnItPnNjcm9s
bHNPdmVyZmxvdygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAt
MTk5LDcgKzIwNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVk
Qm91bmRzKCkKICAgICAvLyBXZSdkIG5lZWQgUmVuZGVyT2JqZWN0Ojpjb252ZXJ0Q29udGFpbmVy
VG9Mb2NhbFF1YWQoKSwgd2hpY2ggZG9lc24ndCB5ZXQgZXhpc3QuICBJZiB0aGlzCiAgICAgLy8g
aXMgYSBmdWxsc2NyZWVuIHJlbmRlcmVyLCBkb24ndCBjbGlwIHRvIHRoZSB2aWV3cG9ydCwgYXMg
dGhlIHJlbmRlcmVyIHdpbGwgYmUgYXNrZWQgdG8KICAgICAvLyBkaXNwbGF5IG91dHNpZGUgb2Yg
dGhlIHZpZXdwb3J0IGJvdW5kcy4KLSAgICBpZiAoY29tcG9zaXRvcigpLT5jb21wb3NpdGluZ0Nv
bnN1bHRzT3ZlcmxhcCgpICYmICFsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkKG1fb3duaW5n
TGF5ZXIpIAorICAgIGlmIChjb21wb3NpdG9yKCktPmNvbXBvc2l0aW5nQ29uc3VsdHNPdmVybGFw
KCkgJiYgIWxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWRPclNjcm9sbGluZyhtX293bmluZ0xh
eWVyKQogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAgICAgJiYgIWxheWVyT3JBbmNl
c3RvcklzRnVsbFNjcmVlbihtX293bmluZ0xheWVyKQogI2VuZGlmCkBAIC0yNzksNiArMjg0LDkg
QEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0
aW9uKCkKICAgICBpZiAodXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhyZXF1aXJlc0hvcml6
b250YWxTY3JvbGxiYXJMYXllcigpLCByZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSwg
cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpKSkKICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Vk
ID0gdHJ1ZTsKIAorICAgIGlmICh1cGRhdGVTY3JvbGxpbmdMYXllcnMobV9vd25pbmdMYXllci0+
c2Nyb2xsc092ZXJmbG93KCkpKQorICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwor
CiAgICAgaWYgKGxheWVyQ29uZmlnQ2hhbmdlZCkKICAgICAgICAgdXBkYXRlSW50ZXJuYWxIaWVy
YXJjaHkoKTsKIApAQCAtMzk0LDEyICs0MDIsMjIgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJl
bnRMb2NhdGlvbiA9IGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKTsKICAgICBl
bHNlCiAgICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbiA9IHJlbmRlcmVyKCktPnZp
ZXcoKS0+ZG9jdW1lbnRSZWN0KCkubG9jYXRpb24oKTsKKworICAgIGlmIChjb21wQW5jZXN0b3Ig
JiYgY29tcEFuY2VzdG9yLT5zY3JvbGxzT3ZlcmZsb3coKSkgeworICAgICAgICBSZW5kZXJCb3gq
IHJlbmRlckJveCA9IHRvUmVuZGVyQm94KGNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSk7CisgICAg
ICAgIExheW91dFJlY3QgcGFkZGluZ0JveChyZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwgcmVuZGVy
Qm94LT5ib3JkZXJUb3AoKSwKKyAgICAgICAgICAgIHJlbmRlckJveC0+d2lkdGgoKSAtIHJlbmRl
ckJveC0+Ym9yZGVyTGVmdCgpIC0gcmVuZGVyQm94LT5ib3JkZXJSaWdodCgpLAorICAgICAgICAg
ICAgcmVuZGVyQm94LT5oZWlnaHQoKSAtIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJC
b3gtPmJvcmRlckJvdHRvbSgpKTsKKworICAgICAgICBMYXlvdXRTaXplIHNjcm9sbE9mZnNldCA9
IGNvbXBBbmNlc3Rvci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisgICAgICAgIGdyYXBoaWNz
TGF5ZXJQYXJlbnRMb2NhdGlvbiA9IHBhZGRpbmdCb3gubG9jYXRpb24oKSAtIHNjcm9sbE9mZnNl
dDsKKyAgICB9CiAgICAgCiAgICAgaWYgKGNvbXBBbmNlc3RvciAmJiBtX2FuY2VzdG9yQ2xpcHBp
bmdMYXllcikgewogICAgICAgICAvLyBDYWxsIGNhbGN1bGF0ZVJlY3RzIHRvIGdldCB0aGUgYmFj
a2dyb3VuZFJlY3Qgd2hpY2ggaXMgd2hhdCBpcyB1c2VkIHRvIGNsaXAgdGhlIGNvbnRlbnRzIG9m
IHRoaXMKICAgICAgICAgLy8gbGF5ZXIuIE5vdGUgdGhhdCB3ZSBjYWxsIGl0IHdpdGggdGVtcG9y
YXJ5Q2xpcFJlY3RzID0gdHJ1ZSBiZWNhdXNlIG5vcm1hbGx5IHdoZW4gY29tcHV0aW5nIGNsaXAg
cmVjdHMKICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcgbGF5ZXIsIHJvb3RMYXllciBpcyB0
aGUgbGF5ZXIgaXRzZWxmLgotICAgICAgICBMYXlvdXRSZWN0IHBhcmVudENsaXBSZWN0ID0gbV9v
d25pbmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0KGNvbXBBbmNlc3RvciwgMCwgdHJ1ZSkucmVj
dCgpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1MgcmVnaW9ucy4KKyAgICAgICAgTGF5b3V0
UmVjdCBwYXJlbnRDbGlwUmVjdCA9IGNvbXBBbmNlc3Rvci0+c2Nyb2xsc092ZXJmbG93KCkgPyBy
ZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzIDogbV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBS
ZWN0KGNvbXBBbmNlc3RvciwgMCwgdHJ1ZSkucmVjdCgpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZv
ciBDU1MgcmVnaW9ucy4KICAgICAgICAgQVNTRVJUKHBhcmVudENsaXBSZWN0ICE9IFBhaW50SW5m
bzo6aW5maW5pdGVSZWN0KCkpOwogICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgpICsgKHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCkgLSBncmFw
aGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKICAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5
ZXItPnNldFNpemUocGFyZW50Q2xpcFJlY3Quc2l6ZSgpKTsKQEAgLTUwOSw2ICs1MjcsMjggQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAg
ICAgICAgIHJlZmxlY3Rpb25CYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRM
YXllclBvc2l0aW9uKEZsb2F0UG9pbnQoKSArIChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVm
bGVjdGlvbkxheWVyQm91bmRzLmxvY2F0aW9uKCkpKTsKICAgICB9CiAKKyAgICBpZiAobV9zY3Jv
bGxpbmdMYXllcikgeworICAgICAgICBBU1NFUlQobV9zY3JvbGxpbmdDb250ZW50c0xheWVyKTsK
KyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcigpKTsK
KyAgICAgICAgTGF5b3V0UmVjdCBwYWRkaW5nQm94KHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpLCBy
ZW5kZXJCb3gtPmJvcmRlclRvcCgpLCByZW5kZXJCb3gtPndpZHRoKCkgLSByZW5kZXJCb3gtPmJv
cmRlckxlZnQoKSAtIHJlbmRlckJveC0+Ym9yZGVyUmlnaHQoKSwgcmVuZGVyQm94LT5oZWlnaHQo
KSAtIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJCb3gtPmJvcmRlckJvdHRvbSgpKTsK
KyAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQgPSBtX293bmluZ0xheWVyLT5zY3JvbGxl
ZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3Njcm9sbGluZ0xheWVyLT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KCkgKyAocGFkZGluZ0JveC5sb2NhdGlvbigpIC0gbG9jYWxDb21wb3NpdGlu
Z0JvdW5kcy5sb2NhdGlvbigpKSk7CisgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnNldFNpemUo
cGFkZGluZ0JveC5zaXplKCkpOworICAgICAgICBtX3Njcm9sbGluZ0xheWVyLT5zZXRPZmZzZXRG
cm9tUmVuZGVyZXIoTGF5b3V0UG9pbnQoKSAtIHBhZGRpbmdCb3gubG9jYXRpb24oKSk7CisKKyAg
ICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxTaXplKG1fb3duaW5nTGF5ZXItPnNjcm9sbFdpZHRoKCks
IG1fb3duaW5nTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKKworICAgICAgICBpZiAoc2Nyb2xsU2l6
ZSAhPSBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNpemUoKSkKKyAgICAgICAgICAgIG1fc2Ny
b2xsaW5nQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICAgICAgbV9zY3Jv
bGxpbmdDb250ZW50c0xheWVyLT5zZXRTaXplKHNjcm9sbFNpemUpOworICAgICAgICBtX3Njcm9s
bGluZ0NvbnRlbnRzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLXNjcm9sbE9mZnNldC53
aWR0aCgpLCAtc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSk7CisgICAgICAgIG1fc2Nyb2xsaW5nQ29u
dGVudHNMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKHBhZGRpbmdCb3gubG9jYXRpb24oKSAt
IExheW91dFBvaW50KCkgLSBzY3JvbGxPZmZzZXQpOworCisgICAgICAgIGNvbXBvc2l0b3IoKS0+
c2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRlZChtX293bmluZ0xheWVyLCBtX3Njcm9sbGluZ0xh
eWVyLT5wbGF0Zm9ybUxheWVyKCksIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+cGxhdGZvcm1M
YXllcigpLCBzY3JvbGxTaXplKTsKKyAgICB9CisKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENv
bnRlbnRzUmVjdChjb250ZW50c0JveCgpKTsKICAgICB1cGRhdGVEcmF3c0NvbnRlbnQoKTsKICAg
ICB1cGRhdGVBZnRlcldpZGdldFJlc2l6ZSgpOwpAQCAtNTQ0LDYgKzU4NCwxMCBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlSW50ZXJuYWxIaWVyYXJjaHkoKQogICAgICAgICAgICAg
bV9ncmFwaGljc0xheWVyLT5hZGRDaGlsZChtX2xheWVyRm9yU2Nyb2xsQ29ybmVyLmdldCgpKTsK
ICAgICAgICAgfQogICAgIH0KKyAgICBpZiAobV9zY3JvbGxpbmdMYXllcikgeworICAgICAgICBt
X3Njcm9sbGluZ0xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgICAgIHBhcmVudEZvclN1
YmxheWVycygpLT5hZGRDaGlsZChtX3Njcm9sbGluZ0xheWVyLmdldCgpKTsKKyAgICB9CiB9CiAK
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVEcmF3c0NvbnRlbnQoKQpAQCAtNjkzLDYg
KzczNyw0OCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlTWFza0xheWVyKGJvb2wg
bmVlZHNNYXNrTGF5ZXIpCiAgICAgcmV0dXJuIGxheWVyQ2hhbmdlZDsKIH0KIAorYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyhib29sIHNjcm9sbGluZ0xheWVy
cykKK3sKKyAgICBib29sIGxheWVyQ2hhbmdlZCA9IGZhbHNlOworICAgIGlmIChzY3JvbGxpbmdM
YXllcnMpIHsKKyAgICAgICAgaWYgKCFtX3Njcm9sbGluZ0xheWVyKSB7CisgICAgICAgICAgICAv
LyBPdXRlciBsYXllciB3aGljaCBjb3JyZXNwb25kcyB3aXRoIHRoZSBzY3JvbGwgdmlldy4KKyAg
ICAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7
CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgbV9zY3JvbGxpbmdMYXllci0+c2V0TmFtZSgi
U2Nyb2xsaW5nIGNvbnRhaW5lciIpOworI2VuZGlmCisgICAgICAgICAgICBtX3Njcm9sbGluZ0xh
eWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgICAgICAgICAgbV9zY3JvbGxpbmdMYXll
ci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgICAgICAgICAgLy8gSW5uZXIgbGF5ZXIg
d2hpY2ggcmVuZGVycyB0aGUgY29udGVudCB0aGF0IHNjcm9sbHMuCisgICAgICAgICAgICBtX3Nj
cm9sbGluZ0NvbnRlbnRzTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICAgICAgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zZXROYW1l
KCJTY3JvbGxpbmcgQ29udGVudHMiKTsKKyNlbmRpZgorICAgICAgICAgICAgbV9zY3JvbGxpbmdD
b250ZW50c0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgICAgICBtX3Njcm9s
bGluZ0NvbnRlbnRzTGF5ZXItPnNldFBhaW50aW5nUGhhc2Uoc3RhdGljX2Nhc3Q8R3JhcGhpY3NM
YXllclBhaW50aW5nUGhhc2U+KEdyYXBoaWNzTGF5ZXJQYWludEZvcmVncm91bmQgfCBHcmFwaGlj
c0xheWVyUGFpbnRPdmVyZmxvd0NvbnRlbnRzKSk7CisgICAgICAgICAgICBtX3Njcm9sbGluZ0xh
eWVyLT5hZGRDaGlsZChtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIuZ2V0KCkpOworCisgICAgICAg
ICAgICBsYXllckNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgY29tcG9zaXRvcigpLT5zY3Jv
bGxpbmdMYXllckFkZGVkT3JVcGRhdGVkKG1fb3duaW5nTGF5ZXIsIG1fc2Nyb2xsaW5nTGF5ZXIt
PnBsYXRmb3JtTGF5ZXIoKSwgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5wbGF0Zm9ybUxheWVy
KCksIExheW91dFNpemUobV9vd25pbmdMYXllci0+c2Nyb2xsV2lkdGgoKSwgbV9vd25pbmdMYXll
ci0+c2Nyb2xsSGVpZ2h0KCkpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9zY3JvbGxp
bmdMYXllcikgeworICAgICAgICBpZiAoIXJlbmRlcmVyKCktPmRvY3VtZW50QmVpbmdEZXN0cm95
ZWQoKSkKKyAgICAgICAgICAgIGNvbXBvc2l0b3IoKS0+c2Nyb2xsaW5nTGF5ZXJSZW1vdmVkKG1f
b3duaW5nTGF5ZXIsIG1fc2Nyb2xsaW5nTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgbV9zY3JvbGxp
bmdDb250ZW50c0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworCisgICAgICAgIG1fc2Nyb2xsaW5n
TGF5ZXIgPSBudWxscHRyOworICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIgPSBudWxs
cHRyOworICAgICAgICBsYXllckNoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChsYXll
ckNoYW5nZWQpIHsKKyAgICAgICAgdXBkYXRlSW50ZXJuYWxIaWVyYXJjaHkoKTsKKyAgICAgICAg
bV9ncmFwaGljc0xheWVyLT5zZXRQYWludGluZ1BoYXNlKHBhaW50aW5nUGhhc2VGb3JQcmltYXJ5
TGF5ZXIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGxheWVyQ2hhbmdlZDsKK30KKwogR3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludGluZ1BoYXNlRm9y
UHJpbWFyeUxheWVyKCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBwaGFzZSA9IEdyYXBoaWNzTGF5
ZXJQYWludEJhY2tncm91bmQ7CkBAIC03MDEsNiArNzg3LDkgQEAgR3JhcGhpY3NMYXllclBhaW50
aW5nUGhhc2UgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVy
KCkgY28KICAgICBpZiAoIW1fbWFza0xheWVyKQogICAgICAgICBwaGFzZSB8PSBHcmFwaGljc0xh
eWVyUGFpbnRNYXNrOwogCisgICAgaWYgKG1fc2Nyb2xsaW5nQ29udGVudHNMYXllcikKKyAgICAg
ICAgcGhhc2UgJj0gfkdyYXBoaWNzTGF5ZXJQYWludEZvcmVncm91bmQ7CisKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2U+KHBoYXNlKTsKIH0KIApAQCAt
MTA1OCw2ICsxMTQ3LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVl
ZERpc3BsYXkoKQogCiAgICAgaWYgKG1fbWFza0xheWVyICYmIG1fbWFza0xheWVyLT5kcmF3c0Nv
bnRlbnQoKSkKICAgICAgICAgbV9tYXNrTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworCisgICAg
aWYgKG1fc2Nyb2xsaW5nQ29udGVudHNMYXllciAmJiBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIt
PmRyYXdzQ29udGVudCgpKQorICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldE5l
ZWRzRGlzcGxheSgpOwogfQogCiAvLyByIGlzIGluIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRo
ZSBsYXllcidzIHJlbmRlciBvYmplY3QKQEAgLTEwODAsNiArMTE3MiwxMiBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBMYXlvdXRS
ZWN0JiByKQogICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX21hc2tMYXllci0+b2Zmc2V0
RnJvbVJlbmRlcmVyKCkpOwogICAgICAgICBtX21hc2tMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGxheWVyRGlydHlSZWN0KTsKICAgICB9CisKKyAgICBpZiAobV9zY3JvbGxpbmdDb250ZW50
c0xheWVyICYmIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAg
ICAgICAgTGF5b3V0UmVjdCBsYXllckRpcnR5UmVjdCA9IHI7CisgICAgICAgIGxheWVyRGlydHlS
ZWN0Lm1vdmUoLW1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkp
OworICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChsYXllckRpcnR5UmVjdCk7CisgICAgfQogfQogCiAvLyBTaGFyZSB0aGlzIHdpdGggUmVuZGVy
TGF5ZXI6OnBhaW50TGF5ZXIsIHdoaWNoIHdvdWxkIGhhdmUgdG8gYmUgZWR1Y2F0ZWQgYWJvdXQg
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2U/CkBAIC0xMTAwLDcgKzExOTgsOCBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
R3JhcGhpY3NDb250ZXh0KgogICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91
bGQgdXNlLgogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgZGFtYWdl
UmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsKLSAgICBtX293bmluZ0xheWVyLT5j
YWxjdWxhdGVSZWN0cyhyb290TGF5ZXIsIDAsIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywg
ZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCk7IC8vIEZJWE1FOiBJbmNv
cnJlY3QgZm9yIENTUyByZWdpb25zLgorICAgIG1fb3duaW5nTGF5ZXItPmNhbGN1bGF0ZVJlY3Rz
KHJvb3RMYXllciwgMCwgcGFpbnREaXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBj
bGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhbHNlLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgIShwYWludGluZ1BoYXNl
ICYgR3JhcGhpY3NMYXllclBhaW50T3ZlcmZsb3dDb250ZW50cykpOyAvLyBGSVhNRTogSW5jb3Jy
ZWN0IGZvciBDU1MgcmVnaW9ucy4KIAogICAgIExheW91dFBvaW50IHBhaW50T2Zmc2V0ID0gdG9Q
b2ludChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gbV9vd25pbmdMYXllci0+cmVuZGVyQm94TG9j
YXRpb24oKSk7CiAKQEAgLTEyMDIsNyArMTMwMSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xs
YmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
CiAvLyBVcC1jYWxsIGZyb20gY29tcG9zaXRpbmcgbGF5ZXIgZHJhd2luZyBjYWxsYmFjay4KIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UgcGFpbnRpbmdQaGFzZSwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcCkKIHsKLSAg
ICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCkgfHwgZ3JhcGhpY3NM
YXllciA9PSBtX2ZvcmVncm91bmRMYXllci5nZXQoKSB8fCBncmFwaGljc0xheWVyID09IG1fbWFz
a0xheWVyLmdldCgpKSB7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ncmFwaGljc0xheWVy
LmdldCgpIHx8IGdyYXBoaWNzTGF5ZXIgPT0gbV9mb3JlZ3JvdW5kTGF5ZXIuZ2V0KCkgfHwgZ3Jh
cGhpY3NMYXllciA9PSBtX21hc2tMYXllci5nZXQoKSB8fCBncmFwaGljc0xheWVyID09IG1fc2Ny
b2xsaW5nQ29udGVudHNMYXllci5nZXQoKSkgewogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUGFpbnQo
bV9vd25pbmdMYXllci0+cmVuZGVyZXIoKS0+ZnJhbWUoKSwgY2xpcCk7CiAKICAgICAgICAgTGF5
b3V0U2l6ZSBvZmZzZXQgPSBncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAg
LTEyMTIsOCArMTMxMSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRz
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgIGNsaXBS
ZWN0Lm1vdmUob2Zmc2V0KTsKIAogICAgICAgICAvLyBUaGUgZGlydHlSZWN0IGlzIGluIHRoZSBj
b29yZHMgb2YgdGhlIHBhaW50aW5nIHJvb3QuCi0gICAgICAgIExheW91dFJlY3QgZGlydHlSZWN0
ID0gY29tcG9zaXRlZEJvdW5kcygpOwotICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGNsaXBS
ZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3QgPSBjbGlwUmVjdDsKKyAgICAgICAg
aWYgKCEocGFpbnRpbmdQaGFzZSAmIEdyYXBoaWNzTGF5ZXJQYWludE92ZXJmbG93Q29udGVudHMp
KQorICAgICAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChjb21wb3NpdGVkQm91bmRzKCkpOwog
CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gdXNlIHRoZSBzYW1lIHJvb3QgYXMgZm9yIGhpdCB0ZXN0
aW5nLCBiZWNhdXNlIGJvdGggbWV0aG9kcyBjYW4gY29tcHV0ZSBhbmQgY2FjaGUgY2xpcFJlY3Rz
LgogICAgICAgICBwYWludEludG9MYXllcihtX293bmluZ0xheWVyLCAmY29udGV4dCwgZGlydHlS
ZWN0LCBQYWludEJlaGF2aW9yTm9ybWFsLCBwYWludGluZ1BoYXNlLCByZW5kZXJlcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAppbmRleCAyYzY0
NmY4Li4zOGMwODhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5oCkBAIC04Myw2ICs4MywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0NvbnRl
bnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZvcmVncm91bmRMYXllciAhPSAwOyB9CiAgICAg
R3JhcGhpY3NMYXllciogZm9yZWdyb3VuZExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9mb3JlZ3Jv
dW5kTGF5ZXIuZ2V0KCk7IH0KKworICAgIGJvb2wgaGFzU2Nyb2xsaW5nTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGluZ0xheWVyOyB9CisgICAgR3JhcGhpY3NMYXllciogc2Nyb2xsaW5n
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ0xheWVyLmdldCgpOyB9CisgICAgR3Jh
cGhpY3NMYXllciogc2Nyb2xsaW5nQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsaW5nQ29udGVudHNMYXllci5nZXQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzTWFza0xheWVy
KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIgIT0gMDsgfQogCkBAIC0xNjEsNiArMTY1LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkg
Y29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdDsK
ICAgICBib29sIHJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdDsKKyAgICBib29sIHVw
ZGF0ZVNjcm9sbGluZ0xheWVycyhib29sIHNjcm9sbGluZ0xheWVycyk7CiAKICAgICBHcmFwaGlj
c0xheWVyUGFpbnRpbmdQaGFzZSBwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVyKCkgY29uc3Q7
CiAgICAgCkBAIC0yMTEsNiArMjE2LDkgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R3JhcGhpY3NM
YXllcj4gbV9sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyOwogICAgIE93blB0cjxHcmFwaGljc0xh
eWVyPiBtX2xheWVyRm9yU2Nyb2xsQ29ybmVyOwogCisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+
IG1fc2Nyb2xsaW5nTGF5ZXI7ICAgICAgICAgLy8gb25seSB1c2VkIGlmIHRoZSBsYXllciBpcyBz
Y3JvbGxhYmxlLgorICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbGluZ0NvbnRlbnRz
TGF5ZXI7IC8vIG9ubHkgdXNlZCBpZiB0aGUgbGF5ZXIgaXMgc2Nyb2xsYWJsZS4KKwogICAgIExh
eW91dFJlY3QgbV9jb21wb3NpdGVkQm91bmRzOwogCiAgICAgYm9vbCBtX2FydGlmaWNpYWxseUlu
ZmxhdGVkQm91bmRzOyAgICAgIC8vIGJvdW5kcyBoYWQgdG8gYmUgbWFkZSBub24temVybyB0byBt
YWtlIHRyYW5zZm9ybS1vcmlnaW4gd29yawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBmOTNhMzk5Li4wOThmM2RjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cApAQCAtMTUwLDEwICsxNTAsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FjaGVB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRmxhZ3MoKQogICAgIC8vIFdlIGFsbG93IHRoZSBjaHJvbWUg
dG8gb3ZlcnJpZGUgdGhlIHNldHRpbmdzLCBpbiBjYXNlIHRoZSBwYWdlIGlzIHJlbmRlcmVkCiAg
ICAgLy8gb24gYSBjaHJvbWUgdGhhdCBkb2Vzbid0IGFsbG93IGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nLgogICAgIGlmIChoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKSB7Ci0gICAgICAgIEZyYW1l
KiBmcmFtZSA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7Ci0gICAgICAgIFBh
Z2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOwotICAgICAgICBpZiAocGFnZSkg
ewotICAgICAgICAgICAgQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSBwYWdlLT5jaHJvbWUo
KS0+Y2xpZW50KCk7CisgICAgICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gdGhpcy0+
Y2hyb21lQ2xpZW50KCk7CisgICAgICAgIGlmIChjaHJvbWVDbGllbnQpIHsKICAgICAgICAgICAg
IG1fY29tcG9zaXRpbmdUcmlnZ2VycyA9IGNocm9tZUNsaWVudC0+YWxsb3dlZENvbXBvc2l0aW5n
VHJpZ2dlcnMoKTsKICAgICAgICAgICAgIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBtX2Nv
bXBvc2l0aW5nVHJpZ2dlcnM7CiAgICAgICAgIH0KQEAgLTE4OSw2ICsxODcsMTYgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCiAgICAgcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCk7CiB9CiAKK0No
cm9tZUNsaWVudCogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjaHJvbWVDbGllbnQoKSBjb25zdAor
eworICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7
CisgICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwYWdlLT5jaHJvbWUoKS0+Y2xp
ZW50KCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXMoYm9vbCBpc0ZsdXNoUm9vdCkKIHsKICAgICAvLyBGcmFtZVZpZXc6OnN5bmNDb21w
b3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCkgZmx1c2hlcyBlYWNoIHN1YmZyYW1lLApA
QCAtOTI0LDYgKzkzMiw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkQ29t
cG9zaXRpbmdMYXllclRyZWUoUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zCiAgICAgICAgIGlmIChs
YXllci0+cmVuZGVyZXIoKS0+aXNSZW5kZXJQYXJ0KCkpCiAgICAgICAgICAgICBwYXJlbnRlZCA9
IHBhcmVudEZyYW1lQ29udGVudExheWVycyh0b1JlbmRlclBhcnQobGF5ZXItPnJlbmRlcmVyKCkp
KTsKIAorICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsaW5nTGF5ZXIgPSBsYXllckJh
Y2tpbmctPnNjcm9sbGluZ0xheWVyKCkpCisgICAgICAgICAgICBjaGlsZExpc3QuYXBwZW5kKHNj
cm9sbGluZ0xheWVyKTsKKwogICAgICAgICBpZiAoIXBhcmVudGVkKQogICAgICAgICAgICAgbGF5
ZXJCYWNraW5nLT5wYXJlbnRGb3JTdWJsYXllcnMoKS0+c2V0Q2hpbGRyZW4obGF5ZXJDaGlsZHJl
bik7CiAKQEAgLTExOTIsNiArMTIwMyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpk
aWRNb3ZlT25zY3JlZW4oKQogCiAgICAgUm9vdExheWVyQXR0YWNobWVudCBhdHRhY2htZW50ID0g
c2hvdWxkUHJvcGFnYXRlQ29tcG9zaXRpbmdUb0VuY2xvc2luZ0ZyYW1lKCkgPyBSb290TGF5ZXJB
dHRhY2hlZFZpYUVuY2xvc2luZ0ZyYW1lIDogUm9vdExheWVyQXR0YWNoZWRWaWFDaHJvbWVDbGll
bnQ7CiAgICAgYXR0YWNoUm9vdExheWVyKGF0dGFjaG1lbnQpOworCisgICAgcmVnaXN0ZXJBbGxT
Y3JvbGxpbmdMYXllcnMoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxN
b3ZlT2Zmc2NyZWVuKCkKQEAgLTEyMDAsNiArMTIxMyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp3aWxsTW92ZU9mZnNjcmVlbigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGRldGFj
aFJvb3RMYXllcigpOworCisgICAgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOwogfQog
CiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xlYXJCYWNraW5nRm9yTGF5ZXJJbmNsdWRp
bmdEZXNjZW5kYW50cyhSZW5kZXJMYXllciogbGF5ZXIpCkBAIC0xOTk4LDYgKzIwMTMsNTggQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpCiAgICAgICAgIHJvb3RMYXllci0+bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpCit7CisgICAgQ2hyb21lQ2xpZW50KiBjaHJv
bWVDbGllbnQgPSB0aGlzLT5jaHJvbWVDbGllbnQoKTsKKyAgICBpZiAoIWNocm9tZUNsaWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaFNldDxSZW5kZXJMYXllcio+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3Njcm9sbGluZ0xheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVu
ZGVyTGF5ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Njcm9sbGluZ0xheWVycy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gKml0Owor
ICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllci0+YmFja2luZygpOwor
ICAgICAgICBBU1NFUlQoYmFja2luZyk7CisgICAgICAgIGNocm9tZUNsaWVudC0+YWRkT3JVcGRh
dGVTY3JvbGxpbmdMYXllcihsYXllci0+cmVuZGVyZXIoKS0+bm9kZSgpLCBiYWNraW5nLT5zY3Jv
bGxpbmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNjcm9sbGluZ0NvbnRlbnRz
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBJbnRTaXplKGxheWVyLT5zY3JvbGxXaWR0aCgpLCBs
YXllci0+c2Nyb2xsSGVpZ2h0KCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1bnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkKK3sKKyAgICBDaHJvbWVDbGll
bnQqIGNocm9tZUNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVudCgpOworICAgIGlmICghY2hyb21l
Q2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlbmRlckxheWVyKj46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fc2Nyb2xsaW5nTGF5ZXJzLmVuZCgpOworICAgIGZvciAoSGFz
aFNldDxSZW5kZXJMYXllcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2Nyb2xsaW5nTGF5ZXJz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIg
PSAqaXQ7CisgICAgICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLT5iYWNr
aW5nKCk7CisgICAgICAgIEFTU0VSVChiYWNraW5nKTsKKyAgICAgICAgY2hyb21lQ2xpZW50LT5y
ZW1vdmVTY3JvbGxpbmdMYXllcihsYXllci0+cmVuZGVyZXIoKS0+bm9kZSgpLCBiYWNraW5nLT5z
Y3JvbGxpbmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNjcm9sbGluZ0NvbnRl
bnRzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKKyAgICB9Cit9CisKKy8vIENhbGxlZCB3aGVu
IHRoZSBzaXplIG9mIHRoZSBjb250ZW50c0xheWVyIGNoYW5nZXMsIGFuZCB3aGVuIHRoZSBjb250
ZW50c0xheWVyIGlzIHJlcGxhY2VkIGJ5IGFub3RoZXIgbGF5ZXIuCit2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6c2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRlZChSZW5kZXJMYXllciogbGF5
ZXIsIFBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50
c0xheWVyLCBjb25zdCBJbnRTaXplJiBzY3JvbGxTaXplKQoreworICAgIG1fc2Nyb2xsaW5nTGF5
ZXJzLmFkZChsYXllcik7CisKKyAgICBBU1NFUlQoIW1fcmVuZGVyVmlldy0+ZG9jdW1lbnQoKS0+
aW5QYWdlQ2FjaGUoKSk7CisKKyAgICBpZiAoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSB0
aGlzLT5jaHJvbWVDbGllbnQoKSkKKyAgICAgICAgY2hyb21lQ2xpZW50LT5hZGRPclVwZGF0ZVNj
cm9sbGluZ0xheWVyKGxheWVyLT5yZW5kZXJlcigpLT5ub2RlKCksIHNjcm9sbGluZ0xheWVyLCBj
b250ZW50c0xheWVyLCBzY3JvbGxTaXplKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnNjcm9sbGluZ0xheWVyUmVtb3ZlZChSZW5kZXJMYXllciogbGF5ZXIsIFBsYXRmb3JtTGF5
ZXIqIHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyKQoreworICAg
IG1fc2Nyb2xsaW5nTGF5ZXJzLnJlbW92ZShsYXllcik7CisKKyAgICBpZiAobV9yZW5kZXJWaWV3
LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
Q2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSB0aGlzLT5jaHJvbWVDbGllbnQoKSkKKyAgICAg
ICAgY2hyb21lQ2xpZW50LT5yZW1vdmVTY3JvbGxpbmdMYXllcihsYXllci0+cmVuZGVyZXIoKS0+
bm9kZSgpLCBzY3JvbGxpbmdMYXllciwgY29udGVudHNMYXllcik7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRl
eCBhOGFkMzk2Li44YTY2N2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIFJlbmRlclBhcnQ7
CiAjaWYgRU5BQkxFKFZJREVPKQogY2xhc3MgUmVuZGVyVmlkZW87CiAjZW5kaWYKK2NsYXNzIENo
cm9tZUNsaWVudDsKIAogZW51bSBDb21wb3NpdGluZ1VwZGF0ZVR5cGUgewogICAgIENvbXBvc2l0
aW5nVXBkYXRlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlLApAQCAtMjA4LDYgKzIwOSw5IEBAIHB1
YmxpYzoKICAgICBHcmFwaGljc0xheWVyKiBsYXllckZvck92ZXJoYW5nQXJlYXMoKSBjb25zdCB7
IHJldHVybiBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy5nZXQoKTsgfQogI2VuZGlmCiAKKyAgICB2
b2lkIHNjcm9sbGluZ0xheWVyQWRkZWRPclVwZGF0ZWQoUmVuZGVyTGF5ZXIqLCBQbGF0Zm9ybUxh
eWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllciwgY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsU2l6ZSk7CisgICAgdm9pZCBzY3JvbGxpbmdMYXllclJlbW92ZWQoUmVu
ZGVyTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciog
Y29udGVudHNMYXllcik7CisKIHByaXZhdGU6CiAgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudCBJ
bXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUpIHsgfQpAQCAtMjY0LDYgKzI2OCw5IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGF0dGFjaFJvb3RMYXllcihSb290TGF5ZXJBdHRhY2htZW50KTsKICAg
ICB2b2lkIGRldGFjaFJvb3RMYXllcigpOworCisgICAgdm9pZCByZWdpc3RlckFsbFNjcm9sbGlu
Z0xheWVycygpOworICAgIHZvaWQgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOwogICAg
IAogICAgIHZvaWQgcm9vdExheWVyQXR0YWNobWVudENoYW5nZWQoKTsKIApAQCAtMjg0LDYgKzI5
MSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNjcmVl
bihSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JT
Y3JvbGxhYmxlRnJhbWUoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQ
b3NpdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJMYXllciopIGNvbnN0OworICAgIGJv
b2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclNjcm9sbGluZyhSZW5kZXJPYmplY3QqKSBjb25zdDsK
KworICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50KCkgY29uc3Q7CiAKICAgICBib29sIHJl
cXVpcmVzU2Nyb2xsTGF5ZXIoUm9vdExheWVyQXR0YWNobWVudCkgY29uc3Q7CiAgICAgYm9vbCBy
ZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0OwpAQCAtMzI1LDYgKzMzNSw4
IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fY2xpcExheWVyOwogICAg
IE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbExheWVyOwogCisgICAgSGFzaFNldDxSZW5k
ZXJMYXllcio+IG1fc2Nyb2xsaW5nTGF5ZXJzOworCiAgICAgLy8gRW5jbG9zaW5nIGxheWVyIGZv
ciBvdmVyZmxvdyBjb250cm9scyBhbmQgdGhlIGNsaXBwaW5nIGxheWVyCiAgICAgT3duUHRyPEdy
YXBoaWNzTGF5ZXI+IG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllcjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCmlu
ZGV4IDZmNTAwOTYuLmM1MTliZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKQEAgLTQxLDcgKzQxLDExIEBAIHB1
YmxpYzoKICAgICAvLyBzY2FsZSBmYWN0b3IgdGhhdCBtYXkgYXBwbHkgYSBDU1MgdHJhbnNmb3Jt
IG9uIHRoZSB3aG9sZSBkb2N1bWVudCAodXNlZAogICAgIC8vIGZvciBtb2JpbGUtZGV2aWNlIHBp
bmNoIHpvb21pbmcpLiBUaGlzIGlzIHRyaWdnZXJlZCBieSBldmVudHMgc2VudCB0byB0aGUKICAg
ICAvLyBjb21wb3NpdG9yIHRocmVhZCB0aHJvdWdoIHRoZSBXZWJDb21wb3NpdG9yIGludGVyZmFj
ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJTaXplJiBz
Y3JvbGxEZWx0YSwgZmxvYXQgc2NhbGVGYWN0b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgZmxv
YXQgc2NhbGVGYWN0b3IpID0gMDsKKworICAgIC8vIEFwcGxpZXMgYSBzY3JvbGwgZGVsdGEgdG8g
YSBub24tcm9vdCBsYXllci4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzCisgICAgLy8gc2Vu
dCB0byB0aGUgY29tcG9zaXRvciB0aHJlYWQgdGhyb3VnaCB0aGUgV2ViQ29tcG9zaXRvciBpbnRl
cmZhY2UuCisgICAgdmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJTY3JvbGwoaW50IGxheWVySWQsIGNv
bnN0IFdlYlNpemUmIHNjcm9sbERlbHRhKSA9IDA7CiAKICAgICAvLyBDcmVhdGVzIGEgM0QgY29u
dGV4dCBzdWl0YWJsZSBmb3IgdGhlIGNvbXBvc2l0aW5nLiBUaGlzIG1heSBiZSBjYWxsZWQKICAg
ICAvLyBtb3JlIHRoYW4gb25jZSBpZiB0aGUgY29udGV4dCBnZXRzIGxvc3QuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IDVmODRhMmYu
LjU3Nzg0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0Lmgi
CiAjaW5jbHVkZSAiUG9wdXBDb250YWluZXIuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0Lmgi
CiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVu
dUNocm9taXVtLmgiCkBAIC03OTMsNiArNzk0LDIzIEBAIGJvb2wgQ2hyb21lQ2xpZW50SW1wbDo6
cGFpbnRDdXN0b21PdmVyaGFuZ0FyZWEoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIENocm9tZUNsaWVudEltcGw6OmFkZE9yVXBk
YXRlU2Nyb2xsaW5nTGF5ZXIoTm9kZSogbm9kZSwgUGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5
ZXIsIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIsIGNvbnN0IEludFNpemUmIHNjcm9sbFNp
emUpCit7CisgICAgaWYgKCFub2RlLT5yZW5kZXJlcigpLT5pc0JveCgpKQorICAgICAgICByZXR1
cm47CisgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChub2RlLT5yZW5kZXJl
cigpKTsKKyAgICBjb250ZW50c0xheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNvbnRl
bnRzTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KG5vZGUtPnJlbmRlcmVyKCktPmVu
Y2xvc2luZ0xheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpKSk7CisgICAgY29udGVudHNM
YXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZShzY3JvbGxTaXplLndpZHRoKCkgLSBy
ZW5kZXJCb3gtPmNsaWVudFdpZHRoKCksIHNjcm9sbFNpemUuaGVpZ2h0KCkgLSByZW5kZXJCb3gt
PmNsaWVudEhlaWdodCgpKSk7CisgICAgbV93ZWJWaWV3LT5hZGRPclVwZGF0ZVNjcm9sbGluZ0xh
eWVyKGNvbnRlbnRzTGF5ZXItPmlkKCksIG5vZGUpOworfQorCit2b2lkIENocm9tZUNsaWVudElt
cGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKE5vZGUqIG5vZGUsIFBsYXRmb3JtTGF5ZXIqIHNjcm9s
bGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyKQoreworICAgIG1fd2ViVmll
dy0+cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoY29udGVudHNMYXllci0+aWQoKSk7CisgICAgY29udGVu
dHNMYXllci0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7Cit9CisKIC8vIEZJWE1FOiBSZW1vdmUgQ2hy
b21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lIGFuZCBD
aHJvbWVDbGllbnRJbXBsOjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJh
bWUKIC8vIG9uY2UgYWxsIHBvcnRzIGhhdmUgbW92ZWQgdG8gY2xpZW50LWJhc2VkIGdlb2xvY2F0
aW9uIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzczICku
CiAvLyBGb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uLCB0aGVzZSBtZXRob2RzIGFyZSBub3cg
aW1wbGVtZW50ZWQgYXMgV2ViR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uIGFu
ZCBXZWJHZW9sb2NhdGlvbkNsaWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggNzdmMjY0MS4u
YWM1M2M4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xp
ZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudElt
cGwuaApAQCAtMzMsNiArMzMsNyBAQAogI2RlZmluZSBDaHJvbWVDbGllbnRJbXBsX2gKIAogI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudENocm9taXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IgogI2luY2x1ZGUgIlBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgog
CkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFjY2Vzc2liaWxp
dHlPYmplY3Q7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBOb2Rl
OwogY2xhc3MgUG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBS
ZW5kZXJCb3g7CkBAIC0xMzEsNiArMTMzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBy
ZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOwogICAgIHZpcnR1YWwg
dm9pZCByZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luKiwgaW50NjRfdCB0b3RhbFNwYWNlTmVlZGVkKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDdXN0b21PdmVyaGFuZ0FyZWEoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoV2Vi
Q29yZTo6Tm9kZSosIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBXZWJD
b3JlOjpQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzY3JvbGxTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoV2Vi
Q29yZTo6Tm9kZSosIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBXZWJD
b3JlOjpQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29y
ZTo6R2VvbG9jYXRpb24qKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRp
b24qKTsKICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuY3BwCmluZGV4IDMzYzk4MzYuLmI4MzdhN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW1wbC5jcHAK
QEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbXBsOjpoYW5kbGVJbnB1dEV2
ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKIAotICAgIGlmIChldmVudC50eXBl
ID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWwgJiYgIW1faW5wdXRIYW5kbGVyQ2xpZW50LT5o
YXZlV2hlZWxFdmVudEhhbmRsZXJzKCkpIHsKKyAgICBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1
dEV2ZW50OjpNb3VzZVdoZWVsIC8qJiYgIW1faW5wdXRIYW5kbGVyQ2xpZW50LT5oYXZlV2hlZWxF
dmVudEhhbmRsZXJzKCkqLykgewogICAgICAgICBjb25zdCBXZWJNb3VzZVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50
KTsKICAgICAgICAgaWYgKG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCZWdpbihJbnRQb2lu
dCh3aGVlbEV2ZW50LngsIHdoZWVsRXZlbnQueSkpKSB7CiAgICAgICAgICAgICBtX2lucHV0SGFu
ZGxlckNsaWVudC0+c2Nyb2xsQnkoSW50U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgsIC13aGVlbEV2
ZW50LmRlbHRhWSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TGF5ZXJUcmVlVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5
ZXJUcmVlVmlld0ltcGwuY3BwCmluZGV4IDhjODY4NGIuLjEwZjM4NTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAKQEAgLTY1
LDEwICs2NSwxNiBAQCB2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICAgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlv
dXQoZnJhbWVCZWdpblRpbWUpOwogfQogCi12b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBs
eVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhLCBmbG9h
dCBwYWdlU2NhbGUpCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseVJvb3RMYXllclNj
cm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBw
YWdlU2NhbGUpCiB7CiAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+YXBwbHlT
Y3JvbGxBbmRTY2FsZShXZWJTaXplKHNjcm9sbERlbHRhKSwgcGFnZVNjYWxlKTsKKyAgICAgICAg
bV9jbGllbnQtPmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoV2ViU2l6ZShzY3JvbGxEZWx0
YSksIHBhZ2VTY2FsZSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFwcGx5TGF5
ZXJTY3JvbGwoaW50IGxheWVySWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRh
KQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5TGF5ZXJTY3Jv
bGwobGF5ZXJJZCwgV2ViU2l6ZShzY3JvbGxEZWx0YSkpOwogfQogCiBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENv
bnRleHQzRCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXll
clRyZWVWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVl
Vmlld0ltcGwuaAppbmRleCAwY2ZjMjgzLi4yYjZkMWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKQEAgLTQyLDcgKzQyLDggQEAg
cHJpdmF0ZToKICAgICBXZWJMYXllclRyZWVWaWV3SW1wbChXZWJMYXllclRyZWVWaWV3Q2xpZW50
KiwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdz
Jik7CiAgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlVmlld0ltcGwoKTsKICAgICB2aXJ0dWFsIHZv
aWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotICAgIHZpcnR1YWwg
dm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERl
bHRhLCBmbG9hdCBwYWdlU2NhbGUpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVJvb3RMYXllclNj
cm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBw
YWdlU2NhbGUpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUxheWVyU2Nyb2xsKGludCBsYXllcklk
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSk7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29u
dGV4dDNEKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJv
b2wgc3VjY2Vzcyk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGEzOWEzMWQu
LmY5MGY0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
QEAgLTI4OTcsNyArMjg5NywzNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICBsYXlvdXQoKTsKIH0KIAotdm9pZCBXZWJWaWV3
SW1wbDo6YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxv
YXQgcGFnZVNjYWxlRGVsdGEpCit2b2lkIFdlYlZpZXdJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGlu
Z0xheWVyKGludCBsYXllcklkLCBOb2RlKiBub2RlKQoreworICAgIG1fc2Nyb2xsTGF5ZXJOb2Rl
cy5zZXQobGF5ZXJJZCwgbm9kZSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVNjcm9s
bGluZ0xheWVyKGludCBsYXllcklkKQoreworICAgIG1fc2Nyb2xsTGF5ZXJOb2Rlcy5yZW1vdmUo
bGF5ZXJJZCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwoaW50IGxh
eWVySWQsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIGlmICghbV9zY3JvbGxM
YXllck5vZGVzLmNvbnRhaW5zKGxheWVySWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2Rl
KiBub2RlID0gbV9zY3JvbGxMYXllck5vZGVzLmdldChsYXllcklkKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXJlbmRlcmVyLT5lbmNs
b3NpbmdCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBlbmNsb3NpbmdC
b3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94KCk7CisgICAgaWYgKHNjcm9sbERlbHRhLndpZHRo
KCkpCisgICAgICAgIGVuY2xvc2luZ0JveC0+c2Nyb2xsKHNjcm9sbERlbHRhLndpZHRoKCkgPiAw
ID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxMZWZ0LCBTY3JvbGxCeVBpeGVsLCBhYnMoc2Nyb2xsRGVs
dGEud2lkdGgoKSkpOworICAgIGlmIChzY3JvbGxEZWx0YS5oZWlnaHQoKSkKKyAgICAgICAgZW5j
bG9zaW5nQm94LT5zY3JvbGwoc2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwID8gU2Nyb2xsRG93biA6
IFNjcm9sbFVwLCBTY3JvbGxCeVBpeGVsLCBhYnMoc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKTsKK30K
Kwordm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBJ
bnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlRGVsdGEpCiB7CiAgICAgaWYgKCFt
YWluRnJhbWVJbXBsKCkgfHwgIW1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkpCiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDZl
ZDc1YjMuLmE0NDA3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aApAQCAtMjMwLDcgKzIzMCw4IEBAIHB1YmxpYzoKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdENs
aWVudAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSb290TGF5ZXJTY3Jv
bGxBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxvYXQpOworICAgIHZpcnR1YWwg
dm9pZCBhcHBseUxheWVyU2Nyb2xsKGludCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5
ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3
RnJhbWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwpAQCAt
Mzk0LDYgKzM5NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbFJvb3RMYXllclJlY3QoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXBSZWN0KTsKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKICAgICBXZWJDb3JlOjpOb25Db21wb3NpdGVkQ29udGVudEhvc3QqIG5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpOworICAgIHZvaWQgYWRkT3JVcGRhdGVTY3JvbGxpbmdM
YXllcihpbnQgbGF5ZXJJZCwgV2ViQ29yZTo6Tm9kZSopOworICAgIHZvaWQgcmVtb3ZlU2Nyb2xs
aW5nTGF5ZXIoaW50IGxheWVySWQpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKQEAgLTYxMCw2ICs2MTMs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQ7CiAgICAg
Ly8gSWYgdHJ1ZSwgdGhlIGdyYXBoaWNzIGNvbnRleHQgaXMgYmVpbmcgcmVzdG9yZWQuCiAgICAg
Ym9vbCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQ7CisgICAgSGFzaE1hcDxpbnQsIFdlYkNv
cmU6Ok5vZGUqPiBtX3Njcm9sbExheWVyTm9kZXM7CiAjZW5kaWYKICAgICBib29sIG1faGF2ZVdo
ZWVsRXZlbnRIYW5kbGVyczsKICAgICBzdGF0aWMgY29uc3QgV2ViSW5wdXRFdmVudCogbV9jdXJy
ZW50SW5wdXRFdmVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggY2YyNDViZi4uYWQ2MTk2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKQEAgLTE0Niw2ICsxNDYsMjMgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzY3JvbGxEZWx0YVJlcGVhdGVkU2Nyb2xscykKICAgICBleHBlY3RDbGVhcmVk
U2Nyb2xsRGVsdGFzUmVjdXJzaXZlKHJvb3QuZ2V0KCkpOwogfQogCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIG5vdGlmeUFuY2VzdG9yTGF5ZXJzQWJvdXRTY3JvbGxpbmcpCit7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMCk7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTEpOwor
CisgICAgY2hpbGQtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY2hpbGQtPnNldE1heFNjcm9s
bFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5
ZXIocm9vdCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworCisgICAgQVNTRVJUX0ZBTFNF
KHJvb3QtPmRlc2NlbmRhbnRXYXNTY3JvbGxlZCgpKTsKKyAgICBjaGlsZC0+c2Nyb2xsQnkoSW50
U2l6ZSgxNSwgMTYpKTsKKyAgICBBU1NFUlRfVFJVRShyb290LT5kZXNjZW5kYW50V2FzU2Nyb2xs
ZWQoKSk7CisgICAgbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIEFTU0VS
VF9GQUxTRShyb290LT5kZXNjZW5kYW50V2FzU2Nyb2xsZWQoKSk7Cit9CisKIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0QW5kUmVkcmF3KQogewog
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcAppbmRleCA0YTQxNzk2Li43MGUzMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTU4LDcgKzU4LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRy
ZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJl
YWQoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJz
T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYsIGZsb2F0KSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiwgZmxvYXQp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBseUxheWVyU2Nyb2xsKGludCBsYXllcklkLCBjb25z
dCBJbnRTaXplJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKSB7IH0KIH07CiAKQEAgLTE1NSw5ICsxNTYsMTQgQEAgcHVibGljOgog
ICAgICAgICBtX3Rlc3RIb29rcy0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CiAg
ICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHNjYWxlKQorICAgIHZpcnR1YWwgdm9pZCBhcHBseVJvb3RM
YXllclNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2Fs
ZSkKICAgICB7Ci0gICAgICAgIG1fdGVzdEhvb2tzLT5hcHBseVNjcm9sbEFuZFNjYWxlKHNjcm9s
bERlbHRhLCBzY2FsZSk7CisgICAgICAgIG1fdGVzdEhvb2tzLT5hcHBseVJvb3RMYXllclNjcm9s
bEFuZFNjYWxlKHNjcm9sbERlbHRhLCBzY2FsZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5TGF5ZXJTY3JvbGwoaW50IGxheWVySWQsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRh
KQorICAgIHsKKyAgICAgICAgbV90ZXN0SG9va3MtPmFwcGx5TGF5ZXJTY3JvbGwobGF5ZXJJZCwg
c2Nyb2xsRGVsdGEpOwogICAgIH0KIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCkBAIC03NjcsNyArNzczLDcg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Ny
b2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHNjYWxlKQorICAg
IHZpcnR1YWwgdm9pZCBhcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUm
IHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZSkKICAgICB7CiAgICAgICAgIEludFBvaW50IHBvc2l0
aW9uID0gbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKICAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9z
aXRpb24gKyBzY3JvbGxEZWx0YSk7CkBAIC04NDQsNyArODUwLDcgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHNjYWxlKQorICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9h
dCBzY2FsZSkKICAgICB7CiAgICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gbV9sYXllclRyZWVI
b3N0LT5yb290TGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKICAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5yb290TGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0
YSk7CkBAIC05MDQsNiArOTEwLDEzOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldFZp
c2libGUsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3QodHJ1ZSk7CiB9CiAKK2NsYXNzIEND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RU
aHJlYWRPbmx5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7
CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwor
ICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7Cisg
ICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBt
X3Jvb3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RT
Y3JvbGxMYXllcik7CisgICAgICAgIG1fY2hpbGRMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgwKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsK
KyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX2No
aWxkTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAg
ICAgbV9yb290U2Nyb2xsTGF5ZXItPmFkZENoaWxkKG1fY2hpbGRMYXllcik7CisgICAgICAgIHBv
c3RTZXROZWVkc0NvbW1pdFRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRh
LCBmbG9hdCkKKyAgICB7CisgICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Nyb2xs
TGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiArIHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlMYXllclNjcm9sbChpbnQgbGF5ZXJJZCwgY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGVsdGEpCisgICAgeworICAgICAgICBMYXllckNocm9taXVtKiByb290ID0gbV9sYXllclRy
ZWVIb3N0LT5yb290TGF5ZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYXBwbHlTY3JvbGxUb0No
aWxkTGF5ZXIocm9vdCwgbGF5ZXJJZCwgc2Nyb2xsRGVsdGEpKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorcHJvdGVjdGVkOgorICAgIGJvb2wg
YXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGludCBsYXllcklk
LCBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKKyAgICB7CisgICAgICAgIGlmIChsYXllci0+
aWQoKSA9PSBsYXllcklkKSB7CisgICAgICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IGxheWVy
LT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIGlmIChhcHBseVNjcm9sbFRvQ2hpbGRMYXllcihsYXll
ci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgbGF5ZXJJZCwgc2Nyb2xsRGVsdGEpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gbV9yb290U2Nyb2xsTGF5ZXI7Cit9OworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllciA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7
CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIoKQorICAg
ICAgICA6IG1fc2Nyb2xsQW1vdW50KDIsIDEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAg
ICB7CisgICAgICAgIEVYUEVDVF9FUShtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24o
KSwgSW50UG9pbnQoKSk7CisgICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5mcmFtZU51bWJl
cigpKQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24o
KSwgSW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2No
aWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkgKyBtX3Njcm9sbEFtb3VudCk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIo
KSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShpbXBsLT5zY3JvbGxCZWdpbihJbnRQ
b2ludCg1LCA1KSkpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQp
OworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1w
bC0+ZnJhbWVOdW1iZXIoKSA9PSAyKSB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAg
IH0KKyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IEludFNpemUgbV9zY3JvbGxBbW91bnQ7Cit9
OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIsIHJ1bk11bHRp
VGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQorCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0IDogcHVibGljIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxCYXNlIHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllckJleW9uZExpbWl0KCkKKyAgICAgICAgOiBtX2luaXRpYWxSb290U2Nyb2xs
UG9zaXRpb24oMTAsIDEwKQorICAgICAgICAsIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24o
MjAsIDApCisgICAgICAgICwgbV9zY3JvbGxBbW91bnQoLTI1LCAtNSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExh
eWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24pOworICAg
ICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbENoaWxkU2Nyb2xs
UG9zaXRpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJl
YWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVy
VHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgQ0NMYXllckltcGwq
IHJvb3QgPSBpbXBsLT5yb290TGF5ZXIoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBzY3Jv
bGxSb290ID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJ
bXBsKiBjaGlsZCA9IHNjcm9sbFJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgICAg
ICBFWFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsUm9vdFNj
cm9sbFBvc2l0aW9uICsgSW50U2l6ZSgwLCAtNSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKGNo
aWxkLT5zY3JvbGxQb3NpdGlvbigpLCBtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uICsgSW50
U2l6ZSgtMjAsIDApKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3
TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAg
ICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX1RS
VUUoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpKTsKKyAgICAgICAgICAgIGltcGwt
PnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgp
OworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikgeworICAgICAg
ICAgICAgZW5kVGVzdCgpOworICAgICAgICB9CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBJ
bnRQb2ludCBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb247CisgICAgY29uc3QgSW50UG9pbnQg
bV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xs
QW1vdW50OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVy
QmV5b25kTGltaXQsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOwor
fQorCiBjbGFzcyBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXll
ckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUo
Q0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKLS0gCjEuNy4zLjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117425</attachid>
            <date>2011-12-01 08:30:28 -0800</date>
            <delta_ts>2011-12-13 11:29:18 -0800</delta_ts>
            <desc>WebCore patch</desc>
            <filename>0001-Split-scrollable-elements-into-background-and-overfl.patch</filename>
            <type>text/plain</type>
            <size>27642</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">RnJvbSA5NmMzODMxNGI4MDY0ZWI3OGVlM2I1ZTgyNmQ4YzBmMWMxNTQ0ZTFiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEt5b3N0aWxhIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+
CkRhdGU6IFRodSwgMSBEZWMgMjAxMSAxNjowMzoxMSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMS8y
XSBTcGxpdCBzY3JvbGxhYmxlIGVsZW1lbnRzIGludG8gYmFja2dyb3VuZCBhbmQgb3ZlcmZsb3cg
bGF5ZXJzCgpTcGxpdCBzY3JvbGxhYmxlIGVsZW1lbnRzIGluIGEgUmVuZGVyTGF5ZXJCYWNraW5n
IGludG8gdGhlIHN0YXRpYwpiYWNrZ3JvdW5kIHBhcnQgYW5kIHRoZSBzY3JvbGxpbmcgb3ZlcmZs
b3cgcGFydC4gVGhlIHNjcm9sbGFibGUgbGF5ZXJzCmFyZSByZWdpc3RlcmVkIHdpdGggQ2hyb21l
Q2xpZW50IHRvIGFsbG93IHRoZSBwbGF0Zm9ybSBjb21wb3NpdG9yIHRvCmltcGxlbWVudCB0aGUg
YWN0dWFsIHNjcm9sbGluZyBpbnRlcmFjdGlvbi4KClRoaXMgcGF0Y2ggaXMgYmFzZWQgb24gdGhl
IEFwcGxlIGlPUyA1IGltcGxlbWVudGF0aW9uIG9mIHRvdWNoIG92ZXJmbG93CnNjcm9sbGluZyB3
aXRoIHRoZSBmb2xsb3dpbmcgbm90YWJsZSBjaGFuZ2VzOgoKIC0gT25seSBlbGVtZW50cyBhbHJl
YWR5IGJhY2tlZCBieSBjb21wb3NpdGVkIGxheWVycyB3aWxsIGdldCB0aGlzCiAgIHRyZWF0bWVu
dC4gSW4gb3RoZXIgd29yZHMsIHNjcm9sbGFibGUgZWxlbWVudHMgYXJlIG5vdCBwcm9tb3RlZCBp
bnRvCiAgIGxheWVycyBhdXRvbWF0aWNhbGx5LCBidXQgaW5zdGVhZCB0aGV5IG5lZWQgdG8gaGF2
ZSwgZm9yIGV4YW1wbGUsIGEKICAgQ1NTIHRyYW5zZm9ybSB0byB0cmlnZ2VyIGxheWVyIGNyZWF0
aW9uLgogLSBUaGUgc2Nyb2xsIG9mZnNldCBpcyBkaXJlY3RseSByZXByZXNlbnRlZCBieSB0aGUg
R3JhcGhpY3NMYXllcgogICBwb3NpdGlvbiBpbnN0ZWFkIG9mIHRoZSBib3VuZHMgb3JpZ2luLgot
LS0KIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCAgICAgICAgICAgICAgIHwg
ICAgMyArCiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oICAgICAgICAgICAgICAg
ICB8ICAgIDQgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaCAg
ICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAg
ICAgICAgICAgIHwgICAgNiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmggICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCAgICB8ICAxMTUgKysrKysrKysrKysrKysrKysrLS0KIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCAgICAgIHwgICAgOCArKwogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgfCAgIDc1ICsr
KysrKysrKysrKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaCAgIHwgICAxMiArKwogOSBmaWxlcyBjaGFuZ2VkLCAyMTAgaW5zZXJ0aW9ucygrKSwgMTYg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IGRmMTVl
ZGMuLjIyYmZmOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTIyNSw2
ICsyMjUsOSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2aXJ0dWFs
IHZvaWQgbmVlZFRvdWNoRXZlbnRzKGJvb2wpIHsgfQogI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihOb2RlKiwgUGxhdGZvcm1MYXllciosIFBsYXRm
b3JtTGF5ZXIqLCBjb25zdCBJbnRTaXplJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVNj
cm9sbGluZ0xheWVyKE5vZGUqLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1MYXllciopIHsgfQog
ICAgIAogICAgIHZpcnR1YWwgdm9pZCBudW1XaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKHVuc2ln
bmVkKSB7IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDBiMWZkNTUu
LmE0YTk5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgi
CiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIlBvcHVwTWVudS5oIgogI2luY2x1
ZGUgIlBvcHVwTWVudUNsaWVudC5oIgpAQCAtMjExLDYgKzIxMiw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21PdmVyaGFuZ0FyZWEoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRS
ZWN0Jik7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIo
Tm9kZSosIFBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250
ZW50c0xheWVyLCBjb25zdCBJbnRTaXplJiBzY3JvbGxTaXplKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihOb2RlKiwgUGxhdGZvcm1MYXllciogc2Nyb2xs
aW5nTGF5ZXIsIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpID0gMDsKKwogICAgICAgICAv
LyBGSVhNRTogUmVtb3ZlIG9uY2UgYWxsIHBvcnRzIGFyZSB1c2luZyBjbGllbnQtYmFzZWQgZ2Vv
bG9jYXRpb24uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM3Mwog
ICAgICAgICAvLyBGb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uLCB0aGVzZSB0d28gbWV0aG9k
cyBoYXZlIG1vdmVkIHRvIEdlb2xvY2F0aW9uQ2xpZW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTAwNjEKICAgICAgICAgLy8gVGhpcyBjYW4gYmUgZWl0aGVyIGEg
c3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIGNhbGwuIFRoZSBDaHJvbWVDbGllbnQgY2FuIGRp
c3BsYXkgVUkgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKaW5kZXgg
ZGJlNmY2Zi4uZTFkMjg0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaApAQCAtNDAsNiArNDAsNyBAQCBlbnVtIEdy
YXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIHsKICAgICBHcmFwaGljc0xheWVyUGFpbnRCYWNrZ3Jv
dW5kID0gKDEgPDwgMCksCiAgICAgR3JhcGhpY3NMYXllclBhaW50Rm9yZWdyb3VuZCA9ICgxIDw8
IDEpLAogICAgIEdyYXBoaWNzTGF5ZXJQYWludE1hc2sgPSAoMSA8PCAyKSwKKyAgICBHcmFwaGlj
c0xheWVyUGFpbnRPdmVyZmxvd0NvbnRlbnRzID0gKDEgPDwgMyksCiAgICAgR3JhcGhpY3NMYXll
clBhaW50QWxsID0gKEdyYXBoaWNzTGF5ZXJQYWludEJhY2tncm91bmQgfCBHcmFwaGljc0xheWVy
UGFpbnRGb3JlZ3JvdW5kIHwgR3JhcGhpY3NMYXllclBhaW50TWFzaykKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDBmODA2YmIuLjhlZTI5YTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzYyNyw3ICszNjI3
LDcgQEAgQ2xpcFJlY3QgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRDbGlwUmVjdChjb25zdCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWcKIAogdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3Vs
YXRlUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiByZWdp
b24sIGNvbnN0IExheW91dFJlY3QmIHBhaW50RGlydHlSZWN0LCBMYXlvdXRSZWN0JiBsYXllckJv
dW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBSZWN0JiBiYWNrZ3Jv
dW5kUmVjdCwgQ2xpcFJlY3QmIGZvcmVncm91bmRSZWN0LCBDbGlwUmVjdCYgb3V0bGluZVJlY3Qs
IGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
cmVsZXZhbmN5LCBib29sIGNsaXBUb092ZXJmbG93KSBjb25zdAogewogICAgIGlmIChyb290TGF5
ZXIgIT0gdGhpcyAmJiBwYXJlbnQoKSkgewogICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IGJhY2tn
cm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHJlZ2lvbiwgdGVtcG9yYXJ5Q2xpcFJlY3RzLCByZWxl
dmFuY3kpOwpAQCAtMzY0NSw3ICszNjQ1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRl
UmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiByZWcKICAg
ICAvLyBVcGRhdGUgdGhlIGNsaXAgcmVjdHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBjaGlsZCBs
YXllcnMuCiAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVy
KCktPmhhc0NsaXAoKSkgewogICAgICAgICAvLyBUaGlzIGxheWVyIGVzdGFibGlzaGVzIGEgY2xp
cCBvZiBzb21lIGtpbmQuCi0gICAgICAgIGlmIChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAo
KSkgeworICAgICAgICBpZiAocmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgY2xpcFRv
T3ZlcmZsb3cpIHsKICAgICAgICAgICAgIGZvcmVncm91bmRSZWN0LmludGVyc2VjdCh0b1JlbmRl
ckJveChyZW5kZXJlcigpKS0+b3ZlcmZsb3dDbGlwUmVjdChvZmZzZXQsIHJlZ2lvbiwgcmVsZXZh
bmN5KSk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQm9yZGVyUmFk
aXVzKCkpCiAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3Quc2V0SGFzUmFkaXVzKHRydWUp
OwpAQCAtMzY2OSw3ICszNjY5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMo
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiByZWcKICAgICAgICAg
ICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUobGF5ZXJCb3VuZHNXaXRoVmlzdWFs
T3ZlcmZsb3cpOyAvLyBMYXllcnMgYXJlIGluIHBoeXNpY2FsIGNvb3JkaW5hdGVzLCBzbyB0aGUg
b3ZlcmZsb3cgaGFzIHRvIGJlIGZsaXBwZWQuCiAgICAgICAgICAgICBsYXllckJvdW5kc1dpdGhW
aXN1YWxPdmVyZmxvdy5tb3ZlQnkob2Zmc2V0KTsKICAgICAgICAgICAgIGJhY2tncm91bmRSZWN0
LmludGVyc2VjdChsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7Ci0gICAgICAgIH0gZWxz
ZSB7CisgICAgICAgIH0gZWxzZSBpZiAoY2xpcFRvT3ZlcmZsb3cpIHsKICAgICAgICAgICAgIC8v
IFNoaWZ0IHRoZSBib3VuZHMgdG8gYmUgZm9yIG91ciByZWdpb24gb25seS4KICAgICAgICAgICAg
IExheW91dFJlY3QgYm91bmRzID0gcmVuZGVyQm94KCktPmJvcmRlckJveFJlY3RJblJlZ2lvbihy
ZWdpb24pOwogICAgICAgICAgICAgYm91bmRzLm1vdmVCeShvZmZzZXQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAzMTFlZWE1Li4zNzg5YzQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNDQ1LDcgKzQ0NSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBmb3IgcGFpbnRpbmcvZXZlbnQgaGFuZGxpbmcuCiAgICAgdm9pZCBjYWxjdWxhdGVS
ZWN0cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWdpb24qLCBjb25zdCBM
YXlvdXRSZWN0JiBwYWludERpcnR5UmVjdCwgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBm
b3JlZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxpbmVSZWN0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCB0ZW1wb3JhcnlDbGlwUmVjdHMgPSBmYWxzZSwgT3ZlcmxheVNjcm9sbGJhclNp
emVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHRlbXBvcmFyeUNsaXBSZWN0cyA9IGZhbHNlLCBPdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBib29s
IGNsaXBUb092ZXJmbG93ID0gdHJ1ZSkgY29uc3Q7CiAKICAgICAvLyBDb21wdXRlIGFuZCBjYWNo
ZSBjbGlwIHJlY3RzIGNvbXB1dGVkIHdpdGggdGhlIGdpdmVuIGxheWVyIGFzIHRoZSByb290CiAg
ICAgdm9pZCB1cGRhdGVDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVu
ZGVyUmVnaW9uKiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCmluZGV4IGQwZTZlMDQuLjI4MWQ0ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC05NSw2ICs5NSw3IEBAIFJl
bmRlckxheWVyQmFja2luZzo6flJlbmRlckxheWVyQmFja2luZygpCiAgICAgdXBkYXRlT3ZlcmZs
b3dDb250cm9sc0xheWVycyhmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgICB1cGRhdGVGb3JlZ3Jv
dW5kTGF5ZXIoZmFsc2UpOwogICAgIHVwZGF0ZU1hc2tMYXllcihmYWxzZSk7CisgICAgdXBkYXRl
U2Nyb2xsaW5nTGF5ZXJzKGZhbHNlKTsKICAgICBkZXN0cm95R3JhcGhpY3NMYXllcnMoKTsKIH0K
IApAQCAtMTM3LDYgKzEzOCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpkZXN0cm95R3Jh
cGhpY3NMYXllcnMoKQogICAgIG1fZm9yZWdyb3VuZExheWVyID0gbnVsbHB0cjsKICAgICBtX2Ns
aXBwaW5nTGF5ZXIgPSBudWxscHRyOwogICAgIG1fbWFza0xheWVyID0gbnVsbHB0cjsKKworICAg
IG1fc2Nyb2xsaW5nTGF5ZXIgPSBudWxscHRyOworICAgIG1fc2Nyb2xsaW5nQ29udGVudHNMYXll
ciA9IG51bGxwdHI7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVMYXllck9w
YWNpdHkoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQpAQCAtMTY0LDEwICsxNjgsMTAgQEAgc3Rh
dGljIGJvb2wgaGFzTm9uWmVyb1RyYW5zZm9ybU9yaWdpbihjb25zdCBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogICAgICAgICB8fCAoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblkoKS50eXBlKCkgPT0g
Rml4ZWQgJiYgc3R5bGUtPnRyYW5zZm9ybU9yaWdpblkoKS52YWx1ZSgpKTsKIH0KIAotc3RhdGlj
IGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZChSZW5kZXJMYXllciogbGF5ZXIpCitz
dGF0aWMgYm9vbCBsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcoUmVuZGVy
TGF5ZXIqIGxheWVyKQogewogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSBsYXllcjsgY3Vy
cjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5oYXNUcmFuc2Zv
cm0oKSkKKyAgICAgICAgaWYgKGN1cnItPmhhc1RyYW5zZm9ybSgpIHx8IGN1cnItPnNjcm9sbHNP
dmVyZmxvdygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMTk5
LDcgKzIwMyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91
bmRzKCkKICAgICAvLyBXZSdkIG5lZWQgUmVuZGVyT2JqZWN0Ojpjb252ZXJ0Q29udGFpbmVyVG9M
b2NhbFF1YWQoKSwgd2hpY2ggZG9lc24ndCB5ZXQgZXhpc3QuICBJZiB0aGlzCiAgICAgLy8gaXMg
YSBmdWxsc2NyZWVuIHJlbmRlcmVyLCBkb24ndCBjbGlwIHRvIHRoZSB2aWV3cG9ydCwgYXMgdGhl
IHJlbmRlcmVyIHdpbGwgYmUgYXNrZWQgdG8KICAgICAvLyBkaXNwbGF5IG91dHNpZGUgb2YgdGhl
IHZpZXdwb3J0IGJvdW5kcy4KLSAgICBpZiAoY29tcG9zaXRvcigpLT5jb21wb3NpdGluZ0NvbnN1
bHRzT3ZlcmxhcCgpICYmICFsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkKG1fb3duaW5nTGF5
ZXIpIAorICAgIGlmIChjb21wb3NpdG9yKCktPmNvbXBvc2l0aW5nQ29uc3VsdHNPdmVybGFwKCkg
JiYgIWxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWRPclNjcm9sbGluZyhtX293bmluZ0xheWVy
KQogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAgICAgJiYgIWxheWVyT3JBbmNlc3Rv
cklzRnVsbFNjcmVlbihtX293bmluZ0xheWVyKQogI2VuZGlmCkBAIC0yNzksNiArMjgzLDkgQEAg
Ym9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9u
KCkKICAgICBpZiAodXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhyZXF1aXJlc0hvcml6b250
YWxTY3JvbGxiYXJMYXllcigpLCByZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSwgcmVx
dWlyZXNTY3JvbGxDb3JuZXJMYXllcigpKSkKICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0g
dHJ1ZTsKIAorICAgIGlmICh1cGRhdGVTY3JvbGxpbmdMYXllcnMobV9vd25pbmdMYXllci0+c2Ny
b2xsc092ZXJmbG93KCkpKQorICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOworCiAg
ICAgaWYgKGxheWVyQ29uZmlnQ2hhbmdlZCkKICAgICAgICAgdXBkYXRlSW50ZXJuYWxIaWVyYXJj
aHkoKTsKIApAQCAtMzk0LDEyICs0MDEsMjIgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJlbnRM
b2NhdGlvbiA9IGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKTsKICAgICBlbHNl
CiAgICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbiA9IHJlbmRlcmVyKCktPnZpZXco
KS0+ZG9jdW1lbnRSZWN0KCkubG9jYXRpb24oKTsKKworICAgIGlmIChjb21wQW5jZXN0b3IgJiYg
Y29tcEFuY2VzdG9yLT5zY3JvbGxzT3ZlcmZsb3coKSkgeworICAgICAgICBSZW5kZXJCb3gqIHJl
bmRlckJveCA9IHRvUmVuZGVyQm94KGNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSk7CisgICAgICAg
IExheW91dFJlY3QgcGFkZGluZ0JveChyZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwgcmVuZGVyQm94
LT5ib3JkZXJUb3AoKSwKKyAgICAgICAgICAgIHJlbmRlckJveC0+d2lkdGgoKSAtIHJlbmRlckJv
eC0+Ym9yZGVyTGVmdCgpIC0gcmVuZGVyQm94LT5ib3JkZXJSaWdodCgpLAorICAgICAgICAgICAg
cmVuZGVyQm94LT5oZWlnaHQoKSAtIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJCb3gt
PmJvcmRlckJvdHRvbSgpKTsKKworICAgICAgICBMYXlvdXRTaXplIHNjcm9sbE9mZnNldCA9IGNv
bXBBbmNlc3Rvci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisgICAgICAgIGdyYXBoaWNzTGF5
ZXJQYXJlbnRMb2NhdGlvbiA9IHBhZGRpbmdCb3gubG9jYXRpb24oKSAtIHNjcm9sbE9mZnNldDsK
KyAgICB9CiAgICAgCiAgICAgaWYgKGNvbXBBbmNlc3RvciAmJiBtX2FuY2VzdG9yQ2xpcHBpbmdM
YXllcikgewogICAgICAgICAvLyBDYWxsIGNhbGN1bGF0ZVJlY3RzIHRvIGdldCB0aGUgYmFja2dy
b3VuZFJlY3Qgd2hpY2ggaXMgd2hhdCBpcyB1c2VkIHRvIGNsaXAgdGhlIGNvbnRlbnRzIG9mIHRo
aXMKICAgICAgICAgLy8gbGF5ZXIuIE5vdGUgdGhhdCB3ZSBjYWxsIGl0IHdpdGggdGVtcG9yYXJ5
Q2xpcFJlY3RzID0gdHJ1ZSBiZWNhdXNlIG5vcm1hbGx5IHdoZW4gY29tcHV0aW5nIGNsaXAgcmVj
dHMKICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcgbGF5ZXIsIHJvb3RMYXllciBpcyB0aGUg
bGF5ZXIgaXRzZWxmLgotICAgICAgICBMYXlvdXRSZWN0IHBhcmVudENsaXBSZWN0ID0gbV9vd25p
bmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0KGNvbXBBbmNlc3RvciwgMCwgdHJ1ZSkucmVjdCgp
OyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1MgcmVnaW9ucy4KKyAgICAgICAgTGF5b3V0UmVj
dCBwYXJlbnRDbGlwUmVjdCA9IGNvbXBBbmNlc3Rvci0+c2Nyb2xsc092ZXJmbG93KCkgPyByZWxh
dGl2ZUNvbXBvc2l0aW5nQm91bmRzIDogbV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0
KGNvbXBBbmNlc3RvciwgMCwgdHJ1ZSkucmVjdCgpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBD
U1MgcmVnaW9ucy4KICAgICAgICAgQVNTRVJUKHBhcmVudENsaXBSZWN0ICE9IFBhaW50SW5mbzo6
aW5maW5pdGVSZWN0KCkpOwogICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCgpICsgKHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCkgLSBncmFwaGlj
c0xheWVyUGFyZW50TG9jYXRpb24pKTsKICAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXIt
PnNldFNpemUocGFyZW50Q2xpcFJlY3Quc2l6ZSgpKTsKQEAgLTUwOSw2ICs1MjYsMjggQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAg
ICAgIHJlZmxlY3Rpb25CYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRMYXll
clBvc2l0aW9uKEZsb2F0UG9pbnQoKSArIChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVmbGVj
dGlvbkxheWVyQm91bmRzLmxvY2F0aW9uKCkpKTsKICAgICB9CiAKKyAgICBpZiAobV9zY3JvbGxp
bmdMYXllcikgeworICAgICAgICBBU1NFUlQobV9zY3JvbGxpbmdDb250ZW50c0xheWVyKTsKKyAg
ICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcigpKTsKKyAg
ICAgICAgTGF5b3V0UmVjdCBwYWRkaW5nQm94KHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpLCByZW5k
ZXJCb3gtPmJvcmRlclRvcCgpLCByZW5kZXJCb3gtPndpZHRoKCkgLSByZW5kZXJCb3gtPmJvcmRl
ckxlZnQoKSAtIHJlbmRlckJveC0+Ym9yZGVyUmlnaHQoKSwgcmVuZGVyQm94LT5oZWlnaHQoKSAt
IHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJCb3gtPmJvcmRlckJvdHRvbSgpKTsKKyAg
ICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQgPSBtX293bmluZ0xheWVyLT5zY3JvbGxlZENv
bnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3Njcm9sbGluZ0xheWVyLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KCkgKyAocGFkZGluZ0JveC5sb2NhdGlvbigpIC0gbG9jYWxDb21wb3NpdGluZ0Jv
dW5kcy5sb2NhdGlvbigpKSk7CisgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnNldFNpemUocGFk
ZGluZ0JveC5zaXplKCkpOworICAgICAgICBtX3Njcm9sbGluZ0xheWVyLT5zZXRPZmZzZXRGcm9t
UmVuZGVyZXIoTGF5b3V0UG9pbnQoKSAtIHBhZGRpbmdCb3gubG9jYXRpb24oKSk7CisKKyAgICAg
ICAgTGF5b3V0U2l6ZSBzY3JvbGxTaXplKG1fb3duaW5nTGF5ZXItPnNjcm9sbFdpZHRoKCksIG1f
b3duaW5nTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKKworICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAh
PSBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNpemUoKSkKKyAgICAgICAgICAgIG1fc2Nyb2xs
aW5nQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICAgICAgbV9zY3JvbGxp
bmdDb250ZW50c0xheWVyLT5zZXRTaXplKHNjcm9sbFNpemUpOworICAgICAgICBtX3Njcm9sbGlu
Z0NvbnRlbnRzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLXNjcm9sbE9mZnNldC53aWR0
aCgpLCAtc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSk7CisgICAgICAgIG1fc2Nyb2xsaW5nQ29udGVu
dHNMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKHBhZGRpbmdCb3gubG9jYXRpb24oKSAtIExh
eW91dFBvaW50KCkgLSBzY3JvbGxPZmZzZXQpOworCisgICAgICAgIGNvbXBvc2l0b3IoKS0+c2Ny
b2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRlZChtX293bmluZ0xheWVyLCBtX3Njcm9sbGluZ0xheWVy
LT5wbGF0Zm9ybUxheWVyKCksIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+cGxhdGZvcm1MYXll
cigpLCBzY3JvbGxTaXplKTsKKyAgICB9CisKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRl
bnRzUmVjdChjb250ZW50c0JveCgpKTsKICAgICB1cGRhdGVEcmF3c0NvbnRlbnQoKTsKICAgICB1
cGRhdGVBZnRlcldpZGdldFJlc2l6ZSgpOwpAQCAtNTQ0LDYgKzU4MywxMCBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlSW50ZXJuYWxIaWVyYXJjaHkoKQogICAgICAgICAgICAgbV9n
cmFwaGljc0xheWVyLT5hZGRDaGlsZChtX2xheWVyRm9yU2Nyb2xsQ29ybmVyLmdldCgpKTsKICAg
ICAgICAgfQogICAgIH0KKyAgICBpZiAobV9zY3JvbGxpbmdMYXllcikgeworICAgICAgICBtX3Nj
cm9sbGluZ0xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgICAgIHBhcmVudEZvclN1Ymxh
eWVycygpLT5hZGRDaGlsZChtX3Njcm9sbGluZ0xheWVyLmdldCgpKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVEcmF3c0NvbnRlbnQoKQpAQCAtNjkzLDYgKzcz
Niw0OCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlTWFza0xheWVyKGJvb2wgbmVl
ZHNNYXNrTGF5ZXIpCiAgICAgcmV0dXJuIGxheWVyQ2hhbmdlZDsKIH0KIAorYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyhib29sIHNjcm9sbGluZ0xheWVycykK
K3sKKyAgICBib29sIGxheWVyQ2hhbmdlZCA9IGZhbHNlOworICAgIGlmIChzY3JvbGxpbmdMYXll
cnMpIHsKKyAgICAgICAgaWYgKCFtX3Njcm9sbGluZ0xheWVyKSB7CisgICAgICAgICAgICAvLyBP
dXRlciBsYXllciB3aGljaCBjb3JyZXNwb25kcyB3aXRoIHRoZSBzY3JvbGwgdmlldy4KKyAgICAg
ICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Cisj
aWZuZGVmIE5ERUJVRworICAgICAgICAgICAgbV9zY3JvbGxpbmdMYXllci0+c2V0TmFtZSgiU2Ny
b2xsaW5nIGNvbnRhaW5lciIpOworI2VuZGlmCisgICAgICAgICAgICBtX3Njcm9sbGluZ0xheWVy
LT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgICAgICAgICAgbV9zY3JvbGxpbmdMYXllci0+
c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgICAgICAgICAgLy8gSW5uZXIgbGF5ZXIgd2hp
Y2ggcmVuZGVycyB0aGUgY29udGVudCB0aGF0IHNjcm9sbHMuCisgICAgICAgICAgICBtX3Njcm9s
bGluZ0NvbnRlbnRzTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVm
IE5ERUJVRworICAgICAgICAgICAgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zZXROYW1lKCJT
Y3JvbGxpbmcgQ29udGVudHMiKTsKKyNlbmRpZgorICAgICAgICAgICAgbV9zY3JvbGxpbmdDb250
ZW50c0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgICAgICBtX3Njcm9sbGlu
Z0NvbnRlbnRzTGF5ZXItPnNldFBhaW50aW5nUGhhc2Uoc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2U+KEdyYXBoaWNzTGF5ZXJQYWludEZvcmVncm91bmQgfCBHcmFwaGljc0xh
eWVyUGFpbnRPdmVyZmxvd0NvbnRlbnRzKSk7CisgICAgICAgICAgICBtX3Njcm9sbGluZ0xheWVy
LT5hZGRDaGlsZChtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIuZ2V0KCkpOworCisgICAgICAgICAg
ICBsYXllckNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgY29tcG9zaXRvcigpLT5zY3JvbGxp
bmdMYXllckFkZGVkT3JVcGRhdGVkKG1fb3duaW5nTGF5ZXIsIG1fc2Nyb2xsaW5nTGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSwgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5wbGF0Zm9ybUxheWVyKCks
IExheW91dFNpemUobV9vd25pbmdMYXllci0+c2Nyb2xsV2lkdGgoKSwgbV9vd25pbmdMYXllci0+
c2Nyb2xsSGVpZ2h0KCkpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9zY3JvbGxpbmdM
YXllcikgeworICAgICAgICBpZiAoIXJlbmRlcmVyKCktPmRvY3VtZW50QmVpbmdEZXN0cm95ZWQo
KSkKKyAgICAgICAgICAgIGNvbXBvc2l0b3IoKS0+c2Nyb2xsaW5nTGF5ZXJSZW1vdmVkKG1fb3du
aW5nTGF5ZXIsIG1fc2Nyb2xsaW5nTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgbV9zY3JvbGxpbmdD
b250ZW50c0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworCisgICAgICAgIG1fc2Nyb2xsaW5nTGF5
ZXIgPSBudWxscHRyOworICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIgPSBudWxscHRy
OworICAgICAgICBsYXllckNoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChsYXllckNo
YW5nZWQpIHsKKyAgICAgICAgdXBkYXRlSW50ZXJuYWxIaWVyYXJjaHkoKTsKKyAgICAgICAgbV9n
cmFwaGljc0xheWVyLT5zZXRQYWludGluZ1BoYXNlKHBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5
ZXIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGxheWVyQ2hhbmdlZDsKK30KKwogR3JhcGhpY3NM
YXllclBhaW50aW5nUGhhc2UgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludGluZ1BoYXNlRm9yUHJp
bWFyeUxheWVyKCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBwaGFzZSA9IEdyYXBoaWNzTGF5ZXJQ
YWludEJhY2tncm91bmQ7CkBAIC03MDEsNiArNzg2LDkgQEAgR3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVyKCkg
Y28KICAgICBpZiAoIW1fbWFza0xheWVyKQogICAgICAgICBwaGFzZSB8PSBHcmFwaGljc0xheWVy
UGFpbnRNYXNrOwogCisgICAgaWYgKG1fc2Nyb2xsaW5nQ29udGVudHNMYXllcikKKyAgICAgICAg
cGhhc2UgJj0gfkdyYXBoaWNzTGF5ZXJQYWludEZvcmVncm91bmQ7CisKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2U+KHBoYXNlKTsKIH0KIApAQCAtMTA1
OCw2ICsxMTQ2LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERp
c3BsYXkoKQogCiAgICAgaWYgKG1fbWFza0xheWVyICYmIG1fbWFza0xheWVyLT5kcmF3c0NvbnRl
bnQoKSkKICAgICAgICAgbV9tYXNrTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworCisgICAgaWYg
KG1fc2Nyb2xsaW5nQ29udGVudHNMYXllciAmJiBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPmRy
YXdzQ29udGVudCgpKQorICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldE5lZWRz
RGlzcGxheSgpOwogfQogCiAvLyByIGlzIGluIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBs
YXllcidzIHJlbmRlciBvYmplY3QKQEAgLTEwODAsNiArMTE3MSwxMiBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBMYXlvdXRSZWN0
JiByKQogICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX21hc2tMYXllci0+b2Zmc2V0RnJv
bVJlbmRlcmVyKCkpOwogICAgICAgICBtX21hc2tMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGxheWVyRGlydHlSZWN0KTsKICAgICB9CisKKyAgICBpZiAobV9zY3JvbGxpbmdDb250ZW50c0xh
eWVyICYmIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAg
ICAgTGF5b3V0UmVjdCBsYXllckRpcnR5UmVjdCA9IHI7CisgICAgICAgIGxheWVyRGlydHlSZWN0
Lm1vdmUoLW1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkpOwor
ICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChs
YXllckRpcnR5UmVjdCk7CisgICAgfQogfQogCiAvLyBTaGFyZSB0aGlzIHdpdGggUmVuZGVyTGF5
ZXI6OnBhaW50TGF5ZXIsIHdoaWNoIHdvdWxkIGhhdmUgdG8gYmUgZWR1Y2F0ZWQgYWJvdXQgR3Jh
cGhpY3NMYXllclBhaW50aW5nUGhhc2U/CkBAIC0xMTAwLDcgKzExOTcsOCBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgR3Jh
cGhpY3NDb250ZXh0KgogICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQg
dXNlLgogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgZGFtYWdlUmVj
dCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsKLSAgICBtX293bmluZ0xheWVyLT5jYWxj
dWxhdGVSZWN0cyhyb290TGF5ZXIsIDAsIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFt
YWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCk7IC8vIEZJWE1FOiBJbmNvcnJl
Y3QgZm9yIENTUyByZWdpb25zLgorICAgIG1fb3duaW5nTGF5ZXItPmNhbGN1bGF0ZVJlY3RzKHJv
b3RMYXllciwgMCwgcGFpbnREaXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlw
UmVjdFRvQXBwbHksIG91dGxpbmVSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhbHNlLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgIShwYWludGluZ1BoYXNlICYg
R3JhcGhpY3NMYXllclBhaW50T3ZlcmZsb3dDb250ZW50cykpOyAvLyBGSVhNRTogSW5jb3JyZWN0
IGZvciBDU1MgcmVnaW9ucy4KIAogICAgIExheW91dFBvaW50IHBhaW50T2Zmc2V0ID0gdG9Qb2lu
dChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gbV9vd25pbmdMYXllci0+cmVuZGVyQm94TG9jYXRp
b24oKSk7CiAKQEAgLTEyMDIsNyArMTMwMCw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAv
LyBVcC1jYWxsIGZyb20gY29tcG9zaXRpbmcgbGF5ZXIgZHJhd2luZyBjYWxsYmFjay4KIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdy
YXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50
aW5nUGhhc2UgcGFpbnRpbmdQaGFzZSwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcCkKIHsKLSAgICBp
ZiAoZ3JhcGhpY3NMYXllciA9PSBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCkgfHwgZ3JhcGhpY3NMYXll
ciA9PSBtX2ZvcmVncm91bmRMYXllci5nZXQoKSB8fCBncmFwaGljc0xheWVyID09IG1fbWFza0xh
eWVyLmdldCgpKSB7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ncmFwaGljc0xheWVyLmdl
dCgpIHx8IGdyYXBoaWNzTGF5ZXIgPT0gbV9mb3JlZ3JvdW5kTGF5ZXIuZ2V0KCkgfHwgZ3JhcGhp
Y3NMYXllciA9PSBtX21hc2tMYXllci5nZXQoKSB8fCBncmFwaGljc0xheWVyID09IG1fc2Nyb2xs
aW5nQ29udGVudHNMYXllci5nZXQoKSkgewogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUGFpbnQobV9v
d25pbmdMYXllci0+cmVuZGVyZXIoKS0+ZnJhbWUoKSwgY2xpcCk7CiAKICAgICAgICAgTGF5b3V0
U2l6ZSBvZmZzZXQgPSBncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTEy
MTIsOCArMTMxMCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgIGNsaXBSZWN0
Lm1vdmUob2Zmc2V0KTsKIAogICAgICAgICAvLyBUaGUgZGlydHlSZWN0IGlzIGluIHRoZSBjb29y
ZHMgb2YgdGhlIHBhaW50aW5nIHJvb3QuCi0gICAgICAgIExheW91dFJlY3QgZGlydHlSZWN0ID0g
Y29tcG9zaXRlZEJvdW5kcygpOwotICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0
KTsKKyAgICAgICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3QgPSBjbGlwUmVjdDsKKyAgICAgICAgaWYg
KCEocGFpbnRpbmdQaGFzZSAmIEdyYXBoaWNzTGF5ZXJQYWludE92ZXJmbG93Q29udGVudHMpKQor
ICAgICAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChjb21wb3NpdGVkQm91bmRzKCkpOwogCiAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gdXNlIHRoZSBzYW1lIHJvb3QgYXMgZm9yIGhpdCB0ZXN0aW5n
LCBiZWNhdXNlIGJvdGggbWV0aG9kcyBjYW4gY29tcHV0ZSBhbmQgY2FjaGUgY2xpcFJlY3RzLgog
ICAgICAgICBwYWludEludG9MYXllcihtX293bmluZ0xheWVyLCAmY29udGV4dCwgZGlydHlSZWN0
LCBQYWludEJlaGF2aW9yTm9ybWFsLCBwYWludGluZ1BoYXNlLCByZW5kZXJlcigpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAppbmRleCAyYzY0NmY4
Li4zOGMwODhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5oCkBAIC04Myw2ICs4MywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0NvbnRlbnRz
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZvcmVncm91bmRMYXllciAhPSAwOyB9CiAgICAgR3Jh
cGhpY3NMYXllciogZm9yZWdyb3VuZExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9mb3JlZ3JvdW5k
TGF5ZXIuZ2V0KCk7IH0KKworICAgIGJvb2wgaGFzU2Nyb2xsaW5nTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbGluZ0xheWVyOyB9CisgICAgR3JhcGhpY3NMYXllciogc2Nyb2xsaW5nTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ0xheWVyLmdldCgpOyB9CisgICAgR3JhcGhp
Y3NMYXllciogc2Nyb2xsaW5nQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
aW5nQ29udGVudHNMYXllci5nZXQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzTWFza0xheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIgIT0gMDsgfQogCkBAIC0xNjEsNiArMTY1LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29u
c3Q7CiAgICAgYm9vbCByZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdDsKICAg
ICBib29sIHJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdDsKKyAgICBib29sIHVwZGF0
ZVNjcm9sbGluZ0xheWVycyhib29sIHNjcm9sbGluZ0xheWVycyk7CiAKICAgICBHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZSBwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVyKCkgY29uc3Q7CiAg
ICAgCkBAIC0yMTEsNiArMjE2LDkgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R3JhcGhpY3NMYXll
cj4gbV9sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyOwogICAgIE93blB0cjxHcmFwaGljc0xheWVy
PiBtX2xheWVyRm9yU2Nyb2xsQ29ybmVyOwogCisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1f
c2Nyb2xsaW5nTGF5ZXI7ICAgICAgICAgLy8gb25seSB1c2VkIGlmIHRoZSBsYXllciBpcyBzY3Jv
bGxhYmxlLgorICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5
ZXI7IC8vIG9ubHkgdXNlZCBpZiB0aGUgbGF5ZXIgaXMgc2Nyb2xsYWJsZS4KKwogICAgIExheW91
dFJlY3QgbV9jb21wb3NpdGVkQm91bmRzOwogCiAgICAgYm9vbCBtX2FydGlmaWNpYWxseUluZmxh
dGVkQm91bmRzOyAgICAgIC8vIGJvdW5kcyBoYWQgdG8gYmUgbWFkZSBub24temVybyB0byBtYWtl
IHRyYW5zZm9ybS1vcmlnaW4gd29yawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBmOTNhMzk5Li4wOThmM2RjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApA
QCAtMTUwLDEwICsxNTAsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FjaGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRmxhZ3MoKQogICAgIC8vIFdlIGFsbG93IHRoZSBjaHJvbWUgdG8g
b3ZlcnJpZGUgdGhlIHNldHRpbmdzLCBpbiBjYXNlIHRoZSBwYWdlIGlzIHJlbmRlcmVkCiAgICAg
Ly8gb24gYSBjaHJvbWUgdGhhdCBkb2Vzbid0IGFsbG93IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5n
LgogICAgIGlmIChoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKSB7Ci0gICAgICAgIEZyYW1lKiBm
cmFtZSA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7Ci0gICAgICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOwotICAgICAgICBpZiAocGFnZSkgewot
ICAgICAgICAgICAgQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSBwYWdlLT5jaHJvbWUoKS0+
Y2xpZW50KCk7CisgICAgICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gdGhpcy0+Y2hy
b21lQ2xpZW50KCk7CisgICAgICAgIGlmIChjaHJvbWVDbGllbnQpIHsKICAgICAgICAgICAgIG1f
Y29tcG9zaXRpbmdUcmlnZ2VycyA9IGNocm9tZUNsaWVudC0+YWxsb3dlZENvbXBvc2l0aW5nVHJp
Z2dlcnMoKTsKICAgICAgICAgICAgIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBtX2NvbXBv
c2l0aW5nVHJpZ2dlcnM7CiAgICAgICAgIH0KQEAgLTE4OSw2ICsxODcsMTYgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCiAgICAgcGFnZS0+Y2hyb21l
KCktPmNsaWVudCgpLT5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCk7CiB9CiAKK0Nocm9t
ZUNsaWVudCogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjaHJvbWVDbGllbnQoKSBjb25zdAorewor
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7Cisg
ICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7CisgICAgaWYgKCFwYWdl
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNo
YW5nZXMoYm9vbCBpc0ZsdXNoUm9vdCkKIHsKICAgICAvLyBGcmFtZVZpZXc6OnN5bmNDb21wb3Np
dGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCkgZmx1c2hlcyBlYWNoIHN1YmZyYW1lLApAQCAt
OTI0LDYgKzkzMiw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkQ29tcG9z
aXRpbmdMYXllclRyZWUoUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zCiAgICAgICAgIGlmIChsYXll
ci0+cmVuZGVyZXIoKS0+aXNSZW5kZXJQYXJ0KCkpCiAgICAgICAgICAgICBwYXJlbnRlZCA9IHBh
cmVudEZyYW1lQ29udGVudExheWVycyh0b1JlbmRlclBhcnQobGF5ZXItPnJlbmRlcmVyKCkpKTsK
IAorICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsaW5nTGF5ZXIgPSBsYXllckJhY2tp
bmctPnNjcm9sbGluZ0xheWVyKCkpCisgICAgICAgICAgICBjaGlsZExpc3QuYXBwZW5kKHNjcm9s
bGluZ0xheWVyKTsKKwogICAgICAgICBpZiAoIXBhcmVudGVkKQogICAgICAgICAgICAgbGF5ZXJC
YWNraW5nLT5wYXJlbnRGb3JTdWJsYXllcnMoKS0+c2V0Q2hpbGRyZW4obGF5ZXJDaGlsZHJlbik7
CiAKQEAgLTExOTIsNiArMTIwMyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRN
b3ZlT25zY3JlZW4oKQogCiAgICAgUm9vdExheWVyQXR0YWNobWVudCBhdHRhY2htZW50ID0gc2hv
dWxkUHJvcGFnYXRlQ29tcG9zaXRpbmdUb0VuY2xvc2luZ0ZyYW1lKCkgPyBSb290TGF5ZXJBdHRh
Y2hlZFZpYUVuY2xvc2luZ0ZyYW1lIDogUm9vdExheWVyQXR0YWNoZWRWaWFDaHJvbWVDbGllbnQ7
CiAgICAgYXR0YWNoUm9vdExheWVyKGF0dGFjaG1lbnQpOworCisgICAgcmVnaXN0ZXJBbGxTY3Jv
bGxpbmdMYXllcnMoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxNb3Zl
T2Zmc2NyZWVuKCkKQEAgLTEyMDAsNiArMTIxMyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp3aWxsTW92ZU9mZnNjcmVlbigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGRldGFjaFJv
b3RMYXllcigpOworCisgICAgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOwogfQogCiB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xlYXJCYWNraW5nRm9yTGF5ZXJJbmNsdWRpbmdE
ZXNjZW5kYW50cyhSZW5kZXJMYXllciogbGF5ZXIpCkBAIC0xOTk4LDYgKzIwMTMsNTggQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgp
CiAgICAgICAgIHJvb3RMYXllci0+bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZElu
Y2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpCit7CisgICAgQ2hyb21lQ2xpZW50KiBjaHJvbWVD
bGllbnQgPSB0aGlzLT5jaHJvbWVDbGllbnQoKTsKKyAgICBpZiAoIWNocm9tZUNsaWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSGFzaFNldDxSZW5kZXJMYXllcio+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3Njcm9sbGluZ0xheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVuZGVy
TGF5ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Njcm9sbGluZ0xheWVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gKml0OworICAg
ICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllci0+YmFja2luZygpOworICAg
ICAgICBBU1NFUlQoYmFja2luZyk7CisgICAgICAgIGNocm9tZUNsaWVudC0+YWRkT3JVcGRhdGVT
Y3JvbGxpbmdMYXllcihsYXllci0+cmVuZGVyZXIoKS0+bm9kZSgpLCBiYWNraW5nLT5zY3JvbGxp
bmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNjcm9sbGluZ0NvbnRlbnRzTGF5
ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBJbnRTaXplKGxheWVyLT5zY3JvbGxXaWR0aCgpLCBsYXll
ci0+c2Nyb2xsSGVpZ2h0KCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1bnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkKK3sKKyAgICBDaHJvbWVDbGllbnQq
IGNocm9tZUNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVudCgpOworICAgIGlmICghY2hyb21lQ2xp
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlbmRlckxheWVyKj46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fc2Nyb2xsaW5nTGF5ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxSZW5kZXJMYXllcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2Nyb2xsaW5nTGF5ZXJzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSAq
aXQ7CisgICAgICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLT5iYWNraW5n
KCk7CisgICAgICAgIEFTU0VSVChiYWNraW5nKTsKKyAgICAgICAgY2hyb21lQ2xpZW50LT5yZW1v
dmVTY3JvbGxpbmdMYXllcihsYXllci0+cmVuZGVyZXIoKS0+bm9kZSgpLCBiYWNraW5nLT5zY3Jv
bGxpbmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNjcm9sbGluZ0NvbnRlbnRz
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKKyAgICB9Cit9CisKKy8vIENhbGxlZCB3aGVuIHRo
ZSBzaXplIG9mIHRoZSBjb250ZW50c0xheWVyIGNoYW5nZXMsIGFuZCB3aGVuIHRoZSBjb250ZW50
c0xheWVyIGlzIHJlcGxhY2VkIGJ5IGFub3RoZXIgbGF5ZXIuCit2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6c2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRlZChSZW5kZXJMYXllciogbGF5ZXIs
IFBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xh
eWVyLCBjb25zdCBJbnRTaXplJiBzY3JvbGxTaXplKQoreworICAgIG1fc2Nyb2xsaW5nTGF5ZXJz
LmFkZChsYXllcik7CisKKyAgICBBU1NFUlQoIW1fcmVuZGVyVmlldy0+ZG9jdW1lbnQoKS0+aW5Q
YWdlQ2FjaGUoKSk7CisKKyAgICBpZiAoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSB0aGlz
LT5jaHJvbWVDbGllbnQoKSkKKyAgICAgICAgY2hyb21lQ2xpZW50LT5hZGRPclVwZGF0ZVNjcm9s
bGluZ0xheWVyKGxheWVyLT5yZW5kZXJlcigpLT5ub2RlKCksIHNjcm9sbGluZ0xheWVyLCBjb250
ZW50c0xheWVyLCBzY3JvbGxTaXplKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnNjcm9sbGluZ0xheWVyUmVtb3ZlZChSZW5kZXJMYXllciogbGF5ZXIsIFBsYXRmb3JtTGF5ZXIq
IHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyKQoreworICAgIG1f
c2Nyb2xsaW5nTGF5ZXJzLnJlbW92ZShsYXllcik7CisKKyAgICBpZiAobV9yZW5kZXJWaWV3LT5k
b2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoQ2hy
b21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSB0aGlzLT5jaHJvbWVDbGllbnQoKSkKKyAgICAgICAg
Y2hyb21lQ2xpZW50LT5yZW1vdmVTY3JvbGxpbmdMYXllcihsYXllci0+cmVuZGVyZXIoKS0+bm9k
ZSgpLCBzY3JvbGxpbmdMYXllciwgY29udGVudHNMYXllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBh
OGFkMzk2Li44YTY2N2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oCkBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIFJlbmRlclBhcnQ7CiAj
aWYgRU5BQkxFKFZJREVPKQogY2xhc3MgUmVuZGVyVmlkZW87CiAjZW5kaWYKK2NsYXNzIENocm9t
ZUNsaWVudDsKIAogZW51bSBDb21wb3NpdGluZ1VwZGF0ZVR5cGUgewogICAgIENvbXBvc2l0aW5n
VXBkYXRlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlLApAQCAtMjA4LDYgKzIwOSw5IEBAIHB1Ymxp
YzoKICAgICBHcmFwaGljc0xheWVyKiBsYXllckZvck92ZXJoYW5nQXJlYXMoKSBjb25zdCB7IHJl
dHVybiBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy5nZXQoKTsgfQogI2VuZGlmCiAKKyAgICB2b2lk
IHNjcm9sbGluZ0xheWVyQWRkZWRPclVwZGF0ZWQoUmVuZGVyTGF5ZXIqLCBQbGF0Zm9ybUxheWVy
KiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllciwgY29uc3QgSW50
U2l6ZSYgc2Nyb2xsU2l6ZSk7CisgICAgdm9pZCBzY3JvbGxpbmdMYXllclJlbW92ZWQoUmVuZGVy
TGF5ZXIqLCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29u
dGVudHNMYXllcik7CisKIHByaXZhdGU6CiAgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudCBJbXBs
ZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUpIHsgfQpAQCAtMjY0LDYgKzI2OCw5IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGF0dGFjaFJvb3RMYXllcihSb290TGF5ZXJBdHRhY2htZW50KTsKICAgICB2
b2lkIGRldGFjaFJvb3RMYXllcigpOworCisgICAgdm9pZCByZWdpc3RlckFsbFNjcm9sbGluZ0xh
eWVycygpOworICAgIHZvaWQgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOwogICAgIAog
ICAgIHZvaWQgcm9vdExheWVyQXR0YWNobWVudENoYW5nZWQoKTsKIApAQCAtMjg0LDYgKzI5MSw5
IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNjcmVlbihS
ZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JTY3Jv
bGxhYmxlRnJhbWUoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3Np
dGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJMYXllciopIGNvbnN0OworICAgIGJvb2wg
cmVxdWlyZXNDb21wb3NpdGluZ0ZvclNjcm9sbGluZyhSZW5kZXJPYmplY3QqKSBjb25zdDsKKwor
ICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50KCkgY29uc3Q7CiAKICAgICBib29sIHJlcXVp
cmVzU2Nyb2xsTGF5ZXIoUm9vdExheWVyQXR0YWNobWVudCkgY29uc3Q7CiAgICAgYm9vbCByZXF1
aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0OwpAQCAtMzI1LDYgKzMzNSw4IEBA
IHByaXZhdGU6CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fY2xpcExheWVyOwogICAgIE93
blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbExheWVyOwogCisgICAgSGFzaFNldDxSZW5kZXJM
YXllcio+IG1fc2Nyb2xsaW5nTGF5ZXJzOworCiAgICAgLy8gRW5jbG9zaW5nIGxheWVyIGZvciBv
dmVyZmxvdyBjb250cm9scyBhbmQgdGhlIGNsaXBwaW5nIGxheWVyCiAgICAgT3duUHRyPEdyYXBo
aWNzTGF5ZXI+IG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllcjsKIAotLSAKMS43LjMuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117426</attachid>
            <date>2011-12-01 08:30:54 -0800</date>
            <delta_ts>2011-12-09 12:00:35 -0800</delta_ts>
            <desc>Chromium patch</desc>
            <filename>0002-chromium-Implement-layer-scrolling-in-the-compositor.patch</filename>
            <type>text/plain</type>
            <size>35807</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">RnJvbSA1YzljOTM4ZWZjYmE2NjQ1OGQ0YzZjZWEwYWUxY2MzODNkZWMzMGU3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEt5b3N0aWxhIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+
CkRhdGU6IFRodSwgMSBEZWMgMjAxMSAxNjoxOTo0OCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMi8y
XSBbY2hyb21pdW1dIEltcGxlbWVudCBsYXllciBzY3JvbGxpbmcgaW4gdGhlIGNvbXBvc2l0b3Ig
dGhyZWFkCgpUaGlzIHBhdGNoIGVuYWJsZXMgc2Nyb2xsaW5nIGNoaWxkIGxheWVycyBpbiB0aGUg
Y29tcG9zaXRvciB0aHJlYWQuClNjcm9sbCBkZWx0YXMgYXJlIGFjY3VtdWxhdGVkIGZvciBlYWNo
IHNjcm9sbGVkIENDTGF5ZXJJbXBsIGFuZApzeW5jaHJvbml6ZWQgdG8gdGhlIFdlYlZpZXdJbXBs
IGluIHRoZSBtYWluIHRocmVhZC4KCklmIGEgbGF5ZXIgaGFzIG5vIHJvb20gdG8gc2Nyb2xsIGlu
IGEgZ2l2ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCmFuY2VzdG9yIGxheWVycyBpcyBzY3JvbGxl
ZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgotLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmNwcCAgIHwgICAgMSArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oICAgICB8ICAgIDQgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCAgfCAgICA5ICsrCiAuLi4vcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCAgICB8ICAgIDYgKwogLi4uL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgICAgICAgfCAgIDQwICsrKysrLQogLi4u
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oICAgICAgICAgfCAgICA2ICst
CiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgICB8ICAx
MjYgKysrKysrKysrKysrLS0tLS0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmggICAgIHwgICAgMSArCiAuLi4vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJl
ZVZpZXdDbGllbnQuaCAgICAgICB8ICAgIDYgKy0KIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Nocm9tZUNsaWVudEltcGwuY3BwICAgIHwgICAxOCArKysKIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCAgICAgIHwgICAgNCArCiAuLi4vV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmggIHwgICAgMyArLQogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwICAgICAgICAgfCAgIDMyICsrKyst
CiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oICAgICAgICAgICB8ICAg
IDYgKy0KIC4uLi9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgICAg
IHwgICAxNyArKysKIC4uLi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHAgIHwgIDE0OSArKysrKysrKysrKysrKysrKysrLQogMTcgZmlsZXMgY2hhbmdlZCwgMzg2
IGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggNTRhN2Y4OC4uYTk5OTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5OSw2ICsy
OTksNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwq
IGxheWVyKQogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+
c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0
aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbiht
X21heFNjcm9sbFBvc2l0aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9z
dWJsYXllclRyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7
CiAgICAgbGF5ZXItPnNldFVwZGF0ZVJlY3QobV91cGRhdGVSZWN0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aAppbmRleCA3MTNkZmIyLi4wNWYwOWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMzMsNiAr
MTMzLDkgQEAgcHVibGljOgogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KICAgICB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikgeyBtX3Njcm9sbFBvc2l0aW9uID0g
c2Nyb2xsUG9zaXRpb247IH0KIAorICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0TWF4
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhT
Y3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICBib29sIHNjcm9sbGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KICAgICB2b2lkIHNldFNjcm9sbGFi
bGUoYm9vbCBzY3JvbGxhYmxlKSB7IG1fc2Nyb2xsYWJsZSA9IHRydWU7ICBzZXROZWVkc0NvbW1p
dCgpOyB9CiAKQEAgLTI1OCw2ICsyNjEsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3Vu
ZHM7CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3Jv
bGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBt
X3Njcm9sbGFibGU7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQg
bV9hbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAxMmQyMmUyLi4zOGI2
NzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC00NSw2ICs0NSw3IEBAIENDTGF5ZXJJ
bXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX3Njcm9sbGFibGUoZmFsc2UpCiAgICAg
LCBtX2RvdWJsZVNpZGVkKHRydWUpCiAgICAgLCBtX2xheWVyUHJvcGVydHlDaGFuZ2VkKGZhbHNl
KQorICAgICwgbV9kZXNjZW5kYW50V2FzU2Nyb2xsZWQoZmFsc2UpCiAgICAgLCBtX21hc2tzVG9C
b3VuZHMoZmFsc2UpCiAgICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAsIG1fb3BhY2l0eSgxLjAp
CkBAIC0xMjcsNiArMTI4LDE0IEBAIHZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IElu
dFNpemUmIHNjcm9sbCkKICAgICBJbnRTaXplIG5ld0RlbHRhID0gbV9zY3JvbGxEZWx0YSArIHNj
cm9sbDsKICAgICBJbnRTaXplIG1pbkRlbHRhID0gLXRvU2l6ZShtX3Njcm9sbFBvc2l0aW9uKTsK
ICAgICBJbnRTaXplIG1heERlbHRhID0gbV9tYXhTY3JvbGxQb3NpdGlvbiAtIHRvU2l6ZShtX3Nj
cm9sbFBvc2l0aW9uKTsKKworICAgIC8vIElmIHRoaXMgd2FzIHRoZSBmaXJzdCBzY3JvbGwgb3Bl
cmF0aW9uIGZvciB0aGlzIGxheWVyLCBub3RpZnkgdGhlIGFuY2VzdG9ycy4KKyAgICBDQ0xheWVy
SW1wbCogYW5jZXN0b3IgPSBwYXJlbnQoKTsKKyAgICB3aGlsZSAobV9zY3JvbGxEZWx0YS5pc1pl
cm8oKSAmJiBhbmNlc3RvcikgeworICAgICAgICBhbmNlc3Rvci0+c2V0RGVzY2VuZGFudFdhc1Nj
cm9sbGVkKHRydWUpOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKTsKKyAg
ICB9CisKICAgICAvLyBDbGFtcCBuZXdEZWx0YSBzbyB0aGF0IHBvc2l0aW9uICsgZGVsdGEgc3Rh
eXMgd2l0aGluIHNjcm9sbCBib3VuZHMuCiAgICAgbV9zY3JvbGxEZWx0YSA9IG5ld0RlbHRhLmV4
cGFuZGVkVG8obWluRGVsdGEpLnNocnVua1RvKG1heERlbHRhKTsKICAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBiZjZiNjhl
Li41NjAxNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE2OCw2ICsxNjgsOSBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbCk7CiAKKyAgICBi
b29sIGRlc2NlbmRhbnRXYXNTY3JvbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFudFdh
c1Njcm9sbGVkOyB9CisgICAgdm9pZCBzZXREZXNjZW5kYW50V2FzU2Nyb2xsZWQoYm9vbCBkZXNj
ZW5kYW50V2FzU2Nyb2xsZWQpIHsgbV9kZXNjZW5kYW50V2FzU2Nyb2xsZWQgPSBkZXNjZW5kYW50
V2FzU2Nyb2xsZWQ7IH0KKwogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Nyb2xsYWJsZTsgfQogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpIHsg
bV9zY3JvbGxhYmxlID0gc2Nyb2xsYWJsZTsgfQogCkBAIC0yMzYsNiArMjM5LDkgQEAgcHJpdmF0
ZToKICAgICAvLyBUcmFja3MgaWYgZHJhd2luZy1yZWxhdGVkIHByb3BlcnRpZXMgaGF2ZSBjaGFu
Z2VkIHNpbmNlIGxhc3QgcmVkcmF3LgogICAgIGJvb2wgbV9sYXllclByb3BlcnR5Q2hhbmdlZDsK
IAorICAgIC8vIFRyYWNrcyBpZiBhIGRlc2NlbmRhbnQgb2YgdGhpcyBsYXllciB3YXMgc2Nyb2xs
ZWQgc2luY2UgdGhlIGxhc3Qgc3luYy4KKyAgICBib29sIG1fZGVzY2VuZGFudFdhc1Njcm9sbGVk
OworCiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgYm9vbCBtX21hc2tzVG9C
b3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CmluZGV4IDZjOGRhNDYuLmQ0MWM1MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cApAQCAtMjIxLDYgKzIyMSwxNSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRy
YXcoKQogICAgICAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0KIAordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJv
b3RMYXllcikKK3sKKyAgICBpZiAobV9yb290TGF5ZXIgPT0gcm9vdExheWVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3Jvb3RMYXllciA9IHJvb3RMYXllcjsKKyAgICBtX3Jvb3RTY3JvbGxM
YXllci5jbGVhcigpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29u
c3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogewogICAgIG1fdmlld3BvcnRTaXplID0gdmlld3Bv
cnRTaXplOwpAQCAtNDMzLDE1ICs0NDIsMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFy
UGVuZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKK3N0YXRpYyBM
YXllckNocm9taXVtKiBmaW5kU2Nyb2xsTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7Cisg
ICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPnNjcm9s
bGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9t
aXVtKiBmb3VuZCA9IGZpbmRTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7
CisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisK
KyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5k
U2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTog
cHVzaGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVk
Ci0gICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYg
KCFtX3Jvb3RTY3JvbGxMYXllcikKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXIgPSBmaW5kU2Ny
b2xsTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOwogCi0gICAgQVNTRVJUKGluZm8uc2Nyb2xscy5z
aXplKCkgPT0gMSk7Ci0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IGluZm8uc2Nyb2xsc1swXS5z
Y3JvbGxEZWx0YTsKLSAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShzY3JvbGxEZWx0
YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmZv
LnNjcm9sbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcm9vdFNjcm9sbExheWVyICYm
IGluZm8uc2Nyb2xsc1tpXS5sYXllcklkID09IG1fcm9vdFNjcm9sbExheWVyLT5pZCgpKQorICAg
ICAgICAgICAgbV9jbGllbnQtPmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoaW5mby5zY3Jv
bGxzW2ldLnNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9jbGllbnQtPmFwcGx5TGF5ZXJTY3JvbGwoaW5mby5zY3JvbGxzW2ldLmxh
eWVySWQsIGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YSk7CisgICAgfQogfQogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggNDg3ZDhmNC4uOGU1YzU3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTU0LDcgKzU0LDggQEAgY2xhc3MgVGV4dHVy
ZU1hbmFnZXI7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewogcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhLCBmbG9hdCBwYWdlU2NhbGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSb290
TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFn
ZVNjYWxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJTY3JvbGwoaW50IGxheWVy
SWQsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nl
c3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgPSAwOwpA
QCAtMTYxLDcgKzE2Miw3IEBAIHB1YmxpYzoKIAogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXll
cigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1
bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KLSAgICB2
b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllcikgeyBt
X3Jvb3RMYXllciA9IHJvb3RMYXllcjsgfQorICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNl
dHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQogCkBAIC0yMTIsNiArMjEzLDcg
QEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q0NQcm94eT4gbV9wcm94eTsKIAogICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9y
b290U2Nyb2xsTGF5ZXI7CiAgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX2NvbnRlbnRzVGV4
dHVyZU1hbmFnZXI7CiAKICAgICBMYXllckxpc3QgbV91cGRhdGVMaXN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAxNTBiOTNkLi41MTg1YTQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMTM0LDcgKzEzNCw3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4
ZWxzLCByZWN0KTsKIH0KIAotc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NM
YXllckltcGwqIGxheWVyKQorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kUm9vdFNjcm9sbExheWVy
KENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXll
cihDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJldHVybiBsYXllcjsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFNjcm9sbExheWVyKGxheWVyLT5jaGlsZHJlbigp
W2ldLmdldCgpKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFJvb3RTY3JvbGxM
YXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiAgICAgICAgIGlmIChmb3VuZCkKICAg
ICAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CkBAIC0xNTQsOSArMTU0LDcgQEAgc3RhdGlj
IENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4g
bGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7Ci0KLSAgICAvLyBGSVhNRTog
Q3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhlIGZpcnN0IHNjcm9sbGFibGUgbGF5ZXIuCi0g
ICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXIobV9yb290TGF5ZXJJbXBsLmdl
dCgpKTsKKyAgICBtX3Njcm9sbExheWVySW1wbCA9IGZpbmRSb290U2Nyb2xsTGF5ZXIobV9yb290
TGF5ZXJJbXBsLmdldCgpKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNp
YmxlKGJvb2wgdmlzaWJsZSkKQEAgLTIyMSwxNyArMjE5LDI3IEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0IHBhZ2VTY2FsZSwgZmxv
YXQgbWluCiAgICAgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShwYWdlU2NhbGVDaGFu
Z2UpOwogfQogCitzdGF0aWMgdm9pZCBhZGp1c3RTY3JvbGxlZExheWVyc0ZvclBhZ2VTY2FsZUNo
YW5nZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCit7Cisg
ICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUgc2Nyb2xs
RGVsdGEgPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgc2Nyb2xsRGVsdGEuc2NhbGUo
cGFnZVNjYWxlQ2hhbmdlKTsKKyAgICBsYXllckltcGwtPnNldFNjcm9sbERlbHRhKHNjcm9sbERl
bHRhKTsKKworICAgIGlmIChsYXllckltcGwtPmRlc2NlbmRhbnRXYXNTY3JvbGxlZCgpKQorICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIGFkanVzdFNjcm9sbGVkTGF5ZXJzRm9yUGFnZVNjYWxlQ2hhbmdl
KGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFnZVNjYWxlQ2hhbmdlKTsKK30KKwog
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdl
KGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKIHsKICAgICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwt
c2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBzcGFjZS4KLSAgICBpZiAobV9zY3JvbGxM
YXllckltcGwpIHsKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zY3JvbGxEZWx0YSgpOwotICAgICAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVD
aGFuZ2UpOwotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xs
RGVsdGEpOwotICAgIH0KKyAgICBhZGp1c3RTY3JvbGxlZExheWVyc0ZvclBhZ2VTY2FsZUNoYW5n
ZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIHBhZ2VTY2FsZUNoYW5nZSk7CiB9CiAKIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEpCkBAIC0yOTYs
MjggKzMwNCw2OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkK
ICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAotQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxC
ZWdpbihjb25zdCBJbnRQb2ludCYpCitzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRJbm5lcm1vc3RT
Y3JvbGxhYmxlTGF5ZXJBdFBvaW50KENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGNvbnN0IEludFBv
aW50JiB3aW5kb3dQb2ludCkKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+Ym91bmRzKCkuaXNFbXB0
eSgpKSB7CisgICAgICAgIEludFBvaW50IGNvbnRlbnRQb2ludChsYXllckltcGwtPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHdpbmRvd1BvaW50KSk7CisgICAgICAg
IGlmICghSW50UmVjdChJbnRQb2ludDo6emVybygpLCBsYXllckltcGwtPmJvdW5kcygpKS5jb250
YWlucyhjb250ZW50UG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlc3VsdCA9IGZpbmRJbm5lcm1vc3RTY3JvbGxhYmxl
TGF5ZXJBdFBvaW50KGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgd2luZG93UG9pbnQp
OworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBpZiAobGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXll
ckltcGw7CisKKyAgICByZXR1cm4gMDsKK30KKworQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYg
d2luZG93UG9pbnQpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHNjcm9sbGFibGUgc3VibGF5
ZXJzLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxhYmxlKCkpCisgICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJu
IFNjcm9sbElnbm9yZWQ7CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAgICBtX2N1cnJl
bnRseVNjcm9sbGluZ0xheWVySW1wbCA9IGZpbmRJbm5lcm1vc3RTY3JvbGxhYmxlTGF5ZXJBdFBv
aW50KG1fc2Nyb2xsTGF5ZXJJbXBsLmdldCgpLCB3aW5kb3dQb2ludCk7CisKKyAgICByZXR1cm4g
bV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPyBTY3JvbGxTdGFydGVkIDogU2Nyb2xsSWdu
b3JlZDsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAg
IGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Ci0gICAgbV9jbGll
bnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRz
UmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgSW50U2l6ZSBwZW5kaW5nRGVsdGEoc2Nyb2xsRGVs
dGEpOworICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBtX2N1cnJlbnRseVNjcm9sbGluZ0xh
eWVySW1wbC5nZXQoKTsKKyAgICBkbyB7CisgICAgICAgIEludFNpemUgcHJldmlvdXNEZWx0YShs
YXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHBl
bmRpbmdEZWx0YSk7CisgICAgICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIGRlbHRhIGNvbXBsZXRl
bHkgdG8gemVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8gbW92ZSBpbiB0aGF0IGRpcmVjdGlv
bi4gVGhpcyBpcworICAgICAgICAvLyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xs
IGV4YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIHNjcm9sbCBhcmVhIHJlZ2Fy
ZGxlc3Mgb2YKKyAgICAgICAgLy8gdGhlIHNjcm9sbCBzdGVwLgorICAgICAgICBpZiAocGVuZGlu
Z0RlbHRhLndpZHRoKCkgJiYgcHJldmlvdXNEZWx0YS53aWR0aCgpICE9IGxheWVySW1wbC0+c2Ny
b2xsRGVsdGEoKS53aWR0aCgpKQorICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldFdpZHRoKDAp
OworICAgICAgICBpZiAocGVuZGluZ0RlbHRhLmhlaWdodCgpICYmIHByZXZpb3VzRGVsdGEuaGVp
Z2h0KCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmhlaWdodCgpKQorICAgICAgICAgICAg
cGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICAgICAgZG8KKyAgICAgICAgICAgIGxheWVy
SW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxlIChsYXllckltcGwgJiYg
IWxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKTsKKyAgICB9IHdoaWxlICghcGVuZGluZ0RlbHRhLmlz
WmVybygpICYmIGxheWVySW1wbCk7CisKKyAgICBpZiAocGVuZGluZ0RlbHRhICE9IHNjcm9sbERl
bHRhKSB7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwor
ICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICB9CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKCkKIHsKKyAgICBtX2N1cnJl
bnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigpOwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoKQpAQCAtMzYwLDExICs0MDgsMzYgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVFbmQoKQogICAgIG1fY2xpZW50LT5z
ZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogfQogCitzdGF0aWMgYm9vbCBjb2xsZWN0U2Ny
b2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIENDTGF5ZXJJbXBsKiBs
YXllckltcGwpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7CisgICAgICAg
IHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgpOworICAgICAgICBzY3JvbGwuc2Nyb2xs
RGVsdGEgPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgICAgIHNjcm9sbEluZm8tPnNj
cm9sbHMuYXBwZW5kKHNjcm9sbCk7CisKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTY3JvbGxQb3Np
dGlvbihsYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBsYXllckltcGwtPnNjcm9sbERlbHRh
KCkpOworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShsYXllckltcGwtPnNj
cm9sbERlbHRhKCkpOworICAgICAgICBsYXllckltcGwtPnNldFNjcm9sbERlbHRhKEludFNpemUo
KSk7CisgICAgICAgIGxheWVySW1wbC0+c2V0UG9zaXRpb24obGF5ZXJJbXBsLT5wb3NpdGlvbigp
IC0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICB9CisKKyAgICBpZiAobGF5ZXJJbXBs
LT5kZXNjZW5kYW50V2FzU2Nyb2xsZWQoKSkgeworICAgICAgICBsYXllckltcGwtPnNldERlc2Nl
bmRhbnRXYXNTY3JvbGxlZChmYWxzZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29sbGVjdFNj
cm9sbERlbHRhcyhzY3JvbGxJbmZvLCBsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwor
ICAgIH0KKworICAgIHJldHVybiBzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSA+IDA7Cit9CisK
IFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJv
Y2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNj
cm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBib29s
IGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7Ci0gICAgaWYg
KCFkaWRNb3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlKSB7CisgICAgaWYgKG1fcGluY2hHZXN0
dXJlQWN0aXZlIHx8ICFjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8uZ2V0KCksIG1fcm9v
dExheWVySW1wbC5nZXQoKSkpIHsKICAgICAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3Jv
bGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IDE7CiAgICAgICAgIHJldHVybiBzY3JvbGxJbmZvLnJl
bGVhc2UoKTsKICAgICB9CkBAIC0zNzMsMTkgKzQ0Niw2IEBAIFBhc3NPd25QdHI8Q0NTY3JvbGxB
bmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiAg
ICAgbV9wYWdlU2NhbGUgPSBtX3BhZ2VTY2FsZSAqIG1fc2VudFBhZ2VTY2FsZURlbHRhOwogICAg
IHNldFBhZ2VTY2FsZURlbHRhKDEpOwogCi0gICAgLy8gRklYTUU6IHRyYWNrIHNjcm9sbHMgZnJv
bSBsYXllcnMgb3RoZXIgdGhhbiB0aGUgcm9vdAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9sbExh
eWVySW1wbC0+aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsRGVsdGEoKTsKLSAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwp
OwotCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRh
KCkpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRQb3NpdGlvbihtX3Njcm9sbExheWVySW1w
bC0+cG9zaXRpb24oKSAtIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKLSAgICBt
X3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxEZWx0YSgpKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoSW50
U2l6ZSgpKTsKLQotICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UobV9zZW50UGFn
ZVNjYWxlRGVsdGEpOwotCiAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggNDFiODM5Ni4uNzc2NmZjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTI5LDYgKzEyOSw3IEBA
IHByaXZhdGU6CiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRl
cmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOwogICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gbV9zY3JvbGxMYXllckltcGw7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKICAgICBDQ1NldHRpbmdzIG1fc2V0dGlu
Z3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBib29sIG1fdmlzaWJsZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXdD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXdD
bGllbnQuaAppbmRleCA2ZjUwMDk2Li5jNTE5YmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCkBAIC00MSw3ICs0
MSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gc2NhbGUgZmFjdG9yIHRoYXQgbWF5IGFwcGx5IGEgQ1NT
IHRyYW5zZm9ybSBvbiB0aGUgd2hvbGUgZG9jdW1lbnQgKHVzZWQKICAgICAvLyBmb3IgbW9iaWxl
LWRldmljZSBwaW5jaCB6b29taW5nKS4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIHNlbnQg
dG8gdGhlCiAgICAgLy8gY29tcG9zaXRvciB0aHJlYWQgdGhyb3VnaCB0aGUgV2ViQ29tcG9zaXRv
ciBpbnRlcmZhY2UuCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3Qg
V2ViU2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHNjYWxlRmFjdG9yKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6ZSYgc2Nyb2xs
RGVsdGEsIGZsb2F0IHNjYWxlRmFjdG9yKSA9IDA7CisKKyAgICAvLyBBcHBsaWVzIGEgc2Nyb2xs
IGRlbHRhIHRvIGEgbm9uLXJvb3QgbGF5ZXIuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cwor
ICAgIC8vIHNlbnQgdG8gdGhlIGNvbXBvc2l0b3IgdGhyZWFkIHRocm91Z2ggdGhlIFdlYkNvbXBv
c2l0b3IgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgdm9pZCBhcHBseUxheWVyU2Nyb2xsKGludCBs
YXllcklkLCBjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSkgPSAwOwogCiAgICAgLy8gQ3JlYXRl
cyBhIDNEIGNvbnRleHQgc3VpdGFibGUgZm9yIHRoZSBjb21wb3NpdGluZy4gVGhpcyBtYXkgYmUg
Y2FsbGVkCiAgICAgLy8gbW9yZSB0aGFuIG9uY2UgaWYgdGhlIGNvbnRleHQgZ2V0cyBsb3N0Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRl
eCA1Zjg0YTJmLi41Nzc4NGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9D
aHJvbWVDbGllbnRJbXBsLmNwcApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
U3VwcG9ydC5oIgogI2luY2x1ZGUgIlBvcHVwQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUG9wdXBN
ZW51Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRl
cldpZGdldC5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZWFy
Y2hQb3B1cE1lbnVDaHJvbWl1bS5oIgpAQCAtNzkzLDYgKzc5NCwyMyBAQCBib29sIENocm9tZUNs
aWVudEltcGw6OnBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBDaHJvbWVDbGllbnRJbXBs
OjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKE5vZGUqIG5vZGUsIFBsYXRmb3JtTGF5ZXIqIHNj
cm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyLCBjb25zdCBJbnRTaXpl
JiBzY3JvbGxTaXplKQoreworICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gobm9k
ZS0+cmVuZGVyZXIoKSk7CisgICAgY29udGVudHNMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsK
KyAgICBjb250ZW50c0xheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludChub2RlLT5yZW5k
ZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSkpOworICAg
IGNvbnRlbnRzTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoc2Nyb2xsU2l6ZS53
aWR0aCgpIC0gcmVuZGVyQm94LT5jbGllbnRXaWR0aCgpLCBzY3JvbGxTaXplLmhlaWdodCgpIC0g
cmVuZGVyQm94LT5jbGllbnRIZWlnaHQoKSkpOworICAgIG1fd2ViVmlldy0+YWRkT3JVcGRhdGVT
Y3JvbGxpbmdMYXllcihjb250ZW50c0xheWVyLT5pZCgpLCBub2RlKTsKK30KKwordm9pZCBDaHJv
bWVDbGllbnRJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcihOb2RlKiBub2RlLCBQbGF0Zm9ybUxh
eWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllcikKK3sKKyAg
ICBtX3dlYlZpZXctPnJlbW92ZVNjcm9sbGluZ0xheWVyKGNvbnRlbnRzTGF5ZXItPmlkKCkpOwor
ICAgIGNvbnRlbnRzTGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOworfQorCiAvLyBGSVhNRTog
UmVtb3ZlIENocm9tZUNsaWVudEltcGw6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JG
cmFtZSBhbmQgQ2hyb21lQ2xpZW50SW1wbDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdEZvckZyYW1lCiAvLyBvbmNlIGFsbCBwb3J0cyBoYXZlIG1vdmVkIHRvIGNsaWVudC1iYXNl
ZCBnZW9sb2NhdGlvbiAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDM3MyApLgogLy8gRm9yIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiwgdGhlc2UgbWV0aG9k
cyBhcmUgbm93IGltcGxlbWVudGVkIGFzIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpyZXF1ZXN0UGVy
bWlzc2lvbiBhbmQgV2ViR2VvbG9jYXRpb25DbGllbnQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCmluZGV4
IDc3ZjI2NDEuLmFjNTNjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Nocm9tZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWVDbGllbnRJbXBsLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgQ2hyb21lQ2xpZW50SW1w
bF9oCiAKICNpbmNsdWRlICJDaHJvbWVDbGllbnRDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1
cE1lbnUuaCIKIApAQCAtNDAsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZpbGVDaG9vc2VyOwor
Y2xhc3MgTm9kZTsKIGNsYXNzIFBvcHVwQ29udGFpbmVyOwogY2xhc3MgUG9wdXBNZW51Q2xpZW50
OwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMTMxLDYgKzEzMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbiosIGludDY0X3QgdG90YWxTcGFjZU5lZWRlZCk7CiAgICAgdmlydHVh
bCBib29sIHBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRPclVwZGF0ZVNjcm9sbGlu
Z0xheWVyKFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdM
YXllciwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciogY29udGVudHNMYXllciwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2Nyb2xsU2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVNjcm9sbGlu
Z0xheWVyKFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdM
YXllciwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciogY29udGVudHNMYXllcik7CiAgICAgdmlydHVh
bCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShXZWJDb3JlOjpGcmFt
ZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
Okdlb2xvY2F0aW9uKik7CiAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChXZWJDb3JlOjpG
cmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcAppbmRleCA4Yzg2
ODRiLi4xMGYzODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJM
YXllclRyZWVWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TGF5ZXJUcmVlVmlld0ltcGwuY3BwCkBAIC02NSwxMCArNjUsMTYgQEAgdm9pZCBXZWJMYXllclRy
ZWVWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCiAgICAg
ICAgIG1fY2xpZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKIH0KIAotdm9p
ZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlKQordm9pZCBXZWJMYXllclRy
ZWVWaWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlKQogewogICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViU2l6ZShzY3JvbGxE
ZWx0YSksIHBhZ2VTY2FsZSk7CisgICAgICAgIG1fY2xpZW50LT5hcHBseVJvb3RMYXllclNjcm9s
bEFuZFNjYWxlKFdlYlNpemUoc2Nyb2xsRGVsdGEpLCBwYWdlU2NhbGUpOworfQorCit2b2lkIFdl
YkxheWVyVHJlZVZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKGludCBsYXllcklkLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgIG1fY2xpZW50LT5hcHBseUxheWVyU2Nyb2xsKGxheWVySWQsIFdlYlNpemUoc2Nyb2xsRGVs
dGEpKTsKIH0KIAogUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViTGF5ZXJUcmVlVmll
d0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKaW5kZXggMGNmYzI4My4uMmI2
ZDFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVl
Vmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVW
aWV3SW1wbC5oCkBAIC00Miw3ICs0Miw4IEBAIHByaXZhdGU6CiAgICAgV2ViTGF5ZXJUcmVlVmll
d0ltcGwoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25z
dCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfldlYkxheWVyVHJl
ZVZpZXdJbXBsKCk7CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZy
YW1lQmVnaW5UaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlMYXllclNjcm9sbChpbnQgbGF5ZXJJZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Ny
b2xsRGVsdGEpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAppbmRleCBhMzlhMzFkLi5mOTBmNDM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0yODk3LDcgKzI4OTcsMzcgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCiAgICAg
bGF5b3V0KCk7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29u
c3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZURlbHRhKQordm9pZCBXZWJW
aWV3SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihpbnQgbGF5ZXJJZCwgTm9kZSogbm9k
ZSkKK3sKKyAgICBtX3Njcm9sbExheWVyTm9kZXMuc2V0KGxheWVySWQsIG5vZGUpOworfQorCit2
b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcihpbnQgbGF5ZXJJZCkKK3sKKyAg
ICBtX3Njcm9sbExheWVyTm9kZXMucmVtb3ZlKGxheWVySWQpOworfQorCit2b2lkIFdlYlZpZXdJ
bXBsOjphcHBseUxheWVyU2Nyb2xsKGludCBsYXllcklkLCBjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJOb2Rlcy5jb250YWlucyhsYXllcklkKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9IG1fc2Nyb2xsTGF5ZXJOb2Rlcy5n
ZXQobGF5ZXJJZCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVy
LT5pc0JveCgpIHx8ICFyZW5kZXJlci0+ZW5jbG9zaW5nQm94KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlbmRlckJveCogZW5jbG9zaW5nQm94ID0gcmVuZGVyZXItPmVuY2xvc2luZ0JveCgp
OworICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCgpKQorICAgICAgICBlbmNsb3NpbmdCb3gtPnNj
cm9sbChzY3JvbGxEZWx0YS53aWR0aCgpID4gMCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsTGVmdCwg
U2Nyb2xsQnlQaXhlbCwgYWJzKHNjcm9sbERlbHRhLndpZHRoKCkpKTsKKyAgICBpZiAoc2Nyb2xs
RGVsdGEuaGVpZ2h0KCkpCisgICAgICAgIGVuY2xvc2luZ0JveC0+c2Nyb2xsKHNjcm9sbERlbHRh
LmhlaWdodCgpID4gMCA/IFNjcm9sbERvd24gOiBTY3JvbGxVcCwgU2Nyb2xsQnlQaXhlbCwgYWJz
KHNjcm9sbERlbHRhLmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmFwcGx5Um9v
dExheWVyU2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBh
Z2VTY2FsZURlbHRhKQogewogICAgIGlmICghbWFpbkZyYW1lSW1wbCgpIHx8ICFtYWluRnJhbWVJ
bXBsKCktPmZyYW1lVmlldygpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA2ZWQ3NWIzLi5hNDQwN2EyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTIzMCw3ICsyMzAsOCBAQCBwdWJsaWM6
CiAKICAgICAvLyBDQ0xheWVyVHJlZUhvc3RDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBmbG9hdCk7CisgICAgdmly
dHVhbCB2b2lkIGFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlMYXllclNjcm9sbChpbnQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsKQEAgLTM5NCw2ICszOTUsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERl
bHRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9pZCBpbnZhbGlk
YXRlUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgV2ViQ29yZTo6
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29udGVudEhvc3QoKTsKKyAg
ICB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoaW50IGxheWVySWQsIFdlYkNvcmU6Ok5v
ZGUqKTsKKyAgICB2b2lkIHJlbW92ZVNjcm9sbGluZ0xheWVyKGludCBsYXllcklkKTsKICNlbmRp
ZgogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2b2lkIHNjaGVkdWxl
QW5pbWF0aW9uKCk7CkBAIC02MTAsNiArNjEzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY29t
cG9zaXRvckNyZWF0aW9uRmFpbGVkOwogICAgIC8vIElmIHRydWUsIHRoZSBncmFwaGljcyBjb250
ZXh0IGlzIGJlaW5nIHJlc3RvcmVkLgogICAgIGJvb2wgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250
ZXh0OworICAgIEhhc2hNYXA8aW50LCBXZWJDb3JlOjpOb2RlKj4gbV9zY3JvbGxMYXllck5vZGVz
OwogI2VuZGlmCiAgICAgYm9vbCBtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnM7CiAgICAgc3RhdGlj
IGNvbnN0IFdlYklucHV0RXZlbnQqIG1fY3VycmVudElucHV0RXZlbnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3Bw
CmluZGV4IDVhY2I5MjUuLjdhNzI3NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xNDYsNiArMTQ2
LDIzIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFSZXBlYXRl
ZFNjcm9sbHMpCiAgICAgZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShyb290Lmdl
dCgpKTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub3RpZnlBbmNlc3Rv
ckxheWVyc0Fib3V0U2Nyb2xsaW5nKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTApOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDExKTsKKworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRy
dWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIHJvb3QtPmFkZENoaWxk
KGNoaWxkKTsKKworICAgIEFTU0VSVF9GQUxTRShyb290LT5kZXNjZW5kYW50V2FzU2Nyb2xsZWQo
KSk7CisgICAgY2hpbGQtPnNjcm9sbEJ5KEludFNpemUoMTUsIDE2KSk7CisgICAgQVNTRVJUX1RS
VUUocm9vdC0+ZGVzY2VuZGFudFdhc1Njcm9sbGVkKCkpOworICAgIG1faG9zdEltcGwtPnByb2Nl
c3NTY3JvbGxEZWx0YXMoKTsKKyAgICBBU1NFUlRfRkFMU0Uocm9vdC0+ZGVzY2VuZGFudFdhc1Nj
cm9sbGVkKCkpOworfQorCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJv
b3RDYWxsc0NvbW1pdEFuZFJlZHJhdykKIHsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggNGE0MTc5Ni4uNzBlMzI2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCkBAIC01OCw3ICs1OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1w
bCopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNp
emUmLCBmbG9hdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFwcGx5Um9vdExheWVyU2Nyb2xsQW5k
U2NhbGUoY29uc3QgSW50U2l6ZSYsIGZsb2F0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlM
YXllclNjcm9sbChpbnQgbGF5ZXJJZCwgY29uc3QgSW50U2l6ZSYpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CiB9OwogCkBA
IC0xNTUsOSArMTU2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV90ZXN0SG9va3MtPmFuaW1hdGVB
bmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZSkK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgc2NhbGUpCiAgICAgewotICAgICAgICBtX3Rlc3RIb29r
cy0+YXBwbHlTY3JvbGxBbmRTY2FsZShzY3JvbGxEZWx0YSwgc2NhbGUpOworICAgICAgICBtX3Rl
c3RIb29rcy0+YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShzY3JvbGxEZWx0YSwgc2NhbGUp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseUxheWVyU2Nyb2xsKGludCBsYXllcklk
LCBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKKyAgICB7CisgICAgICAgIG1fdGVzdEhvb2tz
LT5hcHBseUxheWVyU2Nyb2xsKGxheWVySWQsIHNjcm9sbERlbHRhKTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RD
b250ZXh0M0QoKQpAQCAtNzY3LDcgKzc3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhLCBmbG9hdCBzY2FsZSkKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSb290TGF5ZXJT
Y3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgc2NhbGUpCiAg
ICAgewogICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExh
eWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExh
eWVyKCktPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOwpAQCAtODQ0
LDcgKzg1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBz
Y2FsZSkKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25z
dCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgc2NhbGUpCiAgICAgewogICAgICAgICBJbnRQ
b2ludCBwb3NpdGlvbiA9IG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPnNjcm9sbFBvc2l0
aW9uKCk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPnNldFNjcm9sbFBv
c2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOwpAQCAtOTA0LDYgKzkxMCwxMzkgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXRWaXNpYmxlLCBydW5NdWx0aVRocmVhZCkKICAgICBy
dW5UZXN0KHRydWUpOwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25seSB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllciA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0
U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9s
bFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5y
b290TGF5ZXIoKS0+YWRkQ2hpbGQobV9yb290U2Nyb2xsTGF5ZXIpOworICAgICAgICBtX2NoaWxk
TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fY2hpbGRMYXllci0+
c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Ny
b2xsYWJsZSh0cnVlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlv
bihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGls
ZChtX2NoaWxkTGF5ZXIpOworICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2Fs
ZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQpCisgICAgeworICAgICAgICBJbnRQ
b2ludCBwb3NpdGlvbiA9IG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAg
ICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3Jv
bGxEZWx0YSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJTY3JvbGwoaW50
IGxheWVySWQsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQorICAgIHsKKyAgICAgICAgTGF5
ZXJDaHJvbWl1bSogcm9vdCA9IG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGFwcGx5U2Nyb2xsVG9DaGlsZExheWVyKHJvb3QsIGxheWVySWQsIHNjcm9s
bERlbHRhKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgewor
ICAgIH0KK3Byb3RlY3RlZDoKKyAgICBib29sIGFwcGx5U2Nyb2xsVG9DaGlsZExheWVyKExheWVy
Q2hyb21pdW0qIGxheWVyLCBpbnQgbGF5ZXJJZCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEp
CisgICAgeworICAgICAgICBpZiAobGF5ZXItPmlkKCkgPT0gbGF5ZXJJZCkgeworICAgICAgICAg
ICAgSW50UG9pbnQgcG9zaXRpb24gPSBsYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAg
ICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiArIHNjcm9sbERlbHRhKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBpZiAo
YXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCksIGxheWVy
SWQsIHNjcm9sbERlbHRhKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NoaWxk
TGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOworfTsK
KworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxDaGlsZExheWVyKCkKKyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAxKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKEND
TGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9yb290
U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBpZiAo
IW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUSht
X2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJ
bnRQb2ludCgpICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBk
cmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAg
ICAgICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNU
X1RSVUUoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpKTsKKyAgICAgICAgICAgIGlt
cGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVu
ZCgpOworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikgeworICAg
ICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICB9CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25z
dCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyLCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFk
ZWQoKTsKK30KKworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlv
bmRMaW1pdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7CitwdWJsaWM6
CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCgpCisg
ICAgICAgIDogbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKDEwLCAxMCkKKyAgICAgICAgLCBt
X2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uKDIwLCAwKQorICAgICAgICAsIG1fc2Nyb2xsQW1v
dW50KC0yNSwgLTUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3Qo
KQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmJlZ2luVGVz
dCgpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9pbml0
aWFsUm9vdFNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRTY3JvbGxQ
b3NpdGlvbihtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwp
CisgICAgeworICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0LT5mcmFtZU51bWJlcigpID09IDEp
IHsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiByb290ID0gaW1wbC0+cm9vdExheWVyKCk7Cisg
ICAgICAgICAgICBDQ0xheWVySW1wbCogc2Nyb2xsUm9vdCA9IHJvb3QtPmNoaWxkcmVuKClbMF0u
Z2V0KCk7CisgICAgICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBzY3JvbGxSb290LT5jaGls
ZHJlbigpWzBdLmdldCgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9sbFJvb3QtPnNjcm9s
bFBvc2l0aW9uKCksIG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbiArIEludFNpemUoMCwgLTUp
KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGlsZC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0
aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbiArIEludFNpemUoLTIwLCAwKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09
IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDUsIDUpKSk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7Cisg
ICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5m
cmFtZU51bWJlcigpID09IDIpIHsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgfQor
ICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0aWFsUm9vdFNjcm9sbFBv
c2l0aW9uOworICAgIGNvbnN0IEludFBvaW50IG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb247
CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0LCBydW5NdWx0aVRocmVhZCkK
K3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsKK30KKwogY2xhc3MgVGVzdE9wYWNpdHlDaGFuZ2VM
YXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgVGVz
dE9wYWNpdHlDaGFuZ2VMYXllckRlbGVnYXRlKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCi0t
IAoxLjcuMy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118602</attachid>
            <date>2011-12-09 12:00:35 -0800</date>
            <delta_ts>2011-12-13 10:30:55 -0800</delta_ts>
            <desc>Chromium patch</desc>
            <filename>0001-chromium-Implement-layer-scrolling-in-the-compositor.patch</filename>
            <type>text/plain</type>
            <size>49843</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">RnJvbSAzN2VmNzgzMDkzYWI2MjVlZjYyNWEwNWQ4ZDUxM2IzZWQ3N2Q3YjZjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEt5b3N0aWxhIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+
CkRhdGU6IFRodSwgMSBEZWMgMjAxMSAxNjoxOTo0OCArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIFtj
aHJvbWl1bV0gSW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJl
YWQKClRoaXMgcGF0Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21w
b3NpdG9yIHRocmVhZC4KU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Ny
b2xsZWQgQ0NMYXllckltcGwgYW5kCnN5bmNocm9uaXplZCB0byB0aGUgV2ViVmlld0ltcGwgaW4g
dGhlIG1haW4gdGhyZWFkLgoKSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBn
aXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGlu
c3RlYWQgaWYgcG9zc2libGUuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDQ3ICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwICAgfCAgICAxICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggICAgIHwgICAgNCArCiAuLi4vcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwICB8ICAgMTggKysrCiAuLi4vcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCAgICB8ICAgIDkgKysKIC4uLi9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwICAgICAgIHwgICA0MCArKysr
Ky0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCAgICAgICAgIHwg
ICAgNiArLQogLi4uL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
ICAgfCAgMTQ2ICsrKysrKysrKysrKysrKy0tLS0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggICAgIHwgICAgMiArCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8ICAgNTQgKysrKysrKwogLi4uL3B1YmxpYy9w
bGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmggICAgICAgfCAgICA2ICstCiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCAgICB8ICAgMTggKysrCiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggICAgICB8ICAgIDQg
KwogLi4uL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwICAgfCAg
IDEwICstCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5o
ICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCAg
ICAgICAgIHwgICAzMiArKysrLQogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaCAgICAgICAgICAgfCAgICA2ICstCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJJbXBsVGVzdC5jcHAgICB8ICAgMzQgKysrKysKIC4uLi9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgICAgIHwgIDEwNSArKysrKysrKysrKysrKwogLi4uL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCAgfCAgMTUxICsrKysr
KysrKysrKysrKysrKystCiAyMCBmaWxlcyBjaGFuZ2VkLCA2NDggaW5zZXJ0aW9ucygrKSwgNDgg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdjZjJjYjMuLjc3MzVlMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1MCBAQAorMjAxMS0xMi0wOSAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBsYXllciBzY3JvbGxp
bmcgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyBz
Y3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICAgICAg
U2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xsZWQgQ0NMYXllcklt
cGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgV2ViVmlld0ltcGwgaW4gdGhlIG1h
aW4gdGhyZWFkLgorCisgICAgICAgIElmIGEgbGF5ZXIgaGFzIG5vIHJvb20gdG8gc2Nyb2xsIGlu
IGEgZ2l2ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCisgICAgICAgIGFuY2VzdG9yIGxheWVycyBp
cyBzY3JvbGxlZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwdXNoUHJv
cGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjptYXhTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjppc0luc2lkZVNjcm9sbGFibGVSZWdpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OnBhZ2VTY2FsZURlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpzZW50U2Nyb2xsRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OnNldFNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRTY3JvbGxMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0
Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFkanVz
dFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6d2luZG93VG9MYXllckNvbnRlbnRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjppc0luc2lkZVNjcm9sbGFibGVSZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5TY3JvbGxpbmdJ
bm5lcm1vc3RMYXllckF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6bGF5ZXJDYW5CZVNjcm9sbGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUJlZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVF
bmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaDoKKwogMjAxMS0xMi0wOCAgRXJpayBBcnZpZHNzb24gIDxhcnZAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIENvZGVHZW5lcmF0b3JWODogRml4IGlzc3VlIHdpdGggb3ZlcmxvYWRl
ZCBzdGF0aWMgY29uZGl0aW9uYWwgbWV0aG9kcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA4
NTVmOWE2Li42NDdiYjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzkwLDYgKzM5MCw3
IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5
ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRQ
cmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24o
bV9zY3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKG1fbWF4
U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1Ymxh
eWVyVHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3JtKTsKICAg
ICBsYXllci0+c2V0VXBkYXRlUmVjdChtX3VwZGF0ZVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IDljN2E0ZjguLmEzOTUwNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEzMiw2ICsxMzIs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYp
OwogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c2Nyb2xsUG9zaXRpb247IH0KIAorICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0TWF4
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhT
Y3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICB2b2lkIHNldFNjcm9s
bGFibGUoYm9vbCk7CiAgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxhYmxlOyB9CiAKQEAgLTI1NSw2ICsyNTgsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9i
b3VuZHM7CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgSW50UG9pbnQgbV9z
Y3JvbGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CiAgICAgYm9v
bCBtX3Njcm9sbGFibGU7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9p
bnQgbV9hbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBhZjA0MmU1Li43
MTQzODhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC00NSw2ICs0NSw3IEBAIENDTGF5
ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX3Njcm9sbGFibGUoZmFsc2UpCiAg
ICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCiAgICAgLCBtX2xheWVyUHJvcGVydHlDaGFuZ2VkKGZh
bHNlKQorICAgICwgbV9zdWJ0cmVlV2FzU2Nyb2xsZWQoZmFsc2UpCiAgICAgLCBtX21hc2tzVG9C
b3VuZHMoZmFsc2UpCiAgICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAsIG1fb3BhY2l0eSgxLjAp
CkBAIC0xMzAsNiArMTMxLDIyIEBAIHZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IElu
dFNpemUmIHNjcm9sbCkKICAgICAvLyBDbGFtcCBuZXdEZWx0YSBzbyB0aGF0IHBvc2l0aW9uICsg
ZGVsdGEgc3RheXMgd2l0aGluIHNjcm9sbCBib3VuZHMuCiAgICAgbV9zY3JvbGxEZWx0YSA9IG5l
d0RlbHRhLmV4cGFuZGVkVG8obWluRGVsdGEpLnNocnVua1RvKG1heERlbHRhKTsKICAgICBub3Rl
TGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CisKKyAgICBDQ0xheWVySW1wbCogYW5j
ZXN0b3IgPSB0aGlzOworICAgIHdoaWxlIChhbmNlc3RvciAmJiAhYW5jZXN0b3ItPnN1YnRyZWVX
YXNTY3JvbGxlZCgpKSB7CisgICAgICAgIGFuY2VzdG9yLT5zZXRTdWJ0cmVlV2FzU2Nyb2xsZWQo
dHJ1ZSk7CisgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpOworICAgIH0KK30K
Kwordm9pZCBDQ0xheWVySW1wbDo6c2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpCit7
CisgICAgbV9zY3JvbGxEZWx0YVJlc2lkdWUuZXhwYW5kKHNjcm9sbC53aWR0aCgpLCBzY3JvbGwu
aGVpZ2h0KCkpOworICAgIEludFNpemUgb3ZlcmZsb3dEZWx0YShmbG9vcmVkSW50UG9pbnQobV9z
Y3JvbGxEZWx0YVJlc2lkdWUpIC0gSW50UG9pbnQoKSk7CisgICAgaWYgKCFvdmVyZmxvd0RlbHRh
LmlzWmVybygpKSB7CisgICAgICAgIG1fc2Nyb2xsRGVsdGFSZXNpZHVlLmV4cGFuZCgtb3ZlcmZs
b3dEZWx0YS53aWR0aCgpLCAtb3ZlcmZsb3dEZWx0YS5oZWlnaHQoKSk7CisgICAgICAgIHNjcm9s
bEJ5KG92ZXJmbG93RGVsdGEpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6Y2xlYW51
cFJlc291cmNlcygpCkBAIC00MzYsNiArNDUzLDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0U2Ny
b2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogCiB2b2lkIENDTGF5
ZXJJbXBsOjpzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKKyAg
ICBtX3Njcm9sbERlbHRhUmVzaWR1ZSA9IEZsb2F0U2l6ZSgpOwogICAgIGlmIChtX3Njcm9sbERl
bHRhID09IHNjcm9sbERlbHRhKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IGUyYzAwYzguLjU2MzA0ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTY3LDYg
KzE2NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEoY29uc3QgSW50
U2l6ZSYgc2VudFNjcm9sbERlbHRhKSB7IG1fc2VudFNjcm9sbERlbHRhID0gc2VudFNjcm9sbERl
bHRhOyB9CiAKICAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbCk7CisgICAg
dm9pZCBzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCk7CisKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhpcyBsYXllciBvciBvbmUgb2YgaXRzIGRlc2Nlc2RhbnRzIHdhcyBzY3JvbGxl
ZC4KKyAgICBib29sIHN1YnRyZWVXYXNTY3JvbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VidHJl
ZVdhc1Njcm9sbGVkOyB9CisgICAgdm9pZCBzZXRTdWJ0cmVlV2FzU2Nyb2xsZWQoYm9vbCBzdWJ0
cmVlV2FzU2Nyb2xsZWQpIHsgbV9zdWJ0cmVlV2FzU2Nyb2xsZWQgPSBzdWJ0cmVlV2FzU2Nyb2xs
ZWQ7IH0KIAogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJs
ZTsgfQogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpIHsgbV9zY3JvbGxh
YmxlID0gc2Nyb2xsYWJsZTsgfQpAQCAtMjM2LDYgKzI0MSw5IEBAIHByaXZhdGU6CiAgICAgLy8g
VHJhY2tzIGlmIGRyYXdpbmctcmVsYXRlZCBwcm9wZXJ0aWVzIGhhdmUgY2hhbmdlZCBzaW5jZSBs
YXN0IHJlZHJhdy4KICAgICBib29sIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7CiAKKyAgICAvLyBU
cmFja3MgaWYgdGhpcyBsYXllciBvciBhIGRlc2NlbmRhbnQgd2FzIHNjcm9sbGVkIHNpbmNlIHRo
ZSBsYXN0IHN5bmMuCisgICAgYm9vbCBtX3N1YnRyZWVXYXNTY3JvbGxlZDsKKwogICAgIEludFJl
Y3QgbV92aXNpYmxlTGF5ZXJSZWN0OwogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGJv
b2wgbV9vcGFxdWU7CkBAIC0yNTEsNiArMjU5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZHJh
d3NDb250ZW50OwogCiAgICAgSW50U2l6ZSBtX3Njcm9sbERlbHRhOworICAgIEZsb2F0U2l6ZSBt
X3Njcm9sbERlbHRhUmVzaWR1ZTsKICAgICBJbnRTaXplIG1fc2VudFNjcm9sbERlbHRhOwogICAg
IEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBmbG9hdCBtX3BhZ2VTY2FsZURlbHRh
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMjdkOTU2YS4uMzRhNGE3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yMzQsNiArMjM0LDE1IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdygpCiAgICAgICAgIG1fY2xpZW50LT5z
Y2hlZHVsZUNvbXBvc2l0ZSgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExh
eWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQoreworICAgIGlmIChtX3Jv
b3RMYXllciA9PSByb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVy
ID0gcm9vdExheWVyOworICAgIG1fcm9vdFNjcm9sbExheWVyLmNsZWFyKCk7Cit9CisKIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUp
CiB7CiAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVz
KFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNpemUpKTsKQEAgLTQ0OSwx
NSArNDU4LDM0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpjbGVhclBlbmRpbmdVcGRhdGUoKQog
ICAgIG1fdXBkYXRlTGlzdC5jbGVhcigpOwogfQogCitzdGF0aWMgTGF5ZXJDaHJvbWl1bSogZmlu
ZFNjcm9sbExheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIGlmICghbGF5ZXIpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVyLT5zY3JvbGxhYmxlKCkpCisgICAgICAg
IHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxk
cmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5k
U2Nyb2xsTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAgICAgICBpZiAoZm91
bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IENDU2Ny
b2xsQW5kU2NhbGVTZXQmIGluZm8pCiB7Ci0gICAgLy8gRklYTUU6IHB1c2hpbmcgc2Nyb2xsIG9m
ZnNldHMgdG8gbm9uLXJvb3QgbGF5ZXJzIG5vdCBpbXBsZW1lbnRlZAotICAgIGlmICghaW5mby5z
Y3JvbGxzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9yb290U2Nyb2xsTGF5
ZXIpCisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyID0gZmluZFNjcm9sbExheWVyKG1fcm9vdExh
eWVyLmdldCgpKTsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAg
IEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAg
bV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxl
RGVsdGEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zY3JvbGxzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX3Jvb3RTY3JvbGxMYXllciAmJiBpbmZvLnNjcm9sbHNbaV0u
bGF5ZXJJZCA9PSBtX3Jvb3RTY3JvbGxMYXllci0+aWQoKSkKKyAgICAgICAgICAgIG1fY2xpZW50
LT5hcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0
YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2xp
ZW50LT5hcHBseUxheWVyU2Nyb2xsKGluZm8uc2Nyb2xsc1tpXS5sYXllcklkLCBpbmZvLnNjcm9s
bHNbaV0uc2Nyb2xsRGVsdGEpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0
YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCmluZGV4IGFhYWQxNDIuLmIwN2VjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCkBAIC01NCw3ICs1NCw4IEBAIGNsYXNzIFRleHR1cmVNYW5hZ2VyOwogY2xhc3Mg
Q0NMYXllclRyZWVIb3N0Q2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFn
ZVNjYWxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2Nh
bGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBhcHBseUxheWVyU2Nyb2xsKGludCBsYXllcklkLCBjb25zdCBJbnRTaXpl
JiBzY3JvbGxEZWx0YSkgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpID0gMDsKQEAgLTE2Niw3ICsxNjcsNyBA
QCBwdWJsaWM6CiAKICAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jv
b3RMYXllci5nZXQoKTsgfQogICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRSb290TGF5ZXIo
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIpIHsgbV9yb290TGF5ZXIgPSByb290
TGF5ZXI7IH0KKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+
IHJvb3RMYXllcik7CiAKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsg
cmV0dXJuIG1fc2V0dGluZ3M7IH0KIApAQCAtMjE3LDYgKzIxOCw3IEBAIHByaXZhdGU6CiAgICAg
T3duUHRyPENDUHJveHk+IG1fcHJveHk7CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9y
b290TGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOwog
ICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyOwogCiAg
ICAgTGF5ZXJMaXN0IG1fdXBkYXRlTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKaW5kZXggZTBjZDM4OS4uZTBiNmFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKQEAgLTE5NCw4ICsxOTQsNiBAQCBzdGF0aWMgQ0NMYXllckltcGwq
IGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsKICAg
ICBtX3Jvb3RMYXllckltcGwgPSBsYXllcjsKLQotICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHRo
aXMgb25seSBmaW5kcyB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBsYXllci4KICAgICBtX3Njcm9sbExh
eWVySW1wbCA9IGZpbmRTY3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogfQogCkBA
IC0yNjMsMTUgKzI2MSwxMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2Fs
ZUZhY3RvckFuZExpbWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IG1pbgogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQgcGFn
ZVNjYWxlQ2hhbmdlKQogewotICAgIGlmIChwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKKyAgICBpZiAo
IW1fc2Nyb2xsTGF5ZXJJbXBsIHx8IHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRl
bHRhcyB0byBwYWdlU2NhbGUgc3BhY2UuCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7Ci0g
ICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVs
dGEoKTsKLSAgICAgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKLSAgICAg
ICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKLSAgICB9
CisgICAgLy8gV2UgYWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YSBm
b3IgdGhlIHJvb3QgbGF5ZXIgdG8gcGFnZVNjYWxlIHNwYWNlLgorICAgIEludFNpemUgc2Nyb2xs
RGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICBzY3JvbGxEZWx0
YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOworICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3Jv
bGxEZWx0YShzY3JvbGxEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0
UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEpCkBAIC0zMTMsOSArMzA5LDkgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5n
IGEgdmVydGljYWwgc2Nyb2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1h
eFNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKKyAgICAvLyBXZSBvbmx5IG5lZWQgdG8g
dXBkYXRlIHRoZSByb290IGxheWVyIHNjcm9sbCByYW5nZSwgc2luY2UgdGhlIGNoaWxkCisgICAg
Ly8gbGF5ZXJzIHVzZSB1bnNjYWxlZCBzY3JvbGwgY29vcmRpbmF0ZXMuCiAgICAgbV9zY3JvbGxM
YXllckltcGwtPnNldE1heFNjcm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RP
KGFlbGlhcyk6IEFsc28gdXBkYXRlIHN1YmxheWVycy4KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzZXRab29tQW5pbWF0b3JUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHpvb20pCkBAIC0zMzYsMjggKzMzMiwxMDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzZXROZWVkc1JlZHJhdygpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhy
ZWFkKCk7CiB9CiAKLUNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4oY29uc3QgSW50UG9pbnQmKQorQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpblNjcm9sbGluZ0lu
bmVybW9zdExheWVyQXRQb2ludChDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRQb2lu
dCYgd2luZG93UG9pbnQpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHNjcm9sbGFibGUgc3Vi
bGF5ZXJzLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JvbGxhYmxlKCkpCi0gICAgICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOworICAgIGlmICgh
bGF5ZXJJbXBsKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEln
bm9yZWQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4o
KS5zaXplKCk7IGkrKykgeworICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
dHVzIHN0YXR1cyA9IGJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KGxheWVySW1w
bC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgd2luZG93UG9pbnQpOworICAgICAgICBpZiAoc3RhdHVz
ID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkIHx8IHN0YXR1cyA9PSBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1
czsKKyAgICB9CisKKyAgICBJbnRQb2ludCBjb250ZW50UG9pbnQobGF5ZXJJbXBsLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh3aW5kb3dQb2ludCkpOworCisgICAg
Ly8gVGhlIGNvbnRlbnQgcG9pbnQgZm9yIG5vbi1yb290IGxheWVycyBtdXN0IGJlIHNjYWxlZCB3
aXRoIHRoZSBwYWdlIHNjYWxlLiBOb3RlIHRoYXQgdGhlCisgICAgLy8gcGFnZSBzY2FsZSBkZWx0
YSBpcyBhbHJlYWR5IGVtYmVkZGVkIGluIGVhY2ggbGF5ZXIncyBzY3JlZW4gc3BhY2UgdHJhbnNm
b3JtLgorICAgIGlmIChsYXllckltcGwgIT0gbV9zY3JvbGxMYXllckltcGwpCisgICAgICAgIGNv
bnRlbnRQb2ludC5zY2FsZShtX3BhZ2VTY2FsZSwgbV9wYWdlU2NhbGUpOworCisgICAgaWYgKGxh
eWVySW1wbC0+ZHJhd3NDb250ZW50KCkgJiYgIWxheWVySW1wbC0+dmlzaWJsZUxheWVyUmVjdCgp
LmNvbnRhaW5zKGNvbnRlbnRQb2ludCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsSWdub3JlZDsKKworICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkg
eworICAgICAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IGxheWVySW1wbDsKKyAg
ICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOworICAgIH0K
KworICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKK30KKwor
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
Y3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCit7CisgICAgcmV0dXJuIGJl
Z2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLmdldCgp
LCB3aW5kb3dQb2ludCk7Cit9CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKK3N0YXRpYyBi
b29sIGxheWVyQ2FuQmVTY3JvbGxlZChjb25zdCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25z
dCBJbnRTaXplJiBkaXJlY3Rpb24pCit7CisgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24obGF5
ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAg
ICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKGRpcmVjdGlvbi53aWR0aCgpIDwgMCAmJiBzY3JvbGxQb3NpdGlvbi54KCkgPiAwKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGlyZWN0aW9uLmhlaWdodCgpIDwgMCAmJiBz
Y3JvbGxQb3NpdGlvbi55KCkgPiAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGly
ZWN0aW9uLndpZHRoKCkgPiAwICYmIHNjcm9sbFBvc2l0aW9uLngoKSA8IGxheWVySW1wbC0+bWF4
U2Nyb2xsUG9zaXRpb24oKS53aWR0aCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
ZGlyZWN0aW9uLmhlaWdodCgpID4gMCAmJiBzY3JvbGxQb3NpdGlvbi55KCkgPCBsYXllckltcGwt
Pm1heFNjcm9sbFBvc2l0aW9uKCkuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeShj
b25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJ
bXBsKQorICAgIGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Ci0g
ICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0gICAgbV9jbGllbnQt
PnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgSW50U2l6ZSBwZW5kaW5nRGVsdGEo
c2Nyb2xsRGVsdGEpOworICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBtX2N1cnJlbnRseVNj
cm9sbGluZ0xheWVySW1wbC5nZXQoKTsKKyAgICBkbyB7CisgICAgICAgIGlmIChsYXllckNhbkJl
U2Nyb2xsZWQobGF5ZXJJbXBsLCBwZW5kaW5nRGVsdGEpKSB7CisgICAgICAgICAgICBJbnRTaXpl
IHByZXZpb3VzRGVsdGEobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgICAgIEZs
b2F0U2l6ZSBzY2FsZWRQZW5kaW5nRGVsdGEocGVuZGluZ0RlbHRhKTsKKyAgICAgICAgICAgIC8v
IFNpbmNlIHNjcm9sbERlbHRhIGlzIGluIHdpbmRvdyBjb29yZGluYXRlcywgaXQgYWxyZWFkeSBo
YXMgdGhlIHBhZ2Ugc2NhbGUgYXBwbGllZC4KKyAgICAgICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB3
aGF0IHRoZSByb290IHNjcm9sbCBsYXllciBleHBlY3RzLCBidXQgY2hpbGQgbGF5ZXJzIGFyZSBz
Y3JvbGxlZCB1c2luZworICAgICAgICAgICAgLy8gdW5zY2FsZWQgY29udGVudCBjb29yZGluYXRl
cyBpbnN0ZWFkLCBzbyB3ZSBoYXZlIHRvIHVuZG8gdGhlIHNjYWxpbmcgZm9yIHRoZW0uIFRoZQor
ICAgICAgICAgICAgLy8gcGFnZSBzY2FsZSBkZWx0YSBuZWVkcyB0byBiZSB1bmFwcGxpZWQgd2l0
aCBib3RoIGxheWVyIHR5cGVzIHNpbmNlIHRoZSBzY3JvbGwKKyAgICAgICAgICAgIC8vIGNvb3Jk
aW5hdGVzIGRvIG5vdCByZXNwZWN0IGl0LgorICAgICAgICAgICAgaWYgKGxheWVySW1wbCA9PSBt
X3Njcm9sbExheWVySW1wbCkgeworICAgICAgICAgICAgICAgIHNjYWxlZFBlbmRpbmdEZWx0YS5z
Y2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisgICAgICAgICAgICAgICAgbGF5ZXJJbXBsLT5z
Y3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzY2FsZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvIChtX3BhZ2VTY2FsZSAqIG1f
cGFnZVNjYWxlRGVsdGEpKTsKKyAgICAgICAgICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHNj
YWxlZFBlbmRpbmdEZWx0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBSZXNldCB0
aGUgcGVuZGluZyBzY3JvbGwgZGVsdGEgdG8gemVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8g
bW92ZSBhbG9uZyB0aGUgcmVxdWVzdGVkCisgICAgICAgICAgICAvLyBheGlzLiBUaGlzIGlzIHRv
IGVuc3VyZSBpdCBpcyBwb3NzaWJsZSB0byBzY3JvbGwgZXhhY3RseSB0byB0aGUgYmVnaW5uaW5n
IG9yIGVuZCBvZiBhCisgICAgICAgICAgICAvLyBzY3JvbGwgYXJlYSByZWdhcmRsZXNzIG9mIHRo
ZSBzY3JvbGwgc3RlcC4KKyAgICAgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLndpZHRoKCkgIT0g
bGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLndpZHRoKCkpCisgICAgICAgICAgICAgICAgcGVuZGlu
Z0RlbHRhLnNldFdpZHRoKDApOworICAgICAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEuaGVpZ2h0
KCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmhlaWdodCgpKQorICAgICAgICAgICAgICAg
IHBlbmRpbmdEZWx0YS5zZXRIZWlnaHQoMCk7CisgICAgICAgICAgICAvLyBBbHNvIHJlc2V0IHRo
ZSBkZWx0YSBpZiB0aGUgbGF5ZXIgZGlkIG5vdCBtb3ZlIGJlY2F1c2UgdGhlIHNjcm9sbCBkZWx0
YSBnb3Qgcm91bmRlZCBkb3duCisgICAgICAgICAgICAvLyB0byB6ZXJvIGFuZCB0aGUgbGF5ZXIg
c3RpbGwgaGFzIHJvb20gdG8gc2Nyb2xsIGluIHRoZSByZXF1ZXN0ZWQgZGlyZWN0aW9uLiBUaGlz
IGF2b2lkcworICAgICAgICAgICAgLy8gc2Nyb2xsaW5nIHRoZSBwYXJlbnQgbGF5ZXIgZm9yIHNs
b3cgc2Nyb2xscyB0aGF0IGRvIG5vdCBtb3ZlIHRoZSBsYXllciBhdCBldmVyeSBpdGVyYXRpb24u
CisgICAgICAgICAgICBpZiAocGVuZGluZ0RlbHRhLndpZHRoKCkgJiYgbGF5ZXJDYW5CZVNjcm9s
bGVkKGxheWVySW1wbCwgSW50U2l6ZShwZW5kaW5nRGVsdGEud2lkdGgoKSwgMCkpKQorICAgICAg
ICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIGlmIChwZW5k
aW5nRGVsdGEuaGVpZ2h0KCkgJiYgbGF5ZXJDYW5CZVNjcm9sbGVkKGxheWVySW1wbCwgSW50U2l6
ZSgwLCBwZW5kaW5nRGVsdGEuaGVpZ2h0KCkpKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nRGVs
dGEuc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGRvCisgICAgICAgICAgICBsYXll
ckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpOworICAgICAgICB3aGlsZSAobGF5ZXJJbXBsICYm
ICFsYXllckNhbkJlU2Nyb2xsZWQobGF5ZXJJbXBsLCBwZW5kaW5nRGVsdGEpKTsKKyAgICB9IHdo
aWxlIChsYXllckltcGwgJiYgbGF5ZXJDYW5CZVNjcm9sbGVkKGxheWVySW1wbCwgcGVuZGluZ0Rl
bHRhKSk7CisKKyAgICBpZiAocGVuZGluZ0RlbHRhICE9IHNjcm9sbERlbHRhKSB7CisgICAgICAg
IG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICBtX2NsaWVu
dC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKCkKIHsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xh
eWVySW1wbC5jbGVhcigpOwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmhhdmVXaGVl
bEV2ZW50SGFuZGxlcnMoKQpAQCAtNDAwLDI0ICs0NzcsMzUgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpwaW5jaEdlc3R1cmVFbmQoKQogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9u
SW1wbFRocmVhZCgpOwogfQogCitzdGF0aWMgdm9pZCBjb2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Ny
b2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7Cisg
ICAgaWYgKCFsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkpIHsKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgc2Ny
b2xsLmxheWVySWQgPSBsYXllckltcGwtPmlkKCk7CisgICAgICAgIHNjcm9sbC5zY3JvbGxEZWx0
YSA9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICAgICAgc2Nyb2xsSW5mby0+c2Nyb2xs
cy5hcHBlbmQoc2Nyb2xsKTsKKworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0
YShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIH0KKworICAgIGlmIChsYXllckltcGwt
PnN1YnRyZWVXYXNTY3JvbGxlZCgpKSB7CisgICAgICAgIGxheWVySW1wbC0+c2V0U3VidHJlZVdh
c1Njcm9sbGVkKGZhbHNlKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcklt
cGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjb2xsZWN0U2Nyb2xsRGVs
dGFzKHNjcm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisgICAgfQor
fQorCiBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6
OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogewogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0
PiBzY3JvbGxJbmZvID0gYWRvcHRQdHIobmV3IENDU2Nyb2xsQW5kU2NhbGVTZXQoKSk7Ci0gICAg
Ym9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKCFtX3Njcm9sbExheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDEuMGYpOworICAg
IGJvb2wgZGlkTW92ZSA9IG1fcm9vdExheWVySW1wbCAmJiAobV9yb290TGF5ZXJJbXBsLT5zdWJ0
cmVlV2FzU2Nyb2xsZWQoKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDEuMGYpOwogICAgIGlmICgh
ZGlkTW92ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2ZSB8fCBtX3BhZ2VTY2FsZUFuaW1hdGlvbikg
ewogICAgICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURl
bHRhID0gMTsKICAgICAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgpOwogICAgIH0KIAog
ICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSBt
X3BhZ2VTY2FsZURlbHRhOwotCi0gICAgLy8gRklYTUU6IHRyYWNrIHNjcm9sbHMgZnJvbSBsYXll
cnMgb3RoZXIgdGhhbiB0aGUgcm9vdAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xs
VXBkYXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9sbExheWVySW1w
bC0+aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Ny
b2xsRGVsdGEoKTsKLSAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOwotCi0g
ICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVs
dGEpOworICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mby5nZXQoKSwgbV9yb290TGF5
ZXJJbXBsLmdldCgpKTsKIAogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA4ODdjN2U2Li5iODBiOGZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xMjgsMTAgKzEyOCwxMiBA
QCBwcml2YXRlOgogICAgIHZvaWQgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsK
ICAgICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZv
aWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKKyAgICBTY3JvbGxTdGF0dXMgYmVnaW5TY3Jv
bGxpbmdJbm5lcm1vc3RMYXllckF0UG9pbnQoQ0NMYXllckltcGwqLCBjb25zdCBJbnRQb2ludCYp
OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwog
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOwogICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gbV9zY3JvbGxMYXllckltcGw7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX2N1
cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKICAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAg
ICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBib29sIG1fdmlzaWJsZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggNjliY2FjZS4uZWUwZmUyMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMS0xMi0wOSAgU2FtaSBLeW9zdGlsYSAgPHNr
eW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBsYXll
ciBzY3JvbGxpbmcgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAorCisgICAgICAgIFRoaXMgcGF0Y2gg
ZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZC4K
KyAgICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xsZWQg
Q0NMYXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgV2ViVmlld0ltcGwg
aW4gdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAgIElmIGEgbGF5ZXIgaGFzIG5vIHJvb20gdG8g
c2Nyb2xsIGluIGEgZ2l2ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCisgICAgICAgIGFuY2VzdG9y
IGxheWVycyBpcyBzY3JvbGxlZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkxh
eWVyVHJlZVZpZXdDbGllbnQuaDoKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmFkZE9yVXBkYXRlU2Nyb2xsaW5n
TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZW1vdmVTY3JvbGxp
bmdMYXllcik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBz
cmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKiBz
cmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgor
ICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJbXBs
VGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisgICAg
ICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RI
b29rczo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OlRlc3RI
b29rczo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0
Q2xpZW50OjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6TW9j
a0xheWVyVHJlZUhvc3RDbGllbnQ6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNj
YWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRpcGxlUmVk
cmF3OjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5
ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5TGF5ZXJT
Y3JvbGwpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YWZ0
ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFw
cGx5U2Nyb2xsVG9DaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2lu
Q29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3Jv
bGxDaGlsZExheWVyOjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OlRFU1Rf
Rik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5
b25kTGltaXQ6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9u
ZExpbWl0OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0Ojpk
cmF3TGF5ZXJzT25DQ1RocmVhZCk6CisKIDIwMTEtMTItMDggIEVsbGlvdCBQb2dlciAgPGVwb2dl
ckBnb29nbGUuY29tPgogCiAgICAgICAgIENocm9taXVtIERFUFMgcm9sbCAxMTI5NzQgLT4gMTEz
NjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJMYXllclRyZWVWaWV3Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKaW5kZXggNmY1MDA5Ni4uYzUxOWJkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5
ZXJUcmVlVmlld0NsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3Bs
YXRmb3JtL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaApAQCAtNDEsNyArNDEsMTEgQEAgcHVibGlj
OgogICAgIC8vIHNjYWxlIGZhY3RvciB0aGF0IG1heSBhcHBseSBhIENTUyB0cmFuc2Zvcm0gb24g
dGhlIHdob2xlIGRvY3VtZW50ICh1c2VkCiAgICAgLy8gZm9yIG1vYmlsZS1kZXZpY2UgcGluY2gg
em9vbWluZykuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBzZW50IHRvIHRoZQogICAgIC8v
IGNvbXBvc2l0b3IgdGhyZWFkIHRocm91Z2ggdGhlIFdlYkNvbXBvc2l0b3IgaW50ZXJmYWNlLgot
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYlNpemUmIHNjcm9s
bERlbHRhLCBmbG9hdCBzY2FsZUZhY3RvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVJv
b3RMYXllclNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYlNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBz
Y2FsZUZhY3RvcikgPSAwOworCisgICAgLy8gQXBwbGllcyBhIHNjcm9sbCBkZWx0YSB0byBhIG5v
bi1yb290IGxheWVyLiBUaGlzIGlzIHRyaWdnZXJlZCBieSBldmVudHMKKyAgICAvLyBzZW50IHRv
IHRoZSBjb21wb3NpdG9yIHRocmVhZCB0aHJvdWdoIHRoZSBXZWJDb21wb3NpdG9yIGludGVyZmFj
ZS4KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlMYXllclNjcm9sbChpbnQgbGF5ZXJJZCwgY29uc3Qg
V2ViU2l6ZSYgc2Nyb2xsRGVsdGEpID0gMDsKIAogICAgIC8vIENyZWF0ZXMgYSAzRCBjb250ZXh0
IHN1aXRhYmxlIGZvciB0aGUgY29tcG9zaXRpbmcuIFRoaXMgbWF5IGJlIGNhbGxlZAogICAgIC8v
IG1vcmUgdGhhbiBvbmNlIGlmIHRoZSBjb250ZXh0IGdldHMgbG9zdC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggNDVmYzgyNS4uMjI5
OTVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNp
bmNsdWRlICJQb3B1cENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNocm9taXVtLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51Q2hy
b21pdW0uaCIKQEAgLTc5Myw2ICs3OTQsMjMgQEAgYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpwYWlu
dEN1c3RvbU92ZXJoYW5nQXJlYShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6YWRkT3JVcGRhdGVT
Y3JvbGxpbmdMYXllcihOb2RlKiBub2RlLCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwg
UGxhdGZvcm1MYXllciogY29udGVudHNMYXllciwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsU2l6ZSkK
K3sKKyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KG5vZGUtPnJlbmRlcmVyKCkp
OworICAgIGNvbnRlbnRzTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY29udGVudHNM
YXllci0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQobm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9z
aW5nTGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpKTsKKyAgICBjb250ZW50c0xheWVy
LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKHNjcm9sbFNpemUud2lkdGgoKSAtIHJlbmRl
ckJveC0+Y2xpZW50V2lkdGgoKSwgc2Nyb2xsU2l6ZS5oZWlnaHQoKSAtIHJlbmRlckJveC0+Y2xp
ZW50SGVpZ2h0KCkpKTsKKyAgICBtX3dlYlZpZXctPmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIo
Y29udGVudHNMYXllci0+aWQoKSwgbm9kZSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6
cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoTm9kZSogbm9kZSwgUGxhdGZvcm1MYXllciogc2Nyb2xsaW5n
TGF5ZXIsIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpCit7CisgICAgbV93ZWJWaWV3LT5y
ZW1vdmVTY3JvbGxpbmdMYXllcihjb250ZW50c0xheWVyLT5pZCgpKTsKKyAgICBjb250ZW50c0xh
eWVyLT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKK30KKwogLy8gRklYTUU6IFJlbW92ZSBDaHJvbWVD
bGllbnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUgYW5kIENocm9t
ZUNsaWVudEltcGw6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZQog
Ly8gb25jZSBhbGwgcG9ydHMgaGF2ZSBtb3ZlZCB0byBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24g
KHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzNzMgKS4KIC8v
IEZvciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24sIHRoZXNlIG1ldGhvZHMgYXJlIG5vdyBpbXBs
ZW1lbnRlZCBhcyBXZWJHZW9sb2NhdGlvbkNsaWVudDo6cmVxdWVzdFBlcm1pc3Npb24gYW5kIFdl
Ykdlb2xvY2F0aW9uQ2xpZW50OjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAppbmRleCA3N2YyNjQxLi5hYzUz
Yzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5o
CkBAIC0zMyw2ICszMyw3IEBACiAjZGVmaW5lIENocm9tZUNsaWVudEltcGxfaAogCiAjaW5jbHVk
ZSAiQ2hyb21lQ2xpZW50Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAj
aW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCiAKQEAg
LTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWNjZXNzaWJpbGl0eU9i
amVjdDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGaWxlQ2hvb3NlcjsKK2NsYXNzIE5vZGU7CiBj
bGFzcyBQb3B1cENvbnRhaW5lcjsKIGNsYXNzIFBvcHVwTWVudUNsaWVudDsKIGNsYXNzIFJlbmRl
ckJveDsKQEAgLTEzMSw2ICsxMzMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlYWNo
ZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CiAgICAgdmlydHVhbCB2b2lk
IHJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW4qLCBpbnQ2NF90IHRvdGFsU3BhY2VOZWVkZWQpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEN1
c3RvbU92ZXJoYW5nQXJlYShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihXZWJDb3Jl
OjpOb2RlKiwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFdlYkNvcmU6
OlBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbFNpemUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihXZWJDb3Jl
OjpOb2RlKiwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFdlYkNvcmU6
OlBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpH
ZW9sb2NhdGlvbiopOwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiop
OwogICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoV2ViQ29yZTo6RnJhbWUqLCBQYXNzUmVm
UHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAKaW5kZXggNTk5YWFiOS4uYzBmODRhZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0lt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJ
bXBsLmNwcApAQCAtNjYsMTAgKzY2LDE2IEBAIHZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFu
aW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogICAgICAgICBtX2NsaWVudC0+
YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CiB9CiAKLXZvaWQgV2ViTGF5ZXJUcmVl
Vmlld0ltcGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Ny
b2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSkKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFw
cGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSkKIHsKICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1f
Y2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYlNpemUoc2Nyb2xsRGVsdGEpLCBwYWdlU2Nh
bGUpOworICAgICAgICBtX2NsaWVudC0+YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShXZWJT
aXplKHNjcm9sbERlbHRhKSwgcGFnZVNjYWxlKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3
SW1wbDo6YXBwbHlMYXllclNjcm9sbChpbnQgbGF5ZXJJZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+
YXBwbHlMYXllclNjcm9sbChsYXllcklkLCBXZWJTaXplKHNjcm9sbERlbHRhKSk7CiB9CiAKIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGVM
YXllclRyZWVIb3N0Q29udGV4dDNEKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJMYXllclRyZWVWaWV3SW1wbC5oCmluZGV4IDJlMTQ1ZmEuLmZmZGNkMTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaApAQCAt
NDIsNyArNDIsOCBAQCBwcml2YXRlOgogICAgIFdlYkxheWVyVHJlZVZpZXdJbXBsKFdlYkxheWVy
VHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVl
Vmlldzo6U2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVWaWV3SW1wbCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSk7CisgICAgdmlydHVhbCB2b2lkIGFw
cGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJTY3Jv
bGwoaW50IGxheWVySWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhKTsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxh
eWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFw
aGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5k
RHJhd0ZyYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
aW5kZXggMmUzOWZjZS4uNWFmYTRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcApAQCAtMjk4NCw3ICsyOTg0LDM3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmFu
aW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogICAgIGxheW91dCgpOwogfQog
Ci12b2lkIFdlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbGVEZWx0YSkKK3ZvaWQgV2ViVmlld0ltcGw6OmFkZE9y
VXBkYXRlU2Nyb2xsaW5nTGF5ZXIoaW50IGxheWVySWQsIE5vZGUqIG5vZGUpCit7CisgICAgbV9z
Y3JvbGxMYXllck5vZGVzLnNldChsYXllcklkLCBub2RlKTsKK30KKwordm9pZCBXZWJWaWV3SW1w
bDo6cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoaW50IGxheWVySWQpCit7CisgICAgbV9zY3JvbGxMYXll
ck5vZGVzLnJlbW92ZShsYXllcklkKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlMYXll
clNjcm9sbChpbnQgbGF5ZXJJZCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAg
aWYgKCFtX3Njcm9sbExheWVyTm9kZXMuY29udGFpbnMobGF5ZXJJZCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIE5vZGUqIG5vZGUgPSBtX3Njcm9sbExheWVyTm9kZXMuZ2V0KGxheWVySWQpOwor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci0+aXNCb3goKSB8fCAh
cmVuZGVyZXItPmVuY2xvc2luZ0JveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJC
b3gqIGVuY2xvc2luZ0JveCA9IHJlbmRlcmVyLT5lbmNsb3NpbmdCb3goKTsKKyAgICBpZiAoc2Ny
b2xsRGVsdGEud2lkdGgoKSkKKyAgICAgICAgZW5jbG9zaW5nQm94LT5zY3JvbGwoc2Nyb2xsRGVs
dGEud2lkdGgoKSA+IDAgPyBTY3JvbGxSaWdodCA6IFNjcm9sbExlZnQsIFNjcm9sbEJ5UGl4ZWws
IGFicyhzY3JvbGxEZWx0YS53aWR0aCgpKSk7CisgICAgaWYgKHNjcm9sbERlbHRhLmhlaWdodCgp
KQorICAgICAgICBlbmNsb3NpbmdCb3gtPnNjcm9sbChzY3JvbGxEZWx0YS5oZWlnaHQoKSA+IDAg
PyBTY3JvbGxEb3duIDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGFicyhzY3JvbGxEZWx0YS5o
ZWlnaHQoKSkpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjphcHBseVJvb3RMYXllclNjcm9sbEFu
ZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbGVEZWx0YSkK
IHsKICAgICBpZiAoIW1haW5GcmFtZUltcGwoKSB8fCAhbWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZp
ZXcoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmgKaW5kZXggNzM4ZTBmZi4uMmRiZTZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCkBAIC0yMzYsNyArMjM2LDggQEAgcHVibGljOgogCiAgICAgLy8gQ0NM
YXllclRyZWVIb3N0Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91
YmxlIGZyYW1lQmVnaW5UaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2Fs
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBmbG9hdCk7
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJTY3JvbGwoaW50LCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZENvbW1pdEFuZERyYXdGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVN3YXBC
dWZmZXJzKCk7CkBAIC00MjMsNiArNDI0LDggQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xsUm9v
dExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJl
Y3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIFdlYkNvcmU6Ok5vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCk7CisgICAgdm9pZCBhZGRPclVw
ZGF0ZVNjcm9sbGluZ0xheWVyKGludCBsYXllcklkLCBXZWJDb3JlOjpOb2RlKik7CisgICAgdm9p
ZCByZW1vdmVTY3JvbGxpbmdMYXllcihpbnQgbGF5ZXJJZCk7CiAjZW5kaWYKICNpZiBFTkFCTEUo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwpA
QCAtNjUzLDYgKzY1Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbXBvc2l0b3JDcmVhdGlv
bkZhaWxlZDsKICAgICAvLyBJZiB0cnVlLCB0aGUgZ3JhcGhpY3MgY29udGV4dCBpcyBiZWluZyBy
ZXN0b3JlZC4KICAgICBib29sIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dDsKKyAgICBIYXNo
TWFwPGludCwgV2ViQ29yZTo6Tm9kZSo+IG1fc2Nyb2xsTGF5ZXJOb2RlczsKICNlbmRpZgogICAg
IGJvb2wgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzOwogICAgIHN0YXRpYyBjb25zdCBXZWJJbnB1
dEV2ZW50KiBtX2N1cnJlbnRJbnB1dEV2ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCmluZGV4IDg5MDUwNTAuLmQ5YWM2N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKQEAg
LTE2NSw0ICsxNjUsMzggQEAgVEVTVChDQ0xheWVySW1wbFRlc3QsIHZlcmlmeUxheWVyQ2hhbmdl
c0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJFRV9ESURf
Tk9UX0NIQU5HRShyb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihhcmJpdHJhcnlJbnRTaXplKSk7
CiB9CiAKK1RFU1QoQ0NMYXllckltcGxUZXN0LCBjaGVja0ZyYWN0aW9uYWxTY3JvbGxpbmcpCit7
CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxUaHJlYWQ7CisKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIHJvb3Qt
PnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKworICAgIC8vIENhc2Ug
MTogc2Nyb2xsaW5nIGxlc3MgdGhhbiBhIHBpeGVsLgorICAgIEVYUEVDVF9FUShJbnRTaXplKCks
IHJvb3QtPnNjcm9sbERlbHRhKCkpOworICAgIHJvb3QtPnNjcm9sbEJ5KEZsb2F0U2l6ZSgwLCAw
LjNmKSk7CisgICAgRVhQRUNUX0VRKEludFNpemUoKSwgcm9vdC0+c2Nyb2xsRGVsdGEoKSk7CisK
KyAgICAvLyBDYXNlIDI6IHNjcm9sbGluZyBtb3JlIHRoYW4gYSBwaXhlbC4KKyAgICByb290LT5z
ZXRTY3JvbGxEZWx0YShJbnRTaXplKCkpOworICAgIEVYUEVDVF9FUShJbnRTaXplKCksIHJvb3Qt
PnNjcm9sbERlbHRhKCkpOworICAgIHJvb3QtPnNjcm9sbEJ5KEZsb2F0U2l6ZSgxLjNmLCAwKSk7
CisgICAgRVhQRUNUX0VRKEludFNpemUoMSwgMCksIHJvb3QtPnNjcm9sbERlbHRhKCkpOworCisg
ICAgLy8gQ2FzZSAzOiBzY3JvbGxpbmcgbGVzcyB0aGFuIGEgcGl4ZWwgcmVwZWF0ZWRseS4KKyAg
ICByb290LT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKCkpOworICAgIEVYUEVDVF9FUShJbnRTaXpl
KCksIHJvb3QtPnNjcm9sbERlbHRhKCkpOworICAgIHJvb3QtPnNjcm9sbEJ5KEZsb2F0U2l6ZSgw
LCAwLjZmKSk7CisgICAgcm9vdC0+c2Nyb2xsQnkoRmxvYXRTaXplKDAsIDAuNmYpKTsKKyAgICBF
WFBFQ1RfRVEoSW50U2l6ZSgwLCAxKSwgcm9vdC0+c2Nyb2xsRGVsdGEoKSk7CisKKyAgICAvLyBD
YXNlIDQ6IHNldHRpbmcgdGhlIHNjcm9sbCBkZWx0YSBzaG91bGQgcmVzZXQgdGhlIGZyYWN0aW9u
YWwgZGVsdGEuCisgICAgcm9vdC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgpKTsKKyAgICBFWFBF
Q1RfRVEoSW50U2l6ZSgpLCByb290LT5zY3JvbGxEZWx0YSgpKTsKKyAgICByb290LT5zY3JvbGxC
eShGbG9hdFNpemUoMCwgMC42ZikpOworICAgIHJvb3QtPnNldFNjcm9sbERlbHRhKEludFNpemUo
MCwgMikpOworICAgIHJvb3QtPnNjcm9sbEJ5KEZsb2F0U2l6ZSgwLCAwLjZmKSk7CisgICAgRVhQ
RUNUX0VRKEludFNpemUoMCwgMiksIHJvb3QtPnNjcm9sbERlbHRhKCkpOworfQorCiB9IC8vIG5h
bWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBlODM1YWI3Li43ZDFhMmMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcApAQCAtMTQxLDYgKzE0MSwyMyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbERlbHRhUmVwZWF0ZWRTY3JvbGxzKQogICAgIEVYUEVDVF9FUShyb290LT5zZW50
U2Nyb2xsRGVsdGEoKSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOwogfQogCitURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIG5vdGlmeUFuY2VzdG9yTGF5ZXJzQWJvdXRTY3JvbGxp
bmcpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgxMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVh
dGUoMTEpOworCisgICAgY2hpbGQtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY2hpbGQtPnNl
dE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5z
ZXRSb290TGF5ZXIocm9vdCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworCisgICAgQVNT
RVJUX0ZBTFNFKHJvb3QtPnN1YnRyZWVXYXNTY3JvbGxlZCgpKTsKKyAgICBjaGlsZC0+c2Nyb2xs
QnkoSW50U2l6ZSgxNSwgMTYpKTsKKyAgICBBU1NFUlRfVFJVRShyb290LT5zdWJ0cmVlV2FzU2Ny
b2xsZWQoKSk7CisgICAgbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIEFT
U0VSVF9GQUxTRShyb290LT5zdWJ0cmVlV2FzU2Nyb2xsZWQoKSk7Cit9CisKIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0QW5kUmVkcmF3KQogewog
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CkBA
IC0xNTUsNiArMTcyLDk0IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
Um9vdENhbGxzQ29tbWl0QW5kUmVkcmF3KQogICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENv
bW1pdCk7CiB9CiAKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEln
bm9yZWQpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJl
Z2luKEludFBvaW50KDAsIDApKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQp
OworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxT
RShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRBbmRSZWRyYXcpCit7CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3Jv
bGxhYmxlKGZhbHNlKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSgwKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBjaGls
ZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICByb290LT5hZGRDaGlsZChj
aGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworCisgICAgRVhQRUNU
X0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNp
emUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJV
RShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1p
dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hp
bGQpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBjaGlsZC0+c2V0U2Ny
b2xsYWJsZSh0cnVlKTsKKyAgICBjaGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgx
MDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQt
PnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkp
KTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExh
eWVyKHJvb3QpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2lu
dCgxNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQ
RUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVx
dWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
Um9vdEFuZENoYW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7
CisgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAg
IHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKHJvb3QpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNj
cm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JB
bmRMaW1pdHMoMiwgMSwgMik7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRo
ZSByb290IHNjcm9sbCBkZWx0YS4KKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Ny
b2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RD
b250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgcm9vdC0+aWQoKSwgSW50U2l6ZShzY3JvbGxEZWx0
YS53aWR0aCgpICogMiwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKiAyKSk7Cit9CisKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGUpCit7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHNjcm9sbFJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDApOworICAgIHNjcm9sbFJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgY2hpbGQtPnNl
dFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY2hpbGQtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNp
emUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNo
aWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwg
MTApKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoc2Nyb2xsUm9vdCk7CisgICAgc2Nyb2xsUm9vdC0+
YWRkQ2hpbGQoY2hpbGQpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxSb290
KTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEVYUEVDVF9FUShtX2hv
c3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDIsIDEsIDIpOwor
CisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBub3QgYXBwbHkgdG8gdGhlIGNoaWxkIHNjcm9sbCBk
ZWx0YS4KKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9z
dEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xs
SW5mby5nZXQoKSwgY2hpbGQtPmlkKCksIHNjcm9sbERlbHRhKTsKK30KKwogY2xhc3MgQmxlbmRT
dGF0ZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1
YmxpYzoKICAgICBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQoKSA6IG1fYmxlbmQoZmFsc2UpIHsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAKaW5kZXggMzZmZDdkYi4uY2U1ODc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC01OCw3ICs1OCw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5
ZXJUcmVlSG9zdEltcGwqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkND
VGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xh
eWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmLCBmbG9hdCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYsIGZs
b2F0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlMYXllclNjcm9sbChpbnQgbGF5ZXJJZCwg
Y29uc3QgSW50U2l6ZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CiB9OwogCkBAIC0xNTUsOSArMTU2LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgbV90ZXN0SG9va3MtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUp
OwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZSkKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlS
b290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQg
c2NhbGUpCiAgICAgewotICAgICAgICBtX3Rlc3RIb29rcy0+YXBwbHlTY3JvbGxBbmRTY2FsZShz
Y3JvbGxEZWx0YSwgc2NhbGUpOworICAgICAgICBtX3Rlc3RIb29rcy0+YXBwbHlSb290TGF5ZXJT
Y3JvbGxBbmRTY2FsZShzY3JvbGxEZWx0YSwgc2NhbGUpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseUxheWVyU2Nyb2xsKGludCBsYXllcklkLCBjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSkKKyAgICB7CisgICAgICAgIG1fdGVzdEhvb2tzLT5hcHBseUxheWVyU2Nyb2xsKGxheWVy
SWQsIHNjcm9sbERlbHRhKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQpAQCAtNzg1LDcgKzc5
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZSkK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgc2NhbGUpCiAgICAgewogICAgICAgICBJbnRQb2ludCBw
b3NpdGlvbiA9IG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7
CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPnNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOwpAQCAtODYyLDcgKzg2OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZSkKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwg
ZmxvYXQgc2NhbGUpCiAgICAgewogICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fbGF5ZXJU
cmVlSG9zdC0+cm9vdExheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+cm9vdExheWVyKCktPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xs
RGVsdGEpOwpAQCAtOTIyLDYgKzkyOCwxNDEgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RT
ZXRWaXNpYmxlLCBydW5NdWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCitjbGFz
cyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RU
ZXN0VGhyZWFkT25seSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisg
ICAgeworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgw
KTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkp
OworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAg
ICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAx
MDApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQ2hpbGQobV9y
b290U2Nyb2xsTGF5ZXIpOworICAgICAgICBtX2NoaWxkTGF5ZXIgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEw
KSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAg
bV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7Cisg
ICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIpOworICAgICAg
ICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgZmxvYXQpCisgICAgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fcm9vdFNj
cm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5TGF5ZXJTY3JvbGwoaW50IGxheWVySWQsIGNvbnN0IEludFNpemUm
IHNjcm9sbERlbHRhKQorICAgIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdCA9IG1fbGF5
ZXJUcmVlSG9zdC0+cm9vdExheWVyKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFwcGx5U2Nyb2xs
VG9DaGlsZExheWVyKHJvb3QsIGxheWVySWQsIHNjcm9sbERlbHRhKSk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBi
b29sIGFwcGx5U2Nyb2xsVG9DaGlsZExheWVyKExheWVyQ2hyb21pdW0qIGxheWVyLCBpbnQgbGF5
ZXJJZCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCisgICAgeworICAgICAgICBpZiAobGF5
ZXItPmlkKCkgPT0gbGF5ZXJJZCkgeworICAgICAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBs
YXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRTY3JvbGxQb3Np
dGlvbihwb3NpdGlvbiArIHNjcm9sbERlbHRhKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBpZiAoYXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIo
bGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCksIGxheWVySWQsIHNjcm9sbERlbHRhKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NoaWxkTGF5ZXI7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOworfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJh
c2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKCkK
KyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAxKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwp
CisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0
aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVO
dW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0
aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRVEo
bV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpICsgbV9zY3JvbGxBbW91
bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xh
eWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVt
YmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoNSwgNSkpKTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1v
dW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgpOworICAgICAgICB9IGVsc2UgaWYg
KGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikgeworICAgICAgICAgICAgZW5kVGVzdCgpOworICAg
ICAgICB9CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50
OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5N
dWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsKK30KKworY2xhc3MgQ0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCA6IHB1YmxpYyBDQ0xheWVy
VHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCgpCisgICAgICAgIDogbV9pbml0aWFsUm9vdFNj
cm9sbFBvc2l0aW9uKDEwLCAxMCkKKyAgICAgICAgLCBtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0
aW9uKDIwLCAwKQorICAgICAgICAsIG1fc2Nyb2xsQW1vdW50KC0yNSwgLTUpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmJlZ2luVGVzdCgpOworICAgICAgICBtX3Jvb3RTY3Jv
bGxMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKTsK
KyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxDaGlsZFNj
cm9sbFBvc2l0aW9uKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkND
VGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAobV9s
YXllclRyZWVIb3N0LT5mcmFtZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIENDTGF5ZXJJ
bXBsKiByb290ID0gaW1wbC0+cm9vdExheWVyKCk7CisgICAgICAgICAgICBDQ0xheWVySW1wbCog
c2Nyb2xsUm9vdCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgICAgICBDQ0xh
eWVySW1wbCogY2hpbGQgPSBzY3JvbGxSb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAg
ICAgICAgRVhQRUNUX0VRKHNjcm9sbFJvb3QtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbFJv
b3RTY3JvbGxQb3NpdGlvbik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Ny
b2xsRGVsdGEoKSwgSW50U2l6ZSgwLCAtNSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxk
LT5zY3JvbGxQb3NpdGlvbigpLCBtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShjaGlsZC0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgtMjAsIDApKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKGltcGwtPmZy
YW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoNSwgNSkpKTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJ5KG1fc2Ny
b2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgpOworICAgICAgICB9IGVs
c2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikgeworICAgICAgICAgICAgZW5kVGVzdCgp
OworICAgICAgICB9CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBJbnRQb2ludCBtX2luaXRp
YWxSb290U2Nyb2xsUG9zaXRpb247CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0aWFsQ2hpbGRT
Y3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50OworfTsKKwor
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQsIHJ1
bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQorCiBjbGFzcyBUZXN0
T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsKIHB1
YmxpYzoKICAgICBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUoQ0NMYXllclRyZWVIb3N0
VGVzdCogdGVzdCkKLS0gCjEuNy4zLjEKCg==
</data>
<flag name="review"
          id="118399"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119032</attachid>
            <date>2011-12-13 10:30:55 -0800</date>
            <delta_ts>2011-12-13 10:45:07 -0800</delta_ts>
            <desc>Chromium patch</desc>
            <filename>0001-chromium-Implement-layer-scrolling-in-the-compositor.patch</filename>
            <type>text/plain</type>
            <size>40607</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">RnJvbSBkYjZiOTU0YTgyNzRhOWIyMDM3YWZiMGZlNDFiZDA1NDU1OTJiMTA1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEt5b3N0aWxhIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+
CkRhdGU6IFRodSwgMSBEZWMgMjAxMSAxNjoxOTo0OCArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIFtj
aHJvbWl1bV0gSW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJl
YWQKClRoaXMgcGF0Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21w
b3NpdG9yIHRocmVhZC4KU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Ny
b2xsZWQgQ0NMYXllckltcGwgYW5kCnN5bmNocm9uaXplZCB0byB0aGUgV2ViVmlld0ltcGwgaW4g
dGhlIG1haW4gdGhyZWFkLgoKSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBn
aXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGlu
c3RlYWQgaWYgcG9zc2libGUuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDQ3ICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwICAgfCAgICAxICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggICAgIHwgICAgOSArKwogLi4uL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCAgfCAgICA2ICstCiAuLi4vcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCAgICB8ICAgMTQgKy0KIC4uLi9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwICAgICAgIHwgICA0MiArKysr
Ky0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCAgIHwg
ICAgMSArCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAg
ICB8ICAxNTIgKysrKysrKysrKysrKysrKy0tLS0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggICAgIHwgICAgMyArCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgICB8ICAgIDEgKwogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgfCAgIDU0ICsrKysrKysKIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwICAgIHwgICAxOCArKysKIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCAgICAgIHwgICAgNCAr
CiAuLi4vY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwICAgICB8ICAg
OTYgKysrKysrKysrKysrLQogLi4uL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcCAgfCAgMTE2ICsrKysrKysrKysrKysrKwogMTUgZmlsZXMgY2hhbmdlZCwgNTEy
IGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZWMxNzg3Li5i
ZDVjNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMTItMDkgIFNhbWkgS3lv
c3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBs
ZW1lbnQgbGF5ZXIgc2Nyb2xsaW5nIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNTAKKworICAgICAgICBU
aGlzIHBhdGNoIGVuYWJsZXMgc2Nyb2xsaW5nIGNoaWxkIGxheWVycyBpbiB0aGUgY29tcG9zaXRv
ciB0aHJlYWQuCisgICAgICAgIFNjcm9sbCBkZWx0YXMgYXJlIGFjY3VtdWxhdGVkIGZvciBlYWNo
IHNjcm9sbGVkIENDTGF5ZXJJbXBsIGFuZAorICAgICAgICBzeW5jaHJvbml6ZWQgdG8gdGhlIFdl
YlZpZXdJbXBsIGluIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBu
byByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVuIGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAg
ICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xsZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6bWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6c2V0TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6aXNJbnNpZGVT
Y3JvbGxhYmxlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzY3JvbGxC
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpwYWdlU2NhbGVEZWx0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRTZW50U2Nyb2xsRGVsdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpmaW5kU2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojph
cHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OndpbmRvd1RvTGF5ZXJDb250
ZW50UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6aXNJbnNp
ZGVTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OmxheWVyQ2FuQmVTY3JvbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpw
aW5jaEdlc3R1cmVCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBs
OjpwaW5jaEdlc3R1cmVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlRW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisKIDIwMTEtMTItMTIgIEtlbm5ldGggUnVz
c2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMDI2NDguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGI0NWUxMjUuLmM3MzNhYTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zOTAsNiArMzkwLDcgQEAgdm9pZCBMYXllckNocm9t
aXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0
UG9zaXRpb24obV9wb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKHByZXNlcnZl
czNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsK
KyAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obV9tYXhTY3JvbGxQb3NpdGlvbik7CiAg
ICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwogICAg
IGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRVcGRhdGVS
ZWN0KG1fdXBkYXRlUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWM3YTRmOC4uMWZmOThm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vZGUu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCkBAIC0xMzIsNiArMTMzLDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7
CiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JvbGxQb3NpdGlvbjsgfQogCisgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX21heFNjcm9sbFBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRNYXhT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikgeyBtX21heFNj
cm9sbFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247IH0KKworICAgIE5vZGUqIHNjcm9sbE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE5vZGUuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNj
cm9sbE5vZGUoUGFzc1JlZlB0cjxOb2RlPiBzY3JvbGxOb2RlKSB7IG1fc2Nyb2xsTm9kZSA9IHNj
cm9sbE5vZGU7IH0KKwogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sKTsKICAgICBib29sIHNj
cm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KIApAQCAtMjU1LDYgKzI2
Miw4IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlz
aWJsZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOworICAgIEludFNp
emUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKKyAgICBSZWZQdHI8Tm9kZT4gbV9zY3JvbGxOb2RlOwog
ICAgIGJvb2wgbV9zY3JvbGxhYmxlOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBG
bG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggYWYw
NDJlNS4uNjdhZDZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTIyLDkgKzEyMiw5
IEBAIHZvaWQgQ0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBDQ0xheWVySW1w
bDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsKQordm9pZCBDQ0xheWVySW1wbDo6c2Ny
b2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpCiB7Ci0gICAgSW50U2l6ZSBuZXdEZWx0YSA9
IG1fc2Nyb2xsRGVsdGEgKyBzY3JvbGw7CisgICAgRmxvYXRTaXplIG5ld0RlbHRhID0gbV9zY3Jv
bGxEZWx0YSArIHNjcm9sbDsKICAgICBJbnRTaXplIG1pbkRlbHRhID0gLXRvU2l6ZShtX3Njcm9s
bFBvc2l0aW9uKTsKICAgICBJbnRTaXplIG1heERlbHRhID0gbV9tYXhTY3JvbGxQb3NpdGlvbiAt
IHRvU2l6ZShtX3Njcm9sbFBvc2l0aW9uKTsKICAgICAvLyBDbGFtcCBuZXdEZWx0YSBzbyB0aGF0
IHBvc2l0aW9uICsgZGVsdGEgc3RheXMgd2l0aGluIHNjcm9sbCBib3VuZHMuCkBAIC00MzQsNyAr
NDM0LDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmIHNjcm9sbFBvc2l0aW9uKQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRy
ZWUoKTsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEpCit2b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxEZWx0YShjb25zdCBG
bG9hdFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIGlmIChtX3Njcm9sbERlbHRhID09IHNjcm9s
bERlbHRhKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBlMmMwMGM4
Li42OWQ2MGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE1NywxNiArMTU3LDE2IEBAIHB1
YmxpYzoKICAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHtyZXR1
cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24o
Y29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhTY3JvbGxQb3NpdGlvbiA9
IG1heFNjcm9sbFBvc2l0aW9uOyB9CiAKLSAgICBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsRGVsdGE7IH0KLSAgICB2b2lkIHNldFNjcm9sbERlbHRh
KGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29u
c3QgRmxvYXRTaXplJik7CiAKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZVNjYWxlRGVsdGE7IH0KICAgICB2b2lkIHNldFBhZ2VTY2FsZURlbHRhKGZsb2F0
KTsKIAotICAgIGNvbnN0IEludFNpemUmIHNlbnRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VudFNjcm9sbERlbHRhOyB9Ci0gICAgdm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEoY29uc3Qg
SW50U2l6ZSYgc2VudFNjcm9sbERlbHRhKSB7IG1fc2VudFNjcm9sbERlbHRhID0gc2VudFNjcm9s
bERlbHRhOyB9CisgICAgY29uc3QgRmxvYXRTaXplJiBzZW50U2Nyb2xsRGVsdGEoKSBjb25zdCB7
IHJldHVybiBtX3NlbnRTY3JvbGxEZWx0YTsgfQorICAgIHZvaWQgc2V0U2VudFNjcm9sbERlbHRh
KGNvbnN0IEZsb2F0U2l6ZSYgc2VudFNjcm9sbERlbHRhKSB7IG1fc2VudFNjcm9sbERlbHRhID0g
c2VudFNjcm9sbERlbHRhOyB9CiAKLSAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNj
cm9sbCk7CisgICAgdm9pZCBzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCk7CiAKICAg
ICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KICAgICB2
b2lkIHNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxhYmxlKSB7IG1fc2Nyb2xsYWJsZSA9IHNjcm9s
bGFibGU7IH0KQEAgLTI1MCw4ICsyNTAsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2RyYXdz
Q29udGVudDsKIAotICAgIEludFNpemUgbV9zY3JvbGxEZWx0YTsKLSAgICBJbnRTaXplIG1fc2Vu
dFNjcm9sbERlbHRhOworICAgIEZsb2F0U2l6ZSBtX3Njcm9sbERlbHRhOworICAgIEZsb2F0U2l6
ZSBtX3NlbnRTY3JvbGxEZWx0YTsKICAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CiAg
ICAgZmxvYXQgbV9wYWdlU2NhbGVEZWx0YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKaW5kZXggMjdkOTU2YS4uM2RlMjhlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgog
I2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaCIKQEAgLTQ0OSwxNSArNDUwLDQyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpj
bGVhclBlbmRpbmdVcGRhdGUoKQogICAgIG1fdXBkYXRlTGlzdC5jbGVhcigpOwogfQogCi12b2lk
IENDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBDQ1Njcm9sbEFuZFNj
YWxlU2V0JiBpbmZvKQorc3RhdGljIExheWVyQ2hyb21pdW0qIGZpbmRMYXllckJ5SWQoTGF5ZXJD
aHJvbWl1bSogbGF5ZXIsIGludCBpZCkKIHsKLSAgICAvLyBGSVhNRTogcHVzaGluZyBzY3JvbGwg
b2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0gICAgaWYgKCFpbmZv
LnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPmlkKCkgPT0gaWQpCisgICAgICAgIHJldHVy
biBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5kTGF5ZXJC
eUlkKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBpZCk7CisgICAgICAgIGlmIChmb3VuZCkK
KyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CiAKLSAgICBBU1NFUlQoaW5mby5zY3Jv
bGxzLnNpemUoKSA9PSAxKTsKLSAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gaW5mby5zY3JvbGxz
WzBdLnNjcm9sbERlbHRhOwotICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKHNjcm9s
bERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRTY2Fs
ZVNldCYgaW5mbykKK3sKKyAgICBpZiAoIWluZm8ucm9vdFNjcm9sbERlbHRhLmlzWmVybygpIHx8
IGluZm8ucGFnZVNjYWxlRGVsdGEgIT0gMSkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xs
QW5kU2NhbGUoaW5mby5yb290U2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmZvLnNjcm9sbHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBmaW5kTGF5ZXJCeUlkKG1fcm9vdExheWVyLmdl
dCgpLCBpbmZvLnNjcm9sbHNbaV0ubGF5ZXJJZCk7CisgICAgICAgIGlmICghbGF5ZXIpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKGxheWVy
LT5zY3JvbGxQb3NpdGlvbigpICsgaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRhKTsKKyAgICAg
ICAgaWYgKCFsYXllci0+c2Nyb2xsTm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBsYXllci0+c2Nyb2xsTm9kZSgpOworICAgICAgICBpZiAoIW5vZGUt
PnJlbmRlcmVyKCkgfHwgIW5vZGUtPnJlbmRlcmVyKCktPmlzQm94KCkgfHwgIWxheWVyLT5zY3Jv
bGxOb2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBS
ZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KG5vZGUtPnJlbmRlcmVyKCkpOworICAg
ICAgICByZW5kZXJCb3gtPnNldFNjcm9sbExlZnQocmVuZGVyQm94LT5zY3JvbGxMZWZ0KCkgKyBp
bmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEud2lkdGgoKSk7CisgICAgICAgIHJlbmRlckJveC0+
c2V0U2Nyb2xsVG9wKHJlbmRlckJveC0+c2Nyb2xsVG9wKCkgKyBpbmZvLnNjcm9sbHNbaV0uc2Ny
b2xsRGVsdGEuaGVpZ2h0KCkpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0
YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDJlMGNiY2YuLjBkMjQ2ZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1Ymxp
YzoKIAogc3RydWN0IENDU2Nyb2xsQW5kU2NhbGVTZXQgewogICAgIFZlY3RvcjxDQ0xheWVyVHJl
ZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8+IHNjcm9sbHM7CisgICAgSW50U2l6ZSByb290
U2Nyb2xsRGVsdGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGE7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGUwY2QzODkuLmM5YWQ1MGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykK
ICAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBJ
bnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3Np
dGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkg
KyBmbG9vcmVkSW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKIAog
ICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRp
bWUoZnJhbWVCZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Ny
b2xsID0gbV9wYWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2lu
VGltZU1zKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0
YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAg
IGlmICghbV9zY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkg
KyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29y
ZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogICAgIHNjcm9s
bFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlVG90YWwgPSBt
X3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2FsZWRDb250ZW50
U2l6ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7
CkBAIC0xOTQsOCArMTk0LDYgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIo
Q0NMYXllckltcGwqIGxheWVyKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5
ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBs
ID0gbGF5ZXI7Ci0KLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhl
IGZpcnN0IHNjcm9sbGFibGUgbGF5ZXIuCiAgICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Ny
b2xsTGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKIH0KIApAQCAtMjYzLDE1ICsyNjEsMTMg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMo
ZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjph
ZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKIHsK
LSAgICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEpCisgICAgaWYgKCFtX3Njcm9sbExheWVySW1w
bCB8fCBwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2Ug
YWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxl
IHNwYWNlLgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBJbnRTaXplIHNj
cm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgICAgIHNj
cm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIC8vIFdlIGFsc28g
bmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGEgZm9yIHRoZSByb290IGxheWVy
IHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2Nh
bGVDaGFuZ2UpOworICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxE
ZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEo
ZmxvYXQgZGVsdGEpCkBAIC0zMTMsOSArMzA5LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5nIGEgdmVydGljYWwgc2Ny
b2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1heFNjcm9sbC5jbGFtcE5l
Z2F0aXZlVG9aZXJvKCk7CiAKKyAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSByb290
IGxheWVyIHNjcm9sbCByYW5nZSwgc2luY2UgdGhlIGNoaWxkCisgICAgLy8gbGF5ZXJzIHVzZSB1
bnNjYWxlZCBzY3JvbGwgY29vcmRpbmF0ZXMuCiAgICAgbV9zY3JvbGxMYXllckltcGwtPnNldE1h
eFNjcm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6IEFsc28g
dXBkYXRlIHN1YmxheWVycy4KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRab29t
QW5pbWF0b3JUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHpvb20pCkBAIC0z
MzYsMjggKzMzMiwxMDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJh
dygpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CiAKLUND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Ny
b2xsQmVnaW4oY29uc3QgSW50UG9pbnQmKQorQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0
YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQ
b2ludChDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2lu
dCkKIHsKLSAgICAvLyBUT0RPOiBDaGVjayBmb3Igc2Nyb2xsYWJsZSBzdWJsYXllcnMuCi0gICAg
aWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCAhbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7CisgICAgaWYgKCFsYXllckltcGwpCisg
ICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgaSsr
KSB7CisgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgc3RhdHVzID0g
YmVnaW5TY3JvbGxpbmdJbm5lcm1vc3RMYXllckF0UG9pbnQobGF5ZXJJbXBsLT5jaGlsZHJlbigp
W2ldLmdldCgpLCB2aWV3cG9ydFBvaW50KTsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCB8fCBzdGF0dXMgPT0gQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbEZhaWxlZCkKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQor
CisgICAgSW50UG9pbnQgY29udGVudFBvaW50KGxheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKS5pbnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworCisgICAgLy8gVGhlIGNv
bnRlbnQgcG9pbnQgZm9yIG5vbi1yb290IGxheWVycyBtdXN0IGJlIHNjYWxlZCB3aXRoIHRoZSBw
YWdlIHNjYWxlLiBOb3RlIHRoYXQgdGhlCisgICAgLy8gcGFnZSBzY2FsZSBkZWx0YSBpcyBhbHJl
YWR5IGVtYmVkZGVkIGluIGVhY2ggbGF5ZXIncyBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtLgorICAg
IGlmIChsYXllckltcGwgIT0gbV9zY3JvbGxMYXllckltcGwpCisgICAgICAgIGNvbnRlbnRQb2lu
dC5zY2FsZShtX3BhZ2VTY2FsZSwgbV9wYWdlU2NhbGUpOworCisgICAgaWYgKGxheWVySW1wbC0+
ZHJhd3NDb250ZW50KCkgJiYgIWxheWVySW1wbC0+dmlzaWJsZUxheWVyUmVjdCgpLmNvbnRhaW5z
KGNvbnRlbnRQb2ludCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsSWdub3JlZDsKIAotICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIGlmIChsYXllcklt
cGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1w
bCA9IGxheWVySW1wbDsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGFydGVkOworICAgIH0KKworICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsSWdub3JlZDsKK30KKworQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2lu
dCkKK3sKKyAgICByZXR1cm4gYmVnaW5TY3JvbGxpbmdJbm5lcm1vc3RMYXllckF0UG9pbnQobV9z
Y3JvbGxMYXllckltcGwuZ2V0KCksIHZpZXdwb3J0UG9pbnQpOworfQorCitzdGF0aWMgYm9vbCBs
YXllckNhbkJlU2Nyb2xsZWQoY29uc3QgQ0NMYXllckltcGwqIGxheWVySW1wbCwgY29uc3QgSW50
U2l6ZSYgZGlyZWN0aW9uKQoreworICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKGxheWVySW1w
bC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29yZWRJbnRQb2ludChsYXllckltcGwtPnNjcm9sbERl
bHRhKCkpKTsKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGRpcmVjdGlvbi53aWR0aCgpIDwgMCAmJiBzY3JvbGxQb3NpdGlv
bi54KCkgPiAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGlyZWN0aW9uLmhlaWdo
dCgpIDwgMCAmJiBzY3JvbGxQb3NpdGlvbi55KCkgPiAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoZGlyZWN0aW9uLndpZHRoKCkgPiAwICYmIHNjcm9sbFBvc2l0aW9uLngoKSA8IGxh
eWVySW1wbC0+bWF4U2Nyb2xsUG9zaXRpb24oKS53aWR0aCgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoZGlyZWN0aW9uLmhlaWdodCgpID4gMCAmJiBzY3JvbGxQb3NpdGlvbi55KCkg
PCBsYXllckltcGwtPm1heFNjcm9sbFBvc2l0aW9uKCkuaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShzY3Jv
bGxEZWx0YSk7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0g
ICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgSW50U2l6ZSBw
ZW5kaW5nRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5nZXQoKTsKKyAgICBkbyB7CisgICAgICAgIGlm
IChsYXllckNhbkJlU2Nyb2xsZWQobGF5ZXJJbXBsLCBwZW5kaW5nRGVsdGEpKSB7CisgICAgICAg
ICAgICBGbG9hdFNpemUgcHJldmlvdXNEZWx0YShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwor
ICAgICAgICAgICAgRmxvYXRTaXplIHNjYWxlZFBlbmRpbmdEZWx0YShwZW5kaW5nRGVsdGEpOwor
ICAgICAgICAgICAgLy8gU2luY2Ugc2Nyb2xsRGVsdGEgaXMgaW4gd2luZG93IGNvb3JkaW5hdGVz
LCBpdCBhbHJlYWR5IGhhcyB0aGUgcGFnZSBzY2FsZSBhcHBsaWVkLgorICAgICAgICAgICAgLy8g
VGhpcyBtYXRjaGVzIHdoYXQgdGhlIHJvb3Qgc2Nyb2xsIGxheWVyIGV4cGVjdHMsIGJ1dCBjaGls
ZCBsYXllcnMgYXJlIHNjcm9sbGVkIHVzaW5nCisgICAgICAgICAgICAvLyB1bnNjYWxlZCBjb250
ZW50IGNvb3JkaW5hdGVzIGluc3RlYWQsIHNvIHdlIGhhdmUgdG8gdW5kbyB0aGUgc2NhbGluZyBm
b3IgdGhlbS4gVGhlCisgICAgICAgICAgICAvLyBwYWdlIHNjYWxlIGRlbHRhIG5lZWRzIHRvIGJl
IHVuYXBwbGllZCB3aXRoIGJvdGggbGF5ZXIgdHlwZXMgc2luY2UgdGhlIHNjcm9sbAorICAgICAg
ICAgICAgLy8gY29vcmRpbmF0ZXMgZG8gbm90IHJlc3BlY3QgaXQuCisgICAgICAgICAgICBpZiAo
bGF5ZXJJbXBsID09IG1fc2Nyb2xsTGF5ZXJJbXBsKSB7CisgICAgICAgICAgICAgICAgc2NhbGVk
UGVuZGluZ0RlbHRhLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKKyAgICAgICAgICAgICAg
ICBsYXllckltcGwtPnNjcm9sbEJ5KHNjYWxlZFBlbmRpbmdEZWx0YSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHNjYWxlZFBlbmRpbmdEZWx0YS5zY2FsZSgxIC8gKG1f
cGFnZVNjYWxlICogbV9wYWdlU2NhbGVEZWx0YSkpOworICAgICAgICAgICAgICAgIGxheWVySW1w
bC0+c2Nyb2xsQnkoc2NhbGVkUGVuZGluZ0RlbHRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIHNjcm9sbCBkZWx0YSB0byB6ZXJvIGlmIHRoZSBsYXll
ciB3YXMgYWJsZSB0byBtb3ZlIGFsb25nIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgICAgIC8vIGF4
aXMuIFRoaXMgaXMgdG8gZW5zdXJlIGl0IGlzIHBvc3NpYmxlIHRvIHNjcm9sbCBleGFjdGx5IHRv
IHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEKKyAgICAgICAgICAgIC8vIHNjcm9sbCBhcmVhIHJl
Z2FyZGxlc3Mgb2YgdGhlIHNjcm9sbCBzdGVwLgorICAgICAgICAgICAgaWYgKHByZXZpb3VzRGVs
dGEud2lkdGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAgICAg
ICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAgICAgICAgICBpZiAocHJldmlv
dXNEZWx0YS5oZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkpCisg
ICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICAgICAgICAgIC8v
IEFsc28gcmVzZXQgdGhlIGRlbHRhIGlmIHRoZSBsYXllciBkaWQgbm90IG1vdmUgYmVjYXVzZSB0
aGUgc2Nyb2xsIGRlbHRhIGdvdCByb3VuZGVkIGRvd24KKyAgICAgICAgICAgIC8vIHRvIHplcm8g
YW5kIHRoZSBsYXllciBzdGlsbCBoYXMgcm9vbSB0byBzY3JvbGwgaW4gdGhlIHJlcXVlc3RlZCBk
aXJlY3Rpb24uIFRoaXMgYXZvaWRzCisgICAgICAgICAgICAvLyBzY3JvbGxpbmcgdGhlIHBhcmVu
dCBsYXllciBmb3Igc2xvdyBzY3JvbGxzIHRoYXQgZG8gbm90IG1vdmUgdGhlIGxheWVyIGF0IGV2
ZXJ5IGl0ZXJhdGlvbi4KKyAgICAgICAgICAgIGlmIChwZW5kaW5nRGVsdGEud2lkdGgoKSAmJiBs
YXllckNhbkJlU2Nyb2xsZWQobGF5ZXJJbXBsLCBJbnRTaXplKHBlbmRpbmdEZWx0YS53aWR0aCgp
LCAwKSkpCisgICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldFdpZHRoKDApOworICAgICAg
ICAgICAgaWYgKHBlbmRpbmdEZWx0YS5oZWlnaHQoKSAmJiBsYXllckNhbkJlU2Nyb2xsZWQobGF5
ZXJJbXBsLCBJbnRTaXplKDAsIHBlbmRpbmdEZWx0YS5oZWlnaHQoKSkpKQorICAgICAgICAgICAg
ICAgIHBlbmRpbmdEZWx0YS5zZXRIZWlnaHQoMCk7CisgICAgICAgIH0KKyAgICAgICAgZG8KKyAg
ICAgICAgICAgIGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxl
IChsYXllckltcGwgJiYgIWxheWVyQ2FuQmVTY3JvbGxlZChsYXllckltcGwsIHBlbmRpbmdEZWx0
YSkpOworICAgIH0gd2hpbGUgKGxheWVySW1wbCAmJiBsYXllckNhbkJlU2Nyb2xsZWQobGF5ZXJJ
bXBsLCBwZW5kaW5nRGVsdGEpKTsKKworICAgIGlmIChwZW5kaW5nRGVsdGEgIT0gc2Nyb2xsRGVs
dGEpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Cisg
ICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIH0KIH0K
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxFbmQoKQogeworICAgIG1fY3VycmVu
dGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0
SW1wbDo6aGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpCkBAIC00MDAsMTAgKzQ3NywzMSBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCgpCiAgICAgbV9jbGllbnQtPnNl
dE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiB9CiAKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1w
bDo6Y29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBD
Q0xheWVySW1wbCogbGF5ZXJJbXBsKSBjb25zdAoreworICAgIGlmICghbGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSB0b1Np
emUoZmxvb3JlZEludFBvaW50KGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOworICAgICAgICBp
ZiAobGF5ZXJJbXBsID09IG1fc2Nyb2xsTGF5ZXJJbXBsKSB7CisgICAgICAgICAgICBzY3JvbGxJ
bmZvLT5yb290U2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7
CisgICAgICAgICAgICBzY3JvbGwubGF5ZXJJZCA9IGxheWVySW1wbC0+aWQoKTsKKyAgICAgICAg
ICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNjcm9sbERlbHRhOworICAgICAgICAgICAgc2Nyb2xs
SW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKKyAgICAgICAgfQorICAgICAgICBsYXllcklt
cGwtPnNldFNlbnRTY3JvbGxEZWx0YShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIH0K
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUo
KTsgKytpKQorICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8sIGxheWVySW1w
bC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisKKyAgICByZXR1cm4gIXNjcm9sbEluZm8tPnJvb3RT
Y3JvbGxEZWx0YS5pc1plcm8oKSB8fCBzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSA+IDA7Cit9
CisKIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6
cHJvY2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+
IHNjcm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBi
b29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7CisgICAg
Ym9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKGNvbGxlY3RTY3JvbGxEZWx0YXMo
c2Nyb2xsSW5mby5nZXQoKSwgbV9zY3JvbGxMYXllckltcGwuZ2V0KCkpIHx8IG1fcGFnZVNjYWxl
RGVsdGEgIT0gMS4wZik7CiAgICAgaWYgKCFkaWRNb3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZl
IHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9uKSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRh
ID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSAxOwogICAgICAgICByZXR1cm4gc2Nyb2xs
SW5mby5yZWxlYXNlKCk7CkBAIC00MTEsMTQgKzUwOSw2IEBAIFBhc3NPd25QdHI8Q0NTY3JvbGxB
bmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiAK
ICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0g
bV9wYWdlU2NhbGVEZWx0YTsKIAotICAgIC8vIEZJWE1FOiB0cmFjayBzY3JvbGxzIGZyb20gbGF5
ZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9s
bFVwZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllcklt
cGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNj
cm9sbERlbHRhKCk7Ci0gICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLQot
ICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERl
bHRhKTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDg4N2M3ZTYuLjhmZTU5MGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEyOCwxMCArMTI4LDEzIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwogICAgIHZv
aWQgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCk7CiAgICAgdm9pZCB1cGRh
dGVNYXhTY3JvbGxQb3NpdGlvbigpOworICAgIFNjcm9sbFN0YXR1cyBiZWdpblNjcm9sbGluZ0lu
bmVybW9zdExheWVyQXRQb2ludChDQ0xheWVySW1wbCosIGNvbnN0IEludFBvaW50Jik7CisgICAg
Ym9vbCBjb2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8s
IENDTGF5ZXJJbXBsKiBsYXllckltcGwpIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9y
b290TGF5ZXJJbXBsOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9zY3JvbGxMYXllckltcGw7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsK
ICAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsK
ICAgICBib29sIG1fdmlzaWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAKaW5kZXggNzJiZWMyYS4uYTZjYTZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHAKQEAgLTE2NSw2ICsxNjUsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6
OmRvQ29tbWl0KCkKICAgICAgICAgLy8gSW4gdGhlIHNpbmdsZS10aHJlYWRlZCBjYXNlLCB0aGUg
c2Nyb2xsIGRlbHRhcyBzaG91bGQgbmV2ZXIgYmUKICAgICAgICAgLy8gdG91Y2hlZCBvbiB0aGUg
aW1wbCBsYXllciB0cmVlLgogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Ny
b2xsSW5mbyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAg
ICAgICAgQVNTRVJUKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSk7CiAgICAg
ICAgIEFTU0VSVCghc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCkpOwogI2VuZGlmCiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwLi44ZDY4M2QzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDExLTEyLTA5ICBTYW1pIEt5b3N0
aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAgICAgVGhp
cyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3Ig
dGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBz
Y3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBXZWJW
aWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBoYXMgbm8g
cm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAgICAgICAg
YW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZv
cm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6YWRkT3JVcGRhdGVT
Y3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnJlbW92
ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgorICAg
ICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVZpZXdJbXBsOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAg
ICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphZGRPclVwZGF0ZVNjcm9s
bGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVNjcm9sbGlu
Z0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRT
Y2FsZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvQ0NM
YXllckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRl
c3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVF9G
KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdU
Rjo6VGVzdEhvb2tzOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdU
Rjo6VGVzdEhvb2tzOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVy
VHJlZUhvc3RDbGllbnQ6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAo
V1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGU6OmFwcGx5Um9vdExheWVyU2Ny
b2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVs
dGlwbGVSZWRyYXc6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5k
U2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBw
bHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxC
YXNlOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xs
QmFzZTo6YXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
cjo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdU
Rjo6VEVTVF9GKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXJCZXlvbmRMaW1pdDo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlv
bmRMaW1pdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyQmV5b25kTGltaXQ6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25k
TGltaXQ6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKwogMjAxMS0xMi0xMiAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBXZWJLaXQgY29kZSBzaG91bGRuJ3QgYmUg
Y2FsbGluZyBhcHBseUNvbW1hbmQgZGlyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggZGZhOGIyNC4uMjQ3MjYxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTU5
LDYgKzU5LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJQb3B1
cENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNocm9taXVtLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3Jp
cHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51Q2hyb21pdW0uaCIKQEAg
LTg0NCw2ICs4NDUsMjMgQEAgYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpwYWludEN1c3RvbU92ZXJo
YW5nQXJlYShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXll
cihOb2RlKiBub2RlLCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXll
ciogY29udGVudHNMYXllciwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsU2l6ZSkKK3sKKyAgICBpZiAo
IW5vZGUtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZW5kZXJC
b3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KG5vZGUtPnJlbmRlcmVyKCkpOworICAgIGNvbnRl
bnRzTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY29udGVudHNMYXllci0+c2V0U2Ny
b2xsUG9zaXRpb24oSW50UG9pbnQobm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+
c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpKTsKKyAgICBjb250ZW50c0xheWVyLT5zZXRNYXhTY3Jv
bGxQb3NpdGlvbihJbnRTaXplKHNjcm9sbFNpemUud2lkdGgoKSAtIHJlbmRlckJveC0+Y2xpZW50
V2lkdGgoKSwgc2Nyb2xsU2l6ZS5oZWlnaHQoKSAtIHJlbmRlckJveC0+Y2xpZW50SGVpZ2h0KCkp
KTsKKyAgICBjb250ZW50c0xheWVyLT5zZXRTY3JvbGxOb2RlKG5vZGUpOworfQorCit2b2lkIENo
cm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKE5vZGUqIG5vZGUsIFBsYXRmb3Jt
TGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyKQorewor
ICAgIGNvbnRlbnRzTGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIGNvbnRlbnRzTGF5
ZXItPnNldFNjcm9sbE5vZGUoMCk7Cit9CisKIC8vIEZJWE1FOiBSZW1vdmUgQ2hyb21lQ2xpZW50
SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lIGFuZCBDaHJvbWVDbGll
bnRJbXBsOjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUKIC8vIG9u
Y2UgYWxsIHBvcnRzIGhhdmUgbW92ZWQgdG8gY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIChzZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzczICkuCiAvLyBGb3Ig
Y2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uLCB0aGVzZSBtZXRob2RzIGFyZSBub3cgaW1wbGVtZW50
ZWQgYXMgV2ViR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uIGFuZCBXZWJHZW9s
b2NhdGlvbkNsaWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggOWZhOTJlZi4uMGQzZjNiNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApAQCAt
MzMsNiArMzMsNyBAQAogI2RlZmluZSBDaHJvbWVDbGllbnRJbXBsX2gKIAogI2luY2x1ZGUgIkNo
cm9tZUNsaWVudENocm9taXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1
ZGUgIlBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogCkBAIC00MCw2
ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7
CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBOb2RlOwogY2xhc3Mg
UG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBSZW5kZXJCb3g7
CkBAIC0xMzIsNiArMTM0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4
QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZWFj
aGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiwg
aW50NjRfdCB0b3RhbFNwYWNlTmVlZGVkKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21P
dmVyaGFuZ0FyZWEoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoV2ViQ29yZTo6Tm9k
ZSosIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBXZWJDb3JlOjpQbGF0
Zm9ybUxheWVyKiBjb250ZW50c0xheWVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxT
aXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoV2ViQ29yZTo6Tm9k
ZSosIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBXZWJDb3JlOjpQbGF0
Zm9ybUxheWVyKiBjb250ZW50c0xheWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9j
YXRpb24qKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBlODM1YWI3Li5mY2I3
Mjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMTI1LDE2ICsxMjUsMTYgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YVJlcGVhdGVkU2Nyb2xscykKICAgICBPd25Q
dHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbzsKIAogICAgIHNjcm9sbEluZm8gPSBt
X2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgQVNTRVJUX0VRKHNjcm9sbElu
Zm8tPnNjcm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9s
bHMuc2l6ZSgpLCAwdSk7CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNlbnRTY3JvbGxEZWx0YSgpLCBz
Y3JvbGxEZWx0YSk7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHJvb3Qt
PmlkKCksIHNjcm9sbERlbHRhKTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9s
bERlbHRhLCBzY3JvbGxEZWx0YSk7CiAKICAgICBJbnRTaXplIHNjcm9sbERlbHRhMigtNSwgMjcp
OwogICAgIHJvb3QtPnNjcm9sbEJ5KHNjcm9sbERlbHRhMik7CiAgICAgc2Nyb2xsSW5mbyA9IG1f
aG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBBU1NFUlRfRVEoc2Nyb2xsSW5m
by0+c2Nyb2xscy5zaXplKCksIDF1KTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xs
cy5zaXplKCksIDB1KTsKICAgICBFWFBFQ1RfRVEocm9vdC0+c2VudFNjcm9sbERlbHRhKCksIHNj
cm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKLSAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5m
by5nZXQoKSwgcm9vdC0+aWQoKSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOworICAgIEFT
U0VSVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIHNjcm9sbERlbHRhICsgc2Nyb2xs
RGVsdGEyKTsKIAogICAgIHJvb3QtPnNjcm9sbEJ5KEludFNpemUoKSk7CiAgICAgc2Nyb2xsSW5m
byA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKQEAgLTE1NSw2ICsxNTUsOTQg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21taXRB
bmRSZWRyYXcpCiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKIH0KIAorVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKK3sKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJv
b3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihy
b290KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwg
MCkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZB
TFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENv
bW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRD
YWxsc0NvbW1pdEFuZFJlZHJhdykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwor
ICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQ
b3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0
cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCks
IEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOworICAg
IG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdFJl
ZHJhdyk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNDaGlsZCkKK3sKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3Qt
PnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOwor
ICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAg
Y2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVy
UmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFk
ZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCA1KSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRS
ZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30K
KworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFn
ZVNjYWxlKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICByb290LT5zZXRN
YXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgcm9vdC0+c2V0RHJhd3ND
b250ZW50KHRydWUpOworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
cm9vdCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEo
bV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVs
dGEpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygyLCAxLCAy
KTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3Qgc2Nyb2xsIGRl
bHRhLgorICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0
SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5y
b290U2Nyb2xsRGVsdGEsIEludFNpemUoc2Nyb2xsRGVsdGEud2lkdGgoKSAqIDIsIHNjcm9sbERl
bHRhLmhlaWdodCgpICogMikpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHNjcm9sbENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBzY3JvbGxSb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBzY3JvbGxSb290LT5z
ZXRTY3JvbGxhYmxlKHRydWUpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDApOworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAg
IGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hp
bGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVj
dChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENo
aWxkKHNjcm9sbFJvb3QpOworICAgIHNjcm9sbFJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBt
X2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsUm9vdCk7CisKKyAgICBJbnRTaXplIHNjcm9s
bERlbHRhKDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAg
bV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNldFBh
Z2VTY2FsZUZhY3RvckFuZExpbWl0cygyLCAxLCAyKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91
bGQgbm90IGFwcGx5IHRvIHRoZSBjaGlsZCBzY3JvbGwgZGVsdGEuCisgICAgT3duUHRyPENDU2Ny
b2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVs
dGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgp
LCBzY3JvbGxEZWx0YSk7Cit9CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDogcHVi
bGljIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRTdGF0ZVRy
YWNrZXJDb250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDM2ZmQ3ZGIu
LjM0NzU1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtOTIyLDYgKzkyMiwxMjIgQEAgVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdFRlc3RTZXRWaXNpYmxlLCBydW5NdWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUp
OwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSA6IHB1YmxpYyBDQ0xh
eWVyVHJlZUhvc3RUZXN0VGhyZWFkT25seSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGJl
Z2luVGVzdCgpCisgICAgeworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllciA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5kcyhJbnRT
aXplKDEwLCAxMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKElu
dFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+
YWRkQ2hpbGQobV9yb290U2Nyb2xsTGF5ZXIpOworICAgICAgICBtX2NoaWxkTGF5ZXIgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEw
MCwgMTAwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5
ZXIpOworICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3Jv
bGxEZWx0YSwgZmxvYXQpCisgICAgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fcm9v
dFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXll
ci0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK3Byb3RlY3RlZDoKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9jaGlsZExheWVyOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBtX3Jvb3RTY3JvbGxMYXllcjsKK307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNl
IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcigpCisg
ICAgICAgIDogbV9zY3JvbGxBbW91bnQoMiwgMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQor
ICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlv
bigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVt
YmVyKCkpCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlv
bigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKG1f
Y2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSArIG1fc2Nyb2xsQW1vdW50
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXll
clRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJl
cigpID09IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGltcGwtPnNjcm9sbEJlZ2luKElu
dFBvaW50KDUsIDUpKSk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3Vu
dCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChp
bXBsLT5mcmFtZU51bWJlcigpID09IDIpIHsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAg
ICAgfQorICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsK
K307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciwgcnVuTXVs
dGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7Cit9CisKK2NsYXNzIENDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQgOiBwdWJsaWMgQ0NMYXllclRy
ZWVIb3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQoKQorICAgICAgICA6IG1faW5pdGlhbFJvb3RTY3Jv
bGxQb3NpdGlvbigxMCwgMTApCisgICAgICAgICwgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlv
bigyMCwgMCkKKyAgICAgICAgLCBtX3Njcm9sbEFtb3VudCgtMjUsIC01KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxCYXNlOjpiZWdpblRlc3QoKTsKKyAgICAgICAgbV9yb290U2Nyb2xs
TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7Cisg
ICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9pbml0aWFsQ2hpbGRTY3Jv
bGxQb3NpdGlvbik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1Ro
cmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGF5
ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBDQ0xheWVySW1w
bCogcm9vdCA9IGltcGwtPnJvb3RMYXllcigpOworICAgICAgICAgICAgQ0NMYXllckltcGwqIHNj
cm9sbFJvb3QgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICAgICAgQ0NMYXll
ckltcGwqIGNoaWxkID0gc2Nyb2xsUm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShzY3JvbGxSb290LT5zY3JvbGxQb3NpdGlvbigpLCBtX2luaXRpYWxSb290
U2Nyb2xsUG9zaXRpb24pOworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9sbFJvb3QtPnNjcm9s
bERlbHRhKCksIEludFNpemUoMCwgLTUpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGlsZC0+
c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoY2hpbGQtPnNjcm9sbERlbHRhKCksIEludFNpemUoLTIwLCAwKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFt
ZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGltcGwtPnNjcm9sbEJl
Z2luKEludFBvaW50KDUsIDUpKSk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9s
bEFtb3VudCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNl
IGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDIpIHsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsK
KyAgICAgICAgfQorICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0aWFs
Um9vdFNjcm9sbFBvc2l0aW9uOworICAgIGNvbnN0IEludFBvaW50IG1faW5pdGlhbENoaWxkU2Ny
b2xsUG9zaXRpb247CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisKK1RF
U1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0LCBydW5N
dWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsKK30KKwogY2xhc3MgVGVzdE9w
YWNpdHlDaGFuZ2VMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CiBwdWJs
aWM6CiAgICAgVGVzdE9wYWNpdHlDaGFuZ2VMYXllckRlbGVnYXRlKENDTGF5ZXJUcmVlSG9zdFRl
c3QqIHRlc3QpCi0tIAoxLjcuMy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119036</attachid>
            <date>2011-12-13 10:45:07 -0800</date>
            <delta_ts>2011-12-13 11:29:26 -0800</delta_ts>
            <desc>Chromium patch</desc>
            <filename>0001-chromium-Implement-layer-scrolling-in-the-compositor.patch</filename>
            <type>text/plain</type>
            <size>40417</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">RnJvbSAzOTVhZjgxMmQyODllMjFkZGI5OTYxMzcxYTBkMzcwMTc1NTEyNzU2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEt5b3N0aWxhIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+
CkRhdGU6IFRodSwgMSBEZWMgMjAxMSAxNjoxOTo0OCArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIFtj
aHJvbWl1bV0gSW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJl
YWQKClRoaXMgcGF0Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21w
b3NpdG9yIHRocmVhZC4KU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Ny
b2xsZWQgQ0NMYXllckltcGwgYW5kCnN5bmNocm9uaXplZCB0byB0aGUgV2ViVmlld0ltcGwgaW4g
dGhlIG1haW4gdGhyZWFkLgoKSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBn
aXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGlu
c3RlYWQgaWYgcG9zc2libGUuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDQ3ICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwICAgfCAgICAxICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggICAgIHwgICAgOSArKwogLi4uL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCAgfCAgICA2ICstCiAuLi4vcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCAgICB8ICAgMTQgKy0KIC4uLi9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwICAgICAgIHwgICA0MiArKysr
Ky0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCAgIHwg
ICAgMSArCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAg
ICB8ICAxNDkgKysrKysrKysrKysrKysrKy0tLS0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggICAgIHwgICAgMyArCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgICB8ICAgIDEgKwogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgfCAgIDU0ICsrKysrKysKIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwICAgIHwgICAxOCArKysKIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCAgICAgIHwgICAgNCAr
CiAuLi4vY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwICAgICB8ICAg
OTYgKysrKysrKysrKysrLQogLi4uL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcCAgfCAgMTE1ICsrKysrKysrKysrKysrKwogMTUgZmlsZXMgY2hhbmdlZCwgNTA4
IGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZWMxNzg3Li5i
ZDVjNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMTItMDkgIFNhbWkgS3lv
c3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBs
ZW1lbnQgbGF5ZXIgc2Nyb2xsaW5nIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNTAKKworICAgICAgICBU
aGlzIHBhdGNoIGVuYWJsZXMgc2Nyb2xsaW5nIGNoaWxkIGxheWVycyBpbiB0aGUgY29tcG9zaXRv
ciB0aHJlYWQuCisgICAgICAgIFNjcm9sbCBkZWx0YXMgYXJlIGFjY3VtdWxhdGVkIGZvciBlYWNo
IHNjcm9sbGVkIENDTGF5ZXJJbXBsIGFuZAorICAgICAgICBzeW5jaHJvbml6ZWQgdG8gdGhlIFdl
YlZpZXdJbXBsIGluIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBu
byByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVuIGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAg
ICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xsZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6bWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6c2V0TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6aXNJbnNpZGVT
Y3JvbGxhYmxlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzY3JvbGxC
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpwYWdlU2NhbGVEZWx0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRTZW50U2Nyb2xsRGVsdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpmaW5kU2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojph
cHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OndpbmRvd1RvTGF5ZXJDb250
ZW50UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6aXNJbnNp
ZGVTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OmxheWVyQ2FuQmVTY3JvbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpw
aW5jaEdlc3R1cmVCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBs
OjpwaW5jaEdlc3R1cmVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlRW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisKIDIwMTEtMTItMTIgIEtlbm5ldGggUnVz
c2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMDI2NDguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGI0NWUxMjUuLmM3MzNhYTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zOTAsNiArMzkwLDcgQEAgdm9pZCBMYXllckNocm9t
aXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0
UG9zaXRpb24obV9wb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKHByZXNlcnZl
czNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsK
KyAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obV9tYXhTY3JvbGxQb3NpdGlvbik7CiAg
ICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwogICAg
IGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRVcGRhdGVS
ZWN0KG1fdXBkYXRlUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWM3YTRmOC4uMWZmOThm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vZGUu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCkBAIC0xMzIsNiArMTMzLDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7
CiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JvbGxQb3NpdGlvbjsgfQogCisgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX21heFNjcm9sbFBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRNYXhT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikgeyBtX21heFNj
cm9sbFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247IH0KKworICAgIE5vZGUqIHNjcm9sbE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE5vZGUuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNj
cm9sbE5vZGUoUGFzc1JlZlB0cjxOb2RlPiBzY3JvbGxOb2RlKSB7IG1fc2Nyb2xsTm9kZSA9IHNj
cm9sbE5vZGU7IH0KKwogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sKTsKICAgICBib29sIHNj
cm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KIApAQCAtMjU1LDYgKzI2
Miw4IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlz
aWJsZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOworICAgIEludFNp
emUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKKyAgICBSZWZQdHI8Tm9kZT4gbV9zY3JvbGxOb2RlOwog
ICAgIGJvb2wgbV9zY3JvbGxhYmxlOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBG
bG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggYWYw
NDJlNS4uNjdhZDZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTIyLDkgKzEyMiw5
IEBAIHZvaWQgQ0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBDQ0xheWVySW1w
bDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsKQordm9pZCBDQ0xheWVySW1wbDo6c2Ny
b2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpCiB7Ci0gICAgSW50U2l6ZSBuZXdEZWx0YSA9
IG1fc2Nyb2xsRGVsdGEgKyBzY3JvbGw7CisgICAgRmxvYXRTaXplIG5ld0RlbHRhID0gbV9zY3Jv
bGxEZWx0YSArIHNjcm9sbDsKICAgICBJbnRTaXplIG1pbkRlbHRhID0gLXRvU2l6ZShtX3Njcm9s
bFBvc2l0aW9uKTsKICAgICBJbnRTaXplIG1heERlbHRhID0gbV9tYXhTY3JvbGxQb3NpdGlvbiAt
IHRvU2l6ZShtX3Njcm9sbFBvc2l0aW9uKTsKICAgICAvLyBDbGFtcCBuZXdEZWx0YSBzbyB0aGF0
IHBvc2l0aW9uICsgZGVsdGEgc3RheXMgd2l0aGluIHNjcm9sbCBib3VuZHMuCkBAIC00MzQsNyAr
NDM0LDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmIHNjcm9sbFBvc2l0aW9uKQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRy
ZWUoKTsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEpCit2b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxEZWx0YShjb25zdCBG
bG9hdFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIGlmIChtX3Njcm9sbERlbHRhID09IHNjcm9s
bERlbHRhKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBlMmMwMGM4
Li42OWQ2MGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE1NywxNiArMTU3LDE2IEBAIHB1
YmxpYzoKICAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHtyZXR1
cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24o
Y29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhTY3JvbGxQb3NpdGlvbiA9
IG1heFNjcm9sbFBvc2l0aW9uOyB9CiAKLSAgICBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsRGVsdGE7IH0KLSAgICB2b2lkIHNldFNjcm9sbERlbHRh
KGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29u
c3QgRmxvYXRTaXplJik7CiAKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZVNjYWxlRGVsdGE7IH0KICAgICB2b2lkIHNldFBhZ2VTY2FsZURlbHRhKGZsb2F0
KTsKIAotICAgIGNvbnN0IEludFNpemUmIHNlbnRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VudFNjcm9sbERlbHRhOyB9Ci0gICAgdm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEoY29uc3Qg
SW50U2l6ZSYgc2VudFNjcm9sbERlbHRhKSB7IG1fc2VudFNjcm9sbERlbHRhID0gc2VudFNjcm9s
bERlbHRhOyB9CisgICAgY29uc3QgRmxvYXRTaXplJiBzZW50U2Nyb2xsRGVsdGEoKSBjb25zdCB7
IHJldHVybiBtX3NlbnRTY3JvbGxEZWx0YTsgfQorICAgIHZvaWQgc2V0U2VudFNjcm9sbERlbHRh
KGNvbnN0IEZsb2F0U2l6ZSYgc2VudFNjcm9sbERlbHRhKSB7IG1fc2VudFNjcm9sbERlbHRhID0g
c2VudFNjcm9sbERlbHRhOyB9CiAKLSAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNj
cm9sbCk7CisgICAgdm9pZCBzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCk7CiAKICAg
ICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KICAgICB2
b2lkIHNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxhYmxlKSB7IG1fc2Nyb2xsYWJsZSA9IHNjcm9s
bGFibGU7IH0KQEAgLTI1MCw4ICsyNTAsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2RyYXdz
Q29udGVudDsKIAotICAgIEludFNpemUgbV9zY3JvbGxEZWx0YTsKLSAgICBJbnRTaXplIG1fc2Vu
dFNjcm9sbERlbHRhOworICAgIEZsb2F0U2l6ZSBtX3Njcm9sbERlbHRhOworICAgIEZsb2F0U2l6
ZSBtX3NlbnRTY3JvbGxEZWx0YTsKICAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CiAg
ICAgZmxvYXQgbV9wYWdlU2NhbGVEZWx0YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKaW5kZXggMjdkOTU2YS4uM2RlMjhlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgog
I2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaCIKQEAgLTQ0OSwxNSArNDUwLDQyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpj
bGVhclBlbmRpbmdVcGRhdGUoKQogICAgIG1fdXBkYXRlTGlzdC5jbGVhcigpOwogfQogCi12b2lk
IENDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBDQ1Njcm9sbEFuZFNj
YWxlU2V0JiBpbmZvKQorc3RhdGljIExheWVyQ2hyb21pdW0qIGZpbmRMYXllckJ5SWQoTGF5ZXJD
aHJvbWl1bSogbGF5ZXIsIGludCBpZCkKIHsKLSAgICAvLyBGSVhNRTogcHVzaGluZyBzY3JvbGwg
b2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0gICAgaWYgKCFpbmZv
LnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPmlkKCkgPT0gaWQpCisgICAgICAgIHJldHVy
biBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5kTGF5ZXJC
eUlkKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBpZCk7CisgICAgICAgIGlmIChmb3VuZCkK
KyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CiAKLSAgICBBU1NFUlQoaW5mby5zY3Jv
bGxzLnNpemUoKSA9PSAxKTsKLSAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gaW5mby5zY3JvbGxz
WzBdLnNjcm9sbERlbHRhOwotICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKHNjcm9s
bERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRTY2Fs
ZVNldCYgaW5mbykKK3sKKyAgICBpZiAoIWluZm8ucm9vdFNjcm9sbERlbHRhLmlzWmVybygpIHx8
IGluZm8ucGFnZVNjYWxlRGVsdGEgIT0gMSkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xs
QW5kU2NhbGUoaW5mby5yb290U2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmZvLnNjcm9sbHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBmaW5kTGF5ZXJCeUlkKG1fcm9vdExheWVyLmdl
dCgpLCBpbmZvLnNjcm9sbHNbaV0ubGF5ZXJJZCk7CisgICAgICAgIGlmICghbGF5ZXIpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKGxheWVy
LT5zY3JvbGxQb3NpdGlvbigpICsgaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRhKTsKKyAgICAg
ICAgaWYgKCFsYXllci0+c2Nyb2xsTm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBsYXllci0+c2Nyb2xsTm9kZSgpOworICAgICAgICBpZiAoIW5vZGUt
PnJlbmRlcmVyKCkgfHwgIW5vZGUtPnJlbmRlcmVyKCktPmlzQm94KCkgfHwgIWxheWVyLT5zY3Jv
bGxOb2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBS
ZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KG5vZGUtPnJlbmRlcmVyKCkpOworICAg
ICAgICByZW5kZXJCb3gtPnNldFNjcm9sbExlZnQocmVuZGVyQm94LT5zY3JvbGxMZWZ0KCkgKyBp
bmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEud2lkdGgoKSk7CisgICAgICAgIHJlbmRlckJveC0+
c2V0U2Nyb2xsVG9wKHJlbmRlckJveC0+c2Nyb2xsVG9wKCkgKyBpbmZvLnNjcm9sbHNbaV0uc2Ny
b2xsRGVsdGEuaGVpZ2h0KCkpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0
YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDJlMGNiY2YuLjBkMjQ2ZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1Ymxp
YzoKIAogc3RydWN0IENDU2Nyb2xsQW5kU2NhbGVTZXQgewogICAgIFZlY3RvcjxDQ0xheWVyVHJl
ZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8+IHNjcm9sbHM7CisgICAgSW50U2l6ZSByb290
U2Nyb2xsRGVsdGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGE7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGUwY2QzODkuLmU0MjRlZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykK
ICAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBJ
bnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3Np
dGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkg
KyBmbG9vcmVkSW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKIAog
ICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRp
bWUoZnJhbWVCZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Ny
b2xsID0gbV9wYWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2lu
VGltZU1zKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0
YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAg
IGlmICghbV9zY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkg
KyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29y
ZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogICAgIHNjcm9s
bFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlVG90YWwgPSBt
X3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2FsZWRDb250ZW50
U2l6ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7
CkBAIC0xOTQsOCArMTk0LDYgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIo
Q0NMYXllckltcGwqIGxheWVyKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5
ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBs
ID0gbGF5ZXI7Ci0KLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhl
IGZpcnN0IHNjcm9sbGFibGUgbGF5ZXIuCiAgICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Ny
b2xsTGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKIH0KIApAQCAtMjYzLDE1ICsyNjEsMTMg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMo
ZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjph
ZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKIHsK
LSAgICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEpCisgICAgaWYgKCFtX3Njcm9sbExheWVySW1w
bCB8fCBwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2Ug
YWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxl
IHNwYWNlLgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBJbnRTaXplIHNj
cm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgICAgIHNj
cm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIC8vIFdlIGFsc28g
bmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGEgZm9yIHRoZSByb290IGxheWVy
IHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2Nh
bGVDaGFuZ2UpOworICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxE
ZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEo
ZmxvYXQgZGVsdGEpCkBAIC0zMTMsOSArMzA5LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5nIGEgdmVydGljYWwgc2Ny
b2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1heFNjcm9sbC5jbGFtcE5l
Z2F0aXZlVG9aZXJvKCk7CiAKKyAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSByb290
IGxheWVyIHNjcm9sbCByYW5nZSwgc2luY2UgdGhlIGNoaWxkCisgICAgLy8gbGF5ZXJzIHVzZSB1
bnNjYWxlZCBzY3JvbGwgY29vcmRpbmF0ZXMuCiAgICAgbV9zY3JvbGxMYXllckltcGwtPnNldE1h
eFNjcm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6IEFsc28g
dXBkYXRlIHN1YmxheWVycy4KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRab29t
QW5pbWF0b3JUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHpvb20pCkBAIC0z
MzYsMjggKzMzMiwxMDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJh
dygpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CiAKLUND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Ny
b2xsQmVnaW4oY29uc3QgSW50UG9pbnQmKQorQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0
YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQ
b2ludChDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2lu
dCkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxJZ25vcmVkOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXll
ckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXR1cyBzdGF0dXMgPSBiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVy
QXRQb2ludChsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCksIHZpZXdwb3J0UG9pbnQpOwor
ICAgICAgICBpZiAoc3RhdHVzID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVk
IHx8IHN0YXR1cyA9PSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBJbnRQb2ludCBjb250ZW50UG9pbnQo
bGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2aWV3
cG9ydFBvaW50KSk7CisKKyAgICAvLyBUaGUgY29udGVudCBwb2ludCBmb3Igbm9uLXJvb3QgbGF5
ZXJzIG11c3QgYmUgc2NhbGVkIHdpdGggdGhlIHBhZ2Ugc2NhbGUuIE5vdGUgdGhhdCB0aGUKKyAg
ICAvLyBwYWdlIHNjYWxlIGRlbHRhIGlzIGFscmVhZHkgZW1iZWRkZWQgaW4gZWFjaCBsYXllcidz
IHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0uCisgICAgaWYgKGxheWVySW1wbCAhPSBtX3Njcm9sbExh
eWVySW1wbCkKKyAgICAgICAgY29udGVudFBvaW50LnNjYWxlKG1fcGFnZVNjYWxlLCBtX3BhZ2VT
Y2FsZSk7CisKKyAgICBpZiAobGF5ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSAmJiAhbGF5ZXJJbXBs
LT52aXNpYmxlTGF5ZXJSZWN0KCkuY29udGFpbnMoY29udGVudFBvaW50KSkKKyAgICAgICAgcmV0
dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworCisgICAgaWYgKGxheWVy
SW1wbC0+c2Nyb2xsYWJsZSgpKSB7CisgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJ
bXBsID0gbGF5ZXJJbXBsOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbFN0YXJ0ZWQ7CisgICAgfQorCisgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJZ25vcmVkOworfQorCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBv
aW50KQogewotICAgIC8vIFRPRE86IENoZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAg
ICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJs
ZSgpKQotICAgICAgICByZXR1cm4gU2Nyb2xsSWdub3JlZDsKKyAgICByZXR1cm4gYmVnaW5TY3Jv
bGxpbmdJbm5lcm1vc3RMYXllckF0UG9pbnQobV9zY3JvbGxMYXllckltcGwuZ2V0KCksIHZpZXdw
b3J0UG9pbnQpOworfQogCi0gICAgcmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CitzdGF0aWMgYm9vbCBs
YXllckNhbkJlU2Nyb2xsZWQoY29uc3QgQ0NMYXllckltcGwqIGxheWVySW1wbCwgY29uc3QgSW50
U2l6ZSYgZGlyZWN0aW9uKQoreworICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKGxheWVySW1w
bC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29yZWRJbnRQb2ludChsYXllckltcGwtPnNjcm9sbERl
bHRhKCkpKTsKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGRpcmVjdGlvbi53aWR0aCgpIDwgMCAmJiBzY3JvbGxQb3NpdGlv
bi54KCkgPiAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGlyZWN0aW9uLmhlaWdo
dCgpIDwgMCAmJiBzY3JvbGxQb3NpdGlvbi55KCkgPiAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoZGlyZWN0aW9uLndpZHRoKCkgPiAwICYmIHNjcm9sbFBvc2l0aW9uLngoKSA8IGxh
eWVySW1wbC0+bWF4U2Nyb2xsUG9zaXRpb24oKS53aWR0aCgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoZGlyZWN0aW9uLmhlaWdodCgpID4gMCAmJiBzY3JvbGxQb3NpdGlvbi55KCkg
PCBsYXllckltcGwtPm1heFNjcm9sbFBvc2l0aW9uKCkuaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShzY3Jv
bGxEZWx0YSk7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0g
ICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgSW50U2l6ZSBw
ZW5kaW5nRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5nZXQoKTsKKyAgICB3aGlsZSAobGF5ZXJJbXBs
KSB7CisgICAgICAgIGlmIChsYXllckNhbkJlU2Nyb2xsZWQobGF5ZXJJbXBsLCBwZW5kaW5nRGVs
dGEpKSB7CisgICAgICAgICAgICBGbG9hdFNpemUgcHJldmlvdXNEZWx0YShsYXllckltcGwtPnNj
cm9sbERlbHRhKCkpOworICAgICAgICAgICAgRmxvYXRTaXplIHNjYWxlZFBlbmRpbmdEZWx0YShw
ZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgLy8gU2luY2Ugc2Nyb2xsRGVsdGEgaXMgaW4gd2lu
ZG93IGNvb3JkaW5hdGVzLCBpdCBhbHJlYWR5IGhhcyB0aGUgcGFnZSBzY2FsZSBhcHBsaWVkLgor
ICAgICAgICAgICAgLy8gVGhpcyBtYXRjaGVzIHdoYXQgdGhlIHJvb3Qgc2Nyb2xsIGxheWVyIGV4
cGVjdHMsIGJ1dCBjaGlsZCBsYXllcnMgYXJlIHNjcm9sbGVkIHVzaW5nCisgICAgICAgICAgICAv
LyB1bnNjYWxlZCBjb250ZW50IGNvb3JkaW5hdGVzIGluc3RlYWQsIHNvIHdlIGhhdmUgdG8gdW5k
byB0aGUgc2NhbGluZyBmb3IgdGhlbS4gVGhlCisgICAgICAgICAgICAvLyBwYWdlIHNjYWxlIGRl
bHRhIG5lZWRzIHRvIGJlIHVuYXBwbGllZCB3aXRoIGJvdGggbGF5ZXIgdHlwZXMgc2luY2UgdGhl
IHNjcm9sbAorICAgICAgICAgICAgLy8gY29vcmRpbmF0ZXMgZG8gbm90IHJlc3BlY3QgaXQuCisg
ICAgICAgICAgICBpZiAobGF5ZXJJbXBsID09IG1fc2Nyb2xsTGF5ZXJJbXBsKSB7CisgICAgICAg
ICAgICAgICAgc2NhbGVkUGVuZGluZ0RlbHRhLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsK
KyAgICAgICAgICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHNjYWxlZFBlbmRpbmdEZWx0YSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjYWxlZFBlbmRpbmdEZWx0
YS5zY2FsZSgxIC8gKG1fcGFnZVNjYWxlICogbV9wYWdlU2NhbGVEZWx0YSkpOworICAgICAgICAg
ICAgICAgIGxheWVySW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVuZGluZ0RlbHRhKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIHNjcm9sbCBkZWx0YSB0byB6
ZXJvIGlmIHRoZSBsYXllciB3YXMgYWJsZSB0byBtb3ZlIGFsb25nIHRoZSByZXF1ZXN0ZWQKKyAg
ICAgICAgICAgIC8vIGF4aXMuIFRoaXMgaXMgdG8gZW5zdXJlIGl0IGlzIHBvc3NpYmxlIHRvIHNj
cm9sbCBleGFjdGx5IHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEKKyAgICAgICAgICAgIC8v
IHNjcm9sbCBhcmVhIHJlZ2FyZGxlc3Mgb2YgdGhlIHNjcm9sbCBzdGVwLgorICAgICAgICAgICAg
aWYgKHByZXZpb3VzRGVsdGEud2lkdGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkud2lk
dGgoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAgICAg
ICAgICBpZiAocHJldmlvdXNEZWx0YS5oZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRh
KCkuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsK
KyAgICAgICAgICAgIC8vIEFsc28gcmVzZXQgdGhlIGRlbHRhIGlmIHRoZSBsYXllciBkaWQgbm90
IG1vdmUgYmVjYXVzZSB0aGUgc2Nyb2xsIGRlbHRhIGdvdCByb3VuZGVkIGRvd24KKyAgICAgICAg
ICAgIC8vIHRvIHplcm8gYW5kIHRoZSBsYXllciBzdGlsbCBoYXMgcm9vbSB0byBzY3JvbGwgaW4g
dGhlIHJlcXVlc3RlZCBkaXJlY3Rpb24uIFRoaXMgYXZvaWRzCisgICAgICAgICAgICAvLyBzY3Jv
bGxpbmcgdGhlIHBhcmVudCBsYXllciBmb3Igc2xvdyBzY3JvbGxzIHRoYXQgZG8gbm90IG1vdmUg
dGhlIGxheWVyIGF0IGV2ZXJ5IGl0ZXJhdGlvbi4KKyAgICAgICAgICAgIGlmIChwZW5kaW5nRGVs
dGEud2lkdGgoKSAmJiBsYXllckNhbkJlU2Nyb2xsZWQobGF5ZXJJbXBsLCBJbnRTaXplKHBlbmRp
bmdEZWx0YS53aWR0aCgpLCAwKSkpCisgICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldFdp
ZHRoKDApOworICAgICAgICAgICAgaWYgKHBlbmRpbmdEZWx0YS5oZWlnaHQoKSAmJiBsYXllckNh
bkJlU2Nyb2xsZWQobGF5ZXJJbXBsLCBJbnRTaXplKDAsIHBlbmRpbmdEZWx0YS5oZWlnaHQoKSkp
KQorICAgICAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRIZWlnaHQoMCk7CisgICAgICAgIH0K
KyAgICAgICAgbGF5ZXJJbXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKTsKKyAgICB9CisKKyAgICBp
ZiAocGVuZGluZ0RlbHRhICE9IHNjcm9sbERlbHRhKSB7CisgICAgICAgIG1fY2xpZW50LT5zZXRO
ZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRy
YXdPbkltcGxUaHJlYWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2Nyb2xsRW5kKCkKIHsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigp
OwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmhhdmVXaGVlbEV2ZW50SGFuZGxlcnMo
KQpAQCAtNDAwLDEwICs0NzUsMzAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdl
c3R1cmVFbmQoKQogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwog
fQogCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NTY3Jv
bGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwqIGxheWVySW1wbCkgY29uc3QK
K3sKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgeworICAgICAg
ICBJbnRTaXplIHNjcm9sbERlbHRhID0gdG9TaXplKGZsb29yZWRJbnRQb2ludChsYXllckltcGwt
PnNjcm9sbERlbHRhKCkpKTsKKyAgICAgICAgaWYgKGxheWVySW1wbCAhPSBtX3Njcm9sbExheWVy
SW1wbCkgeworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJ
bmZvIHNjcm9sbDsKKyAgICAgICAgICAgIHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgp
OworICAgICAgICAgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAg
ICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSA9IHNjcm9sbERlbHRhOwor
ICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShsYXllckltcGwtPnNjcm9sbERl
bHRhKCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5j
aGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9s
bEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisKKyAgICByZXR1cm4gIXNj
cm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSB8fCBzY3JvbGxJbmZvLT5zY3JvbGxz
LnNpemUoKSA+IDA7Cit9CisKIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXll
clRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Ny
b2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2Fs
ZVNldCgpKTsKLSAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEg
IT0gMS4wZik7CisgICAgYm9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKGNvbGxl
Y3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mby5nZXQoKSwgbV9zY3JvbGxMYXllckltcGwuZ2V0KCkp
IHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7CiAgICAgaWYgKCFkaWRNb3ZlIHx8IG1fcGlu
Y2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9uKSB7CiAgICAgICAgIG1fc2Vu
dFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSAxOwogICAgICAg
ICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CkBAIC00MTEsMTQgKzUwNiw2IEBAIFBhc3NP
d25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Nj
cm9sbERlbHRhcygpCiAKICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBh
Z2VTY2FsZURlbHRhID0gbV9wYWdlU2NhbGVEZWx0YTsKIAotICAgIC8vIEZJWE1FOiB0cmFjayBz
Y3JvbGxzIGZyb20gbGF5ZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9sbC5sYXllcklkID0g
bV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gbV9zY3Jv
bGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBl
bmQoc2Nyb2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEo
c2Nyb2xsLnNjcm9sbERlbHRhKTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDg4N2M3ZTYuLjJi
NzhkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEyOCwxMCAr
MTI4LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxM
YXllcigpOwogICAgIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCk7
CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOworICAgIFNjcm9sbFN0YXR1cyBi
ZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludChDQ0xheWVySW1wbCosIGNvbnN0IElu
dFBvaW50Jik7CisgICAgYm9vbCBjb2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVT
ZXQqLCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5
ZXJJbXBsOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9zY3JvbGxMYXllckltcGw7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKICAgICBD
Q1NldHRpbmdzIG1fc2V0dGluZ3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBi
b29sIG1fdmlzaWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5k
ZXggNzJiZWMyYS4uYTZjYTZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKQEAgLTE2NSw2ICsxNjUsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29t
bWl0KCkKICAgICAgICAgLy8gSW4gdGhlIHNpbmdsZS10aHJlYWRlZCBjYXNlLCB0aGUgc2Nyb2xs
IGRlbHRhcyBzaG91bGQgbmV2ZXIgYmUKICAgICAgICAgLy8gdG91Y2hlZCBvbiB0aGUgaW1wbCBs
YXllciB0cmVlLgogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5m
byA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICAgICAg
QVNTRVJUKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSk7CiAgICAgICAgIEFT
U0VSVCghc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCkpOwogI2VuZGlmCiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwLi44ZDY4M2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDExLTEyLTA5ICBTYW1pIEt5b3N0aWxhICA8
c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGxh
eWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBXZWJWaWV3SW1w
bCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0
byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0
b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2Vi
TGF5ZXJUcmVlVmlld0NsaWVudC5oOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxp
bmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9s
bGluZ0xheWVyKToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAq
IHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
VHJlZVZpZXdJbXBsOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAq
IHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6
CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllcklt
cGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6VGVz
dEhvb2tzOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6VGVz
dEhvb2tzOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhv
c3RDbGllbnQ6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpN
b2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGU6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5k
U2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVS
ZWRyYXc6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlMYXll
clNjcm9sbCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjph
ZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6
YXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsQ2hpbGRMYXllcjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVn
aW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6VEVT
VF9GKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJC
ZXlvbmRMaW1pdDo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1p
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5
b25kTGltaXQ6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6
OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKwogMjAxMS0xMi0xMiAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBXZWJLaXQgY29kZSBzaG91bGRuJ3QgYmUgY2FsbGlu
ZyBhcHBseUNvbW1hbmQgZGlyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggZGZhOGIyNC4uMjQ3MjYxMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTU5LDYgKzU5
LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJQb3B1cENvbnRh
aW5lci5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51Q2hyb21pdW0uaCIKQEAgLTg0NCw2
ICs4NDUsMjMgQEAgYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpwYWludEN1c3RvbU92ZXJoYW5nQXJl
YShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihOb2Rl
KiBub2RlLCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29u
dGVudHNMYXllciwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsU2l6ZSkKK3sKKyAgICBpZiAoIW5vZGUt
PnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZW5kZXJCb3gqIHJl
bmRlckJveCA9IHRvUmVuZGVyQm94KG5vZGUtPnJlbmRlcmVyKCkpOworICAgIGNvbnRlbnRzTGF5
ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY29udGVudHNMYXllci0+c2V0U2Nyb2xsUG9z
aXRpb24oSW50UG9pbnQobm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xs
ZWRDb250ZW50T2Zmc2V0KCkpKTsKKyAgICBjb250ZW50c0xheWVyLT5zZXRNYXhTY3JvbGxQb3Np
dGlvbihJbnRTaXplKHNjcm9sbFNpemUud2lkdGgoKSAtIHJlbmRlckJveC0+Y2xpZW50V2lkdGgo
KSwgc2Nyb2xsU2l6ZS5oZWlnaHQoKSAtIHJlbmRlckJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKKyAg
ICBjb250ZW50c0xheWVyLT5zZXRTY3JvbGxOb2RlKG5vZGUpOworfQorCit2b2lkIENocm9tZUNs
aWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKE5vZGUqIG5vZGUsIFBsYXRmb3JtTGF5ZXIq
IHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyKQoreworICAgIGNv
bnRlbnRzTGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIGNvbnRlbnRzTGF5ZXItPnNl
dFNjcm9sbE5vZGUoMCk7Cit9CisKIC8vIEZJWE1FOiBSZW1vdmUgQ2hyb21lQ2xpZW50SW1wbDo6
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lIGFuZCBDaHJvbWVDbGllbnRJbXBs
OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUKIC8vIG9uY2UgYWxs
IHBvcnRzIGhhdmUgbW92ZWQgdG8gY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIChzZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzczICkuCiAvLyBGb3IgY2xpZW50
LWJhc2VkIGdlb2xvY2F0aW9uLCB0aGVzZSBtZXRob2RzIGFyZSBub3cgaW1wbGVtZW50ZWQgYXMg
V2ViR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uIGFuZCBXZWJHZW9sb2NhdGlv
bkNsaWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggOWZhOTJlZi4uMGQzZjNiNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApAQCAtMzMsNiAr
MzMsNyBAQAogI2RlZmluZSBDaHJvbWVDbGllbnRJbXBsX2gKIAogI2luY2x1ZGUgIkNocm9tZUNs
aWVudENocm9taXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIlBv
cHVwTWVudS5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogCkBAIC00MCw2ICs0MSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7CiBjbGFz
cyBFbGVtZW50OwogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBOb2RlOwogY2xhc3MgUG9wdXBD
b250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBSZW5kZXJCb3g7CkBAIC0x
MzIsNiArMTM0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2Fj
aGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkQXBw
bGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiwgaW50NjRf
dCB0b3RhbFNwYWNlTmVlZGVkKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21PdmVyaGFu
Z0FyZWEoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoV2ViQ29yZTo6Tm9kZSosIFdl
YkNvcmU6OlBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBXZWJDb3JlOjpQbGF0Zm9ybUxh
eWVyKiBjb250ZW50c0xheWVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxTaXplKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoV2ViQ29yZTo6Tm9kZSosIFdl
YkNvcmU6OlBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBXZWJDb3JlOjpQbGF0Zm9ybUxh
eWVyKiBjb250ZW50c0xheWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9u
UGVybWlzc2lvbkZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24q
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZv
ckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKICAgICB2aXJ0
dWFsIHZvaWQgcnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpGaWxlQ2hvb3Nlcj4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBlODM1YWI3Li5mY2I3Mjg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNwcApAQCAtMTI1LDE2ICsxMjUsMTYgQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YVJlcGVhdGVkU2Nyb2xscykKICAgICBPd25QdHI8Q0NT
Y3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbzsKIAogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJ
bXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNj
cm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6
ZSgpLCAwdSk7CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNlbnRTY3JvbGxEZWx0YSgpLCBzY3JvbGxE
ZWx0YSk7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHJvb3QtPmlkKCks
IHNjcm9sbERlbHRhKTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRh
LCBzY3JvbGxEZWx0YSk7CiAKICAgICBJbnRTaXplIHNjcm9sbERlbHRhMigtNSwgMjcpOwogICAg
IHJvb3QtPnNjcm9sbEJ5KHNjcm9sbERlbHRhMik7CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdElt
cGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Ny
b2xscy5zaXplKCksIDF1KTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXpl
KCksIDB1KTsKICAgICBFWFBFQ1RfRVEocm9vdC0+c2VudFNjcm9sbERlbHRhKCksIHNjcm9sbERl
bHRhICsgc2Nyb2xsRGVsdGEyKTsKLSAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQo
KSwgcm9vdC0+aWQoKSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOworICAgIEFTU0VSVF9F
UShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEy
KTsKIAogICAgIHJvb3QtPnNjcm9sbEJ5KEludFNpemUoKSk7CiAgICAgc2Nyb2xsSW5mbyA9IG1f
aG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKQEAgLTE1NSw2ICsxNTUsOTQgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21taXRBbmRSZWRy
YXcpCiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKIH0KIAorVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKK3sKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNl
dFNjcm9sbGFibGUoZmFsc2UpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsK
KyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCkpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1f
ZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7
Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0Nv
bW1pdEFuZFJlZHJhdykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIGNo
aWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlv
bihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsK
KyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNp
emUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRl
ZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOworICAgIG1faG9z
dEltcGwtPnNjcm9sbEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdFJlZHJhdyk7
CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNDaGlsZCkKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNj
cm9sbGFibGUoZmFsc2UpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDApOworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNo
aWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJ
bnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxk
KGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgRVhQRUNU
X0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCA1KSksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0
UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxl
KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
MCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICByb290LT5zZXRNYXhTY3Jv
bGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50
KHRydWUpOworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7
CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwor
ICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygyLCAxLCAyKTsKKwor
ICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3Qgc2Nyb2xsIGRlbHRhLgor
ICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+
cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Ny
b2xsRGVsdGEsIEludFNpemUoc2Nyb2xsRGVsdGEud2lkdGgoKSAqIDIsIHNjcm9sbERlbHRhLmhl
aWdodCgpICogMikpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9s
bENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBzY3Jv
bGxSb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBzY3JvbGxSb290LT5zZXRTY3Jv
bGxhYmxlKHRydWUpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDApOworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxk
LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRS
ZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxkKHNj
cm9sbFJvb3QpOworICAgIHNjcm9sbFJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsUm9vdCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRh
KDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
NSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2Fs
ZUZhY3RvckFuZExpbWl0cygyLCAxLCAyKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgbm90
IGFwcGx5IHRvIHRoZSBjaGlsZCBzY3JvbGwgZGVsdGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5k
U2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7
CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBzY3Jv
bGxEZWx0YSk7Cit9CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIE1v
Y2tXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJD
b250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDM2ZmQ3ZGIuLjE1ZTEw
YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcApAQCAtOTIyLDYgKzkyMiwxMjEgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dFRlc3RTZXRWaXNpYmxlLCBydW5NdWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQog
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RUZXN0VGhyZWFkT25seSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVz
dCgpCisgICAgeworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllciA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgwKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEw
LCAxMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsK
KyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUo
MTAwLCAxMDApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQ2hp
bGQobV9yb290U2Nyb2xsTGF5ZXIpOworICAgICAgICBtX2NoaWxkTGF5ZXIgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0Qm91bmRzKEludFNpemUo
MTAsIDEwKSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAg
ICAgICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAw
KSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIpOwor
ICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSwgZmxvYXQpCisgICAgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fcm9vdFNjcm9s
bExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0
U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbV9jaGlsZExheWVyOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBtX3Jvb3RTY3JvbGxMYXllcjsKK307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3Jv
bGxDaGlsZExheWVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlIHsKK3B1
YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcigpCisgICAgICAg
IDogbV9zY3JvbGxBbW91bnQoMiwgMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsK
KyAgICAgICAgRVhQRUNUX0VRKG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkp
CisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRM
YXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSArIG1fc2Nyb2xsQW1vdW50KTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09
IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDUsIDUpKSk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7Cisg
ICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5m
cmFtZU51bWJlcigpID09IDIpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorcHJpdmF0
ZToKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50OworfTsKKworVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBy
dW5UZXN0VGhyZWFkZWQoKTsKK30KKworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENo
aWxkTGF5ZXJCZXlvbmRMaW1pdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFz
ZSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlv
bmRMaW1pdCgpCisgICAgICAgIDogbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKDEwLCAxMCkK
KyAgICAgICAgLCBtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uKDIwLCAwKQorICAgICAgICAs
IG1fc2Nyb2xsQW1vdW50KC0yNSwgLTUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJh
c2U6OmJlZ2luVGVzdCgpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsUG9z
aXRpb24obV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgbV9jaGlsZExheWVy
LT5zZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9z
dEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0LT5mcmFtZU51
bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiByb290ID0gaW1wbC0+cm9v
dExheWVyKCk7CisgICAgICAgICAgICBDQ0xheWVySW1wbCogc2Nyb2xsUm9vdCA9IHJvb3QtPmNo
aWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBzY3Jv
bGxSb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9s
bFJvb3QtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgw
LCAtNSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxkLT5zY3JvbGxQb3NpdGlvbigpLCBt
X2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGls
ZC0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgtMjAsIDApKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBs
KiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgewor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkp
KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAg
ICAgIGltcGwtPnNjcm9sbEVuZCgpOworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVt
YmVyKCkgPT0gMikgeworICAgICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICB9CisgICAgfQor
cHJpdmF0ZToKKyAgICBjb25zdCBJbnRQb2ludCBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb247
CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbjsKKyAgICBj
b25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQsIHJ1bk11bHRpVGhyZWFkKQoreworICAg
IHJ1blRlc3RUaHJlYWRlZCgpOworfQorCiBjbGFzcyBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVs
ZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBUZXN0T3BhY2l0
eUNoYW5nZUxheWVyRGVsZWdhdGUoQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKLS0gCjEuNy4z
LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119050</attachid>
            <date>2011-12-13 11:29:37 -0800</date>
            <delta_ts>2011-12-13 12:23:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20111213192935.patch</filename>
            <type>text/plain</type>
            <size>39837</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVjMTc4Nzg3N2U2N2U2
ZjhkODAxY2NjNzYzYmJiMjdhNzE5OGIxYi4uYmQ1YzUxNGFiOWJlY2MyNzg2NmY4Y2Y3N2Q3M2Vj
NTI1MTc2OWQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDExLTEyLTEyICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMTAyNjQ4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwNjMxNzMz
OGE3NTNlYzQ2YmVlMjg4YTliMDFjZWZkYzk5Li44ZDY4M2QzZmM1NDE5ZDk2M2I5MjRlOWQzZDJj
MDEwZGYzNTM4MDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBA
CisyMDExLTEyLTA5ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9z
aXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTczMzUwCisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBs
YXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFy
ZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAg
c3luY2hyb25pemVkIHRvIHRoZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAg
ICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rp
b24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3Rl
YWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oOgorICAg
ICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21l
Q2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkNocm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKiBzcmMv
Q2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseVJvb3RMYXll
clNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6
OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5o
OgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
Lmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseVJvb3RMYXllclNjcm9s
bEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseUxheWVyU2Nyb2xsKToK
KyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFwcGx5Um9vdExheWVyU2Ny
b2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YXBw
bHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxT
aW1wbGU6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRyYXc6OmFwcGx5Um9vdExheWVyU2Nyb2xs
QW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6
YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6
OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNP
bkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6Q0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmJlZ2luVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6
OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKwog
MjAxMS0xMi0xMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBX
ZWJLaXQgY29kZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBhcHBseUNvbW1hbmQgZGlyZWN0bHkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjQ1ZTEyNTk1NzNmOWVkMzU3MWI2MWEwMWU4MzBjNWVk
ZTQ0ZjI4Yi4uYzczM2FhOTc3ODExZjg4ZmEyNDUxYTRiZDEyYzIxOWZjZTdmNjFmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM5MCw2ICszOTAsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06
OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGxheWVyLT5zZXRQb3Np
dGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0Qo
KSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAg
IGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNjcm9sbFBvc2l0aW9uKTsKICAgICBs
YXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7CiAgICAgbGF5
ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFVwZGF0ZVJlY3Qo
bV91cGRhdGVSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA5YzdhNGY4ZjQ3OTI4OWRhMDU5
MTM3Yjc5YmIxNWQ2YmQxN2Q1MWVlLi4xZmY5OGY1NDg0ODQ0YzRmNGI2YWZkMDc2YjFhMjYzYjg0
MDQ3NTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUJp
bmRpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKQEAgLTEzMiw2ICsx
MzMsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKyAgICB2b2lkIHNl
dE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKSB7IG1f
bWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsgfQorCisgICAgTm9kZSogc2Ny
b2xsTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTm9kZS5nZXQoKTsgfQorICAgIHZvaWQg
c2V0U2Nyb2xsTm9kZShQYXNzUmVmUHRyPE5vZGU+IHNjcm9sbE5vZGUpIHsgbV9zY3JvbGxOb2Rl
ID0gc2Nyb2xsTm9kZTsgfQorCiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wpOwogICAgIGJv
b2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogCkBAIC0yNTUs
NiArMjYyLDggQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3Qg
bV92aXNpYmxlTGF5ZXJSZWN0OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisgICAg
SW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOworICAgIFJlZlB0cjxOb2RlPiBtX3Njcm9sbE5v
ZGU7CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwog
ICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRl
eCBhZjA0MmU1NjY5YjQ2MmZiNmMwOWRlNmZjM2Q0Y2Y0YjZkODRlOTJkLi42N2FkNmNhMWViNmEx
ZmI5OWE0NWQ1NWI0NjkwZDA5ZjkyMjZlNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBA
IC0xMjIsOSArMTIyLDkgQEAgdm9pZCBDQ0xheWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12
b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpCit2b2lkIEND
TGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCkKIHsKLSAgICBJbnRT
aXplIG5ld0RlbHRhID0gbV9zY3JvbGxEZWx0YSArIHNjcm9sbDsKKyAgICBGbG9hdFNpemUgbmV3
RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Nyb2xsOwogICAgIEludFNpemUgbWluRGVsdGEgPSAt
dG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIEludFNpemUgbWF4RGVsdGEgPSBtX21heFNj
cm9sbFBvc2l0aW9uIC0gdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIC8vIENsYW1wIG5l
d0RlbHRhIHNvIHRoYXQgcG9zaXRpb24gKyBkZWx0YSBzdGF5cyB3aXRoaW4gc2Nyb2xsIGJvdW5k
cy4KQEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxEZWx0
YShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3ZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9s
bERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgaWYgKG1fc2Nyb2xs
RGVsdGEgPT0gc2Nyb2xsRGVsdGEpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IGUyYzAwYzg2ODk4MmE3NmM2NThjYWU4MzQxMGU4NWJjY2RjZjgwOWYuLjY5ZDYwZGJl
NGM4ZDUyOWQzM2Q5ODBlOGNjN2Q0NDM3OTg3NmUwODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMTU3LDE2ICsxNTcsMTYgQEAgcHVibGljOgogICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9s
bFBvc2l0aW9uKCkgY29uc3Qge3JldHVybiBtX21heFNjcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9p
ZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikg
eyBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247IH0KIAotICAgIGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQot
ICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEZsb2F0
U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbERlbHRhOyB9CisgICAg
dm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBGbG9hdFNpemUmKTsKIAogICAgIGZsb2F0IHBhZ2VT
Y2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVEZWx0YTsgfQogICAgIHZvaWQg
c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwogCi0gICAgY29uc3QgSW50U2l6ZSYgc2VudFNjcm9s
bERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Nyb2xsRGVsdGE7IH0KLSAgICB2b2lkIHNl
dFNlbnRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBzZW50U2Nyb2xsRGVsdGEpIHsgbV9zZW50
U2Nyb2xsRGVsdGEgPSBzZW50U2Nyb2xsRGVsdGE7IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIHNl
bnRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudFNjcm9sbERlbHRhOyB9CisgICAg
dm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJiBzZW50U2Nyb2xsRGVsdGEp
IHsgbV9zZW50U2Nyb2xsRGVsdGEgPSBzZW50U2Nyb2xsRGVsdGE7IH0KIAotICAgIHZvaWQgc2Ny
b2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsKTsKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEZs
b2F0U2l6ZSYgc2Nyb2xsKTsKIAogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsYWJsZTsgfQogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUp
IHsgbV9zY3JvbGxhYmxlID0gc2Nyb2xsYWJsZTsgfQpAQCAtMjUwLDggKzI1MCw4IEBAIHByaXZh
dGU6CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50OwogCi0gICAgSW50U2l6ZSBtX3Njcm9sbERl
bHRhOwotICAgIEludFNpemUgbV9zZW50U2Nyb2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2Ny
b2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2VudFNjcm9sbERlbHRhOwogICAgIEludFNpemUg
bV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBmbG9hdCBtX3BhZ2VTY2FsZURlbHRhOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAyN2Q5NTZhN2M3YWZiZDA5NWRiOTQ1Yjkz
NGExNjZlZmE1NWYzNzRmLi4zZGUyOGVhN2QxZTEwZDFiNzZmMzE5ODRiNjBlMzM2MWU2YmViY2Qz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJC
b3guaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXpl
ci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgpAQCAtNDQ5LDE1ICs0
NTAsNDIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAg
bV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNj
cm9sbEFuZFNjYWxlKGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8pCitzdGF0aWMgTGF5
ZXJDaHJvbWl1bSogZmluZExheWVyQnlJZChMYXllckNocm9taXVtKiBsYXllciwgaW50IGlkKQog
ewotICAgIC8vIEZJWE1FOiBwdXNoaW5nIHNjcm9sbCBvZmZzZXRzIHRvIG5vbi1yb290IGxheWVy
cyBub3QgaW1wbGVtZW50ZWQKLSAgICBpZiAoIWluZm8uc2Nyb2xscy5zaXplKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChs
YXllci0+aWQoKSA9PSBpZCkKKyAgICAgICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBM
YXllckNocm9taXVtKiBmb3VuZCA9IGZpbmRMYXllckJ5SWQobGF5ZXItPmNoaWxkcmVuKClbaV0u
Z2V0KCksIGlkKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5k
OworICAgIH0KIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9j
bGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVs
dGEpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3Jv
bGxBbmRTY2FsZShjb25zdCBDQ1Njcm9sbEFuZFNjYWxlU2V0JiBpbmZvKQoreworICAgIGlmICgh
aW5mby5yb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkgfHwgaW5mby5wYWdlU2NhbGVEZWx0YSAhPSAx
KQorICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShpbmZvLnJvb3RTY3JvbGxE
ZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGluZm8uc2Nyb2xscy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBsYXll
ciA9IGZpbmRMYXllckJ5SWQobV9yb290TGF5ZXIuZ2V0KCksIGluZm8uc2Nyb2xsc1tpXS5sYXll
cklkKTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkgKyBpbmZv
LnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOworICAgICAgICBpZiAoIWxheWVyLT5zY3JvbGxOb2Rl
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGxheWVyLT5z
Y3JvbGxOb2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+cmVu
ZGVyZXIoKS0+aXNCb3goKSB8fCAhbGF5ZXItPnNjcm9sbE5vZGUoKS0+aW5Eb2N1bWVudCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9S
ZW5kZXJCb3gobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgICAgIHJlbmRlckJveC0+c2V0U2Nyb2xs
TGVmdChyZW5kZXJCb3gtPnNjcm9sbExlZnQoKSArIGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0
YS53aWR0aCgpKTsKKyAgICAgICAgcmVuZGVyQm94LT5zZXRTY3JvbGxUb3AocmVuZGVyQm94LT5z
Y3JvbGxUb3AoKSArIGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YS5oZWlnaHQoKSk7CisgICAg
fQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
aW5kZXggMmUwY2JjZjJjNTg1ZTgyMTVkMjg2ZGVlOWI2MWU1MzUxODBjZmZhZC4uMGQyNDZmNTM5
MzUwNTVhNjk1MDQ4NjkxNmFjMzIyN2VjYWQ0NWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogCiBzdHJ1Y3QgQ0NT
Y3JvbGxBbmRTY2FsZVNldCB7CiAgICAgVmVjdG9yPENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Ny
b2xsVXBkYXRlSW5mbz4gc2Nyb2xsczsKKyAgICBJbnRTaXplIHJvb3RTY3JvbGxEZWx0YTsKICAg
ICBmbG9hdCBwYWdlU2NhbGVEZWx0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKaW5kZXggZTBjZDM4OWRjNmY4ZGY5NDA4YTljMDU1MWU0MDZlZmJkMWRmMmIw
ZC4uZTQyNGVlZWI5ODU2MjZjMTQ5ZDhkMjFhN2M1NzhlNzU4MjBjNTUxNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQogICAgIGlm
ICghbV9wYWdlU2NhbGVBbmltYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkg
KyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29y
ZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogCiAgICAgc2V0
UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShmcmFt
ZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBt
X3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMp
OwpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdl
U2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAgaWYgKCFt
X3Njcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0g
dG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgZmxvb3JlZEludFBv
aW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKSk7CiAgICAgc2Nyb2xsVG90YWwu
c2NhbGUobV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVUb3RhbCA9IG1fcGFnZVNj
YWxlICogbV9wYWdlU2NhbGVEZWx0YTsKICAgICBJbnRTaXplIHNjYWxlZENvbnRlbnRTaXplID0g
bV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsKQEAgLTE5
NCw4ICsxOTQsNiBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsKICAgICBtX3Jvb3RMYXllckltcGwgPSBsYXll
cjsKLQotICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHRoaXMgb25seSBmaW5kcyB0aGUgZmlyc3Qg
c2Nyb2xsYWJsZSBsYXllci4KICAgICBtX3Njcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXll
cihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogfQogCkBAIC0yNjMsMTUgKzI2MSwxMyBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhmbG9hdCBw
YWdlU2NhbGUsIGZsb2F0IG1pbgogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFkanVzdFNj
cm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQgcGFnZVNjYWxlQ2hhbmdlKQogewotICAgIGlm
IChwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKKyAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8IHBh
Z2VTY2FsZUNoYW5nZSA9PSAxKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBhbHNvIG5l
ZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2Uu
Ci0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7Ci0gICAgICAgIEludFNpemUgc2Nyb2xsRGVs
dGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKLSAgICAgICAgc2Nyb2xsRGVs
dGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKLSAgICAgICAgbV9zY3JvbGxMYXllckltcGwtPnNl
dFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKLSAgICB9CisgICAgLy8gV2UgYWxzbyBuZWVkIHRv
IGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YSBmb3IgdGhlIHJvb3QgbGF5ZXIgdG8gcGFn
ZVNjYWxlIHNwYWNlLgorICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zY3JvbGxEZWx0YSgpOworICAgIHNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5n
ZSk7CisgICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsK
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCBk
ZWx0YSkKQEAgLTMxMyw5ICszMDksOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0
ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAgICAvLyBoYXZpbmcgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIg
YnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cuCiAgICAgbWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVU
b1plcm8oKTsKIAorICAgIC8vIFdlIG9ubHkgbmVlZCB0byB1cGRhdGUgdGhlIHJvb3QgbGF5ZXIg
c2Nyb2xsIHJhbmdlLCBzaW5jZSB0aGUgY2hpbGQKKyAgICAvLyBsYXllcnMgdXNlIHVuc2NhbGVk
IHNjcm9sbCBjb29yZGluYXRlcy4KICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24obWF4U2Nyb2xsKTsKLQotICAgIC8vIFRPRE8oYWVsaWFzKTogQWxzbyB1cGRhdGUg
c3VibGF5ZXJzLgogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFpvb21BbmltYXRv
clRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgem9vbSkKQEAgLTMzNiwyOCAr
MzMyLDEwNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAotQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdp
bihjb25zdCBJbnRQb2ludCYpCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KEND
TGF5ZXJJbXBsKiBsYXllckltcGwsIGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50KQorewor
ICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbElnbm9yZWQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+
Y2hpbGRyZW4oKS5zaXplKCk7IGkrKykgeworICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsU3RhdHVzIHN0YXR1cyA9IGJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50
KGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgdmlld3BvcnRQb2ludCk7CisgICAgICAg
IGlmIChzdGF0dXMgPT0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQgfHwgc3Rh
dHVzID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIEludFBvaW50IGNvbnRlbnRQb2ludChsYXllcklt
cGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHZpZXdwb3J0UG9p
bnQpKTsKKworICAgIC8vIFRoZSBjb250ZW50IHBvaW50IGZvciBub24tcm9vdCBsYXllcnMgbXVz
dCBiZSBzY2FsZWQgd2l0aCB0aGUgcGFnZSBzY2FsZS4gTm90ZSB0aGF0IHRoZQorICAgIC8vIHBh
Z2Ugc2NhbGUgZGVsdGEgaXMgYWxyZWFkeSBlbWJlZGRlZCBpbiBlYWNoIGxheWVyJ3Mgc2NyZWVu
IHNwYWNlIHRyYW5zZm9ybS4KKyAgICBpZiAobGF5ZXJJbXBsICE9IG1fc2Nyb2xsTGF5ZXJJbXBs
KQorICAgICAgICBjb250ZW50UG9pbnQuc2NhbGUobV9wYWdlU2NhbGUsIG1fcGFnZVNjYWxlKTsK
KworICAgIGlmIChsYXllckltcGwtPmRyYXdzQ29udGVudCgpICYmICFsYXllckltcGwtPnZpc2li
bGVMYXllclJlY3QoKS5jb250YWlucyhjb250ZW50UG9pbnQpKQorICAgICAgICByZXR1cm4gQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisKKyAgICBpZiAobGF5ZXJJbXBsLT5z
Y3JvbGxhYmxlKCkpIHsKKyAgICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSBs
YXllckltcGw7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZDsKKyAgICB9CisKKyAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEln
bm9yZWQ7Cit9CisKK0NDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4oY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpCiB7
Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHNjcm9sbGFibGUgc3VibGF5ZXJzLgotICAgIGlmICgh
bV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCi0g
ICAgICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOworICAgIHJldHVybiBiZWdpblNjcm9sbGluZ0lu
bmVybW9zdExheWVyQXRQb2ludChtX3Njcm9sbExheWVySW1wbC5nZXQoKSwgdmlld3BvcnRQb2lu
dCk7Cit9CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKK3N0YXRpYyBib29sIGxheWVyQ2Fu
QmVTY3JvbGxlZChjb25zdCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRTaXplJiBk
aXJlY3Rpb24pCit7CisgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24obGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpICsgZmxvb3JlZEludFBvaW50KGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkp
OworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoZGlyZWN0aW9uLndpZHRoKCkgPCAwICYmIHNjcm9sbFBvc2l0aW9uLngoKSA+
IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChkaXJlY3Rpb24uaGVpZ2h0KCkgPCAw
ICYmIHNjcm9sbFBvc2l0aW9uLnkoKSA+IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChkaXJlY3Rpb24ud2lkdGgoKSA+IDAgJiYgc2Nyb2xsUG9zaXRpb24ueCgpIDwgbGF5ZXJJbXBs
LT5tYXhTY3JvbGxQb3NpdGlvbigpLndpZHRoKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChkaXJlY3Rpb24uaGVpZ2h0KCkgPiAwICYmIHNjcm9sbFBvc2l0aW9uLnkoKSA8IGxheWVy
SW1wbC0+bWF4U2Nyb2xsUG9zaXRpb24oKS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9s
bEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxM
YXllckltcGwpCisgICAgaWYgKCFtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRh
KTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICBtX2Ns
aWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBJbnRTaXplIHBlbmRpbmdE
ZWx0YShzY3JvbGxEZWx0YSk7CisgICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9IG1fY3VycmVu
dGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmdldCgpOworICAgIHdoaWxlIChsYXllckltcGwpIHsKKyAg
ICAgICAgaWYgKGxheWVyQ2FuQmVTY3JvbGxlZChsYXllckltcGwsIHBlbmRpbmdEZWx0YSkpIHsK
KyAgICAgICAgICAgIEZsb2F0U2l6ZSBwcmV2aW91c0RlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVs
dGEoKSk7CisgICAgICAgICAgICBGbG9hdFNpemUgc2NhbGVkUGVuZGluZ0RlbHRhKHBlbmRpbmdE
ZWx0YSk7CisgICAgICAgICAgICAvLyBTaW5jZSBzY3JvbGxEZWx0YSBpcyBpbiB3aW5kb3cgY29v
cmRpbmF0ZXMsIGl0IGFscmVhZHkgaGFzIHRoZSBwYWdlIHNjYWxlIGFwcGxpZWQuCisgICAgICAg
ICAgICAvLyBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgcm9vdCBzY3JvbGwgbGF5ZXIgZXhwZWN0cywg
YnV0IGNoaWxkIGxheWVycyBhcmUgc2Nyb2xsZWQgdXNpbmcKKyAgICAgICAgICAgIC8vIHVuc2Nh
bGVkIGNvbnRlbnQgY29vcmRpbmF0ZXMgaW5zdGVhZCwgc28gd2UgaGF2ZSB0byB1bmRvIHRoZSBz
Y2FsaW5nIGZvciB0aGVtLiBUaGUKKyAgICAgICAgICAgIC8vIHBhZ2Ugc2NhbGUgZGVsdGEgbmVl
ZHMgdG8gYmUgdW5hcHBsaWVkIHdpdGggYm90aCBsYXllciB0eXBlcyBzaW5jZSB0aGUgc2Nyb2xs
CisgICAgICAgICAgICAvLyBjb29yZGluYXRlcyBkbyBub3QgcmVzcGVjdCBpdC4KKyAgICAgICAg
ICAgIGlmIChsYXllckltcGwgPT0gbV9zY3JvbGxMYXllckltcGwpIHsKKyAgICAgICAgICAgICAg
ICBzY2FsZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOworICAgICAg
ICAgICAgICAgIGxheWVySW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVuZGluZ0RlbHRhKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NhbGVkUGVuZGluZ0RlbHRhLnNjYWxl
KDEgLyAobV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhKSk7CisgICAgICAgICAgICAgICAg
bGF5ZXJJbXBsLT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHBlbmRpbmcgc2Nyb2xsIGRlbHRhIHRvIHplcm8gaWYg
dGhlIGxheWVyIHdhcyBhYmxlIHRvIG1vdmUgYWxvbmcgdGhlIHJlcXVlc3RlZAorICAgICAgICAg
ICAgLy8gYXhpcy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xsIGV4
YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAgICAgICAgICAgLy8gc2Nyb2xs
IGFyZWEgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuCisgICAgICAgICAgICBpZiAocHJl
dmlvdXNEZWx0YS53aWR0aCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgpKQor
ICAgICAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIGlm
IChwcmV2aW91c0RlbHRhLmhlaWdodCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5oZWln
aHQoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0SGVpZ2h0KDApOworICAgICAg
ICAgICAgLy8gQWxzbyByZXNldCB0aGUgZGVsdGEgaWYgdGhlIGxheWVyIGRpZCBub3QgbW92ZSBi
ZWNhdXNlIHRoZSBzY3JvbGwgZGVsdGEgZ290IHJvdW5kZWQgZG93bgorICAgICAgICAgICAgLy8g
dG8gemVybyBhbmQgdGhlIGxheWVyIHN0aWxsIGhhcyByb29tIHRvIHNjcm9sbCBpbiB0aGUgcmVx
dWVzdGVkIGRpcmVjdGlvbi4gVGhpcyBhdm9pZHMKKyAgICAgICAgICAgIC8vIHNjcm9sbGluZyB0
aGUgcGFyZW50IGxheWVyIGZvciBzbG93IHNjcm9sbHMgdGhhdCBkbyBub3QgbW92ZSB0aGUgbGF5
ZXIgYXQgZXZlcnkgaXRlcmF0aW9uLgorICAgICAgICAgICAgaWYgKHBlbmRpbmdEZWx0YS53aWR0
aCgpICYmIGxheWVyQ2FuQmVTY3JvbGxlZChsYXllckltcGwsIEludFNpemUocGVuZGluZ0RlbHRh
LndpZHRoKCksIDApKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7
CisgICAgICAgICAgICBpZiAocGVuZGluZ0RlbHRhLmhlaWdodCgpICYmIGxheWVyQ2FuQmVTY3Jv
bGxlZChsYXllckltcGwsIEludFNpemUoMCwgcGVuZGluZ0RlbHRhLmhlaWdodCgpKSkpCisgICAg
ICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICAgICAgfQorICAgICAg
ICBsYXllckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpOworICAgIH0KKworICAgIGlmIChwZW5k
aW5nRGVsdGEgIT0gc2Nyb2xsRGVsdGEpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29t
bWl0T25JbXBsVGhyZWFkKCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1w
bFRocmVhZCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxF
bmQoKQogeworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CiB9CiAK
IGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpCkBAIC00
MDAsMTAgKzQ3NSwzMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUVu
ZCgpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiB9CiAKK2Jv
b2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNj
YWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKSBjb25zdAoreworICAg
IGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAgIEludFNp
emUgc2Nyb2xsRGVsdGEgPSB0b1NpemUoZmxvb3JlZEludFBvaW50KGxheWVySW1wbC0+c2Nyb2xs
RGVsdGEoKSkpOworICAgICAgICBpZiAobGF5ZXJJbXBsICE9IG1fc2Nyb2xsTGF5ZXJJbXBsKSB7
CisgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Ny
b2xsOworICAgICAgICAgICAgc2Nyb2xsLmxheWVySWQgPSBsYXllckltcGwtPmlkKCk7CisgICAg
ICAgICAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgICAgIHNj
cm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAg
IGxheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mbywg
bGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKKworICAgIHJldHVybiAhc2Nyb2xsSW5m
by0+cm9vdFNjcm9sbERlbHRhLmlzWmVybygpIHx8IHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgp
ID4gMDsKK30KKwogUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKIHsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRT
Y2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0UHRyKG5ldyBDQ1Njcm9sbEFuZFNjYWxlU2V0KCkp
OwotICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsICYmICghbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxLjBm
KTsKKyAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoY29sbGVjdFNjcm9s
bERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBtX3Njcm9sbExheWVySW1wbC5nZXQoKSkgfHwgbV9w
YWdlU2NhbGVEZWx0YSAhPSAxLjBmKTsKICAgICBpZiAoIWRpZE1vdmUgfHwgbV9waW5jaEdlc3R1
cmVBY3RpdmUgfHwgbV9wYWdlU2NhbGVBbmltYXRpb24pIHsKICAgICAgICAgbV9zZW50UGFnZVNj
YWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IDE7CiAgICAgICAgIHJldHVy
biBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKQEAgLTQxMSwxNCArNTA2LDYgQEAgUGFzc093blB0cjxD
Q1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVs
dGFzKCkKIAogICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxl
RGVsdGEgPSBtX3BhZ2VTY2FsZURlbHRhOwogCi0gICAgLy8gRklYTUU6IHRyYWNrIHNjcm9sbHMg
ZnJvbSBsYXllcnMgb3RoZXIgdGhhbiB0aGUgcm9vdAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9s
bExheWVySW1wbC0+aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKTsKLSAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3Jv
bGwpOwotCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwu
c2Nyb2xsRGVsdGEpOwotCiAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggODg3YzdlNjU1NzdlNzllMGUy
OGFkMDc4OGJlMjMyZDc1N2E0YzIzZi4uMmI3OGQ2YWRjN2Q4ZmZlZjRkOGExYzViMDQ5ODMwNDAz
MjgzMTYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTI4LDEw
ICsxMjgsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9s
bExheWVyKCk7CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0
KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CisgICAgU2Nyb2xsU3RhdHVz
IGJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KENDTGF5ZXJJbXBsKiwgY29uc3Qg
SW50UG9pbnQmKTsKKyAgICBib29sIGNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NTY3JvbGxBbmRTY2Fs
ZVNldCosIENDTGF5ZXJJbXBsKikgY29uc3Q7CiAKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RM
YXllckltcGw7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Njcm9sbExheWVySW1wbDsKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsOwogICAg
IENDU2V0dGluZ3MgbV9zZXR0aW5nczsKICAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwogICAg
IGJvb2wgbV92aXNpYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApp
bmRleCA3MmJlYzJhNzE2NjRhZjQzY2Q2NGQwMTRkMjhiODQyNjUwOTViMjAzLi5hNmNhNmY3MDIx
MjdlYzcyZTk2NjU5YjBjZmMyZDdjMDBiYWQ3Njk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcApAQCAtMTY1LDYgKzE2NSw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6ZG9Db21taXQoKQogICAgICAgICAvLyBJbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2Us
IHRoZSBzY3JvbGwgZGVsdGFzIHNob3VsZCBuZXZlciBiZQogICAgICAgICAvLyB0b3VjaGVkIG9u
IHRoZSBpbXBsIGxheWVyIHRyZWUuCiAgICAgICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0
PiBzY3JvbGxJbmZvID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygp
OworICAgICAgICBBU1NFUlQoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLmlzWmVybygpKTsK
ICAgICAgICAgQVNTRVJUKCFzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSk7CiAjZW5kaWYKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3Bw
CmluZGV4IGRmYThiMjRiNGE2NDQwODI2NmE2MDhmMDljOWE2MzExYzU4NDhhMDUuLjI0NzI2MTFl
YjNlNTUyZTY4MjBmNTNkODUzZGQxYmNiNzcxZTM0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC01OSw2ICs1OSw3IEBACiAjaW5j
bHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiUG9wdXBDb250YWluZXIuaCIKICNp
bmNsdWRlICJQb3B1cE1lbnVDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudUNocm9taXVtLmgiCkBAIC04NDQsNiArODQ1LDIzIEBA
IGJvb2wgQ2hyb21lQ2xpZW50SW1wbDo6cGFpbnRDdXN0b21PdmVyaGFuZ0FyZWEoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIENo
cm9tZUNsaWVudEltcGw6OmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoTm9kZSogbm9kZSwgUGxh
dGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIs
IGNvbnN0IEludFNpemUmIHNjcm9sbFNpemUpCit7CisgICAgaWYgKCFub2RlLT5yZW5kZXJlcigp
LT5pc0JveCgpKQorICAgICAgICByZXR1cm47CisgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0
b1JlbmRlckJveChub2RlLT5yZW5kZXJlcigpKTsKKyAgICBjb250ZW50c0xheWVyLT5zZXRTY3Jv
bGxhYmxlKHRydWUpOworICAgIGNvbnRlbnRzTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBv
aW50KG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbGVkQ29udGVudE9m
ZnNldCgpKSk7CisgICAgY29udGVudHNMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6
ZShzY3JvbGxTaXplLndpZHRoKCkgLSByZW5kZXJCb3gtPmNsaWVudFdpZHRoKCksIHNjcm9sbFNp
emUuaGVpZ2h0KCkgLSByZW5kZXJCb3gtPmNsaWVudEhlaWdodCgpKSk7CisgICAgY29udGVudHNM
YXllci0+c2V0U2Nyb2xsTm9kZShub2RlKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpy
ZW1vdmVTY3JvbGxpbmdMYXllcihOb2RlKiBub2RlLCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdM
YXllciwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllcikKK3sKKyAgICBjb250ZW50c0xheWVy
LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBjb250ZW50c0xheWVyLT5zZXRTY3JvbGxOb2Rl
KDApOworfQorCiAvLyBGSVhNRTogUmVtb3ZlIENocm9tZUNsaWVudEltcGw6OnJlcXVlc3RHZW9s
b2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSBhbmQgQ2hyb21lQ2xpZW50SW1wbDo6Y2FuY2VsR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lCiAvLyBvbmNlIGFsbCBwb3J0cyBoYXZl
IG1vdmVkIHRvIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiAoc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM3MyApLgogLy8gRm9yIGNsaWVudC1iYXNlZCBnZW9s
b2NhdGlvbiwgdGhlc2UgbWV0aG9kcyBhcmUgbm93IGltcGxlbWVudGVkIGFzIFdlYkdlb2xvY2F0
aW9uQ2xpZW50OjpyZXF1ZXN0UGVybWlzc2lvbiBhbmQgV2ViR2VvbG9jYXRpb25DbGllbnQ6OmNh
bmNlbFBlcm1pc3Npb25SZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21lQ2xpZW50SW1wbC5oCmluZGV4IDlmYTkyZWZlMDFiZmJmZDZmM2Q4NDM5YTA2M2FlMDI1Y2Y1
YTlkN2YuLjBkM2YzYjY4MjE0ZWQ5ZTk2ODRlZDAyY2I1ZmU4NDIzN2I5YWMxZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKQEAgLTMzLDYgKzMz
LDcgQEAKICNkZWZpbmUgQ2hyb21lQ2xpZW50SW1wbF9oCiAKICNpbmNsdWRlICJDaHJvbWVDbGll
bnRDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJQb3B1
cE1lbnUuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKIApAQCAtNDAsNiArNDEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIEZpbGVDaG9vc2VyOworY2xhc3MgTm9kZTsKIGNsYXNzIFBvcHVwQ29u
dGFpbmVyOwogY2xhc3MgUG9wdXBNZW51Q2xpZW50OwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMTMy
LDYgKzEzNCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hl
U2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiosIGludDY0X3Qg
dG90YWxTcGFjZU5lZWRlZCk7CiAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tT3ZlcmhhbmdB
cmVhKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBhZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6Ok5vZGUqLCBXZWJD
b3JlOjpQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgV2ViQ29yZTo6UGxhdGZvcm1MYXll
ciogY29udGVudHNMYXllciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsU2l6ZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6Ok5vZGUqLCBXZWJD
b3JlOjpQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgV2ViQ29yZTo6UGxhdGZvcm1MYXll
ciogY29udGVudHNMYXllcik7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBl
cm1pc3Npb25Gb3JGcmFtZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7
CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JG
cmFtZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAgICAgdmlydHVh
bCB2b2lkIHJ1bk9wZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6
RmlsZUNob29zZXI+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZTgzNWFiNzg5YmZkMjllNzRkMDhj
ZDdhMWZlMjEzNzNlNjA1YTUyZS4uZmNiNzI4NWUzYjg2MjBiNjI0MWUyOTllODkzMDVkZDE2NDc4
OGNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTEyNSwxNiArMTI1LDE2IEBAIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFSZXBlYXRlZFNjcm9sbHMpCiAgICAgT3du
UHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm87CiAKICAgICBzY3JvbGxJbmZvID0g
bV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIEFTU0VSVF9FUShzY3JvbGxJ
bmZvLT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3Jv
bGxzLnNpemUoKSwgMHUpOwogICAgIEVYUEVDVF9FUShyb290LT5zZW50U2Nyb2xsRGVsdGEoKSwg
c2Nyb2xsRGVsdGEpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCByb290
LT5pZCgpLCBzY3JvbGxEZWx0YSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3Jv
bGxEZWx0YSwgc2Nyb2xsRGVsdGEpOwogCiAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTIoLTUsIDI3
KTsKICAgICByb290LT5zY3JvbGxCeShzY3JvbGxEZWx0YTIpOwogICAgIHNjcm9sbEluZm8gPSBt
X2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgQVNTRVJUX0VRKHNjcm9sbElu
Zm8tPnNjcm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9s
bHMuc2l6ZSgpLCAwdSk7CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNlbnRTY3JvbGxEZWx0YSgpLCBz
Y3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbElu
Zm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKKyAgICBB
U1NFUlRfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBzY3JvbGxEZWx0YSArIHNjcm9s
bERlbHRhMik7CiAKICAgICByb290LT5zY3JvbGxCeShJbnRTaXplKCkpOwogICAgIHNjcm9sbElu
Zm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CkBAIC0xNTUsNiArMTU1LDk0
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0
QW5kUmVkcmF3KQogICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7CiB9CiAKK1RF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdElnbm9yZWQpCit7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBy
b290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
cm9vdCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAs
IDApKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9G
QUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RD
b21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxk
Q2FsbHNDb21taXRBbmRSZWRyYXcpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsK
KyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBjaGlsZC0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQo
dHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9o
b3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAg
ICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RS
ZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hpbGQpCit7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290
LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsK
KyAgICBjaGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAg
IGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXll
clJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICByb290LT5h
ZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxNSwgNSkpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlk
UmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9
CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBh
Z2VTY2FsZSkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9vdC0+c2V0
TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIHJvb3QtPnNldERyYXdz
Q29udGVudCh0cnVlKTsKKyAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3QpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERl
bHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMiwgMSwg
Mik7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSByb290IHNjcm9sbCBk
ZWx0YS4KKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9z
dEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+
cm9vdFNjcm9sbERlbHRhLCBJbnRTaXplKHNjcm9sbERlbHRhLndpZHRoKCkgKiAyLCBzY3JvbGxE
ZWx0YS5oZWlnaHQoKSAqIDIpKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gc2Nyb2xsUm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgc2Nyb2xsUm9vdC0+
c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAg
ICBjaGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNo
aWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICByb290LT5hZGRD
aGlsZChzY3JvbGxSb290KTsKKyAgICBzY3JvbGxSb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9sbFJvb3QpOworCisgICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSgwLCAxMCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKElu
dFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAg
IG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQ
YWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMiwgMSwgMik7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hv
dWxkIG5vdCBhcHBseSB0byB0aGUgY2hpbGQgc2Nyb2xsIGRlbHRhLgorICAgIE93blB0cjxDQ1Nj
cm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERl
bHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBjaGlsZC0+aWQo
KSwgc2Nyb2xsRGVsdGEpOworfQorCiBjbGFzcyBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQ6IHB1
YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAgIEJsZW5kU3RhdGVU
cmFja2VyQ29udGV4dCgpIDogbV9ibGVuZChmYWxzZSkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCAzNmZkN2Ri
ZDA3YmRjN2NmMWM4NjFmZDgyYWViYzJiMDg0YTAzYTMzLi5mYTBhOWIxY2Q1OWI3MTIwZjA1OGUz
MzdiZWE3OGE5ZWRhNWJmZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTkyMiw2ICs5MjIsMTIwIEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0VmlzaWJsZSwgcnVuTXVsdGlUaHJlYWQpCiAgICAgcnVu
VGVzdCh0cnVlKTsKIH0KIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRC
b3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNj
cm9sbGFibGUodHJ1ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRNYXhTY3JvbGxQ
b3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9v
dExheWVyKCktPmFkZENoaWxkKG1fcm9vdFNjcm9sbExheWVyKTsKKyAgICAgICAgbV9jaGlsZExh
eWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9s
bGFibGUodHJ1ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
SW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+YWRkQ2hpbGQo
bV9jaGlsZExheWVyKTsKKyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50
U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0KQorICAgIHsKKyAgICAgICAgSW50UG9pbnQgcG9zaXRp
b24gPSBtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290
U2Nyb2xsTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9Citwcm90
ZWN0ZWQ6CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290U2Nyb2xsTGF5ZXI7Cit9OworCitjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQmFzZSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXIoKQorICAgICAgICA6IG1fc2Nyb2xsQW1vdW50KDIsIDEpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1w
bCogaW1wbCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUShtX3Jvb3RTY3JvbGxMYXllci0+c2Ny
b2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0
LT5mcmFtZU51bWJlcigpKQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Ny
b2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVY
UEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkgKyBtX3Nj
cm9sbEFtb3VudCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+
ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShpbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCg1LCA1KSkpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9z
Y3JvbGxBbW91bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgp
OworICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307
CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciwgcnVuTXVsdGlU
aHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7Cit9CisKK2NsYXNzIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3Jv
bGxDaGlsZExheWVyQmV5b25kTGltaXQoKQorICAgICAgICA6IG1faW5pdGlhbFJvb3RTY3JvbGxQ
b3NpdGlvbigxMCwgMTApCisgICAgICAgICwgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbigy
MCwgMCkKKyAgICAgICAgLCBtX3Njcm9sbEFtb3VudCgtMjUsIC01KQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxCYXNlOjpiZWdpblRlc3QoKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5
ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7CisgICAg
ICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9pbml0aWFsQ2hpbGRTY3JvbGxQ
b3NpdGlvbik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBDQ0xheWVySW1wbCog
cm9vdCA9IGltcGwtPnJvb3RMYXllcigpOworICAgICAgICAgICAgQ0NMYXllckltcGwqIHNjcm9s
bFJvb3QgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICAgICAgQ0NMYXllcklt
cGwqIGNoaWxkID0gc2Nyb2xsUm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAg
IEVYUEVDVF9FUShzY3JvbGxSb290LT5zY3JvbGxQb3NpdGlvbigpLCBtX2luaXRpYWxSb290U2Ny
b2xsUG9zaXRpb24pOworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9sbFJvb3QtPnNjcm9sbERl
bHRhKCksIEludFNpemUoMCwgLTUpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGlsZC0+c2Ny
b2xsUG9zaXRpb24oKSwgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAgICAgICAg
ICBFWFBFQ1RfRVEoY2hpbGQtPnNjcm9sbERlbHRhKCksIEludFNpemUoLTIwLCAwKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NM
YXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51
bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGltcGwtPnNjcm9sbEJlZ2lu
KEludFBvaW50KDUsIDUpKSk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFt
b3VudCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlm
IChpbXBsLT5mcmFtZU51bWJlcigpID09IDIpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAg
fQorcHJpdmF0ZToKKyAgICBjb25zdCBJbnRQb2ludCBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRp
b247CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbjsKKyAg
ICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQsIHJ1bk11bHRpVGhyZWFkKQorewor
ICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQorCiBjbGFzcyBUZXN0T3BhY2l0eUNoYW5nZUxheWVy
RGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBUZXN0T3Bh
Y2l0eUNoYW5nZUxheWVyRGVsZWdhdGUoQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119065</attachid>
            <date>2011-12-13 12:23:32 -0800</date>
            <delta_ts>2011-12-14 13:33:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20111213202330.patch</filename>
            <type>text/plain</type>
            <size>38659</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVjMTc4Nzg3N2U2N2U2
ZjhkODAxY2NjNzYzYmJiMjdhNzE5OGIxYi4uYmQ1YzUxNGFiOWJlY2MyNzg2NmY4Y2Y3N2Q3M2Vj
NTI1MTc2OWQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDExLTEyLTEyICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMTAyNjQ4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwNjMxNzMz
OGE3NTNlYzQ2YmVlMjg4YTliMDFjZWZkYzk5Li44ZDY4M2QzZmM1NDE5ZDk2M2I5MjRlOWQzZDJj
MDEwZGYzNTM4MDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBA
CisyMDExLTEyLTA5ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9z
aXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTczMzUwCisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBs
YXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFy
ZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAg
c3luY2hyb25pemVkIHRvIHRoZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAg
ICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rp
b24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3Rl
YWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oOgorICAg
ICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21l
Q2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkNocm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKiBzcmMv
Q2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseVJvb3RMYXll
clNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6
OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5o
OgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
Lmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseVJvb3RMYXllclNjcm9s
bEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseUxheWVyU2Nyb2xsKToK
KyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFwcGx5Um9vdExheWVyU2Ny
b2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YXBw
bHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxT
aW1wbGU6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRyYXc6OmFwcGx5Um9vdExheWVyU2Nyb2xs
QW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6
YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6
OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNP
bkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6Q0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmJlZ2luVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6
OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKwog
MjAxMS0xMi0xMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBX
ZWJLaXQgY29kZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBhcHBseUNvbW1hbmQgZGlyZWN0bHkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjQ1ZTEyNTk1NzNmOWVkMzU3MWI2MWEwMWU4MzBjNWVk
ZTQ0ZjI4Yi4uYzczM2FhOTc3ODExZjg4ZmEyNDUxYTRiZDEyYzIxOWZjZTdmNjFmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM5MCw2ICszOTAsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06
OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGxheWVyLT5zZXRQb3Np
dGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0Qo
KSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAg
IGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNjcm9sbFBvc2l0aW9uKTsKICAgICBs
YXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7CiAgICAgbGF5
ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFVwZGF0ZVJlY3Qo
bV91cGRhdGVSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA5YzdhNGY4ZjQ3OTI4OWRhMDU5
MTM3Yjc5YmIxNWQ2YmQxN2Q1MWVlLi4xZmY5OGY1NDg0ODQ0YzRmNGI2YWZkMDc2YjFhMjYzYjg0
MDQ3NTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUJp
bmRpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKQEAgLTEzMiw2ICsx
MzMsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKyAgICB2b2lkIHNl
dE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKSB7IG1f
bWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsgfQorCisgICAgTm9kZSogc2Ny
b2xsTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTm9kZS5nZXQoKTsgfQorICAgIHZvaWQg
c2V0U2Nyb2xsTm9kZShQYXNzUmVmUHRyPE5vZGU+IHNjcm9sbE5vZGUpIHsgbV9zY3JvbGxOb2Rl
ID0gc2Nyb2xsTm9kZTsgfQorCiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wpOwogICAgIGJv
b2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogCkBAIC0yNTUs
NiArMjYyLDggQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3Qg
bV92aXNpYmxlTGF5ZXJSZWN0OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisgICAg
SW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOworICAgIFJlZlB0cjxOb2RlPiBtX3Njcm9sbE5v
ZGU7CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwog
ICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRl
eCBhZjA0MmU1NjY5YjQ2MmZiNmMwOWRlNmZjM2Q0Y2Y0YjZkODRlOTJkLi42N2FkNmNhMWViNmEx
ZmI5OWE0NWQ1NWI0NjkwZDA5ZjkyMjZlNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBA
IC0xMjIsOSArMTIyLDkgQEAgdm9pZCBDQ0xheWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12
b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpCit2b2lkIEND
TGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCkKIHsKLSAgICBJbnRT
aXplIG5ld0RlbHRhID0gbV9zY3JvbGxEZWx0YSArIHNjcm9sbDsKKyAgICBGbG9hdFNpemUgbmV3
RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Nyb2xsOwogICAgIEludFNpemUgbWluRGVsdGEgPSAt
dG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIEludFNpemUgbWF4RGVsdGEgPSBtX21heFNj
cm9sbFBvc2l0aW9uIC0gdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIC8vIENsYW1wIG5l
d0RlbHRhIHNvIHRoYXQgcG9zaXRpb24gKyBkZWx0YSBzdGF5cyB3aXRoaW4gc2Nyb2xsIGJvdW5k
cy4KQEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxEZWx0
YShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3ZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9s
bERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgaWYgKG1fc2Nyb2xs
RGVsdGEgPT0gc2Nyb2xsRGVsdGEpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IGUyYzAwYzg2ODk4MmE3NmM2NThjYWU4MzQxMGU4NWJjY2RjZjgwOWYuLjY5ZDYwZGJl
NGM4ZDUyOWQzM2Q5ODBlOGNjN2Q0NDM3OTg3NmUwODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMTU3LDE2ICsxNTcsMTYgQEAgcHVibGljOgogICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9s
bFBvc2l0aW9uKCkgY29uc3Qge3JldHVybiBtX21heFNjcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9p
ZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikg
eyBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247IH0KIAotICAgIGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQot
ICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEZsb2F0
U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbERlbHRhOyB9CisgICAg
dm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBGbG9hdFNpemUmKTsKIAogICAgIGZsb2F0IHBhZ2VT
Y2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVEZWx0YTsgfQogICAgIHZvaWQg
c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwogCi0gICAgY29uc3QgSW50U2l6ZSYgc2VudFNjcm9s
bERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Nyb2xsRGVsdGE7IH0KLSAgICB2b2lkIHNl
dFNlbnRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBzZW50U2Nyb2xsRGVsdGEpIHsgbV9zZW50
U2Nyb2xsRGVsdGEgPSBzZW50U2Nyb2xsRGVsdGE7IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIHNl
bnRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudFNjcm9sbERlbHRhOyB9CisgICAg
dm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJiBzZW50U2Nyb2xsRGVsdGEp
IHsgbV9zZW50U2Nyb2xsRGVsdGEgPSBzZW50U2Nyb2xsRGVsdGE7IH0KIAotICAgIHZvaWQgc2Ny
b2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsKTsKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEZs
b2F0U2l6ZSYgc2Nyb2xsKTsKIAogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsYWJsZTsgfQogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUp
IHsgbV9zY3JvbGxhYmxlID0gc2Nyb2xsYWJsZTsgfQpAQCAtMjUwLDggKzI1MCw4IEBAIHByaXZh
dGU6CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50OwogCi0gICAgSW50U2l6ZSBtX3Njcm9sbERl
bHRhOwotICAgIEludFNpemUgbV9zZW50U2Nyb2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2Ny
b2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2VudFNjcm9sbERlbHRhOwogICAgIEludFNpemUg
bV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBmbG9hdCBtX3BhZ2VTY2FsZURlbHRhOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAyN2Q5NTZhN2M3YWZiZDA5NWRiOTQ1Yjkz
NGExNjZlZmE1NWYzNzRmLi4zZGUyOGVhN2QxZTEwZDFiNzZmMzE5ODRiNjBlMzM2MWU2YmViY2Qz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJC
b3guaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXpl
ci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgpAQCAtNDQ5LDE1ICs0
NTAsNDIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAg
bV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNj
cm9sbEFuZFNjYWxlKGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8pCitzdGF0aWMgTGF5
ZXJDaHJvbWl1bSogZmluZExheWVyQnlJZChMYXllckNocm9taXVtKiBsYXllciwgaW50IGlkKQog
ewotICAgIC8vIEZJWE1FOiBwdXNoaW5nIHNjcm9sbCBvZmZzZXRzIHRvIG5vbi1yb290IGxheWVy
cyBub3QgaW1wbGVtZW50ZWQKLSAgICBpZiAoIWluZm8uc2Nyb2xscy5zaXplKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChs
YXllci0+aWQoKSA9PSBpZCkKKyAgICAgICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBM
YXllckNocm9taXVtKiBmb3VuZCA9IGZpbmRMYXllckJ5SWQobGF5ZXItPmNoaWxkcmVuKClbaV0u
Z2V0KCksIGlkKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5k
OworICAgIH0KIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9j
bGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVs
dGEpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3Jv
bGxBbmRTY2FsZShjb25zdCBDQ1Njcm9sbEFuZFNjYWxlU2V0JiBpbmZvKQoreworICAgIGlmICgh
aW5mby5yb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkgfHwgaW5mby5wYWdlU2NhbGVEZWx0YSAhPSAx
KQorICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShpbmZvLnJvb3RTY3JvbGxE
ZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGluZm8uc2Nyb2xscy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBsYXll
ciA9IGZpbmRMYXllckJ5SWQobV9yb290TGF5ZXIuZ2V0KCksIGluZm8uc2Nyb2xsc1tpXS5sYXll
cklkKTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkgKyBpbmZv
LnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOworICAgICAgICBpZiAoIWxheWVyLT5zY3JvbGxOb2Rl
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGxheWVyLT5z
Y3JvbGxOb2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+cmVu
ZGVyZXIoKS0+aXNCb3goKSB8fCAhbGF5ZXItPnNjcm9sbE5vZGUoKS0+aW5Eb2N1bWVudCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9S
ZW5kZXJCb3gobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgICAgIHJlbmRlckJveC0+c2V0U2Nyb2xs
TGVmdChyZW5kZXJCb3gtPnNjcm9sbExlZnQoKSArIGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0
YS53aWR0aCgpKTsKKyAgICAgICAgcmVuZGVyQm94LT5zZXRTY3JvbGxUb3AocmVuZGVyQm94LT5z
Y3JvbGxUb3AoKSArIGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YS5oZWlnaHQoKSk7CisgICAg
fQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
aW5kZXggMmUwY2JjZjJjNTg1ZTgyMTVkMjg2ZGVlOWI2MWU1MzUxODBjZmZhZC4uMGQyNDZmNTM5
MzUwNTVhNjk1MDQ4NjkxNmFjMzIyN2VjYWQ0NWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogCiBzdHJ1Y3QgQ0NT
Y3JvbGxBbmRTY2FsZVNldCB7CiAgICAgVmVjdG9yPENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Ny
b2xsVXBkYXRlSW5mbz4gc2Nyb2xsczsKKyAgICBJbnRTaXplIHJvb3RTY3JvbGxEZWx0YTsKICAg
ICBmbG9hdCBwYWdlU2NhbGVEZWx0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKaW5kZXggZTBjZDM4OWRjNmY4ZGY5NDA4YTljMDU1MWU0MDZlZmJkMWRmMmIw
ZC4uMmQxZjc5N2EzMTg3Y2EyZjRlMjZmMWEyZDcxMzJlNTNiMmJmMGZkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQogICAgIGlm
ICghbV9wYWdlU2NhbGVBbmltYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkg
KyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29y
ZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogCiAgICAgc2V0
UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShmcmFt
ZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBt
X3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMp
OwpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdl
U2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAgaWYgKCFt
X3Njcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0g
dG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgZmxvb3JlZEludFBv
aW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKSk7CiAgICAgc2Nyb2xsVG90YWwu
c2NhbGUobV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVUb3RhbCA9IG1fcGFnZVNj
YWxlICogbV9wYWdlU2NhbGVEZWx0YTsKICAgICBJbnRTaXplIHNjYWxlZENvbnRlbnRTaXplID0g
bV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsKQEAgLTE5
NCw4ICsxOTQsNiBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsKICAgICBtX3Jvb3RMYXllckltcGwgPSBsYXll
cjsKLQotICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHRoaXMgb25seSBmaW5kcyB0aGUgZmlyc3Qg
c2Nyb2xsYWJsZSBsYXllci4KICAgICBtX3Njcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXll
cihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogfQogCkBAIC0yNjMsMTUgKzI2MSwxMyBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhmbG9hdCBw
YWdlU2NhbGUsIGZsb2F0IG1pbgogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFkanVzdFNj
cm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQgcGFnZVNjYWxlQ2hhbmdlKQogewotICAgIGlm
IChwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKKyAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8IHBh
Z2VTY2FsZUNoYW5nZSA9PSAxKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBhbHNvIG5l
ZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2Uu
Ci0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7Ci0gICAgICAgIEludFNpemUgc2Nyb2xsRGVs
dGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKLSAgICAgICAgc2Nyb2xsRGVs
dGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKLSAgICAgICAgbV9zY3JvbGxMYXllckltcGwtPnNl
dFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKLSAgICB9CisgICAgLy8gV2UgYWxzbyBuZWVkIHRv
IGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YSBmb3IgdGhlIHJvb3QgbGF5ZXIgdG8gcGFn
ZVNjYWxlIHNwYWNlLgorICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zY3JvbGxEZWx0YSgpOworICAgIHNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5n
ZSk7CisgICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsK
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCBk
ZWx0YSkKQEAgLTMxMyw5ICszMDksOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0
ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAgICAvLyBoYXZpbmcgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIg
YnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cuCiAgICAgbWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVU
b1plcm8oKTsKIAorICAgIC8vIFdlIG9ubHkgbmVlZCB0byB1cGRhdGUgdGhlIHJvb3QgbGF5ZXIg
c2Nyb2xsIHJhbmdlLCBzaW5jZSB0aGUgY2hpbGQKKyAgICAvLyBsYXllcnMgdXNlIHVuc2NhbGVk
IHNjcm9sbCBjb29yZGluYXRlcy4KICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24obWF4U2Nyb2xsKTsKLQotICAgIC8vIFRPRE8oYWVsaWFzKTogQWxzbyB1cGRhdGUg
c3VibGF5ZXJzLgogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFpvb21BbmltYXRv
clRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgem9vbSkKQEAgLTMzNiwyOCAr
MzMyLDg1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQogICAg
IG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQogCi1DQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2lu
KGNvbnN0IEludFBvaW50JikKK0NDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NM
YXllclRyZWVIb3N0SW1wbDo6YmVnaW5TY3JvbGxpbmdJbm5lcm1vc3RMYXllckF0UG9pbnQoQ0NM
YXllckltcGwqIGxheWVySW1wbCwgY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpCiB7Ci0g
ICAgLy8gVE9ETzogQ2hlY2sgZm9yIHNjcm9sbGFibGUgc3VibGF5ZXJzLgotICAgIGlmICghbV9z
Y3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCi0gICAg
ICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICBy
ZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7IGkrKykgeworICAg
ICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHN0YXR1cyA9IGJlZ2luU2Ny
b2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQo
KSwgdmlld3BvcnRQb2ludCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQgfHwgc3RhdHVzID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIElu
dFBvaW50IGNvbnRlbnRQb2ludChsYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52
ZXJzZSgpLm1hcFBvaW50KHZpZXdwb3J0UG9pbnQpKTsKKworICAgIC8vIFRoZSBjb250ZW50IHBv
aW50IGZvciBub24tcm9vdCBsYXllcnMgbXVzdCBiZSBzY2FsZWQgd2l0aCB0aGUgcGFnZSBzY2Fs
ZS4gTm90ZSB0aGF0IHRoZQorICAgIC8vIHBhZ2Ugc2NhbGUgZGVsdGEgaXMgYWxyZWFkeSBlbWJl
ZGRlZCBpbiBlYWNoIGxheWVyJ3Mgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybS4KKyAgICBpZiAobGF5
ZXJJbXBsICE9IG1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgICAgICBjb250ZW50UG9pbnQuc2NhbGUo
bV9wYWdlU2NhbGUsIG1fcGFnZVNjYWxlKTsKIAotICAgIHJldHVybiBTY3JvbGxTdGFydGVkOwor
ICAgIGlmIChsYXllckltcGwtPmRyYXdzQ29udGVudCgpICYmICFsYXllckltcGwtPnZpc2libGVM
YXllclJlY3QoKS5jb250YWlucyhjb250ZW50UG9pbnQpKQorICAgICAgICByZXR1cm4gQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisKKyAgICBpZiAobGF5ZXJJbXBsLT5zY3Jv
bGxhYmxlKCkpIHsKKyAgICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSBsYXll
ckltcGw7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRl
ZDsKKyAgICB9CisKKyAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9y
ZWQ7Cit9CisKK0NDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQmVnaW4oY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpCit7Cisg
ICAgcmV0dXJuIGJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KG1fc2Nyb2xsTGF5
ZXJJbXBsLmdldCgpLCB2aWV3cG9ydFBvaW50KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAo
IW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllcklt
cGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShz
Y3JvbGxEZWx0YSk7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7
Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgSW50U2l6
ZSBwZW5kaW5nRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwg
PSBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5nZXQoKTsKKyAgICB3aGlsZSAobGF5ZXJJ
bXBsICYmICFwZW5kaW5nRGVsdGEuaXNaZXJvKCkpIHsKKyAgICAgICAgaWYgKGxheWVySW1wbC0+
c2Nyb2xsYWJsZSgpKSB7CisgICAgICAgICAgICBGbG9hdFNpemUgcHJldmlvdXNEZWx0YShsYXll
ckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgICAgICAgICAgRmxvYXRTaXplIHNjYWxlZFBlbmRp
bmdEZWx0YShwZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgLy8gU2luY2Ugc2Nyb2xsRGVsdGEg
aXMgaW4gd2luZG93IGNvb3JkaW5hdGVzLCBpdCBhbHJlYWR5IGhhcyB0aGUgcGFnZSBzY2FsZSBh
cHBsaWVkLgorICAgICAgICAgICAgLy8gVGhpcyBtYXRjaGVzIHdoYXQgdGhlIHJvb3Qgc2Nyb2xs
IGxheWVyIGV4cGVjdHMsIGJ1dCBjaGlsZCBsYXllcnMgYXJlIHNjcm9sbGVkIHVzaW5nCisgICAg
ICAgICAgICAvLyB1bnNjYWxlZCBjb250ZW50IGNvb3JkaW5hdGVzIGluc3RlYWQsIHNvIHdlIGhh
dmUgdG8gdW5kbyB0aGUgc2NhbGluZyBmb3IgdGhlbS4gVGhlCisgICAgICAgICAgICAvLyBwYWdl
IHNjYWxlIGRlbHRhIG5lZWRzIHRvIGJlIHVuYXBwbGllZCB3aXRoIGJvdGggbGF5ZXIgdHlwZXMg
c2luY2UgdGhlIHNjcm9sbAorICAgICAgICAgICAgLy8gY29vcmRpbmF0ZXMgZG8gbm90IHJlc3Bl
Y3QgaXQuCisgICAgICAgICAgICBpZiAobGF5ZXJJbXBsID09IG1fc2Nyb2xsTGF5ZXJJbXBsKSB7
CisgICAgICAgICAgICAgICAgc2NhbGVkUGVuZGluZ0RlbHRhLnNjYWxlKDEgLyBtX3BhZ2VTY2Fs
ZURlbHRhKTsKKyAgICAgICAgICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHNjYWxlZFBlbmRp
bmdEZWx0YSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjYWxlZFBl
bmRpbmdEZWx0YS5zY2FsZSgxIC8gKG1fcGFnZVNjYWxlICogbV9wYWdlU2NhbGVEZWx0YSkpOwor
ICAgICAgICAgICAgICAgIGxheWVySW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVuZGluZ0RlbHRhKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIHNjcm9sbCBk
ZWx0YSB0byB6ZXJvIGlmIHRoZSBsYXllciB3YXMgYWJsZSB0byBtb3ZlIGFsb25nIHRoZSByZXF1
ZXN0ZWQKKyAgICAgICAgICAgIC8vIGF4aXMuIFRoaXMgaXMgdG8gZW5zdXJlIGl0IGlzIHBvc3Np
YmxlIHRvIHNjcm9sbCBleGFjdGx5IHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEKKyAgICAg
ICAgICAgIC8vIHNjcm9sbCBhcmVhIHJlZ2FyZGxlc3Mgb2YgdGhlIHNjcm9sbCBzdGVwLiBGb3Ig
ZGlhZ29uYWwgc2Nyb2xscyB0aGlzIGFsc28gYXZvaWRzIGFwcGx5aW5nCisgICAgICAgICAgICAv
LyB0aGUgc2Nyb2xsIG9uIG9uZSBheGlzIHRvIG11bHRpcGxlIGxheWVycy4KKyAgICAgICAgICAg
IGlmIChwcmV2aW91c0RlbHRhLndpZHRoKCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLndp
ZHRoKCkpCisgICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldFdpZHRoKDApOworICAgICAg
ICAgICAgaWYgKHByZXZpb3VzRGVsdGEuaGVpZ2h0KCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0
YSgpLmhlaWdodCgpKQorICAgICAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRIZWlnaHQoMCk7
CisgICAgICAgIH0KKyAgICAgICAgbGF5ZXJJbXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKTsKKyAg
ICB9CisKKyAgICBpZiAocGVuZGluZ0RlbHRhICE9IHNjcm9sbERlbHRhKSB7CisgICAgICAgIG1f
Y2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICBtX2NsaWVudC0+
c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKCkKIHsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVy
SW1wbC5jbGVhcigpOwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmhhdmVXaGVlbEV2
ZW50SGFuZGxlcnMoKQpAQCAtNDAwLDEwICs0NTMsMzAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpwaW5jaEdlc3R1cmVFbmQoKQogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1w
bFRocmVhZCgpOwogfQogCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbGxlY3RTY3JvbGxE
ZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwqIGxheWVy
SW1wbCkgY29uc3QKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8o
KSkgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gdG9TaXplKGZsb29yZWRJbnRQb2lu
dChsYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKKyAgICAgICAgaWYgKGxheWVySW1wbCAhPSBt
X3Njcm9sbExheWVySW1wbCkgeworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpT
Y3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgICAgIHNjcm9sbC5sYXllcklkID0gbGF5
ZXJJbXBsLT5pZCgpOworICAgICAgICAgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsRGVs
dGE7CisgICAgICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSA9IHNj
cm9sbERlbHRhOworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShsYXllcklt
cGwtPnNjcm9sbERlbHRhKCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0U2Nyb2xs
RGVsdGFzKHNjcm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisKKyAg
ICByZXR1cm4gIXNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSB8fCBzY3JvbGxJ
bmZvLT5zY3JvbGxzLnNpemUoKSA+IDA7Cit9CisKIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2Fs
ZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAg
T3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NT
Y3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1w
bCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFn
ZVNjYWxlRGVsdGEgIT0gMS4wZik7CisgICAgYm9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllcklt
cGwgJiYgKGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mby5nZXQoKSwgbV9zY3JvbGxMYXll
ckltcGwuZ2V0KCkpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7CiAgICAgaWYgKCFkaWRN
b3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9uKSB7CiAg
ICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEg
PSAxOwogICAgICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CkBAIC00MTEsMTQgKzQ4
NCw2IEBAIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1w
bDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiAKICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNj
cm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gbV9wYWdlU2NhbGVEZWx0YTsKIAotICAgIC8vIEZJ
WE1FOiB0cmFjayBzY3JvbGxzIGZyb20gbGF5ZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9s
bC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERl
bHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgc2Nyb2xsSW5mby0+
c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50
U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZv
LnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4
IDg4N2M3ZTY1NTc3ZTc5ZTBlMjhhZDA3ODhiZTIzMmQ3NTdhNGMyM2YuLjJiNzhkNmFkYzdkOGZm
ZWY0ZDhhMWM1YjA0OTgzMDQwMzI4MzE2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKQEAgLTEyOCwxMCArMTI4LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVBh
Z2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwogICAgIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBh
Z2VTY2FsZUNoYW5nZShmbG9hdCk7CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigp
OworICAgIFNjcm9sbFN0YXR1cyBiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludChD
Q0xheWVySW1wbCosIGNvbnN0IEludFBvaW50Jik7CisgICAgYm9vbCBjb2xsZWN0U2Nyb2xsRGVs
dGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqLCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgT3du
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9z
Y3JvbGxMYXllckltcGw7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX2N1cnJlbnRseVNjcm9s
bGluZ0xheWVySW1wbDsKICAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAgICAgSW50U2l6ZSBt
X3ZpZXdwb3J0U2l6ZTsKICAgICBib29sIG1fdmlzaWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAKaW5kZXggNzJiZWMyYTcxNjY0YWY0M2NkNjRkMDE0ZDI4Yjg0MjY1
MDk1YjIwMy4uYTZjYTZmNzAyMTI3ZWM3MmU5NjY1OWIwY2ZjMmQ3YzAwYmFkNzY5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE2NSw2ICsxNjUsNyBAQCB2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0KCkKICAgICAgICAgLy8gSW4gdGhlIHNp
bmdsZS10aHJlYWRlZCBjYXNlLCB0aGUgc2Nyb2xsIGRlbHRhcyBzaG91bGQgbmV2ZXIgYmUKICAg
ICAgICAgLy8gdG91Y2hlZCBvbiB0aGUgaW1wbCBsYXllciB0cmVlLgogICAgICAgICBPd25QdHI8
Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnBy
b2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbEluZm8tPnJvb3RTY3Jv
bGxEZWx0YS5pc1plcm8oKSk7CiAgICAgICAgIEFTU0VSVCghc2Nyb2xsSW5mby0+c2Nyb2xscy5z
aXplKCkpOwogI2VuZGlmCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9D
aHJvbWVDbGllbnRJbXBsLmNwcAppbmRleCBkZmE4YjI0YjRhNjQ0MDgyNjZhNjA4ZjA5YzlhNjMx
MWM1ODQ4YTA1Li4yNDcyNjExZWIzZTU1MmU2ODIwZjUzZDg1M2RkMWJjYjc3MWUzNDRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApAQCAt
NTksNiArNTksNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlBv
cHVwQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Q2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVDaHJvbWl1bS5oIgpA
QCAtODQ0LDYgKzg0NSwyMyBAQCBib29sIENocm9tZUNsaWVudEltcGw6OnBhaW50Q3VzdG9tT3Zl
cmhhbmdBcmVhKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAordm9pZCBDaHJvbWVDbGllbnRJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xh
eWVyKE5vZGUqIG5vZGUsIFBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxh
eWVyKiBjb250ZW50c0xheWVyLCBjb25zdCBJbnRTaXplJiBzY3JvbGxTaXplKQoreworICAgIGlm
ICghbm9kZS0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJlbmRl
ckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgY29u
dGVudHNMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBjb250ZW50c0xheWVyLT5zZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludChub2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSkpOworICAgIGNvbnRlbnRzTGF5ZXItPnNldE1heFNj
cm9sbFBvc2l0aW9uKEludFNpemUoc2Nyb2xsU2l6ZS53aWR0aCgpIC0gcmVuZGVyQm94LT5jbGll
bnRXaWR0aCgpLCBzY3JvbGxTaXplLmhlaWdodCgpIC0gcmVuZGVyQm94LT5jbGllbnRIZWlnaHQo
KSkpOworICAgIGNvbnRlbnRzTGF5ZXItPnNldFNjcm9sbE5vZGUobm9kZSk7Cit9CisKK3ZvaWQg
Q2hyb21lQ2xpZW50SW1wbDo6cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoTm9kZSogbm9kZSwgUGxhdGZv
cm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpCit7
CisgICAgY29udGVudHNMYXllci0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgY29udGVudHNM
YXllci0+c2V0U2Nyb2xsTm9kZSgwKTsKK30KKwogLy8gRklYTUU6IFJlbW92ZSBDaHJvbWVDbGll
bnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUgYW5kIENocm9tZUNs
aWVudEltcGw6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZQogLy8g
b25jZSBhbGwgcG9ydHMgaGF2ZSBtb3ZlZCB0byBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24gKHNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzNzMgKS4KIC8vIEZv
ciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24sIHRoZXNlIG1ldGhvZHMgYXJlIG5vdyBpbXBsZW1l
bnRlZCBhcyBXZWJHZW9sb2NhdGlvbkNsaWVudDo6cmVxdWVzdFBlcm1pc3Npb24gYW5kIFdlYkdl
b2xvY2F0aW9uQ2xpZW50OjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAppbmRleCA5ZmE5MmVmZTAxYmZiZmQ2
ZjNkODQzOWEwNjNhZTAyNWNmNWE5ZDdmLi4wZDNmM2I2ODIxNGVkOWU5Njg0ZWQwMmNiNWZlODQy
MzdiOWFjMWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5oCkBAIC0zMyw2ICszMyw3IEBACiAjZGVmaW5lIENocm9tZUNsaWVudEltcGxfaAogCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51Lmgi
CiAKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWNjZXNzaWJp
bGl0eU9iamVjdDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGaWxlQ2hvb3NlcjsKK2NsYXNzIE5v
ZGU7CiBjbGFzcyBQb3B1cENvbnRhaW5lcjsKIGNsYXNzIFBvcHVwTWVudUNsaWVudDsKIGNsYXNz
IFJlbmRlckJveDsKQEAgLTEzMiw2ICsxMzQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CiAgICAgdmlydHVh
bCB2b2lkIHJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4qLCBpbnQ2NF90IHRvdGFsU3BhY2VOZWVkZWQpOwogICAgIHZpcnR1YWwgYm9vbCBw
YWludEN1c3RvbU92ZXJoYW5nQXJlYShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihX
ZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFdl
YkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNjcm9sbFNpemUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihX
ZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFdl
YkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpOwogICAgIHZpcnR1YWwgdm9pZCBy
ZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJD
b3JlOjpHZW9sb2NhdGlvbiopOwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2Nh
dGlvbiopOwogICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoV2ViQ29yZTo6RnJhbWUqLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGU4
MzVhYjc4OWJmZDI5ZTc0ZDA4Y2Q3YTFmZTIxMzczZTYwNWE1MmUuLmZjYjcyODVlM2I4NjIwYjYy
NDFlMjk5ZTg5MzA1ZGQxNjQ3ODhjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xMjUsMTYgKzEy
NSwxNiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbERlbHRhUmVwZWF0
ZWRTY3JvbGxzKQogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvOwog
CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAg
ICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDF1KTsKKyAgICBBU1NFUlRf
RVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDB1KTsKICAgICBFWFBFQ1RfRVEocm9vdC0+
c2VudFNjcm9sbERlbHRhKCksIHNjcm9sbERlbHRhKTsKLSAgICBleHBlY3RDb250YWlucygqc2Ny
b2xsSW5mby5nZXQoKSwgcm9vdC0+aWQoKSwgc2Nyb2xsRGVsdGEpOworICAgIEFTU0VSVF9FUShz
Y3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIHNjcm9sbERlbHRhKTsKIAogICAgIEludFNpemUg
c2Nyb2xsRGVsdGEyKC01LCAyNyk7CiAgICAgcm9vdC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEyKTsK
ICAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAg
IEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAgIEFTU0VSVF9F
UShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMHUpOwogICAgIEVYUEVDVF9FUShyb290LT5z
ZW50U2Nyb2xsRGVsdGEoKSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOwotICAgIGV4cGVj
dENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCByb290LT5pZCgpLCBzY3JvbGxEZWx0YSArIHNj
cm9sbERlbHRhMik7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwg
c2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOwogCiAgICAgcm9vdC0+c2Nyb2xsQnkoSW50U2l6
ZSgpKTsKICAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygp
OwpAQCAtMTU1LDYgKzE1NSw5NCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNj
cm9sbFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJhdykKICAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVl
c3RDb21taXQpOwogfQogCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJv
b3RJZ25vcmVkKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCgwLCAwKSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25v
cmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1Rf
RkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzY3JvbGxDaGlsZENhbGxzQ29tbWl0QW5kUmVkcmF3KQoreworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0
U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgY2hpbGQtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAg
Y2hpbGQtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBjaGls
ZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNoaWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7CisgICAgcm9vdC0+YWRkQ2hp
bGQoY2hpbGQpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKworICAgIEVY
UEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJ
bnRTaXplKDAsIDEwKSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNU
X1RSVUUobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RD
b21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nl
c0NoaWxkKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgY2hpbGQtPnNl
dFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY2hpbGQtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNp
emUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNo
aWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwg
MTApKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIG1faG9zdEltcGwtPnNldFJv
b3RMYXllcihyb290KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoMTUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAg
IEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2Rp
ZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNj
cm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGUpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKHRy
dWUpOworICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsK
KyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxh
eWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIG1faG9z
dEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwg
MTApOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1
KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBs
LT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFj
dG9yQW5kTGltaXRzKDIsIDEsIDIpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0
byB0aGUgcm9vdCBzY3JvbGwgZGVsdGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+
IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgRVhQ
RUNUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgSW50U2l6ZShzY3JvbGxEZWx0YS53
aWR0aCgpICogMiwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKiAyKSk7Cit9CisKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGUpCit7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IHNjcm9sbFJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDAp
OworICAgIHNjcm9sbFJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgY2hpbGQtPnNldFNj
cm9sbGFibGUodHJ1ZSk7CisgICAgY2hpbGQtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUo
MTAwLCAxMDApKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNoaWxk
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTAp
KSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoc2Nyb2xsUm9vdCk7CisgICAgc2Nyb2xsUm9vdC0+YWRk
Q2hpbGQoY2hpbGQpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxSb290KTsK
KworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEVYUEVDVF9FUShtX2hvc3RJ
bXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDIsIDEsIDIpOworCisg
ICAgLy8gVGhlIHNjYWxlIHNob3VsZCBub3QgYXBwbHkgdG8gdGhlIGNoaWxkIHNjcm9sbCBkZWx0
YS4KKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdElt
cGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5m
by5nZXQoKSwgY2hpbGQtPmlkKCksIHNjcm9sbERlbHRhKTsKK30KKwogY2xhc3MgQmxlbmRTdGF0
ZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1Ymxp
YzoKICAgICBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQoKSA6IG1fYmxlbmQoZmFsc2UpIHsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHAKaW5kZXggMzZmZDdkYmQwN2JkYzdjZjFjODYxZmQ4MmFlYmMyYjA4NGEwM2EzMy4uZmEw
YTliMWNkNTliNzEyMGYwNThlMzM3YmVhNzhhOWVkYTViZmVlOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC05MjIs
NiArOTIyLDEyMCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldFZpc2libGUsIHJ1bk11
bHRpVGhyZWFkKQogICAgIHJ1blRlc3QodHJ1ZSk7CiB9CiAKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxCYXNlIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1f
cm9vdFNjcm9sbExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX3Jv
b3RTY3JvbGxMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9v
dFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxM
YXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RTY3JvbGxMYXllcik7
CisgICAgICAgIG1fY2hpbGRMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAg
ICAgbV9jaGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9j
aGlsZExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNl
dE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9yb290U2Ny
b2xsTGF5ZXItPmFkZENoaWxkKG1fY2hpbGRMYXllcik7CisgICAgICAgIHBvc3RTZXROZWVkc0Nv
bW1pdFRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9s
bEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCkKKyAgICB7CisgICAg
ICAgIEludFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biArIHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkK
KyAgICB7CisgICAgfQorcHJvdGVjdGVkOgorICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2No
aWxkTGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOwor
fTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKCkKKyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAx
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9y
b290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBp
ZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9F
UShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigp
LCBJbnRQb2ludCgpICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsK
KyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQ
RUNUX1RSVUUoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpKTsKKyAgICAgICAgICAg
IGltcGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9s
bEVuZCgpOworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAg
ICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IEludFNpemUg
bV9zY3JvbGxBbW91bnQ7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENo
aWxkTGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQor
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0IDog
cHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlIHsKK3B1YmxpYzoKKyAgICBDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0KCkKKyAgICAgICAgOiBt
X2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24oMTAsIDEwKQorICAgICAgICAsIG1faW5pdGlhbENo
aWxkU2Nyb2xsUG9zaXRpb24oMjAsIDApCisgICAgICAgICwgbV9zY3JvbGxBbW91bnQoLTI1LCAt
NSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgewor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KCk7CisgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxSb290U2Ny
b2xsUG9zaXRpb24pOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1f
aW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAg
ICAgICAgQ0NMYXllckltcGwqIHJvb3QgPSBpbXBsLT5yb290TGF5ZXIoKTsKKyAgICAgICAgICAg
IENDTGF5ZXJJbXBsKiBzY3JvbGxSb290ID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAg
ICAgICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IHNjcm9sbFJvb3QtPmNoaWxkcmVuKClbMF0u
Z2V0KCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Nyb2xsUG9zaXRpb24o
KSwgbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShz
Y3JvbGxSb290LT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKDAsIC01KSk7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoY2hpbGQtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9z
aXRpb24pOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxkLT5zY3JvbGxEZWx0YSgpLCBJbnRT
aXplKC0yMCwgMCkpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdM
YXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAg
ICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJV
RShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSkpOworICAgICAgICAgICAgaW1wbC0+
c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7
CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAg
ICAgZW5kVGVzdCgpOworICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0
aWFsUm9vdFNjcm9sbFBvc2l0aW9uOworICAgIGNvbnN0IEludFBvaW50IG1faW5pdGlhbENoaWxk
U2Nyb2xsUG9zaXRpb247CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0LCBy
dW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsKK30KKwogY2xhc3MgVGVz
dE9wYWNpdHlDaGFuZ2VMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CiBw
dWJsaWM6CiAgICAgVGVzdE9wYWNpdHlDaGFuZ2VMYXllckRlbGVnYXRlKENDTGF5ZXJUcmVlSG9z
dFRlc3QqIHRlc3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119285</attachid>
            <date>2011-12-14 13:33:25 -0800</date>
            <delta_ts>2011-12-16 15:11:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20111214213323.patch</filename>
            <type>text/plain</type>
            <size>39772</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVjMTc4Nzg3N2U2N2U2
ZjhkODAxY2NjNzYzYmJiMjdhNzE5OGIxYi4uYmQ1YzUxNGFiOWJlY2MyNzg2NmY4Y2Y3N2Q3M2Vj
NTI1MTc2OWQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDExLTEyLTEyICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMTAyNjQ4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwNjMxNzMz
OGE3NTNlYzQ2YmVlMjg4YTliMDFjZWZkYzk5Li44ZDY4M2QzZmM1NDE5ZDk2M2I5MjRlOWQzZDJj
MDEwZGYzNTM4MDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBA
CisyMDExLTEyLTA5ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9z
aXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTczMzUwCisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBs
YXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFy
ZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAg
c3luY2hyb25pemVkIHRvIHRoZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAg
ICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rp
b24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3Rl
YWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oOgorICAg
ICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21l
Q2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkNocm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKiBzcmMv
Q2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseVJvb3RMYXll
clNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6
OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5o
OgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
Lmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseVJvb3RMYXllclNjcm9s
bEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseUxheWVyU2Nyb2xsKToK
KyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFwcGx5Um9vdExheWVyU2Ny
b2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YXBw
bHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxT
aW1wbGU6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRyYXc6OmFwcGx5Um9vdExheWVyU2Nyb2xs
QW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6
YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6
OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlTY3JvbGxUb0NoaWxkTGF5ZXIpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNP
bkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6Q0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmJlZ2luVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6
OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKwog
MjAxMS0xMi0xMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBX
ZWJLaXQgY29kZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBhcHBseUNvbW1hbmQgZGlyZWN0bHkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjQ1ZTEyNTk1NzNmOWVkMzU3MWI2MWEwMWU4MzBjNWVk
ZTQ0ZjI4Yi4uYzczM2FhOTc3ODExZjg4ZmEyNDUxYTRiZDEyYzIxOWZjZTdmNjFmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM5MCw2ICszOTAsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06
OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGxheWVyLT5zZXRQb3Np
dGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0Qo
KSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAg
IGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNjcm9sbFBvc2l0aW9uKTsKICAgICBs
YXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7CiAgICAgbGF5
ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFVwZGF0ZVJlY3Qo
bV91cGRhdGVSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA5YzdhNGY4ZjQ3OTI4OWRhMDU5
MTM3Yjc5YmIxNWQ2YmQxN2Q1MWVlLi4xZmY5OGY1NDg0ODQ0YzRmNGI2YWZkMDc2YjFhMjYzYjg0
MDQ3NTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUJp
bmRpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKQEAgLTEzMiw2ICsx
MzMsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKyAgICB2b2lkIHNl
dE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKSB7IG1f
bWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsgfQorCisgICAgTm9kZSogc2Ny
b2xsTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTm9kZS5nZXQoKTsgfQorICAgIHZvaWQg
c2V0U2Nyb2xsTm9kZShQYXNzUmVmUHRyPE5vZGU+IHNjcm9sbE5vZGUpIHsgbV9zY3JvbGxOb2Rl
ID0gc2Nyb2xsTm9kZTsgfQorCiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wpOwogICAgIGJv
b2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogCkBAIC0yNTUs
NiArMjYyLDggQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3Qg
bV92aXNpYmxlTGF5ZXJSZWN0OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisgICAg
SW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOworICAgIFJlZlB0cjxOb2RlPiBtX3Njcm9sbE5v
ZGU7CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwog
ICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRl
eCBhZjA0MmU1NjY5YjQ2MmZiNmMwOWRlNmZjM2Q0Y2Y0YjZkODRlOTJkLi42N2FkNmNhMWViNmEx
ZmI5OWE0NWQ1NWI0NjkwZDA5ZjkyMjZlNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBA
IC0xMjIsOSArMTIyLDkgQEAgdm9pZCBDQ0xheWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12
b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpCit2b2lkIEND
TGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCkKIHsKLSAgICBJbnRT
aXplIG5ld0RlbHRhID0gbV9zY3JvbGxEZWx0YSArIHNjcm9sbDsKKyAgICBGbG9hdFNpemUgbmV3
RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Nyb2xsOwogICAgIEludFNpemUgbWluRGVsdGEgPSAt
dG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIEludFNpemUgbWF4RGVsdGEgPSBtX21heFNj
cm9sbFBvc2l0aW9uIC0gdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIC8vIENsYW1wIG5l
d0RlbHRhIHNvIHRoYXQgcG9zaXRpb24gKyBkZWx0YSBzdGF5cyB3aXRoaW4gc2Nyb2xsIGJvdW5k
cy4KQEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxEZWx0
YShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3ZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9s
bERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgaWYgKG1fc2Nyb2xs
RGVsdGEgPT0gc2Nyb2xsRGVsdGEpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IGUyYzAwYzg2ODk4MmE3NmM2NThjYWU4MzQxMGU4NWJjY2RjZjgwOWYuLjY5ZDYwZGJl
NGM4ZDUyOWQzM2Q5ODBlOGNjN2Q0NDM3OTg3NmUwODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMTU3LDE2ICsxNTcsMTYgQEAgcHVibGljOgogICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9s
bFBvc2l0aW9uKCkgY29uc3Qge3JldHVybiBtX21heFNjcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9p
ZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikg
eyBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247IH0KIAotICAgIGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQot
ICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEZsb2F0
U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbERlbHRhOyB9CisgICAg
dm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBGbG9hdFNpemUmKTsKIAogICAgIGZsb2F0IHBhZ2VT
Y2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVEZWx0YTsgfQogICAgIHZvaWQg
c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwogCi0gICAgY29uc3QgSW50U2l6ZSYgc2VudFNjcm9s
bERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Nyb2xsRGVsdGE7IH0KLSAgICB2b2lkIHNl
dFNlbnRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBzZW50U2Nyb2xsRGVsdGEpIHsgbV9zZW50
U2Nyb2xsRGVsdGEgPSBzZW50U2Nyb2xsRGVsdGE7IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIHNl
bnRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudFNjcm9sbERlbHRhOyB9CisgICAg
dm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJiBzZW50U2Nyb2xsRGVsdGEp
IHsgbV9zZW50U2Nyb2xsRGVsdGEgPSBzZW50U2Nyb2xsRGVsdGE7IH0KIAotICAgIHZvaWQgc2Ny
b2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsKTsKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEZs
b2F0U2l6ZSYgc2Nyb2xsKTsKIAogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsYWJsZTsgfQogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUp
IHsgbV9zY3JvbGxhYmxlID0gc2Nyb2xsYWJsZTsgfQpAQCAtMjUwLDggKzI1MCw4IEBAIHByaXZh
dGU6CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50OwogCi0gICAgSW50U2l6ZSBtX3Njcm9sbERl
bHRhOwotICAgIEludFNpemUgbV9zZW50U2Nyb2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2Ny
b2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2VudFNjcm9sbERlbHRhOwogICAgIEludFNpemUg
bV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBmbG9hdCBtX3BhZ2VTY2FsZURlbHRhOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAyN2Q5NTZhN2M3YWZiZDA5NWRiOTQ1Yjkz
NGExNjZlZmE1NWYzNzRmLi4zZGUyOGVhN2QxZTEwZDFiNzZmMzE5ODRiNjBlMzM2MWU2YmViY2Qz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJC
b3guaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXpl
ci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgpAQCAtNDQ5LDE1ICs0
NTAsNDIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAg
bV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNj
cm9sbEFuZFNjYWxlKGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8pCitzdGF0aWMgTGF5
ZXJDaHJvbWl1bSogZmluZExheWVyQnlJZChMYXllckNocm9taXVtKiBsYXllciwgaW50IGlkKQog
ewotICAgIC8vIEZJWE1FOiBwdXNoaW5nIHNjcm9sbCBvZmZzZXRzIHRvIG5vbi1yb290IGxheWVy
cyBub3QgaW1wbGVtZW50ZWQKLSAgICBpZiAoIWluZm8uc2Nyb2xscy5zaXplKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChs
YXllci0+aWQoKSA9PSBpZCkKKyAgICAgICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBM
YXllckNocm9taXVtKiBmb3VuZCA9IGZpbmRMYXllckJ5SWQobGF5ZXItPmNoaWxkcmVuKClbaV0u
Z2V0KCksIGlkKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5k
OworICAgIH0KIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9j
bGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVs
dGEpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3Jv
bGxBbmRTY2FsZShjb25zdCBDQ1Njcm9sbEFuZFNjYWxlU2V0JiBpbmZvKQoreworICAgIGlmICgh
aW5mby5yb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkgfHwgaW5mby5wYWdlU2NhbGVEZWx0YSAhPSAx
KQorICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShpbmZvLnJvb3RTY3JvbGxE
ZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGluZm8uc2Nyb2xscy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBsYXll
ciA9IGZpbmRMYXllckJ5SWQobV9yb290TGF5ZXIuZ2V0KCksIGluZm8uc2Nyb2xsc1tpXS5sYXll
cklkKTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkgKyBpbmZv
LnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOworICAgICAgICBpZiAoIWxheWVyLT5zY3JvbGxOb2Rl
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGxheWVyLT5z
Y3JvbGxOb2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+cmVu
ZGVyZXIoKS0+aXNCb3goKSB8fCAhbGF5ZXItPnNjcm9sbE5vZGUoKS0+aW5Eb2N1bWVudCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9S
ZW5kZXJCb3gobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgICAgIHJlbmRlckJveC0+c2V0U2Nyb2xs
TGVmdChyZW5kZXJCb3gtPnNjcm9sbExlZnQoKSArIGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0
YS53aWR0aCgpKTsKKyAgICAgICAgcmVuZGVyQm94LT5zZXRTY3JvbGxUb3AocmVuZGVyQm94LT5z
Y3JvbGxUb3AoKSArIGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YS5oZWlnaHQoKSk7CisgICAg
fQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
aW5kZXggMmUwY2JjZjJjNTg1ZTgyMTVkMjg2ZGVlOWI2MWU1MzUxODBjZmZhZC4uMGQyNDZmNTM5
MzUwNTVhNjk1MDQ4NjkxNmFjMzIyN2VjYWQ0NWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogCiBzdHJ1Y3QgQ0NT
Y3JvbGxBbmRTY2FsZVNldCB7CiAgICAgVmVjdG9yPENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Ny
b2xsVXBkYXRlSW5mbz4gc2Nyb2xsczsKKyAgICBJbnRTaXplIHJvb3RTY3JvbGxEZWx0YTsKICAg
ICBmbG9hdCBwYWdlU2NhbGVEZWx0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKaW5kZXggZTBjZDM4OWRjNmY4ZGY5NDA4YTljMDU1MWU0MDZlZmJkMWRmMmIw
ZC4uNmJkODAxNDk2YmEwMmYxOGNlMzY4ZTIyMDk0NjI5ZjUzZDI3YmJlYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTczLDYgKzczLDE0IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbW1pdENvbXBsZXRlKCkKIHsKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBzY3JvbGxpbmcg
bGF5ZXIgaXMgc3RpbGwgcHJlc2VudCBpbiB0aGUgdHJlZS4KKyAgICBpZiAobV9jdXJyZW50bHlT
Y3JvbGxpbmdMYXllckltcGwpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJvb3QgPSBtX2N1cnJl
bnRseVNjcm9sbGluZ0xheWVySW1wbC5nZXQoKTsKKyAgICAgICAgd2hpbGUgKHJvb3QtPnBhcmVu
dCgpKQorICAgICAgICAgICAgcm9vdCA9IHJvb3QtPnBhcmVudCgpOworICAgICAgICBpZiAocm9v
dCAhPSBtX3Jvb3RMYXllckltcGwpCisgICAgICAgICAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xh
eWVySW1wbC5jbGVhcigpOworICAgIH0KICAgICAvLyBSZWNvbXB1dGUgbWF4IHNjcm9sbCBwb3Np
dGlvbjsgbXVzdCBiZSBhZnRlciBsYXllciBjb250ZW50IGJvdW5kcyBhcmUKICAgICAvLyB1cGRh
dGVkLgogICAgIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CkBAIC04OCw3ICs5Niw3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykK
ICAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBJ
bnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3Np
dGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkg
KyBmbG9vcmVkSW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKIAog
ICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRp
bWUoZnJhbWVCZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Ny
b2xsID0gbV9wYWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2lu
VGltZU1zKTsKQEAgLTEwNyw3ICsxMTUsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0
YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAg
IGlmICghbV9zY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkg
KyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29y
ZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogICAgIHNjcm9s
bFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlVG90YWwgPSBt
X3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2FsZWRDb250ZW50
U2l6ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7
CkBAIC0xOTQsOCArMjAyLDYgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIo
Q0NMYXllckltcGwqIGxheWVyKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5
ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBs
ID0gbGF5ZXI7Ci0KLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhl
IGZpcnN0IHNjcm9sbGFibGUgbGF5ZXIuCiAgICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Ny
b2xsTGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKIH0KIApAQCAtMjYzLDE1ICsyNjksMTMg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMo
ZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjph
ZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKIHsK
LSAgICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEpCisgICAgaWYgKCFtX3Njcm9sbExheWVySW1w
bCB8fCBwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2Ug
YWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxl
IHNwYWNlLgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBJbnRTaXplIHNj
cm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgICAgIHNj
cm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIC8vIFdlIGFsc28g
bmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGEgZm9yIHRoZSByb290IGxheWVy
IHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2Nh
bGVDaGFuZ2UpOworICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxE
ZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEo
ZmxvYXQgZGVsdGEpCkBAIC0zMTMsOSArMzE3LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5nIGEgdmVydGljYWwgc2Ny
b2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1heFNjcm9sbC5jbGFtcE5l
Z2F0aXZlVG9aZXJvKCk7CiAKKyAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSByb290
IGxheWVyIHNjcm9sbCByYW5nZSwgc2luY2UgdGhlIGNoaWxkCisgICAgLy8gbGF5ZXJzIHVzZSB1
bnNjYWxlZCBzY3JvbGwgY29vcmRpbmF0ZXMuCiAgICAgbV9zY3JvbGxMYXllckltcGwtPnNldE1h
eFNjcm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6IEFsc28g
dXBkYXRlIHN1YmxheWVycy4KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRab29t
QW5pbWF0b3JUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHpvb20pCkBAIC0z
MzYsMjggKzM0MCw5MCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3
KCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAotQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3Jv
bGxCZWdpbihjb25zdCBJbnRQb2ludCYpCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29u
dGVudFBvaW50V2l0aGluTGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCwgY29uc3QgSW50UG9p
bnQmIGNvbnRlbnRQb2ludCkgY29uc3QKIHsKLSAgICAvLyBUT0RPOiBDaGVjayBmb3Igc2Nyb2xs
YWJsZSBzdWJsYXllcnMuCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCAhbV9zY3JvbGxM
YXllckltcGwtPnNjcm9sbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7Cisg
ICAgSW50UmVjdCBsYXllckNvbnRlbnRSZWN0KGxheWVySW1wbC0+dmlzaWJsZUxheWVyUmVjdCgp
KTsKKyAgICAvLyBUaGUgdmlzaWJsZSBsYXllciByZWN0IGlzIGluIHNjYWxlZCBjb29yZGluYXRl
cywgc28gdW5kbyB0aGUgcGFnZSBzY2FsZS4gTm90ZSB0aGF0IHRoZXJlIGlzCisgICAgLy8gbm8g
bmVlZCB0byB1bmRvIHRoZSBwYWdlIHNjYWxlIGRlbHRhLCBiZWNhdXNlIHRoZSBsYXllciBjb250
ZW50IHJlY3QgaXMgb25seSBzY2FsZWQgd2l0aCB0aGUKKyAgICAvLyBvcmlnaW5hbCBwYWdlIHNj
YWxlLgorICAgIGxheWVyQ29udGVudFJlY3Quc2NhbGUoMSAvIG1fcGFnZVNjYWxlKTsKKyAgICBy
ZXR1cm4gbGF5ZXJDb250ZW50UmVjdC5jb250YWlucyhjb250ZW50UG9pbnQpOworfQorCitDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2lu
U2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGNv
bnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50KQoreworICAgIGlmICghbGF5ZXJJbXBsKQorICAg
ICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7IGkrKykg
eworICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHN0YXR1cyA9IGJl
Z2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KGxheWVySW1wbC0+Y2hpbGRyZW4oKVtp
XS5nZXQoKSwgdmlld3BvcnRQb2ludCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQgfHwgc3RhdHVzID09IENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KIAot
ICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIEludFBvaW50IGNvbnRlbnRQb2ludChsYXll
ckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHZpZXdwb3J0
UG9pbnQpKTsKKyAgICBpZiAobGF5ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSAmJiAhaXNDb250ZW50
UG9pbnRXaXRoaW5MYXllcihsYXllckltcGwsIGNvbnRlbnRQb2ludCkpCisgICAgICAgIHJldHVy
biBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKKworICAgIGlmIChsYXllcklt
cGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1w
bCA9IGxheWVySW1wbDsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGFydGVkOworICAgIH0KKworICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsSWdub3JlZDsKK30KKworQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2lu
dCkKK3sKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigpOworICAgIHJl
dHVybiBiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludChtX3Njcm9sbExheWVySW1w
bC5nZXQoKSwgdmlld3BvcnRQb2ludCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5IiwgdGhpcywgMCk7Ci0gICAgaWYgKCFtX3Nj
cm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkoc2Nyb2xs
RGVsdGEpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAg
IG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIEludFNpemUgcGVu
ZGluZ0RlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gbV9j
dXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuZ2V0KCk7CisgICAgd2hpbGUgKGxheWVySW1wbCAm
JiAhcGVuZGluZ0RlbHRhLmlzWmVybygpKSB7CisgICAgICAgIGlmIChsYXllckltcGwtPnNjcm9s
bGFibGUoKSkgeworICAgICAgICAgICAgRmxvYXRTaXplIHByZXZpb3VzRGVsdGEobGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBzY2FsZWRQZW5kaW5nRGVs
dGEocGVuZGluZ0RlbHRhKTsKKyAgICAgICAgICAgIC8vIFNpbmNlIHNjcm9sbERlbHRhIGlzIGlu
IHdpbmRvdyBjb29yZGluYXRlcywgaXQgYWxyZWFkeSBoYXMgdGhlIHBhZ2Ugc2NhbGUgYXBwbGll
ZC4KKyAgICAgICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSByb290IHNjcm9sbCBsYXll
ciBleHBlY3RzLCBidXQgY2hpbGQgbGF5ZXJzIGFyZSBzY3JvbGxlZCB1c2luZworICAgICAgICAg
ICAgLy8gdW5zY2FsZWQgY29udGVudCBjb29yZGluYXRlcyBpbnN0ZWFkLCBzbyB3ZSBoYXZlIHRv
IHVuZG8gdGhlIHNjYWxpbmcgZm9yIHRoZW0uIFRoZQorICAgICAgICAgICAgLy8gcGFnZSBzY2Fs
ZSBkZWx0YSBuZWVkcyB0byBiZSB1bmFwcGxpZWQgd2l0aCBib3RoIGxheWVyIHR5cGVzIHNpbmNl
IHRoZSBzY3JvbGwKKyAgICAgICAgICAgIC8vIGNvb3JkaW5hdGVzIGRvIG5vdCByZXNwZWN0IGl0
LgorICAgICAgICAgICAgaWYgKGxheWVySW1wbCA9PSBtX3Njcm9sbExheWVySW1wbCkgeworICAg
ICAgICAgICAgICAgIHNjYWxlZFBlbmRpbmdEZWx0YS5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0
YSk7CisgICAgICAgICAgICAgICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVs
dGEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY2FsZWRQZW5kaW5n
RGVsdGEuc2NhbGUoMSAvIChtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGEpKTsKKyAgICAg
ICAgICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHNjYWxlZFBlbmRpbmdEZWx0YSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBSZXNldCB0aGUgcGVuZGluZyBzY3JvbGwgZGVsdGEg
dG8gemVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8gbW92ZSBhbG9uZyB0aGUgcmVxdWVzdGVk
CisgICAgICAgICAgICAvLyBheGlzLiBUaGlzIGlzIHRvIGVuc3VyZSBpdCBpcyBwb3NzaWJsZSB0
byBzY3JvbGwgZXhhY3RseSB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBhCisgICAgICAgICAg
ICAvLyBzY3JvbGwgYXJlYSByZWdhcmRsZXNzIG9mIHRoZSBzY3JvbGwgc3RlcC4gRm9yIGRpYWdv
bmFsIHNjcm9sbHMgdGhpcyBhbHNvIGF2b2lkcyBhcHBseWluZworICAgICAgICAgICAgLy8gdGhl
IHNjcm9sbCBvbiBvbmUgYXhpcyB0byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICBpZiAo
cHJldmlvdXNEZWx0YS53aWR0aCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgp
KQorICAgICAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAg
IGlmIChwcmV2aW91c0RlbHRhLmhlaWdodCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5o
ZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0SGVpZ2h0KDApOworICAg
ICAgICB9CisgICAgICAgIGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCk7CisgICAgfQor
CisgICAgaWYgKHBlbmRpbmdEZWx0YSAhPSBzY3JvbGxEZWx0YSkgeworICAgICAgICBtX2NsaWVu
dC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5l
ZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNjcm9sbEVuZCgpCiB7CisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwu
Y2xlYXIoKTsKIH0KIAogYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpoYXZlV2hlZWxFdmVudEhh
bmRsZXJzKCkKQEAgLTQwMCwyNSArNDY2LDQ4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
cGluY2hHZXN0dXJlRW5kKCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJl
YWQoKTsKIH0KIAorc3RhdGljIGJvb2wgZGlkU2Nyb2xsU3VidHJlZShDQ0xheWVySW1wbCogbGF5
ZXJJbXBsKQoreworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJ
bXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBpZiAoZGlkU2Nyb2xsU3VidHJl
ZShsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xh
eWVySW1wbCogbGF5ZXJJbXBsKSBjb25zdAoreworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxE
ZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSB0b1NpemUo
Zmxvb3JlZEludFBvaW50KGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOworICAgICAgICBpZiAo
bGF5ZXJJbXBsICE9IG1fc2Nyb2xsTGF5ZXJJbXBsKSB7CisgICAgICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOworICAgICAgICAgICAgc2Nyb2xs
LmxheWVySWQgPSBsYXllckltcGwtPmlkKCk7CisgICAgICAgICAgICBzY3JvbGwuc2Nyb2xsRGVs
dGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5k
KHNjcm9sbCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2Nyb2xsSW5mby0+cm9vdFNj
cm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAgIGxheWVySW1wbC0+c2V0U2VudFNjcm9s
bERlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgfQorCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAg
IGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mbywgbGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ld
LmdldCgpKTsKK30KKwogUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKIHsKICAgICBPd25QdHI8Q0NTY3JvbGxB
bmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0UHRyKG5ldyBDQ1Njcm9sbEFuZFNjYWxlU2V0
KCkpOwotICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsICYmICghbV9zY3JvbGxM
YXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAx
LjBmKTsKKyAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoZGlkU2Nyb2xs
U3VidHJlZShtX3Njcm9sbExheWVySW1wbC5nZXQoKSkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAx
LjBmKTsKICAgICBpZiAoIWRpZE1vdmUgfHwgbV9waW5jaEdlc3R1cmVBY3RpdmUgfHwgbV9wYWdl
U2NhbGVBbmltYXRpb24pIHsKICAgICAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJ
bmZvLT5wYWdlU2NhbGVEZWx0YSA9IDE7CiAgICAgICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVh
c2UoKTsKICAgICB9CiAKKyAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8uZ2V0KCks
IG1fc2Nyb2xsTGF5ZXJJbXBsLmdldCgpKTsKICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNj
cm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gbV9wYWdlU2NhbGVEZWx0YTsKIAotICAgIC8vIEZJ
WE1FOiB0cmFjayBzY3JvbGxzIGZyb20gbGF5ZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9s
bC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERl
bHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgc2Nyb2xsSW5mby0+
c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50
U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZv
LnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4
IDg4N2M3ZTY1NTc3ZTc5ZTBlMjhhZDA3ODhiZTIzMmQ3NTdhNGMyM2YuLmY3ZDFiN2YzZTcxMzUx
ZGI5NTkwMWZhYmRiZDY4ZWNjOTMwOTU0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKQEAgLTEyOCwxMCArMTI4LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVBh
Z2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwogICAgIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBh
Z2VTY2FsZUNoYW5nZShmbG9hdCk7CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigp
OworICAgIGJvb2wgaXNDb250ZW50UG9pbnRXaXRoaW5MYXllcihDQ0xheWVySW1wbCosIGNvbnN0
IEludFBvaW50JiBjb250ZW50UG9pbnQpIGNvbnN0OworICAgIFNjcm9sbFN0YXR1cyBiZWdpblNj
cm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludChDQ0xheWVySW1wbCosIGNvbnN0IEludFBvaW50
Jik7CisgICAgdm9pZCBjb2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqLCBD
Q0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
bV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBs
OwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9zY3JvbGxMYXllckltcGw7CisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKICAgICBDQ1NldHRp
bmdzIG1fc2V0dGluZ3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBib29sIG1f
dmlzaWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggNzJi
ZWMyYTcxNjY0YWY0M2NkNjRkMDE0ZDI4Yjg0MjY1MDk1YjIwMy4uYTZjYTZmNzAyMTI3ZWM3MmU5
NjY1OWIwY2ZjMmQ3YzAwYmFkNzY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAKQEAgLTE2NSw2ICsxNjUsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmRv
Q29tbWl0KCkKICAgICAgICAgLy8gSW4gdGhlIHNpbmdsZS10aHJlYWRlZCBjYXNlLCB0aGUgc2Ny
b2xsIGRlbHRhcyBzaG91bGQgbmV2ZXIgYmUKICAgICAgICAgLy8gdG91Y2hlZCBvbiB0aGUgaW1w
bCBsYXllciB0cmVlLgogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xs
SW5mbyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICAg
ICAgQVNTRVJUKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSk7CiAgICAgICAg
IEFTU0VSVCghc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCkpOwogI2VuZGlmCiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRleCBk
ZmE4YjI0YjRhNjQ0MDgyNjZhNjA4ZjA5YzlhNjMxMWM1ODQ4YTA1Li4yNDcyNjExZWIzZTU1MmU2
ODIwZjUzZDg1M2RkMWJjYjc3MWUzNDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlBvcHVwQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAi
UG9wdXBNZW51Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUg
IlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJTZWFyY2hQb3B1cE1lbnVDaHJvbWl1bS5oIgpAQCAtODQ0LDYgKzg0NSwyMyBAQCBib29sIENo
cm9tZUNsaWVudEltcGw6OnBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBDaHJvbWVDbGll
bnRJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKE5vZGUqIG5vZGUsIFBsYXRmb3JtTGF5
ZXIqIHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyLCBjb25zdCBJ
bnRTaXplJiBzY3JvbGxTaXplKQoreworICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKS0+aXNCb3go
KSkKKyAgICAgICAgcmV0dXJuOworICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJC
b3gobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgY29udGVudHNMYXllci0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKKyAgICBjb250ZW50c0xheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludChub2Rl
LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSkp
OworICAgIGNvbnRlbnRzTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoc2Nyb2xs
U2l6ZS53aWR0aCgpIC0gcmVuZGVyQm94LT5jbGllbnRXaWR0aCgpLCBzY3JvbGxTaXplLmhlaWdo
dCgpIC0gcmVuZGVyQm94LT5jbGllbnRIZWlnaHQoKSkpOworICAgIGNvbnRlbnRzTGF5ZXItPnNl
dFNjcm9sbE5vZGUobm9kZSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6cmVtb3ZlU2Ny
b2xsaW5nTGF5ZXIoTm9kZSogbm9kZSwgUGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFBs
YXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpCit7CisgICAgY29udGVudHNMYXllci0+c2V0U2Ny
b2xsYWJsZShmYWxzZSk7CisgICAgY29udGVudHNMYXllci0+c2V0U2Nyb2xsTm9kZSgwKTsKK30K
KwogLy8gRklYTUU6IFJlbW92ZSBDaHJvbWVDbGllbnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uRm9yRnJhbWUgYW5kIENocm9tZUNsaWVudEltcGw6OmNhbmNlbEdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZQogLy8gb25jZSBhbGwgcG9ydHMgaGF2ZSBtb3ZlZCB0
byBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24gKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDAzNzMgKS4KIC8vIEZvciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24s
IHRoZXNlIG1ldGhvZHMgYXJlIG5vdyBpbXBsZW1lbnRlZCBhcyBXZWJHZW9sb2NhdGlvbkNsaWVu
dDo6cmVxdWVzdFBlcm1pc3Npb24gYW5kIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpjYW5jZWxQZXJt
aXNzaW9uUmVxdWVzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuaAppbmRleCA5ZmE5MmVmZTAxYmZiZmQ2ZjNkODQzOWEwNjNhZTAyNWNmNWE5ZDdmLi4w
ZDNmM2I2ODIxNGVkOWU5Njg0ZWQwMmNiNWZlODQyMzdiOWFjMWZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCkBAIC0zMyw2ICszMyw3IEBACiAj
ZGVmaW5lIENocm9tZUNsaWVudEltcGxfaAogCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50Q2hyb21p
dW0uaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Lmgi
CiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCiAKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIEVsZW1lbnQ7
CiBjbGFzcyBGaWxlQ2hvb3NlcjsKK2NsYXNzIE5vZGU7CiBjbGFzcyBQb3B1cENvbnRhaW5lcjsK
IGNsYXNzIFBvcHVwTWVudUNsaWVudDsKIGNsYXNzIFJlbmRlckJveDsKQEAgLTEzMiw2ICsxMzQs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50
NjRfdCBzcGFjZU5lZWRlZCk7CiAgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qLCBpbnQ2NF90IHRvdGFsU3Bh
Y2VOZWVkZWQpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbU92ZXJoYW5nQXJlYShXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UGxh
dGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGNvbnRl
bnRzTGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbFNpemUpOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UGxh
dGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGNvbnRl
bnRzTGF5ZXIpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9u
Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogICAgIHZp
cnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoV2Vi
Q29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogICAgIHZpcnR1YWwgdm9pZCBy
dW5PcGVuUGFuZWwoV2ViQ29yZTo6RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9v
c2VyPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGU4MzVhYjc4OWJmZDI5ZTc0ZDA4Y2Q3YTFmZTIx
MzczZTYwNWE1MmUuLmZjYjcyODVlM2I4NjIwYjYyNDFlMjk5ZTg5MzA1ZGQxNjQ3ODhjZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QuY3BwCkBAIC0xMjUsMTYgKzEyNSwxNiBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHNjcm9sbERlbHRhUmVwZWF0ZWRTY3JvbGxzKQogICAgIE93blB0cjxDQ1Nj
cm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvOwogCiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdElt
cGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Ny
b2xscy5zaXplKCksIDF1KTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXpl
KCksIDB1KTsKICAgICBFWFBFQ1RfRVEocm9vdC0+c2VudFNjcm9sbERlbHRhKCksIHNjcm9sbERl
bHRhKTsKLSAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgcm9vdC0+aWQoKSwg
c2Nyb2xsRGVsdGEpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEs
IHNjcm9sbERlbHRhKTsKIAogICAgIEludFNpemUgc2Nyb2xsRGVsdGEyKC01LCAyNyk7CiAgICAg
cm9vdC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEyKTsKICAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1w
bC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3Jv
bGxzLnNpemUoKSwgMXUpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUo
KSwgMHUpOwogICAgIEVYUEVDVF9FUShyb290LT5zZW50U2Nyb2xsRGVsdGEoKSwgc2Nyb2xsRGVs
dGEgKyBzY3JvbGxEZWx0YTIpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgp
LCByb290LT5pZCgpLCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7CisgICAgQVNTRVJUX0VR
KHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIp
OwogCiAgICAgcm9vdC0+c2Nyb2xsQnkoSW50U2l6ZSgpKTsKICAgICBzY3JvbGxJbmZvID0gbV9o
b3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwpAQCAtMTU1LDYgKzE1NSw5NCBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJh
dykKICAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOwogfQogCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RJZ25vcmVkKQoreworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0
U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOwor
ICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9k
aWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsK
K30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZENhbGxzQ29t
bWl0QW5kUmVkcmF3KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgY2hp
bGQtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY2hpbGQtPnNldE1heFNjcm9sbFBvc2l0aW9u
KEludFNpemUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwor
ICAgIGNoaWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6
ZSgxMCwgMTApKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIG1faG9zdEltcGwt
PnNldFJvb3RMYXllcihyb290KTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxC
ZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVk
KTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CisgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0UmVkcmF3KTsK
KyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0NoaWxkKQoreworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Ny
b2xsYWJsZShmYWxzZSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMCk7CisgICAgY2hpbGQtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY2hp
bGQtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+
c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNoaWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
Y2hpbGQpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKyAgICBFWFBFQ1Rf
RVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUsIDUpKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RS
ZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGUp
Cit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgw
KTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIHJvb3QtPnNldE1heFNjcm9s
bFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQo
dHJ1ZSk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCks
IEludFNpemUoMTAsIDEwKSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsK
KworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEVYUEVDVF9FUShtX2hvc3RJ
bXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDIsIDEsIDIpOworCisg
ICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgcm9vdCBzY3JvbGwgZGVsdGEuCisg
ICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5w
cm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3Jv
bGxEZWx0YSwgSW50U2l6ZShzY3JvbGxEZWx0YS53aWR0aCgpICogMiwgc2Nyb2xsRGVsdGEuaGVp
Z2h0KCkgKiAyKSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
Q2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGUpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHNjcm9s
bFJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHNjcm9sbFJvb3QtPnNldFNjcm9s
bGFibGUodHJ1ZSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMCk7CisgICAgY2hpbGQtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY2hpbGQt
PnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworICAgIGNoaWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoc2Ny
b2xsUm9vdCk7CisgICAgc2Nyb2xsUm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihzY3JvbGxSb290KTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEo
MCwgMTApOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1
LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJ
bXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxl
RmFjdG9yQW5kTGltaXRzKDIsIDEsIDIpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBub3Qg
YXBwbHkgdG8gdGhlIGNoaWxkIHNjcm9sbCBkZWx0YS4KKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRT
Y2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsK
KyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgY2hpbGQtPmlkKCksIHNjcm9s
bERlbHRhKTsKK30KKwogY2xhc3MgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgTW9j
a1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKICAgICBCbGVuZFN0YXRlVHJhY2tlckNv
bnRleHQoKSA6IG1fYmxlbmQoZmFsc2UpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMzZmZDdkYmQwN2JkYzdj
ZjFjODYxZmQ4MmFlYmMyYjA4NGEwM2EzMy4uZmEwYTliMWNkNTliNzEyMGYwNThlMzM3YmVhNzhh
OWVkYTViZmVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC05MjIsNiArOTIyLDEyMCBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0VGVzdFNldFZpc2libGUsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3QodHJ1
ZSk7CiB9CiAKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlIDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxl
KHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
SW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigp
LT5hZGRDaGlsZChtX3Jvb3RTY3JvbGxMYXllcik7CisgICAgICAgIG1fY2hpbGRMYXllciA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRCb3VuZHMo
SW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRTY3JvbGxhYmxlKHRy
dWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUo
MTAwLCAxMDApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPmFkZENoaWxkKG1fY2hpbGRM
YXllcik7CisgICAgICAgIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFpblRocmVhZCgpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhLCBmbG9hdCkKKyAgICB7CisgICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gbV9y
b290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExh
eWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiArIHNjcm9sbERlbHRhKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorcHJvdGVjdGVkOgor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NoaWxkTGF5ZXI7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOworfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJh
c2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKCkK
KyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAxKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwp
CisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0
aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVO
dW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0
aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRVEo
bV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpICsgbV9zY3JvbGxBbW91
bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xh
eWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVt
YmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoNSwgNSkpKTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1v
dW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgpOworICAgICAgICB9IGVsc2UgaWYg
KGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9
Citwcml2YXRlOgorICAgIGNvbnN0IEludFNpemUgbV9zY3JvbGxBbW91bnQ7Cit9OworCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQor
eworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQorCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxCYXNlIHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRM
YXllckJleW9uZExpbWl0KCkKKyAgICAgICAgOiBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24o
MTAsIDEwKQorICAgICAgICAsIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24oMjAsIDApCisg
ICAgICAgICwgbV9zY3JvbGxBbW91bnQoLTI1LCAtNSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRT
Y3JvbGxQb3NpdGlvbihtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24pOworICAgICAgICBtX2No
aWxkTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24p
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXll
clRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3Qt
PmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgQ0NMYXllckltcGwqIHJvb3QgPSBp
bXBsLT5yb290TGF5ZXIoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxSb290ID0g
cm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBjaGls
ZCA9IHNjcm9sbFJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoc2Nyb2xsUm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0
aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxSb290LT5zY3JvbGxEZWx0YSgpLCBJ
bnRTaXplKDAsIC01KSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoY2hpbGQtPnNjcm9sbFBvc2l0
aW9uKCksIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24pOworICAgICAgICAgICAgRVhQRUNU
X0VRKGNoaWxkLT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKC0yMCwgMCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9
PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2lu
dCg1LCA1KSkpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOwor
ICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+
ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KK3ByaXZh
dGU6CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uOworICAg
IGNvbnN0IEludFBvaW50IG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb247CisgICAgY29uc3Qg
SW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0LCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5U
ZXN0VGhyZWFkZWQoKTsKK30KKwogY2xhc3MgVGVzdE9wYWNpdHlDaGFuZ2VMYXllckRlbGVnYXRl
IDogcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgVGVzdE9wYWNpdHlDaGFu
Z2VMYXllckRlbGVnYXRlKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119683</attachid>
            <date>2011-12-16 15:11:34 -0800</date>
            <delta_ts>2011-12-19 12:13:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20111216231132.patch</filename>
            <type>text/plain</type>
            <size>47584</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNkMTI3NjgyZTA1Yjkz
MDFiZTljY2I5YjJkNmZhMjJmMDllNDg0Yy4uYTczMDdmYTBkNDVhNjU4ZmQ2NWQ2ZWZiM2ZkZmQ5
NTkxYjFlMDdjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDExLTEyLTE1ICBLZW50YXJv
IEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxMDI2
NjMpOiBnZW5lcmF0ZS1iaW5kaW5ncy5wbCBydW5zIGV2ZXJ5IHRpbWUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggNGVjMTJmYzg2Y2UyZjYwMjUwOTk4YmI2MDIwMTI0ZWU0MDdmMzZjZC4u
OTcyYTY0YjVkMDAyNjFiNzM3ZDllMWUyMjdhZDZkNjM5NTI1Y2M4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMS0xMi0wOSAgU2FtaSBLeW9zdGlsYSAg
PHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBs
YXllciBzY3JvbGxpbmcgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAorCisgICAgICAgIFRoaXMgcGF0
Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZC4KKyAgICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xs
ZWQgQ0NMYXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgV2ViVmlld0lt
cGwgaW4gdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAgIElmIGEgbGF5ZXIgaGFzIG5vIHJvb20g
dG8gc2Nyb2xsIGluIGEgZ2l2ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCisgICAgICAgIGFuY2Vz
dG9yIGxheWVycyBpcyBzY3JvbGxlZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dl
YkxheWVyVHJlZVZpZXdDbGllbnQuaDoKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmFkZE9yVXBkYXRlU2Nyb2xs
aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZW1vdmVTY3Jv
bGxpbmdMYXllcik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAg
KiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVWaWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAg
KiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUp
OgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJ
bXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6Cisg
ICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRl
c3RIb29rczo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OlRl
c3RIb29rczo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVI
b3N0Q2xpZW50OjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6
TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlOjphcHBseVJvb3RMYXllclNjcm9sbEFu
ZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRpcGxl
UmVkcmF3OjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxl
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5TGF5
ZXJTY3JvbGwpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6
YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6
OmFwcGx5U2Nyb2xsVG9DaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVy
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJl
Z2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxDaGlsZExheWVyOjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OlRF
U1RfRik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVy
QmV5b25kTGltaXQ6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGlt
aXQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJl
eW9uZExpbWl0OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0
OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisKIDIwMTEtMTItMTUgIE5hdCBEdWNhICA8bmR1Y2FA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQWRkIGZvclVzZU9uQW5vdGhlclRo
cmVhZCB0byBXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTNhMzljZGFmNjdiMDg4N2RiOWJiMzY4N2JlMWI0
YTBhZGMyMDgyMC4uYzI4NGRiMTlmNjE0ZDY0ODk3ZjU5YTdmZDNkNjlhMGQ5ZjFlOWM3ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw3IEBACiAj
aW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEu
aCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KQEAgLTcwLDYgKzcxLDcgQEAgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xh
eWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogCiBHcmFwaGljc0xheWVy
Q2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGll
bnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKKyAgICAsIG1fc2Nyb2xsYWJsZUFyZWEo
MCkKICAgICAsIG1fY29udGVudHNMYXllclB1cnBvc2UoTm9Db250ZW50c0xheWVyKQogICAgICwg
bV9jb250ZW50c0xheWVySGFzQmFja2dyb3VuZENvbG9yKGZhbHNlKQogICAgICwgbV9pblNldENo
aWxkcmVuKGZhbHNlKQpAQCAtNjg3LDYgKzY4OSwxNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6bm90aWZ5U3luY1JlcXVpcmVkKCkKICAgICAgICAgbV9jbGllbnQtPm5vdGlmeVN5bmNS
ZXF1aXJlZCh0aGlzKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNjcm9sbEJ5
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCgpKQorICAgICAg
ICBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGwoc2Nyb2xsRGVsdGEud2lkdGgoKSA+IDAgPyBTY3Jv
bGxSaWdodCA6IFNjcm9sbExlZnQsIFNjcm9sbEJ5UGl4ZWwsIGFicyhzY3JvbGxEZWx0YS53aWR0
aCgpKSk7CisgICAgaWYgKHNjcm9sbERlbHRhLmhlaWdodCgpKQorICAgICAgICBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGwoc2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwID8gU2Nyb2xsRG93biA6IFNj
cm9sbFVwLCBTY3JvbGxCeVBpeGVsLCBhYnMoc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBkZjI2OThhYmQ5
MWUzNzY1NmIxMjQ4YzdiOGI0ODJjYzE0ODc3NGZiLi4yOGFiNWYxYTU5MmMzYWQyODk0OWQxODY5
NTZiODQ2MjBiNTg1YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAt
NDAsNiArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNocm9taXVt
OworY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoK
QEAgLTEwMCw2ICsxMDEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRl
bnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKTsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1Jl
cXVpcmVkKCk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhKTsKKworICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0KKyAgICB2b2lkIHNldFNjcm9sbGFibGVBcmVhKFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkgeyBtX3Njcm9sbGFibGVBcmVhID0gc2Nyb2xs
YWJsZUFyZWE7IH0KIAogICAgIC8vIEV4cG9zZWQgZm9yIHRlc3RzLgogICAgIExheWVyQ2hyb21p
dW0qIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXIuZ2V0KCk7
IH0KQEAgLTEzOSw2ICsxNDQsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBtX3RyYW5zZm9ybUxheWVyOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NvbnRlbnRz
TGF5ZXI7CiAKKyAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3JvbGxhYmxlQXJlYTsKKwogICAgIGVu
dW0gQ29udGVudHNMYXllclB1cnBvc2UgewogICAgICAgICBOb0NvbnRlbnRzTGF5ZXIgPSAwLAog
ICAgICAgICBDb250ZW50c0xheWVyRm9ySW1hZ2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGI0NWUxMjU5NTczZjllZDM1NzFiNjFhMDFlODMwYzVlZGU0NGYyOGIuLjI4YWRlMzkzNTk2YTE4
NzE4YWM0YTE5NjFkZTQzY2FjMGMzZGNhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0z
OTAsNiArMzkwLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5
ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlvbik7CiAgICAg
bGF5ZXItPnNldFByZXNlcnZlczNEKHByZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3Jv
bGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9z
aXRpb24obV9tYXhTY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNm
b3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFu
c2Zvcm0pOwogICAgIGxheWVyLT5zZXRVcGRhdGVSZWN0KG1fdXBkYXRlUmVjdCk7CkBAIC00NDYs
NiArNDQ3LDEzIEBAIGJvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9s
bFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAg
IG1fZGVsZWdhdGUtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKK30KKwogdm9pZCBzb3J0TGF5ZXJz
KFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKQogewogICAgIC8vIEN1cnJlbnRseSB3
ZSBkb24ndCB1c2Ugei1vcmRlciB0byBkZWNpZGUgd2hhdCB0byBwYWludCwgc28gdGhlcmUncyBu
byBuZWVkIHRvIGFjdHVhbGx5IHNvcnQgTGF5ZXJDaHJvbWl1bXMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
aW5kZXggOWM3YTRmOGY0NzkyODlkYTA1OTEzN2I3OWJiMTVkNmJkMTdkNTFlZS4uNTAwY2M4ODEz
YTNjZjA3NmE0OTQ1M2MyZmIzYTJiMDcyZmM3ZDQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAt
NjIsNiArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBJbnRSZWN0JiBjbGlwKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNS
ZXF1aXJlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdGEpID0gMDsKIH07CiAKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5
ZXJzLiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KQEAgLTEzMiw5ICsxMzMs
MTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQm
KTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKyAgICB2b2lkIHNldE1h
eFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKSB7IG1fbWF4
U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsgfQorCiAgICAgdm9pZCBzZXRTY3Jv
bGxhYmxlKGJvb2wpOwogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsYWJsZTsgfQogCisgICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSk7CisKICAgICBJbnRTaXplIHNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgp
OyB9CiAKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KQEAg
LTI1NSw2ICsyNjEsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50
UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsK
KyAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7
CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2lu
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAwMzY2NjA5MmYyMzJiYjAxMzdiNjIyMWY3
Njk2ZGVkMGVkM2U1NDRiLi4wNjZkZTlhMDY2ZmYxNDkyNWM5NGUxNjE4ZDdkNjZmY2FiNjU0YmMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xNDksOSArMTQ5LDkgQEAgdm9pZCBDQ0xh
eWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShj
b25zdCBJbnRTaXplJiBzY3JvbGwpCit2b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBG
bG9hdFNpemUmIHNjcm9sbCkKIHsKLSAgICBJbnRTaXplIG5ld0RlbHRhID0gbV9zY3JvbGxEZWx0
YSArIHNjcm9sbDsKKyAgICBGbG9hdFNpemUgbmV3RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Ny
b2xsOwogICAgIEludFNpemUgbWluRGVsdGEgPSAtdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwog
ICAgIEludFNpemUgbWF4RGVsdGEgPSBtX21heFNjcm9sbFBvc2l0aW9uIC0gdG9TaXplKG1fc2Ny
b2xsUG9zaXRpb24pOwogICAgIC8vIENsYW1wIG5ld0RlbHRhIHNvIHRoYXQgcG9zaXRpb24gKyBk
ZWx0YSBzdGF5cyB3aXRoaW4gc2Nyb2xsIGJvdW5kcy4KQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lk
IENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24pCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCi12
b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSkKK3ZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYgc2Ny
b2xsRGVsdGEpCiB7CiAgICAgaWYgKG1fc2Nyb2xsRGVsdGEgPT0gc2Nyb2xsRGVsdGEpCiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDI2YzdhMmY0ZDVlYzU5NGY4N2Jj
Yzc1MzEyYzY4YjA3ZDA4MWRmNjkuLmZmYmU5ZWQ1OTFhNGJjOTU5MWYzNjNmMmU3MjZiYzY5ZjYy
ZWRhYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTYwLDE2ICsxNjAsMTYgQEAgcHVibGlj
OgogICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3Qge3JldHVybiBt
X21heFNjcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikgeyBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4
U2Nyb2xsUG9zaXRpb247IH0KIAotICAgIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQotICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29u
c3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBG
bG9hdFNpemUmKTsKIAogICAgIGZsb2F0IHBhZ2VTY2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4g
bV9wYWdlU2NhbGVEZWx0YTsgfQogICAgIHZvaWQgc2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwog
Ci0gICAgY29uc3QgSW50U2l6ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9z
ZW50U2Nyb2xsRGVsdGE7IH0KLSAgICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0YShjb25zdCBJbnRT
aXplJiBzZW50U2Nyb2xsRGVsdGEpIHsgbV9zZW50U2Nyb2xsRGVsdGEgPSBzZW50U2Nyb2xsRGVs
dGE7IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIHNlbnRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VudFNjcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEoY29u
c3QgRmxvYXRTaXplJiBzZW50U2Nyb2xsRGVsdGEpIHsgbV9zZW50U2Nyb2xsRGVsdGEgPSBzZW50
U2Nyb2xsRGVsdGE7IH0KIAotICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
KTsKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKTsKIAogICAgIGJv
b2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogICAgIHZvaWQg
c2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpIHsgbV9zY3JvbGxhYmxlID0gc2Nyb2xsYWJs
ZTsgfQpAQCAtMjU2LDggKzI1Niw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZHJhd3NDb250
ZW50OwogCi0gICAgSW50U2l6ZSBtX3Njcm9sbERlbHRhOwotICAgIEludFNpemUgbV9zZW50U2Ny
b2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2Nyb2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1f
c2VudFNjcm9sbERlbHRhOwogICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBm
bG9hdCBtX3BhZ2VTY2FsZURlbHRhOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApp
bmRleCA0NWZmNjZmZDdjMDNlZjkxMWI0NDU0OGMyZTZiODJjNmI5YWY4ODRlLi40YTJkOTU4Yzc1
ZDA5NjUyZTBlNTExYWRhYWY0Yjc2YzgzZjY5YTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5oIgpAQCAtNDYwLDE1ICs0NjEsMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAK
K3N0YXRpYyBMYXllckNocm9taXVtKiBmaW5kTGF5ZXJCeUlkKExheWVyQ2hyb21pdW0qIGxheWVy
LCBpbnQgaWQpCit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAobGF5ZXItPmlkKCkgPT0gaWQpCisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgTGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5kTGF5ZXJCeUlkKGxheWVyLT5jaGlsZHJlbigp
W2ldLmdldCgpLCBpZCk7CisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBm
b3VuZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsK
LSAgICAvLyBGSVhNRTogcHVzaGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMg
bm90IGltcGxlbWVudGVkCi0gICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFpbmZvLnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSB8fCBpbmZvLnBh
Z2VTY2FsZURlbHRhICE9IDEpCisgICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxl
KGluZm8ucm9vdFNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIAotICAgIEFTU0VS
VChpbmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBp
bmZvLnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5k
U2NhbGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaW5mby5zY3JvbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hy
b21pdW0qIGxheWVyID0gZmluZExheWVyQnlJZChtX3Jvb3RMYXllci5nZXQoKSwgaW5mby5zY3Jv
bGxzW2ldLmxheWVySWQpOworICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGxheWVyLT5zY3JvbGxCeShpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEp
OworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oCmluZGV4IDJlMGNiY2YyYzU4NWU4MjE1ZDI4NmRlZTliNjFlNTM1MTgwY2ZmYWQuLjBk
MjQ2ZjUzOTM1MDU1YTY5NTA0ODY5MTZhYzMyMjdlY2FkNDVlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogc3Ry
dWN0IENDU2Nyb2xsQW5kU2NhbGVTZXQgewogICAgIFZlY3RvcjxDQ0xheWVyVHJlZUhvc3RDb21t
b246OlNjcm9sbFVwZGF0ZUluZm8+IHNjcm9sbHM7CisgICAgSW50U2l6ZSByb290U2Nyb2xsRGVs
dGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDA5NDY1YmY5OWU3OWZlNzFmMjQxNzQ2Nzg0NTJkYWVm
ODc1OTEwNzQuLjg5NTg3NTJiNDRiZDdhMmRhMjhlODk2MjljMGNlNGQyMjljOWZjNGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC03Niw2ICs3NiwxNCBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCkKIAogdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSgpCiB7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc2Ny
b2xsaW5nIGxheWVyIGlzIHN0aWxsIHByZXNlbnQgaW4gdGhlIHRyZWUuCisgICAgaWYgKG1fY3Vy
cmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByb290ID0g
bV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChyb290
LT5wYXJlbnQoKSkKKyAgICAgICAgICAgIHJvb3QgPSByb290LT5wYXJlbnQoKTsKKyAgICAgICAg
aWYgKHJvb3QgIT0gbV9yb290TGF5ZXJJbXBsKQorICAgICAgICAgICAgbV9jdXJyZW50bHlTY3Jv
bGxpbmdMYXllckltcGwuY2xlYXIoKTsKKyAgICB9CiAgICAgLy8gUmVjb21wdXRlIG1heCBzY3Jv
bGwgcG9zaXRpb247IG11c3QgYmUgYWZ0ZXIgbGF5ZXIgY29udGVudCBib3VuZHMgYXJlCiAgICAg
Ly8gdXBkYXRlZC4KICAgICB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwpAQCAtMTAwLDcgKzEw
OCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdp
blRpbWVNcykKICAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47
CiAKLSAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAg
IEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBv
c2l0aW9uKCkgKyBmbG9vcmVkSW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRh
KCkpKTsKIAogICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdl
U2NhbGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6
ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShm
cmFtZUJlZ2luVGltZU1zKTsKQEAgLTExOSw3ICsxMjcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0
aW9uLAogICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBv
c2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6
ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24o
KSArIGZsb29yZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwog
ICAgIHNjcm9sbFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxl
VG90YWwgPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2Fs
ZWRDb250ZW50U2l6ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50
Qm91bmRzKCk7CkBAIC0zMTgsOCArMzI2LDYgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Ny
b2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290
TGF5ZXJJbXBsID0gbGF5ZXI7Ci0KLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkg
ZmluZHMgdGhlIGZpcnN0IHNjcm9sbGFibGUgbGF5ZXIuCiAgICAgbV9zY3JvbGxMYXllckltcGwg
PSBmaW5kU2Nyb2xsTGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKIH0KIApAQCAtMzg3LDE1
ICszOTMsMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JB
bmRMaW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNo
YW5nZSkKIHsKLSAgICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEpCisgICAgaWYgKCFtX3Njcm9s
bExheWVySW1wbCB8fCBwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gV2UgYWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8g
cGFnZVNjYWxlIHNwYWNlLgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBJ
bnRTaXplIHNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0g
ICAgICAgIHNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIC8v
IFdlIGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGEgZm9yIHRoZSBy
b290IGxheWVyIHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEg
PSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICBzY3JvbGxEZWx0YS5zY2Fs
ZShwYWdlU2NhbGVDaGFuZ2UpOworICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0
YShzY3JvbGxEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNj
YWxlRGVsdGEoZmxvYXQgZGVsdGEpCkBAIC00MzcsOSArNDQxLDkgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5nIGEgdmVy
dGljYWwgc2Nyb2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1heFNjcm9s
bC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKKyAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRl
IHRoZSByb290IGxheWVyIHNjcm9sbCByYW5nZSwgc2luY2UgdGhlIGNoaWxkCisgICAgLy8gbGF5
ZXJzIHVzZSB1bnNjYWxlZCBzY3JvbGwgY29vcmRpbmF0ZXMuCiAgICAgbV9zY3JvbGxMYXllcklt
cGwtPnNldE1heFNjcm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlh
cyk6IEFsc28gdXBkYXRlIHN1YmxheWVycy4KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzZXRab29tQW5pbWF0b3JUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHpv
b20pCkBAIC00NjAsMjggKzQ2NCw5MCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5l
ZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsK
IH0KIAotQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYpCitib29sIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmlzQ29udGVudFBvaW50V2l0aGluTGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCwgY29u
c3QgSW50UG9pbnQmIGNvbnRlbnRQb2ludCkgY29uc3QKIHsKLSAgICAvLyBUT0RPOiBDaGVjayBm
b3Igc2Nyb2xsYWJsZSBzdWJsYXllcnMuCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCAh
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFNjcm9sbEln
bm9yZWQ7CisgICAgSW50UmVjdCBsYXllckNvbnRlbnRSZWN0KGxheWVySW1wbC0+dmlzaWJsZUxh
eWVyUmVjdCgpKTsKKyAgICAvLyBUaGUgdmlzaWJsZSBsYXllciByZWN0IGlzIGluIHNjYWxlZCBj
b29yZGluYXRlcywgc28gdW5kbyB0aGUgcGFnZSBzY2FsZS4gTm90ZSB0aGF0IHRoZXJlIGlzCisg
ICAgLy8gbm8gbmVlZCB0byB1bmRvIHRoZSBwYWdlIHNjYWxlIGRlbHRhLCBiZWNhdXNlIHRoZSBs
YXllciBjb250ZW50IHJlY3QgaXMgb25seSBzY2FsZWQgd2l0aCB0aGUKKyAgICAvLyBvcmlnaW5h
bCBwYWdlIHNjYWxlLgorICAgIGxheWVyQ29udGVudFJlY3Quc2NhbGUoMSAvIG1fcGFnZVNjYWxl
KTsKKyAgICByZXR1cm4gbGF5ZXJDb250ZW50UmVjdC5jb250YWlucyhjb250ZW50UG9pbnQpOwor
fQorCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KENDTGF5ZXJJbXBsKiBsYXll
ckltcGwsIGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50KQoreworICAgIGlmICghbGF5ZXJJ
bXBsKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXpl
KCk7IGkrKykgeworICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHN0
YXR1cyA9IGJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KGxheWVySW1wbC0+Y2hp
bGRyZW4oKVtpXS5nZXQoKSwgdmlld3BvcnRQb2ludCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0g
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQgfHwgc3RhdHVzID09IENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwor
ICAgIH0KIAotICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIEludFBvaW50IGNvbnRlbnRQ
b2ludChsYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50
KHZpZXdwb3J0UG9pbnQpKTsKKyAgICBpZiAobGF5ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSAmJiAh
aXNDb250ZW50UG9pbnRXaXRoaW5MYXllcihsYXllckltcGwsIGNvbnRlbnRQb2ludCkpCisgICAg
ICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKKworICAgIGlm
IChsYXllckltcGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICBtX2N1cnJlbnRseVNjcm9sbGlu
Z0xheWVySW1wbCA9IGxheWVySW1wbDsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGFydGVkOworICAgIH0KKworICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsSWdub3JlZDsKK30KKworQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0
YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmll
d3BvcnRQb2ludCkKK3sKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigp
OworICAgIHJldHVybiBiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludChtX3Njcm9s
bExheWVySW1wbC5nZXQoKSwgdmlld3BvcnRQb2ludCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5IiwgdGhpcywgMCk7Ci0gICAg
aWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xs
Qnkoc2Nyb2xsRGVsdGEpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVh
ZCgpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIElu
dFNpemUgcGVuZGluZ0RlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJ
bXBsID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuZ2V0KCk7CisgICAgd2hpbGUgKGxh
eWVySW1wbCAmJiAhcGVuZGluZ0RlbHRhLmlzWmVybygpKSB7CisgICAgICAgIGlmIChsYXllcklt
cGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICAgICAgRmxvYXRTaXplIHByZXZpb3VzRGVsdGEo
bGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBzY2FsZWRQ
ZW5kaW5nRGVsdGEocGVuZGluZ0RlbHRhKTsKKyAgICAgICAgICAgIC8vIFNpbmNlIHNjcm9sbERl
bHRhIGlzIGluIHdpbmRvdyBjb29yZGluYXRlcywgaXQgYWxyZWFkeSBoYXMgdGhlIHBhZ2Ugc2Nh
bGUgYXBwbGllZC4KKyAgICAgICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSByb290IHNj
cm9sbCBsYXllciBleHBlY3RzLCBidXQgY2hpbGQgbGF5ZXJzIGFyZSBzY3JvbGxlZCB1c2luZwor
ICAgICAgICAgICAgLy8gdW5zY2FsZWQgY29udGVudCBjb29yZGluYXRlcyBpbnN0ZWFkLCBzbyB3
ZSBoYXZlIHRvIHVuZG8gdGhlIHNjYWxpbmcgZm9yIHRoZW0uIFRoZQorICAgICAgICAgICAgLy8g
cGFnZSBzY2FsZSBkZWx0YSBuZWVkcyB0byBiZSB1bmFwcGxpZWQgd2l0aCBib3RoIGxheWVyIHR5
cGVzIHNpbmNlIHRoZSBzY3JvbGwKKyAgICAgICAgICAgIC8vIGNvb3JkaW5hdGVzIGRvIG5vdCBy
ZXNwZWN0IGl0LgorICAgICAgICAgICAgaWYgKGxheWVySW1wbCA9PSBtX3Njcm9sbExheWVySW1w
bCkgeworICAgICAgICAgICAgICAgIHNjYWxlZFBlbmRpbmdEZWx0YS5zY2FsZSgxIC8gbV9wYWdl
U2NhbGVEZWx0YSk7CisgICAgICAgICAgICAgICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShzY2FsZWRQ
ZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY2Fs
ZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvIChtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGEp
KTsKKyAgICAgICAgICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHNjYWxlZFBlbmRpbmdEZWx0
YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBSZXNldCB0aGUgcGVuZGluZyBzY3Jv
bGwgZGVsdGEgdG8gemVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8gbW92ZSBhbG9uZyB0aGUg
cmVxdWVzdGVkCisgICAgICAgICAgICAvLyBheGlzLiBUaGlzIGlzIHRvIGVuc3VyZSBpdCBpcyBw
b3NzaWJsZSB0byBzY3JvbGwgZXhhY3RseSB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBhCisg
ICAgICAgICAgICAvLyBzY3JvbGwgYXJlYSByZWdhcmRsZXNzIG9mIHRoZSBzY3JvbGwgc3RlcC4g
Rm9yIGRpYWdvbmFsIHNjcm9sbHMgdGhpcyBhbHNvIGF2b2lkcyBhcHBseWluZworICAgICAgICAg
ICAgLy8gdGhlIHNjcm9sbCBvbiBvbmUgYXhpcyB0byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAg
ICAgICBpZiAocHJldmlvdXNEZWx0YS53aWR0aCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEo
KS53aWR0aCgpKQorICAgICAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAg
ICAgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLmhlaWdodCgpICE9IGxheWVySW1wbC0+c2Nyb2xs
RGVsdGEoKS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0SGVpZ2h0
KDApOworICAgICAgICB9CisgICAgICAgIGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCk7
CisgICAgfQorCisgICAgaWYgKHBlbmRpbmdEZWx0YSAhPSBzY3JvbGxEZWx0YSkgeworICAgICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgbV9jbGll
bnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgfQogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCgpCiB7CisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdM
YXllckltcGwuY2xlYXIoKTsKIH0KIAogYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpoYXZlV2hl
ZWxFdmVudEhhbmRsZXJzKCkKQEAgLTUyNCwyNSArNTkwLDQ4IEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6cGluY2hHZXN0dXJlRW5kKCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRP
bkltcGxUaHJlYWQoKTsKIH0KIAorc3RhdGljIGJvb2wgZGlkU2Nyb2xsU3VidHJlZShDQ0xheWVy
SW1wbCogbGF5ZXJJbXBsKQoreworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlz
WmVybygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBpZiAoZGlkU2Ny
b2xsU3VidHJlZShsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCkpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6Y29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJ
bmZvLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKSBjb25zdAoreworICAgIGlmICghbGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEg
PSB0b1NpemUoZmxvb3JlZEludFBvaW50KGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOworICAg
ICAgICBpZiAobGF5ZXJJbXBsICE9IG1fc2Nyb2xsTGF5ZXJJbXBsKSB7CisgICAgICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOworICAgICAgICAg
ICAgc2Nyb2xsLmxheWVySWQgPSBsYXllckltcGwtPmlkKCk7CisgICAgICAgICAgICBzY3JvbGwu
c2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgICAgIHNjcm9sbEluZm8tPnNjcm9s
bHMuYXBwZW5kKHNjcm9sbCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2Nyb2xsSW5m
by0+cm9vdFNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAgIGxheWVySW1wbC0+c2V0
U2VudFNjcm9sbERlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgfQorCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kp
CisgICAgICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mbywgbGF5ZXJJbXBsLT5jaGls
ZHJlbigpW2ldLmdldCgpKTsKK30KKwogUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKIHsKICAgICBPd25QdHI8
Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0UHRyKG5ldyBDQ1Njcm9sbEFu
ZFNjYWxlU2V0KCkpOwotICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsICYmICgh
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkgfHwgbV9wYWdlU2NhbGVE
ZWx0YSAhPSAxLjBmKTsKKyAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAo
ZGlkU2Nyb2xsU3VidHJlZShtX3Njcm9sbExheWVySW1wbC5nZXQoKSkgfHwgbV9wYWdlU2NhbGVE
ZWx0YSAhPSAxLjBmKTsKICAgICBpZiAoIWRpZE1vdmUgfHwgbV9waW5jaEdlc3R1cmVBY3RpdmUg
fHwgbV9wYWdlU2NhbGVBbmltYXRpb24pIHsKICAgICAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEg
PSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IDE7CiAgICAgICAgIHJldHVybiBzY3JvbGxJ
bmZvLnJlbGVhc2UoKTsKICAgICB9CiAKKyAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbElu
Zm8uZ2V0KCksIG1fc2Nyb2xsTGF5ZXJJbXBsLmdldCgpKTsKICAgICBtX3NlbnRQYWdlU2NhbGVE
ZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gbV9wYWdlU2NhbGVEZWx0YTsKIAot
ICAgIC8vIEZJWE1FOiB0cmFjayBzY3JvbGxzIGZyb20gbGF5ZXJzIG90aGVyIHRoYW4gdGhlIHJv
b3QKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwot
ICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xs
LnNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgc2Ny
b2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKLQogICAgIHJldHVybiBz
Y3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oCmluZGV4IGVkMzhiODZkZTQ2ZmNiMzU0NWI4MDg5ZWYxNmM2YjQ1MjEzODhkZDEuLjhmZWUy
ZWRmMTcwNTcyNTFjMDI4ZGZmN2E2N2ZkMWMwMDNlOTA3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEzNSwxMCArMTM1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxT
dXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKFZl
Y3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+Jik7CisgICAgYm9vbCBpc0NvbnRlbnRQb2ludFdp
dGhpbkxheWVyKENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UG9pbnQmIGNvbnRlbnRQb2ludCkgY29u
c3Q7CisgICAgU2Nyb2xsU3RhdHVzIGJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50
KENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lkIGNvbGxlY3RTY3JvbGxE
ZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCosIENDTGF5ZXJJbXBsKikgY29uc3Q7CiAKICAgICBP
d25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBt
X3Njcm9sbExheWVySW1wbDsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fY3VycmVudGx5U2Ny
b2xsaW5nTGF5ZXJJbXBsOwogICAgIENDU2V0dGluZ3MgbV9zZXR0aW5nczsKICAgICBJbnRTaXpl
IG1fdmlld3BvcnRTaXplOwogICAgIGJvb2wgbV92aXNpYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmNwcAppbmRleCA3MmJlYzJhNzE2NjRhZjQzY2Q2NGQwMTRkMjhiODQy
NjUwOTViMjAzLi5hNmNhNmY3MDIxMjdlYzcyZTk2NjU5YjBjZmMyZDdjMDBiYWQ3Njk3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTY1LDYgKzE2NSw3IEBA
IHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZG9Db21taXQoKQogICAgICAgICAvLyBJbiB0aGUg
c2luZ2xlLXRocmVhZGVkIGNhc2UsIHRoZSBzY3JvbGwgZGVsdGFzIHNob3VsZCBuZXZlciBiZQog
ICAgICAgICAvLyB0b3VjaGVkIG9uIHRoZSBpbXBsIGxheWVyIHRyZWUuCiAgICAgICAgIE93blB0
cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9sYXllclRyZWVIb3N0SW1wbC0+
cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgICAgICBBU1NFUlQoc2Nyb2xsSW5mby0+cm9vdFNj
cm9sbERlbHRhLmlzWmVybygpKTsKICAgICAgICAgQVNTRVJUKCFzY3JvbGxJbmZvLT5zY3JvbGxz
LnNpemUoKSk7CiAjZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IDdkZGJmYWMzNTE0ZWEwYjg1YmNlNWZjNDA0Y2Q1
ZGViNTU0Y2JhZjQuLmJhZDkzMTVhNWVkYzA5OTQ2N2MxM2RhZThlYjlkYWY2YWEzMTY4MmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBA
IC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNpbmNsdWRlICJHZW9s
b2NhdGlvblNlcnZpY2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkljb24uaCIKQEAgLTU5LDYgKzYwLDcgQEAK
ICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJQb3B1cENvbnRhaW5lci5o
IgogI2luY2x1ZGUgIlBvcHVwTWVudUNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51Q2hyb21pdW0uaCIKQEAgLTg0NCw2ICs4NDYs
MjggQEAgYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpwYWludEN1c3RvbU92ZXJoYW5nQXJlYShHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3Zv
aWQgQ2hyb21lQ2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihHcmFwaGljc0xh
eWVyKiBsYXllciwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQoreworICAgIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSo+KGxheWVyKTsKKyAgICBsYXllckNocm9taXVtLT5zZXRTY3JvbGxhYmxlQXJl
YShzY3JvbGxhYmxlQXJlYSk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyID0g
bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRTY3JvbGxhYmxl
KHRydWUpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbGFibGVB
cmVhLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRNYXhTY3JvbGxQ
b3NpdGlvbihJbnRTaXplKHNjcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKEhvcml6b250YWxTY3Jv
bGxiYXIpLCBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShWZXJ0aWNhbFNjcm9sbGJhcikpKTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcihHcmFwaGlj
c0xheWVyKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21p
dW0gPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihsYXllcik7CisgICAgbGF5
ZXJDaHJvbWl1bS0+c2V0U2Nyb2xsYWJsZUFyZWEoMCk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyID0gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBwbGF0Zm9ybUxheWVy
LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRTY3JvbGxQb3Np
dGlvbihJbnRQb2ludCgpKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlv
bihJbnRTaXplKCkpOworfQorCiAvLyBGSVhNRTogUmVtb3ZlIENocm9tZUNsaWVudEltcGw6OnJl
cXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSBhbmQgQ2hyb21lQ2xpZW50SW1wbDo6
Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lCiAvLyBvbmNlIGFsbCBw
b3J0cyBoYXZlIG1vdmVkIHRvIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiAoc2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM3MyApLgogLy8gRm9yIGNsaWVudC1i
YXNlZCBnZW9sb2NhdGlvbiwgdGhlc2UgbWV0aG9kcyBhcmUgbm93IGltcGxlbWVudGVkIGFzIFdl
Ykdlb2xvY2F0aW9uQ2xpZW50OjpyZXF1ZXN0UGVybWlzc2lvbiBhbmQgV2ViR2VvbG9jYXRpb25D
bGllbnQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCmluZGV4IDFjYTEyOTQ1NTFkMTIzZTk1Njc5MTAyZGVm
MGIzZGJjMzJkOGMzMTMuLjAxZjI5YzRlMDc2NGM0Y2NjNjc5NDExNGFhMDEyZTIxYWE2OTBkMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKQEAg
LTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgQ2hyb21lQ2xpZW50SW1wbF9oCiAKICNpbmNsdWRlICJD
aHJvbWVDbGllbnRDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKIApAQCAtNDAs
OSArNDEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVj
dDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGaWxlQ2hvb3NlcjsKK2NsYXNzIE5vZGU7CiBjbGFz
cyBQb3B1cENvbnRhaW5lcjsKIGNsYXNzIFBvcHVwTWVudUNsaWVudDsKIGNsYXNzIFJlbmRlckJv
eDsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3Qg
V2luZG93RmVhdHVyZXM7CiB9CkBAIC0xMzIsNiArMTM1LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOwogICAg
IHZpcnR1YWwgdm9pZCByZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luKiwgaW50NjRfdCB0b3RhbFNwYWNlTmVlZGVkKTsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRDdXN0b21PdmVyaGFuZ0FyZWEoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5n
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKik7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZv
ckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKICAgICB2aXJ0
dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKFdlYkNv
cmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKICAgICB2aXJ0dWFsIHZvaWQgcnVu
T3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nl
cj4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExh
eWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmNwcAppbmRleCBjZDg4OTAwYmRhMzRhNTNiZTFlNmZlZmY5OGQ1OTNjZmNhZTY4MTEwLi5i
NThjMmMzYjhjYjVkYjVjYzBkMzkxOGQzNjRjZjI3MjBkMjNkYzU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcApAQCAtODYsNCAr
ODYsOCBAQCB2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCgpCiAg
ICAgICAgIG1fY2xpZW50LT5ub3RpZnlOZWVkc0NvbXBvc2l0ZSgpOwogfQogCit2b2lkIFdlYkNv
bnRlbnRMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQoreworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCAxMDhkZjVlM2EyNTRlZDk1Njk0NTk4NmZkNjU0
MWE4NGE5ODg2NWZmLi4xYTQ4NzAwZmVkZGRjMjRlNWE5Mzk4YmZhNThiYzcwODA4YWUyYmMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5o
CkBAIC00NSw2ICs0NSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5XZWJDb250ZW50TGF5
ZXJJbXBsKCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CiAgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7CiAKICAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CiAg
ICAgV2ViQ29udGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRDbGllbnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBs
LmNwcAppbmRleCA0NDJlYWNkN2RhNGUwYWViNTE3NGM0M2RmOTEwYzgwMDA4YjE4NzQ4Li4zZDgz
NGY0YjdmM2QwMTBmMzYzMjc0N2IyMmM0ZDc1Njg1YzMzYTdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5j
cHAKQEAgLTY2LDQgKzY2LDggQEAgdm9pZCBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6Om5v
dGlmeVN5bmNSZXF1aXJlZCgpCiAgICAgICAgIG1fY2xpZW50LT5ub3RpZnlOZWVkc0NvbXBvc2l0
ZSgpOwogfQogCit2b2lkIFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6c2Nyb2xsQnkoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5
ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVM
YXllckltcGwuaAppbmRleCA0ZjlhOTg3MjdjOTdkOWI1Yzk1ODc0NGMyNjliODg0ZDE4NTNlNzZm
Li45NGVmNzg4OWNjYzY5ZDBmM2RhNWY5NjM5ZmQ5MDYzZjQwNjE2N2Q1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllcklt
cGwuaApAQCAtNDIsNiArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOwogICAgIHZp
cnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
QnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCiAgICAgV2ViTGF5ZXJDbGllbnQqIG1fY2xp
ZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCmlu
ZGV4IGRkYzA2MTEyMDk0MTZmOTUwNDUxMTZjMGFmZDcyOTc3ZjhmOGE2ZTUuLjhkOTVhNzhiY2Iw
MTNhMzVlZTkyNWQ2NTNjZDZmODIzMWNlMGU3OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcApAQCAtNjEsNCArNjEsOCBAQCB2b2lkIFdlYkxheWVySW1w
bDo6bm90aWZ5U3luY1JlcXVpcmVkKCkKICAgICAgICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29t
cG9zaXRlKCk7CiB9CiAKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXpl
JikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVySW1wbC5oCmluZGV4IDU1OGQ0MWI1Y2RlMWE4NDg3MDJjYWQwZjM3NTEyYzg5
MTE1NTExMTYuLjBmZWQwZjdiMTU5NWY1ZGYxNGE5OWUzYWZjNmFmYjlkODUzOWM0MDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCkBAIC00Miw2ICs0Miw3IEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNS
ZXF1aXJlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzY3JvbGxEZWx0YSk7CiAKICAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LmNwcAppbmRleCBlODM1YWI3ODliZmQyOWU3NGQwOGNkN2ExZmUyMTM3M2U2MDVh
NTJlLi5mY2I3Mjg1ZTNiODYyMGI2MjQxZTI5OWU4OTMwNWRkMTY0Nzg4Y2RjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcApAQCAtMTI1LDE2ICsxMjUsMTYgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBzY3JvbGxEZWx0YVJlcGVhdGVkU2Nyb2xscykKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRT
Y2FsZVNldD4gc2Nyb2xsSW5mbzsKIAogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9j
ZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6
ZSgpLCAxdSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7
CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNlbnRTY3JvbGxEZWx0YSgpLCBzY3JvbGxEZWx0YSk7Ci0g
ICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERl
bHRhKTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBzY3JvbGxE
ZWx0YSk7CiAKICAgICBJbnRTaXplIHNjcm9sbERlbHRhMigtNSwgMjcpOwogICAgIHJvb3QtPnNj
cm9sbEJ5KHNjcm9sbERlbHRhMik7CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nl
c3NTY3JvbGxEZWx0YXMoKTsKLSAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXpl
KCksIDF1KTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDB1KTsK
ICAgICBFWFBFQ1RfRVEocm9vdC0+c2VudFNjcm9sbERlbHRhKCksIHNjcm9sbERlbHRhICsgc2Ny
b2xsRGVsdGEyKTsKLSAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgcm9vdC0+
aWQoKSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOworICAgIEFTU0VSVF9FUShzY3JvbGxJ
bmZvLT5yb290U2Nyb2xsRGVsdGEsIHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKIAogICAg
IHJvb3QtPnNjcm9sbEJ5KEludFNpemUoKSk7CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwt
PnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKQEAgLTE1NSw2ICsxNTUsOTQgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiAgICAg
RVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFi
bGUoZmFsc2UpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKyAgICBFWFBF
Q1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCkpLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVz
dFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJl
ZHJhdykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIGNoaWxkLT5zZXRT
Y3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXpl
KDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGls
ZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEw
KSkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAg
bV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOworICAgIG1faG9zdEltcGwtPnNj
cm9sbEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQ
RUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzY3JvbGxNaXNzZXNDaGlsZCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUo
ZmFsc2UpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDApOworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRN
YXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdz
Q29udGVudCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KElu
dFBvaW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsK
KyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsK
KyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlKQoreworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAg
cm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlv
bihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwor
ICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXpl
KDEwLCAxMCkpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAgICBJ
bnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9z
dEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygyLCAxLCAyKTsKKworICAgIC8vIFRo
ZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3Qgc2Nyb2xsIGRlbHRhLgorICAgIE93blB0
cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Nj
cm9sbERlbHRhcygpOworICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEs
IEludFNpemUoc2Nyb2xsRGVsdGEud2lkdGgoKSAqIDIsIHNjcm9sbERlbHRhLmhlaWdodCgpICog
MikpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQW5k
Q2hhbmdlUGFnZVNjYWxlKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxSb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBzY3JvbGxSb290LT5zZXRTY3JvbGxhYmxlKHRy
dWUpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDApOworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhT
Y3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBv
aW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxkKHNjcm9sbFJvb3Qp
OworICAgIHNjcm9sbFJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRS
b290TGF5ZXIoc2Nyb2xsUm9vdCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsK
KyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Ny
b2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFu
ZExpbWl0cygyLCAxLCAyKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgbm90IGFwcGx5IHRv
IHRoZSBjaGlsZCBzY3JvbGwgZGVsdGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+
IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhw
ZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBzY3JvbGxEZWx0YSk7
Cit9CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIE1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0KCkg
OiBtX2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGZkMjU2MzZhMmIxNzBkN2ViNmE5Nzk3
NGE1NDU0ZWQzYTkzMGI1MDEuLjNlNjMyYTU1MGFhYzIyY2M2MzRlZjU4ZWI3NTg4MDc4ZWNkZTVj
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcApAQCAtOTI3LDYgKzkyNywxMjAgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dFRlc3RTZXRWaXNpYmxlLCBydW5NdWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQog
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RUZXN0VGhyZWFkT25seSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVz
dCgpCisgICAgeworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllciA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgwKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEw
LCAxMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsK
KyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUo
MTAwLCAxMDApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQ2hp
bGQobV9yb290U2Nyb2xsTGF5ZXIpOworICAgICAgICBtX2NoaWxkTGF5ZXIgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0Qm91bmRzKEludFNpemUo
MTAsIDEwKSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAg
ICAgICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAw
KSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIpOwor
ICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSwgZmxvYXQpCisgICAgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fcm9vdFNjcm9s
bExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0
U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbV9jaGlsZExheWVyOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBtX3Jvb3RTY3JvbGxMYXllcjsKK307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3Jv
bGxDaGlsZExheWVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlIHsKK3B1
YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcigpCisgICAgICAg
IDogbV9zY3JvbGxBbW91bnQoMiwgMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsK
KyAgICAgICAgRVhQRUNUX0VRKG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkp
CisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRM
YXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSArIG1fc2Nyb2xsQW1vdW50KTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09
IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1
LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgICAg
IGltcGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9s
bEVuZCgpOworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAg
ICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IEludFNpemUg
bV9zY3JvbGxBbW91bnQ7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENo
aWxkTGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQor
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0IDog
cHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlIHsKK3B1YmxpYzoKKyAgICBDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0KCkKKyAgICAgICAgOiBt
X2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24oMywgNikKKyAgICAgICAgLCBtX2luaXRpYWxDaGls
ZFNjcm9sbFBvc2l0aW9uKDIwLCAwKQorICAgICAgICAsIG1fc2Nyb2xsQW1vdW50KC0yNSwgLTUp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAg
ICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmJlZ2luVGVzdCgpOworICAgICAg
ICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9pbml0aWFsUm9vdFNjcm9s
bFBvc2l0aW9uKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX2lu
aXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAg
ICAgICBpZiAobV9sYXllclRyZWVIb3N0LT5mcmFtZU51bWJlcigpID09IDEpIHsKKyAgICAgICAg
ICAgIENDTGF5ZXJJbXBsKiByb290ID0gaW1wbC0+cm9vdExheWVyKCk7CisgICAgICAgICAgICBD
Q0xheWVySW1wbCogc2Nyb2xsUm9vdCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAg
ICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBzY3JvbGxSb290LT5jaGlsZHJlbigpWzBdLmdl
dCgpOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxkLT5zY3JvbGxQb3NpdGlvbigpLCBtX2lu
aXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGlsZC0+
c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgtMjAsIDApKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShz
Y3JvbGxSb290LT5zY3JvbGxQb3NpdGlvbigpLCBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24p
OworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9sbFJvb3QtPnNjcm9sbERlbHRhKCksIEludFNp
emUoMCwgLTUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5
ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAg
aWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKGlt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQp
OworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1w
bC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KK3By
aXZhdGU6CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uOwor
ICAgIGNvbnN0IEludFBvaW50IG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb247CisgICAgY29u
c3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0LCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBy
dW5UZXN0VGhyZWFkZWQoKTsKK30KKwogY2xhc3MgVGVzdE9wYWNpdHlDaGFuZ2VMYXllckRlbGVn
YXRlIDogcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgVGVzdE9wYWNpdHlD
aGFuZ2VMYXllckRlbGVnYXRlKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCkBAIC05NDMsNiAr
MTA1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJikgeyB9CiAKIHByaXZhdGU6CiAg
ICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAyODY2NWFhNzc2YmNhZTAx
Y2YwYjg4NWZlZDVjNWE1YzhlZDMxOGQwLi5hNDc2NmViNmQyNzJkYzYzODRlMjFmNGQ0Y2YyMjk5
M2ZjNzcxNGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVy
Q2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVy
Q2hyb21pdW1UZXN0LmNwcApAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgTU9DS19DT05T
VF9NRVRIT0QwKHByZXNlcnZlczNELCBib29sKCkpOwogICAgIE1PQ0tfTUVUSE9EMihwYWludENv
bnRlbnRzLCB2b2lkKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKSk7CiAgICAgTU9D
S19NRVRIT0QwKG5vdGlmeVN5bmNSZXF1aXJlZCwgdm9pZCgpKTsKKyAgICBNT0NLX01FVEhPRDEo
c2Nyb2xsQnksIHZvaWQoY29uc3QgSW50U2l6ZSYpKTsKIH07CiAKIGNsYXNzIE1vY2tMYXllclBh
aW50ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119898</attachid>
            <date>2011-12-19 12:14:09 -0800</date>
            <delta_ts>2011-12-20 12:53:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20111219201406.patch</filename>
            <type>text/plain</type>
            <size>46886</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDA0MDc3ZTE2N2M1NDJm
YTQxODQyZGUyZTQxYzViYjhkZDNkZDhiOS4uM2IzZTAwZmRjMDFhODE2ZThjODZkNmI5YTdlN2Mw
ZWQwMzYyN2UzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDExLTEyLTE4ICBLZWlzaGkg
SGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEltcGxlbWVudCA8aW5wdXQg
dHlwZT1jb2xvcj4gVUkgV2ViS2l0IGNocm9taXVtIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggNDA0ZmIwNDk0ZDhkN2JiY2VkODJhMWZmYWM4MzQ3NTIxZGY1ODcyYy4uYWZkZjdi
NWY4ZGIxNTQ2NDA2ZmE3ZWM2Yjc1MTc4MzA5N2U4OWJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMS0xMi0wOSAgU2FtaSBLeW9zdGlsYSAgPHNreW9z
dGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBsYXllciBz
Y3JvbGxpbmcgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5h
YmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAg
ICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xsZWQgQ0NM
YXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgV2ViVmlld0ltcGwgaW4g
dGhlIG1haW4gdGhyZWFkLgorCisgICAgICAgIElmIGEgbGF5ZXIgaGFzIG5vIHJvb20gdG8gc2Ny
b2xsIGluIGEgZ2l2ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCisgICAgICAgIGFuY2VzdG9yIGxh
eWVycyBpcyBzY3JvbGxlZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkxheWVy
VHJlZVZpZXdDbGllbnQuaDoKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZW1vdmVTY3JvbGxpbmdM
YXllcik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMv
V2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVW
aWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKiBzcmMv
V2ViTGF5ZXJUcmVlVmlld0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAg
ICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RIb29r
czo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OlRlc3RIb29r
czo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xp
ZW50OjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6TW9ja0xh
eWVyVHJlZUhvc3RDbGllbnQ6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxl
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRpcGxlUmVkcmF3
OjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5TGF5ZXJTY3Jv
bGwpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YWZ0ZXJU
ZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5
U2Nyb2xsVG9DaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbENoaWxkTGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2luQ29t
bWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyOjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OlRFU1RfRik6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25k
TGltaXQ6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExp
bWl0OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xs
Q2hpbGRMYXllckJleW9uZExpbWl0OjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpkcmF3
TGF5ZXJzT25DQ1RocmVhZCk6CisKIDIwMTEtMTItMTggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hp
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IDxpbnB1dCB0eXBlPWNvbG9yPiBVSSBX
ZWJLaXQgY2hyb21pdW0gcGFydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggMjI5YmE5ZDgxYjhkMDY3OWIxZmRhNTZhZmUwNTIyZjFmOGRhMjBjZC4uZmUyNmMwNzRl
M2Q5ZThhOTJkMTBiM2VlNTk5NmRkNGVmOWM5Y2YyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiSW1hZ2VMYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTeXN0ZW1U
aW1lLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTcwLDYgKzcxLDcgQEAg
UGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NM
YXllckNsaWVudCogY2xpZW50KQogCiBHcmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xh
eWVyKGNsaWVudCkKKyAgICAsIG1fc2Nyb2xsYWJsZUFyZWEoMCkKICAgICAsIG1fY29udGVudHNM
YXllclB1cnBvc2UoTm9Db250ZW50c0xheWVyKQogICAgICwgbV9jb250ZW50c0xheWVySGFzQmFj
a2dyb3VuZENvbG9yKGZhbHNlKQogICAgICwgbV9pblNldENoaWxkcmVuKGZhbHNlKQpAQCAtNjcx
LDYgKzY3MywxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5U3luY1JlcXVp
cmVkKCkKICAgICAgICAgbV9jbGllbnQtPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKIH0KIAor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVsdGEpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDJmYzhlNTI0ODhhY2Fj
YmQzOWRmODA5ODQ2OGY3Yzk5M2ZjMjY0NTYuLjcwNjJiZGQ1OTI1ZDI4NGE0MzdhN2ExMzU5ZTRl
NmZmN2MwOTk5MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC00MCw2
ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hyb21pdW07Citj
bGFzcyBTY3JvbGxhYmxlQXJlYTsKIAogY2xhc3MgR3JhcGhpY3NMYXllckNocm9taXVtIDogcHVi
bGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBDQ0xheWVyRGVsZWdhdGUgewogcHVibGljOgpAQCAt
MTAwLDYgKzEwMSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmIGNsaXApOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWly
ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVs
dGEpOworCisgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsYWJsZUFyZWEoU2Nyb2xs
YWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKSB7IG1fc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxl
QXJlYTsgfQogCiAgICAgLy8gRXhwb3NlZCBmb3IgdGVzdHMuCiAgICAgTGF5ZXJDaHJvbWl1bSog
Y29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllci5nZXQoKTsgfQpA
QCAtMTM1LDYgKzE0MCw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1f
dHJhbnNmb3JtTGF5ZXI7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY29udGVudHNMYXll
cjsKIAorICAgIFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOworCiAgICAgZW51bSBD
b250ZW50c0xheWVyUHVycG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCiAgICAg
ICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFnZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjQ1
ZTEyNTk1NzNmOWVkMzU3MWI2MWEwMWU4MzBjNWVkZTQ0ZjI4Yi4uMjhhZGUzOTM1OTZhMTg3MThh
YzRhMTk2MWRlNDNjYWMwYzNkY2E5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM5MCw2
ICszOTAsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllcklt
cGwqIGxheWVyKQogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXll
ci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBv
c2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlv
bihtX21heFNjcm9sbFBvc2l0aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0o
bV9zdWJsYXllclRyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9y
bSk7CiAgICAgbGF5ZXItPnNldFVwZGF0ZVJlY3QobV91cGRhdGVSZWN0KTsKQEAgLTQ0Niw2ICs0
NDcsMTMgQEAgYm9vbCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9z
aXRpb24oKSArIHNjcm9sbERlbHRhKTsKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9k
ZWxlZ2F0ZS0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworfQorCiB2b2lkIHNvcnRMYXllcnMoVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCiB7CiAgICAgLy8gQ3VycmVudGx5IHdlIGRv
bid0IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVyZSdzIG5vIG5l
ZWQgdG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRl
eCAxNzM0MzRlOThlYjkyMzA1NWFiNzg2NjAzNDNkNzQ2MDkwNzk5ZTFiLi41NzcyMzBlZmM5ZWI4
ZDEzYjdmNDA0YTJjZjQ4NjU4YWZlOTIzZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC02Miw2
ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmIGNsaXApID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVp
cmVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3Jv
bGxEZWx0YSkgPSAwOwogfTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXllcnMu
IFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQpAQCAtMTMyLDkgKzEzMywxNCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwog
ICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsUG9zaXRpb247IH0KIAorICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0TWF4U2Ny
b2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhTY3Jv
bGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICB2b2lkIHNldFNjcm9sbGFi
bGUoYm9vbCk7CiAgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxh
YmxlOyB9CiAKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsK
KwogICAgIEludFNpemUgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0K
IAogICAgIGZsb2F0IHBhZ2VTY2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4gMTsgfQpAQCAtMjU2
LDYgKzI2Miw3IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0
IG1fdmlzaWJsZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOworICAg
IEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJsZTsKICAg
ICBGbG9hdFBvaW50IG1fcG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDAzNjY2MDkyZjIzMmJiMDEzN2I2MjIxZjc2OTZk
ZWQwZWQzZTU0NGIuLjA2NmRlOWEwNjZmZjE0OTI1Yzk0ZTE2MThkN2Q2NmZjYWI2NTRiYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTE0OSw5ICsxNDksOSBAQCB2b2lkIENDTGF5ZXJJ
bXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0
IEludFNpemUmIHNjcm9sbCkKK3ZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0
U2l6ZSYgc2Nyb2xsKQogewotICAgIEludFNpemUgbmV3RGVsdGEgPSBtX3Njcm9sbERlbHRhICsg
c2Nyb2xsOworICAgIEZsb2F0U2l6ZSBuZXdEZWx0YSA9IG1fc2Nyb2xsRGVsdGEgKyBzY3JvbGw7
CiAgICAgSW50U2l6ZSBtaW5EZWx0YSA9IC10b1NpemUobV9zY3JvbGxQb3NpdGlvbik7CiAgICAg
SW50U2l6ZSBtYXhEZWx0YSA9IG1fbWF4U2Nyb2xsUG9zaXRpb24gLSB0b1NpemUobV9zY3JvbGxQ
b3NpdGlvbik7CiAgICAgLy8gQ2xhbXAgbmV3RGVsdGEgc28gdGhhdCBwb3NpdGlvbiArIGRlbHRh
IHN0YXlzIHdpdGhpbiBzY3JvbGwgYm91bmRzLgpAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgQ0NM
YXllckltcGw6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlv
bikKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQg
Q0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQor
dm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJiBzY3JvbGxE
ZWx0YSkKIHsKICAgICBpZiAobV9zY3JvbGxEZWx0YSA9PSBzY3JvbGxEZWx0YSkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMjZjN2EyZjRkNWVjNTk0Zjg3YmNjNzUz
MTJjNjhiMDdkMDgxZGY2OS4uZmZiZTllZDU5MWE0YmM5NTkxZjM2M2YyZTcyNmJjNjlmNjJlZGFh
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNjAsMTYgKzE2MCwxNiBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7cmV0dXJuIG1fbWF4
U2Nyb2xsUG9zaXRpb247IH0KICAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IElu
dFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKSB7IG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3Jv
bGxQb3NpdGlvbjsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbERlbHRhOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBJ
bnRTaXplJik7CisgICAgY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0
U2l6ZSYpOwogCiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2VTY2FsZURlbHRhOyB9CiAgICAgdm9pZCBzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCk7CiAKLSAg
ICBjb25zdCBJbnRTaXplJiBzZW50U2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3NlbnRT
Y3JvbGxEZWx0YTsgfQotICAgIHZvaWQgc2V0U2VudFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUm
IHNlbnRTY3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsg
fQorICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4g
bV9zZW50U2Nyb2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0YShjb25zdCBG
bG9hdFNpemUmIHNlbnRTY3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3Jv
bGxEZWx0YTsgfQogCi0gICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpOwor
ICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpOwogCiAgICAgYm9vbCBz
Y3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlOyB9CiAgICAgdm9pZCBzZXRT
Y3JvbGxhYmxlKGJvb2wgc2Nyb2xsYWJsZSkgeyBtX3Njcm9sbGFibGUgPSBzY3JvbGxhYmxlOyB9
CkBAIC0yNTYsOCArMjU2LDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7
CiAKLSAgICBJbnRTaXplIG1fc2Nyb2xsRGVsdGE7Ci0gICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxE
ZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zZW50
U2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGZsb2F0
IG1fcGFnZVNjYWxlRGVsdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4
IDY2MDdiYWY5MjkyZjUzZTE4MDk3YzU2OTkxZjM4ZWJmOTZhZDQxZmEuLjA1YzhiOGJjMGQ1OGVi
MzM5ZjA0Yzk1YjQ2YzliMmI0MjI2YTYzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcApAQCAtNDg2LDE1ICs0ODYsMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVu
ZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKK3N0YXRpYyBMYXll
ckNocm9taXVtKiBmaW5kTGF5ZXJCeUlkKExheWVyQ2hyb21pdW0qIGxheWVyLCBpbnQgaWQpCit7
CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPmlk
KCkgPT0gaWQpCisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJv
bWl1bSogZm91bmQgPSBmaW5kTGF5ZXJCeUlkKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBp
ZCk7CisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xs
QW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhN
RTogcHVzaGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVu
dGVkCi0gICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKCFpbmZvLnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSB8fCBpbmZvLnBhZ2VTY2FsZURlbHRh
ICE9IDEpCisgICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKGluZm8ucm9vdFNj
cm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9s
bHMuc2l6ZSgpID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNb
MF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xs
RGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5mby5zY3JvbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVy
ID0gZmluZExheWVyQnlJZChtX3Jvb3RMYXllci5nZXQoKSwgaW5mby5zY3JvbGxzW2ldLmxheWVy
SWQpOworICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGxheWVyLT5zY3JvbGxCeShpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOworICAgIH0KIH0K
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4
IDJlMGNiY2YyYzU4NWU4MjE1ZDI4NmRlZTliNjFlNTM1MTgwY2ZmYWQuLjBkMjQ2ZjUzOTM1MDU1
YTY5NTA0ODY5MTZhYzMyMjdlY2FkNDVlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogc3RydWN0IENDU2Nyb2xs
QW5kU2NhbGVTZXQgewogICAgIFZlY3RvcjxDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVw
ZGF0ZUluZm8+IHNjcm9sbHM7CisgICAgSW50U2l6ZSByb290U2Nyb2xsRGVsdGE7CiAgICAgZmxv
YXQgcGFnZVNjYWxlRGVsdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCmluZGV4IDA5NDY1YmY5OWU3OWZlNzFmMjQxNzQ2Nzg0NTJkYWVmODc1OTEwNzQuLjg5
NTg3NTJiNDRiZDdhMmRhMjhlODk2MjljMGNlNGQyMjljOWZjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC03Niw2ICs3NiwxNCBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
b21taXRDb21wbGV0ZSgpCiB7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc2Nyb2xsaW5nIGxheWVy
IGlzIHN0aWxsIHByZXNlbnQgaW4gdGhlIHRyZWUuCisgICAgaWYgKG1fY3VycmVudGx5U2Nyb2xs
aW5nTGF5ZXJJbXBsKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9jdXJyZW50bHlT
Y3JvbGxpbmdMYXllckltcGwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChyb290LT5wYXJlbnQoKSkK
KyAgICAgICAgICAgIHJvb3QgPSByb290LT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHJvb3QgIT0g
bV9yb290TGF5ZXJJbXBsKQorICAgICAgICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllcklt
cGwuY2xlYXIoKTsKKyAgICB9CiAgICAgLy8gUmVjb21wdXRlIG1heCBzY3JvbGwgcG9zaXRpb247
IG11c3QgYmUgYWZ0ZXIgbGF5ZXIgY29udGVudCBib3VuZHMgYXJlCiAgICAgLy8gdXBkYXRlZC4K
ICAgICB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwpAQCAtMTAwLDcgKzEwOCw3IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKICAg
ICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRT
aXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlv
bigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Ny
b2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBm
bG9vcmVkSW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKIAogICAg
IHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUo
ZnJhbWVCZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Nyb2xs
ID0gbV9wYWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGlt
ZU1zKTsKQEAgLTExOSw3ICsxMjcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIGlm
ICghbV9zY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Ny
b2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBt
X3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3Rh
bCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29yZWRJ
bnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogICAgIHNjcm9sbFRv
dGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlVG90YWwgPSBtX3Bh
Z2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2FsZWRDb250ZW50U2l6
ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7CkBA
IC0zMTgsOCArMzI2LDYgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NM
YXllckltcGwqIGxheWVyKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIo
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBsID0g
bGF5ZXI7Ci0KLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhlIGZp
cnN0IHNjcm9sbGFibGUgbGF5ZXIuCiAgICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xs
TGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKIH0KIApAQCAtMzg3LDE1ICszOTMsMTMgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoZmxv
YXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphZGp1
c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKIHsKLSAg
ICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEpCisgICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8
fCBwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgYWxz
byBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxlIHNw
YWNlLgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBJbnRTaXplIHNjcm9s
bERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgICAgIHNjcm9s
bERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIC8vIFdlIGFsc28gbmVl
ZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGEgZm9yIHRoZSByb290IGxheWVyIHRv
IHBhZ2VTY2FsZSBzcGFjZS4KKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVD
aGFuZ2UpOworICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0
YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxv
YXQgZGVsdGEpCkBAIC00MzcsOSArNDQxLDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1
cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5nIGEgdmVydGljYWwgc2Nyb2xs
YmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1heFNjcm9sbC5jbGFtcE5lZ2F0
aXZlVG9aZXJvKCk7CiAKKyAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSByb290IGxh
eWVyIHNjcm9sbCByYW5nZSwgc2luY2UgdGhlIGNoaWxkCisgICAgLy8gbGF5ZXJzIHVzZSB1bnNj
YWxlZCBzY3JvbGwgY29vcmRpbmF0ZXMuCiAgICAgbV9zY3JvbGxMYXllckltcGwtPnNldE1heFNj
cm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6IEFsc28gdXBk
YXRlIHN1YmxheWVycy4KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRab29tQW5p
bWF0b3JUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHpvb20pCkBAIC00NjAs
MjggKzQ2NCw5MCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkK
ICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAotQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxC
ZWdpbihjb25zdCBJbnRQb2ludCYpCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGVu
dFBvaW50V2l0aGluTGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCwgY29uc3QgSW50UG9pbnQm
IGNvbnRlbnRQb2ludCkgY29uc3QKIHsKLSAgICAvLyBUT0RPOiBDaGVjayBmb3Igc2Nyb2xsYWJs
ZSBzdWJsYXllcnMuCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCAhbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7CisgICAg
SW50UmVjdCBsYXllckNvbnRlbnRSZWN0KGxheWVySW1wbC0+dmlzaWJsZUxheWVyUmVjdCgpKTsK
KyAgICAvLyBUaGUgdmlzaWJsZSBsYXllciByZWN0IGlzIGluIHNjYWxlZCBjb29yZGluYXRlcywg
c28gdW5kbyB0aGUgcGFnZSBzY2FsZS4gTm90ZSB0aGF0IHRoZXJlIGlzCisgICAgLy8gbm8gbmVl
ZCB0byB1bmRvIHRoZSBwYWdlIHNjYWxlIGRlbHRhLCBiZWNhdXNlIHRoZSBsYXllciBjb250ZW50
IHJlY3QgaXMgb25seSBzY2FsZWQgd2l0aCB0aGUKKyAgICAvLyBvcmlnaW5hbCBwYWdlIHNjYWxl
LgorICAgIGxheWVyQ29udGVudFJlY3Quc2NhbGUoMSAvIG1fcGFnZVNjYWxlKTsKKyAgICByZXR1
cm4gbGF5ZXJDb250ZW50UmVjdC5jb250YWlucyhjb250ZW50UG9pbnQpOworfQorCitDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luU2Ny
b2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGNvbnN0
IEludFBvaW50JiB2aWV3cG9ydFBvaW50KQoreworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAg
ICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7IGkrKykgewor
ICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHN0YXR1cyA9IGJlZ2lu
U2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5n
ZXQoKSwgdmlld3BvcnRQb2ludCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQgfHwgc3RhdHVzID09IENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KIAotICAg
IHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIEludFBvaW50IGNvbnRlbnRQb2ludChsYXllcklt
cGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHZpZXdwb3J0UG9p
bnQpKTsKKyAgICBpZiAobGF5ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSAmJiAhaXNDb250ZW50UG9p
bnRXaXRoaW5MYXllcihsYXllckltcGwsIGNvbnRlbnRQb2ludCkpCisgICAgICAgIHJldHVybiBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKKworICAgIGlmIChsYXllckltcGwt
PnNjcm9sbGFibGUoKSkgeworICAgICAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9
IGxheWVySW1wbDsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxT
dGFydGVkOworICAgIH0KKworICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
SWdub3JlZDsKK30KKworQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCkK
K3sKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigpOworICAgIHJldHVy
biBiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludChtX3Njcm9sbExheWVySW1wbC5n
ZXQoKSwgdmlld3BvcnRQb2ludCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Ny
b2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkND
TGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5IiwgdGhpcywgMCk7Ci0gICAgaWYgKCFtX3Njcm9s
bExheWVySW1wbCkKKyAgICBpZiAoIW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVs
dGEpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIG1f
Y2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIEludFNpemUgcGVuZGlu
Z0RlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gbV9jdXJy
ZW50bHlTY3JvbGxpbmdMYXllckltcGwuZ2V0KCk7CisgICAgd2hpbGUgKGxheWVySW1wbCAmJiAh
cGVuZGluZ0RlbHRhLmlzWmVybygpKSB7CisgICAgICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFi
bGUoKSkgeworICAgICAgICAgICAgRmxvYXRTaXplIHByZXZpb3VzRGVsdGEobGF5ZXJJbXBsLT5z
Y3JvbGxEZWx0YSgpKTsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBzY2FsZWRQZW5kaW5nRGVsdGEo
cGVuZGluZ0RlbHRhKTsKKyAgICAgICAgICAgIC8vIFNpbmNlIHNjcm9sbERlbHRhIGlzIGluIHdp
bmRvdyBjb29yZGluYXRlcywgaXQgYWxyZWFkeSBoYXMgdGhlIHBhZ2Ugc2NhbGUgYXBwbGllZC4K
KyAgICAgICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSByb290IHNjcm9sbCBsYXllciBl
eHBlY3RzLCBidXQgY2hpbGQgbGF5ZXJzIGFyZSBzY3JvbGxlZCB1c2luZworICAgICAgICAgICAg
Ly8gdW5zY2FsZWQgY29udGVudCBjb29yZGluYXRlcyBpbnN0ZWFkLCBzbyB3ZSBoYXZlIHRvIHVu
ZG8gdGhlIHNjYWxpbmcgZm9yIHRoZW0uIFRoZQorICAgICAgICAgICAgLy8gcGFnZSBzY2FsZSBk
ZWx0YSBuZWVkcyB0byBiZSB1bmFwcGxpZWQgd2l0aCBib3RoIGxheWVyIHR5cGVzIHNpbmNlIHRo
ZSBzY3JvbGwKKyAgICAgICAgICAgIC8vIGNvb3JkaW5hdGVzIGRvIG5vdCByZXNwZWN0IGl0Lgor
ICAgICAgICAgICAgaWYgKGxheWVySW1wbCA9PSBtX3Njcm9sbExheWVySW1wbCkgeworICAgICAg
ICAgICAgICAgIHNjYWxlZFBlbmRpbmdEZWx0YS5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7
CisgICAgICAgICAgICAgICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY2FsZWRQZW5kaW5nRGVs
dGEuc2NhbGUoMSAvIChtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGEpKTsKKyAgICAgICAg
ICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHNjYWxlZFBlbmRpbmdEZWx0YSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBSZXNldCB0aGUgcGVuZGluZyBzY3JvbGwgZGVsdGEgdG8g
emVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8gbW92ZSBhbG9uZyB0aGUgcmVxdWVzdGVkCisg
ICAgICAgICAgICAvLyBheGlzLiBUaGlzIGlzIHRvIGVuc3VyZSBpdCBpcyBwb3NzaWJsZSB0byBz
Y3JvbGwgZXhhY3RseSB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBhCisgICAgICAgICAgICAv
LyBzY3JvbGwgYXJlYSByZWdhcmRsZXNzIG9mIHRoZSBzY3JvbGwgc3RlcC4gRm9yIGRpYWdvbmFs
IHNjcm9sbHMgdGhpcyBhbHNvIGF2b2lkcyBhcHBseWluZworICAgICAgICAgICAgLy8gdGhlIHNj
cm9sbCBvbiBvbmUgYXhpcyB0byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICBpZiAocHJl
dmlvdXNEZWx0YS53aWR0aCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgpKQor
ICAgICAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIGlm
IChwcmV2aW91c0RlbHRhLmhlaWdodCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5oZWln
aHQoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0SGVpZ2h0KDApOworICAgICAg
ICB9CisgICAgICAgIGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCk7CisgICAgfQorCisg
ICAgaWYgKHBlbmRpbmdEZWx0YSAhPSBzY3JvbGxEZWx0YSkgeworICAgICAgICBtX2NsaWVudC0+
c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRz
UmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnNjcm9sbEVuZCgpCiB7CisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuY2xl
YXIoKTsKIH0KIAogYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpoYXZlV2hlZWxFdmVudEhhbmRs
ZXJzKCkKQEAgLTUyNCwyNSArNTkwLDQ4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGlu
Y2hHZXN0dXJlRW5kKCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQo
KTsKIH0KIAorc3RhdGljIGJvb2wgZGlkU2Nyb2xsU3VidHJlZShDQ0xheWVySW1wbCogbGF5ZXJJ
bXBsKQoreworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBs
LT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBpZiAoZGlkU2Nyb2xsU3VidHJlZShs
YXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29s
bGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xheWVy
SW1wbCogbGF5ZXJJbXBsKSBjb25zdAoreworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0
YSgpLmlzWmVybygpKSB7CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSB0b1NpemUoZmxv
b3JlZEludFBvaW50KGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOworICAgICAgICBpZiAobGF5
ZXJJbXBsICE9IG1fc2Nyb2xsTGF5ZXJJbXBsKSB7CisgICAgICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOworICAgICAgICAgICAgc2Nyb2xsLmxh
eWVySWQgPSBsYXllckltcGwtPmlkKCk7CisgICAgICAgICAgICBzY3JvbGwuc2Nyb2xsRGVsdGEg
PSBzY3JvbGxEZWx0YTsKKyAgICAgICAgICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNj
cm9sbCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2Nyb2xsSW5mby0+cm9vdFNjcm9s
bERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAgIGxheWVySW1wbC0+c2V0U2VudFNjcm9sbERl
bHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNv
bGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mbywgbGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdl
dCgpKTsKK30KKwogUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKIHsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRT
Y2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0UHRyKG5ldyBDQ1Njcm9sbEFuZFNjYWxlU2V0KCkp
OwotICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsICYmICghbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxLjBm
KTsKKyAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoZGlkU2Nyb2xsU3Vi
dHJlZShtX3Njcm9sbExheWVySW1wbC5nZXQoKSkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxLjBm
KTsKICAgICBpZiAoIWRpZE1vdmUgfHwgbV9waW5jaEdlc3R1cmVBY3RpdmUgfHwgbV9wYWdlU2Nh
bGVBbmltYXRpb24pIHsKICAgICAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZv
LT5wYWdlU2NhbGVEZWx0YSA9IDE7CiAgICAgICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2Uo
KTsKICAgICB9CiAKKyAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8uZ2V0KCksIG1f
c2Nyb2xsTGF5ZXJJbXBsLmdldCgpKTsKICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9s
bEluZm8tPnBhZ2VTY2FsZURlbHRhID0gbV9wYWdlU2NhbGVEZWx0YTsKIAotICAgIC8vIEZJWE1F
OiB0cmFjayBzY3JvbGxzIGZyb20gbGF5ZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9sbC5s
YXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRh
ID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgc2Nyb2xsSW5mby0+c2Ny
b2xscy5hcHBlbmQoc2Nyb2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Ny
b2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJl
bGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGVk
MzhiODZkZTQ2ZmNiMzU0NWI4MDg5ZWYxNmM2YjQ1MjEzODhkZDEuLjhmZWUyZWRmMTcwNTcyNTFj
MDI4ZGZmN2E2N2ZkMWMwMDNlOTA3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKQEAgLTEzNSwxMCArMTM1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVNYXhT
Y3JvbGxQb3NpdGlvbigpOwogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xh
eWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8
Q0NSZW5kZXJQYXNzPiA+Jik7CisgICAgYm9vbCBpc0NvbnRlbnRQb2ludFdpdGhpbkxheWVyKEND
TGF5ZXJJbXBsKiwgY29uc3QgSW50UG9pbnQmIGNvbnRlbnRQb2ludCkgY29uc3Q7CisgICAgU2Ny
b2xsU3RhdHVzIGJlZ2luU2Nyb2xsaW5nSW5uZXJtb3N0TGF5ZXJBdFBvaW50KENDTGF5ZXJJbXBs
KiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lkIGNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NTY3Jv
bGxBbmRTY2FsZVNldCosIENDTGF5ZXJJbXBsKikgY29uc3Q7CiAKICAgICBPd25QdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBtX3Jvb3RMYXllckltcGw7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Njcm9sbExheWVy
SW1wbDsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJ
bXBsOwogICAgIENDU2V0dGluZ3MgbV9zZXR0aW5nczsKICAgICBJbnRTaXplIG1fdmlld3BvcnRT
aXplOwogICAgIGJvb2wgbV92aXNpYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcAppbmRleCA3MmJlYzJhNzE2NjRhZjQzY2Q2NGQwMTRkMjhiODQyNjUwOTViMjAzLi5h
NmNhNmY3MDIxMjdlYzcyZTk2NjU5YjBjZmMyZDdjMDBiYWQ3Njk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTY1LDYgKzE2NSw3IEBAIHZvaWQgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6ZG9Db21taXQoKQogICAgICAgICAvLyBJbiB0aGUgc2luZ2xlLXRocmVh
ZGVkIGNhc2UsIHRoZSBzY3JvbGwgZGVsdGFzIHNob3VsZCBuZXZlciBiZQogICAgICAgICAvLyB0
b3VjaGVkIG9uIHRoZSBpbXBsIGxheWVyIHRyZWUuCiAgICAgICAgIE93blB0cjxDQ1Njcm9sbEFu
ZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cHJvY2Vzc1Njcm9s
bERlbHRhcygpOworICAgICAgICBBU1NFUlQoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLmlz
WmVybygpKTsKICAgICAgICAgQVNTRVJUKCFzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSk7CiAj
ZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwCmluZGV4IDZiYTgzNjY3N2RmODI4MjI5MzQ1ZTQwMmMzNmIyZGYzOWQ3OWM0YjAu
LmY1ODNkZTM5Yzk3NGQ1NDNlNjBiOTU1MTliZWMwZmFlMDc2YmFkZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC01Myw2ICs1Myw3
IEBACiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZp
Y2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgogI2luY2x1ZGUgIkljb24uaCIKQEAgLTY0LDYgKzY1LDcgQEAKICNpbmNsdWRlICJQ
bGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJQb3B1cENvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlBvcHVwTWVudUNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiU2VhcmNoUG9wdXBNZW51Q2hyb21pdW0uaCIKQEAgLTg2OCw2ICs4NzAsMjggQEAgYm9vbCBD
aHJvbWVDbGllbnRJbXBsOjpwYWludEN1c3RvbU92ZXJoYW5nQXJlYShHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xp
ZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihHcmFwaGljc0xheWVyKiBsYXllciwg
U2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQoreworICAgIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogbGF5ZXJDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSo+
KGxheWVyKTsKKyAgICBsYXllckNocm9taXVtLT5zZXRTY3JvbGxhYmxlQXJlYShzY3JvbGxhYmxl
QXJlYSk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyID0gbGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAg
IHBsYXRmb3JtTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbGFibGVBcmVhLT5zY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRT
aXplKHNjcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKEhvcml6b250YWxTY3JvbGxiYXIpLCBzY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShWZXJ0aWNhbFNjcm9sbGJhcikpKTsKK30KKwordm9pZCBD
aHJvbWVDbGllbnRJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcihHcmFwaGljc0xheWVyKiBsYXll
cikKK3sKKyAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21pdW0gPSBzdGF0aWNf
Y2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihsYXllcik7CisgICAgbGF5ZXJDaHJvbWl1bS0+
c2V0U2Nyb2xsYWJsZUFyZWEoMCk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
ID0gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRTY3JvbGxh
YmxlKGZhbHNlKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCgpKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKCkp
OworfQorCiAvLyBGSVhNRTogUmVtb3ZlIENocm9tZUNsaWVudEltcGw6OnJlcXVlc3RHZW9sb2Nh
dGlvblBlcm1pc3Npb25Gb3JGcmFtZSBhbmQgQ2hyb21lQ2xpZW50SW1wbDo6Y2FuY2VsR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lCiAvLyBvbmNlIGFsbCBwb3J0cyBoYXZlIG1v
dmVkIHRvIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MDM3MyApLgogLy8gRm9yIGNsaWVudC1iYXNlZCBnZW9sb2Nh
dGlvbiwgdGhlc2UgbWV0aG9kcyBhcmUgbm93IGltcGxlbWVudGVkIGFzIFdlYkdlb2xvY2F0aW9u
Q2xpZW50OjpyZXF1ZXN0UGVybWlzc2lvbiBhbmQgV2ViR2VvbG9jYXRpb25DbGllbnQ6OmNhbmNl
bFBlcm1pc3Npb25SZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5oCmluZGV4IDIxMTNlYzFhZjRmODFkN2QxOWJlY2E2NTE4NzMyMzIxNzdhYzQ3
ZGQuLjI5ZGQyOTNmMzFlOTQyZjM3ZDlkZWI5NTU5YjBiZGIyYjYwYjgxZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKQEAgLTQ0LDkgKzQ0LDEx
IEBAIGNsYXNzIENvbG9yQ2hvb3NlckNsaWVudDsKICNlbmRpZgogY2xhc3MgRWxlbWVudDsKIGNs
YXNzIEZpbGVDaG9vc2VyOworY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFBvcHVwQ29udGFp
bmVyOwogY2xhc3MgUG9wdXBNZW51Q2xpZW50OwogY2xhc3MgUmVuZGVyQm94OworY2xhc3MgU2Ny
b2xsYWJsZUFyZWE7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIHN0cnVjdCBXaW5kb3dGZWF0dXJl
czsKIH0KQEAgLTEzNiw2ICsxMzgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlYWNo
ZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CiAgICAgdmlydHVhbCB2b2lk
IHJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW4qLCBpbnQ2NF90IHRvdGFsU3BhY2VOZWVkZWQpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEN1
c3RvbU92ZXJoYW5nQXJlYShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwogICAg
IHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoV2ViQ29y
ZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogICAgIHZpcnR1YWwgdm9pZCBjYW5j
ZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBX
ZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogI2lmIEVOQUJMRShJTlBVVF9DT0xPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKaW5kZXgg
Y2Q4ODkwMGJkYTM0YTUzYmUxZTZmZWZmOThkNTkzY2ZjYWU2ODExMC4uYjU4YzJjM2I4Y2I1ZGI1
Y2MwZDM5MThkMzY0Y2YyNzIwZDIzZGM1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKQEAgLTg2LDQgKzg2LDggQEAgdm9pZCBX
ZWJDb250ZW50TGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQogICAgICAgICBtX2NsaWVu
dC0+bm90aWZ5TmVlZHNDb21wb3NpdGUoKTsKIH0KIAordm9pZCBXZWJDb250ZW50TGF5ZXJJbXBs
OjpzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikKK3sKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5
ZXJJbXBsLmgKaW5kZXggMTA4ZGY1ZTNhMjU0ZWQ5NTY5NDU5ODZmZDY1NDFhODRhOTg4NjVmZi4u
MWE0ODcwMGZlZGRkYzI0ZTVhOTM5OGJmYTU4YmM3MDgwOGFlMmJjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaApAQCAtNDUsNiArNDUs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+V2ViQ29udGVudExheWVySW1wbCgpOwogICAg
IHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5j
UmVxdWlyZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYpOwogCiAgICAgV2ViTGF5ZXJDbGllbnQqIG1fY2xpZW50OwogICAgIFdlYkNvbnRlbnRM
YXllckNsaWVudCogbV9jb250ZW50Q2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAKaW5kZXggNDQy
ZWFjZDdkYTRlMGFlYjUxNzRjNDNkZjkxMGM4MDAwOGIxODc0OC4uM2Q4MzRmNGI3ZjNkMDEwZjM2
MzI3NDdiMjJjNGQ3NTY4NWMzM2E3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCkBAIC02Niw0ICs2
Niw4IEBAIHZvaWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWly
ZWQoKQogICAgICAgICBtX2NsaWVudC0+bm90aWZ5TmVlZHNDb21wb3NpdGUoKTsKIH0KIAordm9p
ZCBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmgKaW5k
ZXggNGY5YTk4NzI3Yzk3ZDliNWM5NTg3NDRjMjY5Yjg4NGQxODUzZTc2Zi4uOTRlZjc4ODljY2M2
OWQwZjNkYTVmOTYzOWZkOTA2M2Y0MDYxNjdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmgKQEAgLTQyLDYg
KzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJh
d3NDb250ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNv
cmU6OkludFNpemUmKTsKIAogICAgIFdlYkxheWVyQ2xpZW50KiBtX2NsaWVudDsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcAppbmRleCBkZGMwNjExMjA5
NDE2Zjk1MDQ1MTE2YzBhZmQ3Mjk3N2Y4ZjhhNmU1Li44ZDk1YTc4YmNiMDEzYTM1ZWU5MjVkNjUz
Y2Q2ZjgyMzFjZTBlNzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
SW1wbC5jcHAKQEAgLTYxLDQgKzYxLDggQEAgdm9pZCBXZWJMYXllckltcGw6Om5vdGlmeVN5bmNS
ZXF1aXJlZCgpCiAgICAgICAgIG1fY2xpZW50LT5ub3RpZnlOZWVkc0NvbXBvc2l0ZSgpOwogfQog
Cit2b2lkIFdlYkxheWVySW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpCit7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllcklt
cGwuaAppbmRleCA1NThkNDFiNWNkZTFhODQ4NzAyY2FkMGYzNzUxMmM4OTExNTUxMTE2Li4wZmVk
MGY3YjE1OTVmNWRmMTRhOTllM2FmYzZhZmI5ZDg1MzljNDA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllckltcGwuaApAQCAtNDIsNiArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNsaXApOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVs
dGEpOwogCiAgICAgV2ViTGF5ZXJDbGllbnQqIG1fY2xpZW50OwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAK
aW5kZXggZTgzNWFiNzg5YmZkMjllNzRkMDhjZDdhMWZlMjEzNzNlNjA1YTUyZS4uZmNiNzI4NWUz
Yjg2MjBiNjI0MWUyOTllODkzMDVkZDE2NDc4OGNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTEy
NSwxNiArMTI1LDE2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVs
dGFSZXBlYXRlZFNjcm9sbHMpCiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9s
bEluZm87CiAKICAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRh
cygpOwotICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAg
IEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMHUpOwogICAgIEVYUEVDVF9F
UShyb290LT5zZW50U2Nyb2xsRGVsdGEoKSwgc2Nyb2xsRGVsdGEpOwotICAgIGV4cGVjdENvbnRh
aW5zKCpzY3JvbGxJbmZvLmdldCgpLCByb290LT5pZCgpLCBzY3JvbGxEZWx0YSk7CisgICAgQVNT
RVJUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgc2Nyb2xsRGVsdGEpOwogCiAgICAg
SW50U2l6ZSBzY3JvbGxEZWx0YTIoLTUsIDI3KTsKICAgICByb290LT5zY3JvbGxCeShzY3JvbGxE
ZWx0YTIpOwogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFz
KCk7Ci0gICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAxdSk7CisgICAg
QVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7CiAgICAgRVhQRUNUX0VR
KHJvb3QtPnNlbnRTY3JvbGxEZWx0YSgpLCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7Ci0g
ICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERl
bHRhICsgc2Nyb2xsRGVsdGEyKTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9s
bERlbHRhLCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7CiAKICAgICByb290LT5zY3JvbGxC
eShJbnRTaXplKCkpOwogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xs
RGVsdGFzKCk7CkBAIC0xNTUsNiArMTU1LDk0IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0QW5kUmVkcmF3KQogICAgIEVYUEVDVF9UUlVFKG1f
ZGlkUmVxdWVzdENvbW1pdCk7CiB9CiAKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c2Nyb2xsUm9vdElnbm9yZWQpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAg
IEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRBbmRSZWRyYXcpCit7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBy
b290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxk
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKKyAgICBjaGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwor
ICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2libGVM
YXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICByb290
LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOwor
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNj
cm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAg
ICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlk
UmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Ny
b2xsTWlzc2VzQ2hpbGQpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBj
aGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBjaGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRp
b24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRT
aXplKDEwLCAxMCkpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxC
ZWdpbihJbnRQb2ludCgxNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3Jl
ZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZB
TFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9s
bGFibGUodHJ1ZSk7CisgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAs
IDEwMCkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290LT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworCisgICAgSW50U2l6ZSBzY3JvbGxE
ZWx0YSgwLCAxMCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1f
aG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdl
U2NhbGVGYWN0b3JBbmRMaW1pdHMoMiwgMSwgMik7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxk
IGFwcGx5IHRvIHRoZSByb290IHNjcm9sbCBkZWx0YS4KKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRT
Y2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsK
KyAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBJbnRTaXplKHNjcm9s
bERlbHRhLndpZHRoKCkgKiAyLCBzY3JvbGxEZWx0YS5oZWlnaHQoKSAqIDIpKTsKK30KKworVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VTY2Fs
ZSkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDApOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gc2Nyb2xsUm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgc2Nyb2xsUm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBjaGls
ZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBjaGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
SW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Cisg
ICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXpl
KDEwLCAxMCkpKTsKKyAgICByb290LT5hZGRDaGlsZChzY3JvbGxSb290KTsKKyAgICBzY3JvbGxS
b290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9s
bFJvb3QpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERl
bHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMiwgMSwg
Mik7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIG5vdCBhcHBseSB0byB0aGUgY2hpbGQgc2Ny
b2xsIGRlbHRhLgorICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0g
bV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpz
Y3JvbGxJbmZvLmdldCgpLCBjaGlsZC0+aWQoKSwgc2Nyb2xsRGVsdGEpOworfQorCiBjbGFzcyBC
bGVuZFN0YXRlVHJhY2tlckNvbnRleHQ6IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Qg
ewogcHVibGljOgogICAgIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dCgpIDogbV9ibGVuZChmYWxz
ZSkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcAppbmRleCAxODc2MjM4YjU4NTYyYjRhYTg3YjkyMTUwODU4YzA4NmRhMTk3
Mjc4Li5lNjRiYzQ5ZTRkYTE5YzJjYzY5NDIyOWY4NjEzNTIxNDJhZGE3OTdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAK
QEAgLTkyNyw2ICs5MjcsMTIwIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0VmlzaWJs
ZSwgcnVuTXVsdGlUaHJlYWQpCiAgICAgcnVuVGVzdCh0cnVlKTsKIH0KIAorY2xhc3MgQ0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVh
ZE9ubHkgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAg
ICAgICAgbV9yb290U2Nyb2xsTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAg
ICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIG1fcm9v
dFNjcm9sbExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZENoaWxkKG1fcm9vdFNjcm9s
bExheWVyKTsKKyAgICAgICAgbV9jaGlsZExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOworICAg
ICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIG1fY2hpbGRM
YXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBt
X3Jvb3RTY3JvbGxMYXllci0+YWRkQ2hpbGQobV9jaGlsZExheWVyKTsKKyAgICAgICAgcG9zdFNl
dE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0KQorICAg
IHsKKyAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xs
UG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRl
clRlc3QoKQorICAgIHsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290U2Nyb2xs
TGF5ZXI7Cit9OworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7CitwdWJsaWM6CisgICAgQ0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIoKQorICAgICAgICA6IG1fc2Nyb2xsQW1v
dW50KDIsIDEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9u
Q0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIEVYUEVD
VF9FUShtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7Cisg
ICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5mcmFtZU51bWJlcigpKQorICAgICAgICAgICAg
RVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBv
c2l0aW9uKCksIEludFBvaW50KCkgKyBtX3Njcm9sbEFtb3VudCk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwp
CisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxC
eShtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDIpCisgICAgICAgICAgICBlbmRU
ZXN0KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50
OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5N
dWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsKK30KKworY2xhc3MgQ0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCA6IHB1YmxpYyBDQ0xheWVy
VHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCgpCisgICAgICAgIDogbV9pbml0aWFsUm9vdFNj
cm9sbFBvc2l0aW9uKDMsIDYpCisgICAgICAgICwgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlv
bigyMCwgMCkKKyAgICAgICAgLCBtX3Njcm9sbEFtb3VudCgtMjUsIC01KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxCYXNlOjpiZWdpblRlc3QoKTsKKyAgICAgICAgbV9yb290U2Nyb2xs
TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7Cisg
ICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9pbml0aWFsQ2hpbGRTY3Jv
bGxQb3NpdGlvbik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1Ro
cmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGF5
ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBDQ0xheWVySW1w
bCogcm9vdCA9IGltcGwtPnJvb3RMYXllcigpOworICAgICAgICAgICAgQ0NMYXllckltcGwqIHNj
cm9sbFJvb3QgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICAgICAgQ0NMYXll
ckltcGwqIGNoaWxkID0gc2Nyb2xsUm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShjaGlsZC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsQ2hpbGRTY3Jv
bGxQb3NpdGlvbik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoY2hpbGQtPnNjcm9sbERlbHRhKCks
IEludFNpemUoLTIwLCAwKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Ny
b2xsUG9zaXRpb24oKSwgbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgICAg
IEVYUEVDVF9FUShzY3JvbGxSb290LT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKDAsIC01KSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFt
ZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxCZWdp
bihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsK
KyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAg
IGltcGwtPnNjcm9sbEVuZCgpOworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVy
KCkgPT0gMikKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9Citwcml2YXRlOgorICAgIGNv
bnN0IEludFBvaW50IG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJbnRQ
b2ludCBtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uOworICAgIGNvbnN0IEludFNpemUgbV9z
Y3JvbGxBbW91bnQ7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXJCZXlvbmRMaW1pdCwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVk
KCk7Cit9CisKIGNsYXNzIFRlc3RPcGFjaXR5Q2hhbmdlTGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBD
Q0xheWVyRGVsZWdhdGUgewogcHVibGljOgogICAgIFRlc3RPcGFjaXR5Q2hhbmdlTGF5ZXJEZWxl
Z2F0ZShDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQpAQCAtOTQzLDYgKzEwNTcsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzM0QoKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpIHsgfQogCiBwcml2YXRlOgogICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3QqIG1fdGVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9M
YXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggMjg2NjVhYTc3NmJjYWUwMWNmMGI4ODVmZWQ1YzVh
NWM4ZWQzMThkMC4uYTQ3NjZlYjZkMjcyZGM2Mzg0ZTIxZjRkNGNmMjI5OTNmYzc3MTRiOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5j
cHAKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIE1PQ0tfQ09OU1RfTUVUSE9EMChwcmVz
ZXJ2ZXMzRCwgYm9vbCgpKTsKICAgICBNT0NLX01FVEhPRDIocGFpbnRDb250ZW50cywgdm9pZChH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikpOwogICAgIE1PQ0tfTUVUSE9EMChub3Rp
ZnlTeW5jUmVxdWlyZWQsIHZvaWQoKSk7CisgICAgTU9DS19NRVRIT0QxKHNjcm9sbEJ5LCB2b2lk
KGNvbnN0IEludFNpemUmKSk7CiB9OwogCiBjbGFzcyBNb2NrTGF5ZXJQYWludGVyQ2hyb21pdW0g
OiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120063</attachid>
            <date>2011-12-20 12:53:57 -0800</date>
            <delta_ts>2011-12-20 13:22:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20111220205354.patch</filename>
            <type>text/plain</type>
            <size>49158</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk4ZDQ3MGFiODI0ODUy
NjI0MmRiZDc1MzgxN2E4NzBhMDM0NGIxZC4uNWU1OTlhN2VlOTMzM2M3MGMwNjZmNTg3ZGQ4ZTRi
ODdhZWM4NmNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDExLTEyLTA0ICBSb2JlcnQg
SG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBDU1MgMi4xIGZhaWx1cmU6IGJv
cmRlci1jb25mbGljdC1lbGVtZW50LSoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2Fj
MGViOWVlNzc2YWE2YmFkOGZjNTgwYjE1NTQzOTZmNzdiZGM1OS4uMTYzNGNiNDIxNTNmMzI0MWYy
NDZlN2MwMzc0NGQ3ZGY2ZDg2M2M3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NyBAQAorMjAxMS0xMi0wOSAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBsYXllciBzY3JvbGxpbmcgaW4g
dGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzM1MAorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyBzY3JvbGxp
bmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICAgICAgU2Nyb2xs
IGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xsZWQgQ0NMYXllckltcGwgYW5k
CisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgV2ViVmlld0ltcGwgaW4gdGhlIG1haW4gdGhy
ZWFkLgorCisgICAgICAgIElmIGEgbGF5ZXIgaGFzIG5vIHJvb20gdG8gc2Nyb2xsIGluIGEgZ2l2
ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCisgICAgICAgIGFuY2VzdG9yIGxheWVycyBpcyBzY3Jv
bGxlZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdDbGll
bnQuaDoKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkNocm9tZUNsaWVudEltcGw6OmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcik6CisgICAg
ICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVl
Vmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBw
bHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVl
Vmlld0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RIb29rczo6YXBwbHlSb290
TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OlRlc3RIb29rczo6YXBwbHlMYXll
clNjcm9sbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjphcHBseVJv
b3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RD
bGllbnQ6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsU2ltcGxlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRpcGxlUmVkcmF3OjphcHBseVJvb3RM
YXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbEJhc2U6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxCYXNlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YWZ0ZXJUZXN0KToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5U2Nyb2xsVG9DaGls
ZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5
ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2luQ29tbWl0T25DQ1RocmVh
ZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpk
cmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OkNDTGF5
ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpiZWdpblRl
c3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJl
eW9uZExpbWl0OjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpkcmF3TGF5ZXJzT25DQ1Ro
cmVhZCk6CisKIDIwMTEtMTItMTkgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5j
b20+CiAKICAgICAgICAgW2Nocm9taXVtXSBNZWRpYVN0cmVhbSBBUEk6IEZpeGluZyBtZW1vcnkg
bGVhayBpbiBXZWJNZWRpYVN0cmVhbVNvdXJjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggMjI5YmE5ZDgxYjhkMDY3OWIxZmRhNTZhZmUwNTIyZjFmOGRhMjBjZC4u
ZmUyNmMwNzRlM2Q5ZThhOTJkMTBiM2VlNTk5NmRkNGVmOWM5Y2YyZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiSW1h
Z2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
ICJTeXN0ZW1UaW1lLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTcwLDYg
KzcxLDcgQEAgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUo
R3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogCiBHcmFwaGljc0xheWVyQ2hyb21pdW06Okdy
YXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBH
cmFwaGljc0xheWVyKGNsaWVudCkKKyAgICAsIG1fc2Nyb2xsYWJsZUFyZWEoMCkKICAgICAsIG1f
Y29udGVudHNMYXllclB1cnBvc2UoTm9Db250ZW50c0xheWVyKQogICAgICwgbV9jb250ZW50c0xh
eWVySGFzQmFja2dyb3VuZENvbG9yKGZhbHNlKQogICAgICwgbV9pblNldENoaWxkcmVuKGZhbHNl
KQpAQCAtNjcxLDYgKzY3MywxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5
U3luY1JlcXVpcmVkKCkKICAgICAgICAgbV9jbGllbnQtPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlz
KTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVsdGEpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDJmYzhl
NTI0ODhhY2FjYmQzOWRmODA5ODQ2OGY3Yzk5M2ZjMjY0NTYuLjcwNjJiZGQ1OTI1ZDI4NGE0Mzdh
N2ExMzU5ZTRlNmZmN2MwOTk5MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
CkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hy
b21pdW07CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIAogY2xhc3MgR3JhcGhpY3NMYXllckNocm9t
aXVtIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBDQ0xheWVyRGVsZWdhdGUgewogcHVi
bGljOgpAQCAtMTAwLDYgKzEwMSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGRyYXdz
Q29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlT
eW5jUmVxdWlyZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdGEpOworCisgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsYWJsZUFy
ZWEoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKSB7IG1fc2Nyb2xsYWJsZUFyZWEgPSBz
Y3JvbGxhYmxlQXJlYTsgfQogCiAgICAgLy8gRXhwb3NlZCBmb3IgdGVzdHMuCiAgICAgTGF5ZXJD
aHJvbWl1bSogY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllci5n
ZXQoKTsgfQpAQCAtMTM1LDYgKzE0MCw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IG1fdHJhbnNmb3JtTGF5ZXI7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY29u
dGVudHNMYXllcjsKIAorICAgIFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOworCiAg
ICAgZW51bSBDb250ZW50c0xheWVyUHVycG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9
IDAsCiAgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFnZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggYjQ1ZTEyNTk1NzNmOWVkMzU3MWI2MWEwMWU4MzBjNWVkZTQ0ZjI4Yi4uMjhhZGUzOTM1
OTZhMTg3MThhYzRhMTk2MWRlNDNjYWMwYzNkY2E5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTM5MCw2ICszOTAsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8o
Q0NMYXllckltcGwqIGxheWVyKQogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsK
ICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNl
dFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgIGxheWVyLT5zZXRNYXhTY3Jv
bGxQb3NpdGlvbihtX21heFNjcm9sbFBvc2l0aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJU
cmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybSht
X3RyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFVwZGF0ZVJlY3QobV91cGRhdGVSZWN0KTsKQEAg
LTQ0Niw2ICs0NDcsMTMgQEAgYm9vbCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50RHJhd3NDb250
ZW50KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2Nyb2xs
QnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb24oKSArIHNjcm9sbERlbHRhKTsKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAg
ICAgICAgbV9kZWxlZ2F0ZS0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworfQorCiB2b2lkIHNvcnRM
YXllcnMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCiB7CiAgICAgLy8gQ3VycmVu
dGx5IHdlIGRvbid0IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVy
ZSdzIG5vIG5lZWQgdG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAppbmRleCAxNzM0MzRlOThlYjkyMzA1NWFiNzg2NjAzNDNkNzQ2MDkwNzk5ZTFiLi41Nzcy
MzBlZmM5ZWI4ZDEzYjdmNDA0YTJjZjQ4NjU4YWZlOTIzZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CkBAIC02Miw2ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
U3luY1JlcXVpcmVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSkgPSAwOwogfTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRl
ZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQpAQCAtMTMyLDkg
KzEzMywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQ
b2ludCYpOwogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KIAorICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQg
c2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsg
bV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICB2b2lkIHNl
dFNjcm9sbGFibGUoYm9vbCk7CiAgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxhYmxlOyB9CiAKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhKTsKKwogICAgIEludFNpemUgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBJbnRT
aXplKCk7IH0KIAogICAgIGZsb2F0IHBhZ2VTY2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4gMTsg
fQpAQCAtMjU2LDYgKzI2Miw3IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAg
ICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0
aW9uOworICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xs
YWJsZTsKICAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX2FuY2hv
clBvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDAzNjY2MDkyZjIzMmJiMDEzN2I2
MjIxZjc2OTZkZWQwZWQzZTU0NGIuLjA2NmRlOWEwNjZmZjE0OTI1Yzk0ZTE2MThkN2Q2NmZjYWI2
NTRiYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTE0OSw5ICsxNDksOSBAQCB2b2lk
IENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSop
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnNjcm9s
bEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbCkKK3ZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNv
bnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQogewotICAgIEludFNpemUgbmV3RGVsdGEgPSBtX3Njcm9s
bERlbHRhICsgc2Nyb2xsOworICAgIEZsb2F0U2l6ZSBuZXdEZWx0YSA9IG1fc2Nyb2xsRGVsdGEg
KyBzY3JvbGw7CiAgICAgSW50U2l6ZSBtaW5EZWx0YSA9IC10b1NpemUobV9zY3JvbGxQb3NpdGlv
bik7CiAgICAgSW50U2l6ZSBtYXhEZWx0YSA9IG1fbWF4U2Nyb2xsUG9zaXRpb24gLSB0b1NpemUo
bV9zY3JvbGxQb3NpdGlvbik7CiAgICAgLy8gQ2xhbXAgbmV3RGVsdGEgc28gdGhhdCBwb3NpdGlv
biArIGRlbHRhIHN0YXlzIHdpdGhpbiBzY3JvbGwgYm91bmRzLgpAQCAtNDQyLDcgKzQ0Miw3IEBA
IHZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9
CiAKLXZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhKQordm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXpl
JiBzY3JvbGxEZWx0YSkKIHsKICAgICBpZiAobV9zY3JvbGxEZWx0YSA9PSBzY3JvbGxEZWx0YSkK
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMjZjN2EyZjRkNWVjNTk0
Zjg3YmNjNzUzMTJjNjhiMDdkMDgxZGY2OS4uZmZiZTllZDU5MWE0YmM5NTkxZjM2M2YyZTcyNmJj
NjlmNjJlZGFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNjAsMTYgKzE2MCwxNiBAQCBw
dWJsaWM6CiAgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7cmV0
dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KICAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0aW9u
KGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKSB7IG1fbWF4U2Nyb2xsUG9zaXRpb24g
PSBtYXhTY3JvbGxQb3NpdGlvbjsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbERlbHRhOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxEZWx0
YShjb25zdCBJbnRTaXplJik7CisgICAgY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNjcm9sbERlbHRhKGNv
bnN0IEZsb2F0U2l6ZSYpOwogCiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGEoKSBjb25zdCB7IHJl
dHVybiBtX3BhZ2VTY2FsZURlbHRhOyB9CiAgICAgdm9pZCBzZXRQYWdlU2NhbGVEZWx0YShmbG9h
dCk7CiAKLSAgICBjb25zdCBJbnRTaXplJiBzZW50U2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVy
biBtX3NlbnRTY3JvbGxEZWx0YTsgfQotICAgIHZvaWQgc2V0U2VudFNjcm9sbERlbHRhKGNvbnN0
IEludFNpemUmIHNlbnRTY3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3Jv
bGxEZWx0YTsgfQorICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3Qg
eyByZXR1cm4gbV9zZW50U2Nyb2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0
YShjb25zdCBGbG9hdFNpemUmIHNlbnRTY3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9
IHNlbnRTY3JvbGxEZWx0YTsgfQogCi0gICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBz
Y3JvbGwpOworICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpOwogCiAg
ICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlOyB9CiAgICAg
dm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wgc2Nyb2xsYWJsZSkgeyBtX3Njcm9sbGFibGUgPSBzY3Jv
bGxhYmxlOyB9CkBAIC0yNTYsOCArMjU2LDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kcmF3
c0NvbnRlbnQ7CiAKLSAgICBJbnRTaXplIG1fc2Nyb2xsRGVsdGE7Ci0gICAgSW50U2l6ZSBtX3Nl
bnRTY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNp
emUgbV9zZW50U2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwog
ICAgIGZsb2F0IG1fcGFnZVNjYWxlRGVsdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCmluZGV4IDY2MDdiYWY5MjkyZjUzZTE4MDk3YzU2OTkxZjM4ZWJmOTZhZDQxZmEuLjA1Yzhi
OGJjMGQ1OGViMzM5ZjA0Yzk1YjQ2YzliMmI0MjI2YTYzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcApAQCAtNDg2LDE1ICs0ODYsMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKK3N0
YXRpYyBMYXllckNocm9taXVtKiBmaW5kTGF5ZXJCeUlkKExheWVyQ2hyb21pdW0qIGxheWVyLCBp
bnQgaWQpCit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
bGF5ZXItPmlkKCkgPT0gaWQpCisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
TGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5kTGF5ZXJCeUlkKGxheWVyLT5jaGlsZHJlbigpW2ld
LmdldCgpLCBpZCk7CisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3Vu
ZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAg
ICAvLyBGSVhNRTogcHVzaGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90
IGltcGxlbWVudGVkCi0gICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1
cm47CisgICAgaWYgKCFpbmZvLnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSB8fCBpbmZvLnBhZ2VT
Y2FsZURlbHRhICE9IDEpCisgICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKGlu
Zm8ucm9vdFNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIAotICAgIEFTU0VSVChp
bmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZv
LnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2Nh
bGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW5mby5zY3JvbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21p
dW0qIGxheWVyID0gZmluZExheWVyQnlJZChtX3Jvb3RMYXllci5nZXQoKSwgaW5mby5zY3JvbGxz
W2ldLmxheWVySWQpOworICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGxheWVyLT5zY3JvbGxCeShpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOwor
ICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oCmluZGV4IDJlMGNiY2YyYzU4NWU4MjE1ZDI4NmRlZTliNjFlNTM1MTgwY2ZmYWQuLjBkMjQ2
ZjUzOTM1MDU1YTY5NTA0ODY5MTZhYzMyMjdlY2FkNDVlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogc3RydWN0
IENDU2Nyb2xsQW5kU2NhbGVTZXQgewogICAgIFZlY3RvcjxDQ0xheWVyVHJlZUhvc3RDb21tb246
OlNjcm9sbFVwZGF0ZUluZm8+IHNjcm9sbHM7CisgICAgSW50U2l6ZSByb290U2Nyb2xsRGVsdGE7
CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwCmluZGV4IDA5NDY1YmY5OWU3OWZlNzFmMjQxNzQ2Nzg0NTJkYWVmODc1
OTEwNzQuLmEwYzg5Zjg4ODQzNTcwNjA3MjVlZTNmZGQ2Y2E2Nzg5ZWRlOGFkZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC03Niw2ICs3NiwxNCBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjb21taXRDb21wbGV0ZSgpCiB7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc2Nyb2xs
aW5nIGxheWVyIGlzIHN0aWxsIHByZXNlbnQgaW4gdGhlIHRyZWUuCisgICAgaWYgKG1fY3VycmVu
dGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9j
dXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChyb290LT5w
YXJlbnQoKSkKKyAgICAgICAgICAgIHJvb3QgPSByb290LT5wYXJlbnQoKTsKKyAgICAgICAgaWYg
KHJvb3QgIT0gbV9yb290TGF5ZXJJbXBsKQorICAgICAgICAgICAgbV9jdXJyZW50bHlTY3JvbGxp
bmdMYXllckltcGwuY2xlYXIoKTsKKyAgICB9CiAgICAgLy8gUmVjb21wdXRlIG1heCBzY3JvbGwg
cG9zaXRpb247IG11c3QgYmUgYWZ0ZXIgbGF5ZXIgY29udGVudCBib3VuZHMgYXJlCiAgICAgLy8g
dXBkYXRlZC4KICAgICB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwpAQCAtMTAwLDcgKzEwOCw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRp
bWVNcykKICAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAK
LSAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIElu
dFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0
aW9uKCkgKyBmbG9vcmVkSW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkp
KTsKIAogICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2Nh
bGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBu
ZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFt
ZUJlZ2luVGltZU1zKTsKQEAgLTExOSw3ICsxMjcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9u
LAogICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIElu
dFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0
aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBz
Y3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSAr
IGZsb29yZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogICAg
IHNjcm9sbFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlVG90
YWwgPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2FsZWRD
b250ZW50U2l6ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91
bmRzKCk7CkBAIC0zMTgsOCArMzI2LDYgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xs
TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRS
b290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5
ZXJJbXBsID0gbGF5ZXI7Ci0KLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmlu
ZHMgdGhlIGZpcnN0IHNjcm9sbGFibGUgbGF5ZXIuCiAgICAgbV9zY3JvbGxMYXllckltcGwgPSBm
aW5kU2Nyb2xsTGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKIH0KIApAQCAtMzg3LDE1ICsz
OTMsMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5n
ZSkKIHsKLSAgICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEpCisgICAgaWYgKCFtX3Njcm9sbExh
eWVySW1wbCB8fCBwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gV2UgYWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFn
ZVNjYWxlIHNwYWNlLgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBJbnRT
aXplIHNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAg
ICAgIHNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIC8vIFdl
IGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGEgZm9yIHRoZSByb290
IGxheWVyIHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBt
X3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZShw
YWdlU2NhbGVDaGFuZ2UpOworICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShz
Y3JvbGxEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxl
RGVsdGEoZmxvYXQgZGVsdGEpCkBAIC00MzcsOSArNDQxLDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5nIGEgdmVydGlj
YWwgc2Nyb2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1heFNjcm9sbC5j
bGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKKyAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRlIHRo
ZSByb290IGxheWVyIHNjcm9sbCByYW5nZSwgc2luY2UgdGhlIGNoaWxkCisgICAgLy8gbGF5ZXJz
IHVzZSB1bnNjYWxlZCBzY3JvbGwgY29vcmRpbmF0ZXMuCiAgICAgbV9zY3JvbGxMYXllckltcGwt
PnNldE1heFNjcm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6
IEFsc28gdXBkYXRlIHN1YmxheWVycy4KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRab29tQW5pbWF0b3JUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHpvb20p
CkBAIC00NjAsMjggKzQ2NCwxNDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVk
c1JlZHJhdygpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9
CiAKLUNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1w
bDo6c2Nyb2xsQmVnaW4oY29uc3QgSW50UG9pbnQmKQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojppc0NvbnRlbnRQb2ludFdpdGhpbkxheWVyKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGNvbnN0
IEludFBvaW50JiBjb250ZW50UG9pbnQpIGNvbnN0Cit7CisgICAgSW50UmVjdCBsYXllckNvbnRl
bnRSZWN0KGxheWVySW1wbC0+dmlzaWJsZUxheWVyUmVjdCgpKTsKKyAgICAvLyBUaGUgdmlzaWJs
ZSBsYXllciByZWN0IGlzIGluIHNjYWxlZCBjb29yZGluYXRlcywgc28gdW5kbyB0aGUgcGFnZSBz
Y2FsZS4gTm90ZSB0aGF0IHRoZXJlIGlzCisgICAgLy8gbm8gbmVlZCB0byB1bmRvIHRoZSBwYWdl
IHNjYWxlIGRlbHRhLCBiZWNhdXNlIHRoZSBsYXllciBjb250ZW50IHJlY3QgaXMgb25seSBzY2Fs
ZWQgd2l0aCB0aGUKKyAgICAvLyBvcmlnaW5hbCBwYWdlIHNjYWxlLgorICAgIGxheWVyQ29udGVu
dFJlY3Quc2NhbGUoMSAvIG1fcGFnZVNjYWxlKTsKKyAgICByZXR1cm4gbGF5ZXJDb250ZW50UmVj
dC5jb250YWlucyhjb250ZW50UG9pbnQpOworfQorCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luU2Nyb2xsaW5nTGF5ZXIoQ0NMYXll
ckltcGwqIGxheWVySW1wbCwgY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpCit7CisgICAg
aWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsRmFpbGVkOworCisgICAgaWYgKCFsYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCku
aXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsRmFpbGVkOworCisgICAgSW50UG9pbnQgY29udGVudFBvaW50KGxheWVySW1wbC0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworICAg
IGlmIChsYXllckltcGwtPmRyYXdzQ29udGVudCgpICYmICFpc0NvbnRlbnRQb2ludFdpdGhpbkxh
eWVyKGxheWVySW1wbCwgY29udGVudFBvaW50KSkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsYWJs
ZSgpKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7
CisKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IGxheWVySW1wbDsKKyAgICBy
ZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ7Cit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdEFsbExheWVycyhDQ0xheWVyTGlzdCYgbGF5ZXJzLCBD
Q0xheWVySW1wbCogbGF5ZXJJbXBsKQoreworICAgIGxheWVycy5hcHBlbmQobGF5ZXJJbXBsKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUo
KTsgKytpKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IGxheWVySW1wbC0+Y2hpbGRy
ZW4oKVtpXS5nZXQoKTsKKyAgICAgICAgY29sbGVjdEFsbExheWVycyhsYXllcnMsIGNoaWxkKTsK
KyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdE5vbkRyYXdpbmdT
Y3JvbGxhYmxlTGF5ZXJzKENDTGF5ZXJMaXN0JiBsYXllcnMsIENDTGF5ZXJJbXBsKiBsYXllcklt
cGwpCit7CisgICAgaWYgKCFsYXllckltcGwtPmRyYXdzQ29udGVudCgpICYmIGxheWVySW1wbC0+
c2Nyb2xsYWJsZSgpKQorICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVySW1wbCk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkg
eworICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBsYXllckltcGwtPmNoaWxkcmVuKClbaV0u
Z2V0KCk7CisgICAgICAgIGlmIChjaGlsZC0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgY29sbGVjdE5vbkRyYXdpbmdTY3JvbGxhYmxlTGF5ZXJzKGxheWVy
cywgY2hpbGQpOworICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb2xsZWN0
TGF5ZXJzSW5QYWludE9yZGVyKENDTGF5ZXJMaXN0JiBsYXllcnMsIENDUmVuZGVyU3VyZmFjZSog
cmVuZGVyU3VyZmFjZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclN1cmZh
Y2UtPmxheWVyTGlzdCgpLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXll
ckltcGwgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKVtpXS5nZXQoKTsKKyAgICAgICAgaWYg
KGxheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgp
ICE9IHJlbmRlclN1cmZhY2UpIHsKKyAgICAgICAgICAgIGNvbGxlY3RMYXllcnNJblBhaW50T3Jk
ZXIobGF5ZXJzLCBsYXllckltcGwtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVySW1wbCk7CisgICAg
ICAgIGNvbGxlY3ROb25EcmF3aW5nU2Nyb2xsYWJsZUxheWVycyhsYXllcnMsIGxheWVySW1wbCk7
CisgICAgfQorfQorCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50KQog
ewotICAgIC8vIFRPRE86IENoZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAo
IW1fc2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQot
ICAgICAgICByZXR1cm4gU2Nyb2xsSWdub3JlZDsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xh
eWVySW1wbC5jbGVhcigpOworCisgICAgaWYgKCFyb290TGF5ZXIoKSkKKyAgICAgICAgcmV0dXJu
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOwogCi0gICAgcmV0dXJuIFNjcm9s
bFN0YXJ0ZWQ7CisgICAgQ0NMYXllckxpc3QgbGF5ZXJzOworICAgIGlmIChyb290TGF5ZXIoKS0+
cmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgIGNvbGxlY3ROb25EcmF3aW5nU2Nyb2xsYWJsZUxh
eWVycyhsYXllcnMsIHJvb3RMYXllcigpKTsKKyAgICAgICAgY29sbGVjdExheWVyc0luUGFpbnRP
cmRlcihsYXllcnMsIHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIEluIHNvbWUgdGVzdHMgd2UgZG8gbm90IGhhdmUgYSByZW5kZXIgc3VyZmFj
ZS4KKyAgICAgICAgY29sbGVjdEFsbExheWVycyhsYXllcnMsIHJvb3RMYXllcigpKTsKKyAgICB9
CisKKyAgICAvLyBMb29rIGZvciBhIHNjcm9sbGFibGUgbGF5ZXIgaW4gZnJvbnQgdG8gYmFjayBv
cmRlci4KKyAgICBmb3IgKGludCBpID0gbGF5ZXJzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBsYXllcnNbaV0uZ2V0KCk7CisgICAg
ICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgc3RhdHVzID0gYmVnaW5TY3Jv
bGxpbmdMYXllcihsYXllckltcGwsIHZpZXdwb3J0UG9pbnQpOworICAgICAgICAvLyBIaXR0aW5n
IGEgbm9uLXNjcm9sbGFibGUgYW5kIG5vbi1jb250ZW50LWRyYXdpbmcgb3Igbm9uLWNvbXBvc2l0
ZWQgY29udGVudCBsYXllciBzaG91bGQKKyAgICAgICAgLy8gbm90IHRlcm1pbmF0ZSB0aGUgc2Vh
cmNoLCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIHVzIHRvIGlnbm9yZSB0aGUgb3V0ZXIgc2Nyb2xs
aW5nIGxheWVyCisgICAgICAgIC8vIGZvciB0aGUgcm9vdCBsYXllci4KKyAgICAgICAgaWYgKHN0
YXR1cyA9PSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCAmJiAoIWxheWVySW1w
bC0+ZHJhd3NDb250ZW50KCkgfHwgbGF5ZXJJbXBsLT5pc05vbkNvbXBvc2l0ZWRDb250ZW50KCkp
KQorICAgICAgICAgICAgc3RhdHVzID0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxl
ZDsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFp
bGVkKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlm
ICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVy
SW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5
KHNjcm9sbERlbHRhKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQo
KTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBJbnRT
aXplIHBlbmRpbmdEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgQ0NMYXllckltcGwqIGxheWVySW1w
bCA9IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmdldCgpOworICAgIHdoaWxlIChsYXll
ckltcGwgJiYgIXBlbmRpbmdEZWx0YS5pc1plcm8oKSkgeworICAgICAgICBpZiAobGF5ZXJJbXBs
LT5zY3JvbGxhYmxlKCkpIHsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBwcmV2aW91c0RlbHRhKGxh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgICAgICAgICBGbG9hdFNpemUgc2NhbGVkUGVu
ZGluZ0RlbHRhKHBlbmRpbmdEZWx0YSk7CisgICAgICAgICAgICAvLyBTaW5jZSBzY3JvbGxEZWx0
YSBpcyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMsIGl0IGFscmVhZHkgaGFzIHRoZSBwYWdlIHNjYWxl
IGFwcGxpZWQuCisgICAgICAgICAgICAvLyBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgcm9vdCBzY3Jv
bGwgbGF5ZXIgZXhwZWN0cywgYnV0IGNoaWxkIGxheWVycyBhcmUgc2Nyb2xsZWQgdXNpbmcKKyAg
ICAgICAgICAgIC8vIHVuc2NhbGVkIGNvbnRlbnQgY29vcmRpbmF0ZXMgaW5zdGVhZCwgc28gd2Ug
aGF2ZSB0byB1bmRvIHRoZSBzY2FsaW5nIGZvciB0aGVtLiBUaGUKKyAgICAgICAgICAgIC8vIHBh
Z2Ugc2NhbGUgZGVsdGEgbmVlZHMgdG8gYmUgdW5hcHBsaWVkIHdpdGggYm90aCBsYXllciB0eXBl
cyBzaW5jZSB0aGUgc2Nyb2xsCisgICAgICAgICAgICAvLyBjb29yZGluYXRlcyBkbyBub3QgcmVz
cGVjdCBpdC4KKyAgICAgICAgICAgIGlmIChsYXllckltcGwgPT0gbV9zY3JvbGxMYXllckltcGwp
IHsKKyAgICAgICAgICAgICAgICBzY2FsZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNj
YWxlRGVsdGEpOworICAgICAgICAgICAgICAgIGxheWVySW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVu
ZGluZ0RlbHRhKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NhbGVk
UGVuZGluZ0RlbHRhLnNjYWxlKDEgLyAobV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhKSk7
CisgICAgICAgICAgICAgICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHBlbmRpbmcgc2Nyb2xs
IGRlbHRhIHRvIHplcm8gaWYgdGhlIGxheWVyIHdhcyBhYmxlIHRvIG1vdmUgYWxvbmcgdGhlIHJl
cXVlc3RlZAorICAgICAgICAgICAgLy8gYXhpcy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9z
c2libGUgdG8gc2Nyb2xsIGV4YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAg
ICAgICAgICAgLy8gc2Nyb2xsIGFyZWEgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZv
ciBkaWFnb25hbCBzY3JvbGxzIHRoaXMgYWxzbyBhdm9pZHMgYXBwbHlpbmcKKyAgICAgICAgICAg
IC8vIHRoZSBzY3JvbGwgb24gb25lIGF4aXMgdG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAg
ICAgaWYgKHByZXZpb3VzRGVsdGEud2lkdGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCku
d2lkdGgoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAg
ICAgICAgICBpZiAocHJldmlvdXNEZWx0YS5oZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERl
bHRhKCkuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgw
KTsKKyAgICAgICAgfQorICAgICAgICBsYXllckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpOwor
ICAgIH0KKworICAgIGlmIChwZW5kaW5nRGVsdGEgIT0gc2Nyb2xsRGVsdGEpIHsKKyAgICAgICAg
bV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgICAgIG1fY2xpZW50
LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzY3JvbGxFbmQoKQogeworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsLmNsZWFyKCk7CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aGF2ZVdoZWVs
RXZlbnRIYW5kbGVycygpCkBAIC01MjQsMjUgKzY0Nyw0OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnBpbmNoR2VzdHVyZUVuZCgpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCk7CiB9CiAKK3N0YXRpYyBib29sIGRpZFNjcm9sbFN1YnRyZWUoQ0NMYXllcklt
cGwqIGxheWVySW1wbCkKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1pl
cm8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKGRpZFNjcm9s
bFN1YnRyZWUobGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5m
bywgQ0NMYXllckltcGwqIGxheWVySW1wbCkgY29uc3QKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0g
dG9TaXplKGZsb29yZWRJbnRQb2ludChsYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKKyAgICAg
ICAgaWYgKGxheWVySW1wbCAhPSBtX3Njcm9sbExheWVySW1wbCkgeworICAgICAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgICAg
IHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgpOworICAgICAgICAgICAgc2Nyb2xsLnNj
cm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxz
LmFwcGVuZChzY3JvbGwpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcm9sbEluZm8t
PnJvb3RTY3JvbGxEZWx0YSA9IHNjcm9sbERlbHRhOworICAgICAgICBsYXllckltcGwtPnNldFNl
bnRTY3JvbGxEZWx0YShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIH0KKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQor
ICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRy
ZW4oKVtpXS5nZXQoKSk7Cit9CisKIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NM
YXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRT
Y2FsZVNldCgpKTsKLSAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVs
dGEgIT0gMS4wZik7CisgICAgYm9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKGRp
ZFNjcm9sbFN1YnRyZWUobV9zY3JvbGxMYXllckltcGwuZ2V0KCkpIHx8IG1fcGFnZVNjYWxlRGVs
dGEgIT0gMSk7CiAgICAgaWYgKCFkaWRNb3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1f
cGFnZVNjYWxlQW5pbWF0aW9uKSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Ny
b2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSAxOwogICAgICAgICByZXR1cm4gc2Nyb2xsSW5mby5y
ZWxlYXNlKCk7CiAgICAgfQogCisgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdl
dCgpLCBtX3Njcm9sbExheWVySW1wbC5nZXQoKSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEg
PSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IG1fcGFnZVNjYWxlRGVsdGE7CiAKLSAgICAv
LyBGSVhNRTogdHJhY2sgc2Nyb2xscyBmcm9tIGxheWVycyBvdGhlciB0aGFuIHRoZSByb290Ci0g
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKLSAgICBz
Y3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAgIHNjcm9sbC5zY3Jv
bGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgIHNjcm9sbElu
Zm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7Ci0KLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0
U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7Ci0KICAgICByZXR1cm4gc2Nyb2xs
SW5mby5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApp
bmRleCBlZDM4Yjg2ZGU0NmZjYjM1NDViODA4OWVmMTZjNmI0NTIxMzg4ZGQxLi4xMDdiNGQ0N2U1
ZDUwMDQwOGQ1ZDUzYWY2N2U5MTkyNWEwZDZhZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oCkBAIC0xMzUsMTAgKzEzNSwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBk
YXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8
T3duUHRyPENDUmVuZGVyUGFzcz4gPiYpOworICAgIGJvb2wgaXNDb250ZW50UG9pbnRXaXRoaW5M
YXllcihDQ0xheWVySW1wbCosIGNvbnN0IEludFBvaW50JiBjb250ZW50UG9pbnQpIGNvbnN0Owor
ICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RMYXllcnNJblBhaW50T3JkZXIoQ0NMYXllckxpc3QmLCBD
Q1JlbmRlclN1cmZhY2UqKTsKKyAgICBzdGF0aWMgdm9pZCBjb2xsZWN0Tm9uRHJhd2luZ1Njcm9s
bGFibGVMYXllcnMoQ0NMYXllckxpc3QmLCBDQ0xheWVySW1wbCopOworICAgIHN0YXRpYyB2b2lk
IGNvbGxlY3RBbGxMYXllcnMoQ0NMYXllckxpc3QmLCBDQ0xheWVySW1wbCopOworICAgIFNjcm9s
bFN0YXR1cyBiZWdpblNjcm9sbGluZ0xheWVyKENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UG9pbnQm
IHZpZXdwb3J0UG9pbnQpOworICAgIHZvaWQgY29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFu
ZFNjYWxlU2V0KiwgQ0NMYXllckltcGwqKSBjb25zdDsKIAogICAgIE93blB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1f
cm9vdExheWVySW1wbDsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fc2Nyb2xsTGF5ZXJJbXBs
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7
CiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7
CiAgICAgYm9vbCBtX3Zpc2libGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCmluZGV4IDcyYmVjMmE3MTY2NGFmNDNjZDY0ZDAxNGQyOGI4NDI2NTA5NWIyMDMuLmE2Y2E2
ZjcwMjEyN2VjNzJlOTY2NTliMGNmYzJkN2MwMGJhZDc2OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0xNjUsNiArMTY1LDcgQEAgdm9pZCBDQ1NpbmdsZVRo
cmVhZFByb3h5Ojpkb0NvbW1pdCgpCiAgICAgICAgIC8vIEluIHRoZSBzaW5nbGUtdGhyZWFkZWQg
Y2FzZSwgdGhlIHNjcm9sbCBkZWx0YXMgc2hvdWxkIG5ldmVyIGJlCiAgICAgICAgIC8vIHRvdWNo
ZWQgb24gdGhlIGltcGwgbGF5ZXIgdHJlZS4KICAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2Nh
bGVTZXQ+IHNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVs
dGFzKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEuaXNaZXJv
KCkpOwogICAgICAgICBBU1NFUlQoIXNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpKTsKICNlbmRp
ZgogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKaW5kZXggNmJhODM2Njc3ZGY4MjgyMjkzNDVlNDAyYzM2YjJkZjM5ZDc5YzRiMC4uZDUw
Zjc3ZGIzNmMyYjk3ZDI5MWQwZDJjNGI5NTY0MTE3ZWU3NzRiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTUzLDYgKzUzLDcgQEAK
ICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiSWNvbi5oIgpAQCAtODY4LDYgKzg2OSwyOCBAQCBib29sIENocm9tZUNs
aWVudEltcGw6OnBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBDaHJvbWVDbGllbnRJbXBs
OjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7CisgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBs
YXllckNocm9taXVtID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtKj4obGF5ZXIp
OworICAgIGxheWVyQ2hyb21pdW0tPnNldFNjcm9sbGFibGVBcmVhKHNjcm9sbGFibGVBcmVhKTsK
KworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBsYXllci0+cGxhdGZvcm1MYXll
cigpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcGxhdGZv
cm1MYXllci0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9u
KCkpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoSG9yaXpvbnRhbFNjcm9sbGJhciksIHNjcm9sbGFibGVB
cmVhLT5zY3JvbGxTaXplKFZlcnRpY2FsU2Nyb2xsYmFyKSkpOworfQorCit2b2lkIENocm9tZUNs
aWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQorewor
ICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSo+KGxheWVyKTsKKyAgICBsYXllckNocm9taXVtLT5zZXRTY3Jv
bGxhYmxlQXJlYSgwKTsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBsYXll
ci0+cGxhdGZvcm1MYXllcigpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9sbGFibGUoZmFs
c2UpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwor
ICAgIHBsYXRmb3JtTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoKSk7Cit9CisK
IC8vIEZJWE1FOiBSZW1vdmUgQ2hyb21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lIGFuZCBDaHJvbWVDbGllbnRJbXBsOjpjYW5jZWxHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUKIC8vIG9uY2UgYWxsIHBvcnRzIGhhdmUgbW92ZWQgdG8g
Y2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwMzczICkuCiAvLyBGb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uLCB0
aGVzZSBtZXRob2RzIGFyZSBub3cgaW1wbGVtZW50ZWQgYXMgV2ViR2VvbG9jYXRpb25DbGllbnQ6
OnJlcXVlc3RQZXJtaXNzaW9uIGFuZCBXZWJHZW9sb2NhdGlvbkNsaWVudDo6Y2FuY2VsUGVybWlz
c2lvblJlcXVlc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWVDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJ
bXBsLmgKaW5kZXggMjExM2VjMWFmNGY4MWQ3ZDE5YmVjYTY1MTg3MzIzMjE3N2FjNDdkZC4uMjlk
ZDI5M2YzMWU5NDJmMzdkOWRlYjk1NTliMGJkYjJiNjBiODFmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApAQCAtNDQsOSArNDQsMTEgQEAgY2xh
c3MgQ29sb3JDaG9vc2VyQ2xpZW50OwogI2VuZGlmCiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRmls
ZUNob29zZXI7CitjbGFzcyBHcmFwaGljc0xheWVyOwogY2xhc3MgUG9wdXBDb250YWluZXI7CiBj
bGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBSZW5kZXJCb3g7CitjbGFzcyBTY3JvbGxhYmxl
QXJlYTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogfQpA
QCAtMTM2LDYgKzEzOCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFw
cENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hl
ZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiosIGlu
dDY0X3QgdG90YWxTcGFjZU5lZWRlZCk7CiAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tT3Zl
cmhhbmdBcmVhKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSopOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVTY3JvbGxpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVh
bCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShXZWJDb3JlOjpGcmFt
ZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
Okdlb2xvY2F0aW9uKik7CiAjaWYgRU5BQkxFKElOUFVUX0NPTE9SKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAppbmRleCBjZDg4OTAw
YmRhMzRhNTNiZTFlNmZlZmY5OGQ1OTNjZmNhZTY4MTEwLi5iNThjMmMzYjhjYjVkYjVjYzBkMzkx
OGQzNjRjZjI3MjBkMjNkYzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcApAQCAtODYsNCArODYsOCBAQCB2b2lkIFdlYkNvbnRl
bnRMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCgpCiAgICAgICAgIG1fY2xpZW50LT5ub3Rp
ZnlOZWVkc0NvbXBvc2l0ZSgpOwogfQogCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnNjcm9s
bEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXll
ckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwu
aAppbmRleCAxMDhkZjVlM2EyNTRlZDk1Njk0NTk4NmZkNjU0MWE4NGE5ODg2NWZmLi4xYTQ4NzAw
ZmVkZGRjMjRlNWE5Mzk4YmZhNThiYzcwODA4YWUyYmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCkBAIC00NSw2ICs0NSw3IEBAIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIH5XZWJDb250ZW50TGF5ZXJJbXBsKCk7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY2xpcCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJl
ZCgpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CiAKICAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CiAgICAgV2ViQ29udGVudExheWVyQ2xp
ZW50KiBtX2NvbnRlbnRDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcAppbmRleCA0NDJlYWNkN2Rh
NGUwYWViNTE3NGM0M2RmOTEwYzgwMDA4YjE4NzQ4Li4zZDgzNGY0YjdmM2QwMTBmMzYzMjc0N2Iy
MmM0ZDc1Njg1YzMzYTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAKQEAgLTY2LDQgKzY2LDggQEAg
dm9pZCBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCgpCiAg
ICAgICAgIG1fY2xpZW50LT5ub3RpZnlOZWVkc0NvbXBvc2l0ZSgpOwogfQogCit2b2lkIFdlYkV4
dGVybmFsVGV4dHVyZUxheWVySW1wbDo6c2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
Cit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaAppbmRleCA0Zjlh
OTg3MjdjOTdkOWI1Yzk1ODc0NGMyNjliODg0ZDE4NTNlNzZmLi45NGVmNzg4OWNjYzY5ZDBmM2Rh
NWY5NjM5ZmQ5MDYzZjQwNjE2N2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaApAQCAtNDIsNiArNDIsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CiAgICAgdmlydHVh
bCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRl
bnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYpOwogCiAgICAgV2ViTGF5ZXJDbGllbnQqIG1fY2xpZW50OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCmluZGV4IGRkYzA2MTEyMDk0MTZmOTUw
NDUxMTZjMGFmZDcyOTc3ZjhmOGE2ZTUuLjhkOTVhNzhiY2IwMTNhMzVlZTkyNWQ2NTNjZDZmODIz
MWNlMGU3OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNw
cApAQCAtNjEsNCArNjEsOCBAQCB2b2lkIFdlYkxheWVySW1wbDo6bm90aWZ5U3luY1JlcXVpcmVk
KCkKICAgICAgICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7CiB9CiAKK3ZvaWQg
V2ViTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJikKK3sKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJM
YXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCmlu
ZGV4IDU1OGQ0MWI1Y2RlMWE4NDg3MDJjYWQwZjM3NTEyYzg5MTE1NTExMTYuLjBmZWQwZjdiMTU5
NWY1ZGYxNGE5OWUzYWZjNmFmYjlkODUzOWM0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVySW1wbC5oCkBAIC00Miw2ICs0Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29u
dGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
Y2xpcCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOworICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSk7CiAK
ICAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBl
ODM1YWI3ODliZmQyOWU3NGQwOGNkN2ExZmUyMTM3M2U2MDVhNTJlLi5kODhhYjRmODdiZjNlODNm
NjIyYjkxNGI2OWMyOWRjNDE1M2RkNDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMTI1LDE2ICsx
MjUsMTYgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YVJlcGVh
dGVkU2Nyb2xscykKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbzsK
IAogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0g
ICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJU
X0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7CiAgICAgRVhQRUNUX0VRKHJvb3Qt
PnNlbnRTY3JvbGxEZWx0YSgpLCBzY3JvbGxEZWx0YSk7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNj
cm9sbEluZm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERlbHRhKTsKKyAgICBBU1NFUlRfRVEo
c2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBzY3JvbGxEZWx0YSk7CiAKICAgICBJbnRTaXpl
IHNjcm9sbERlbHRhMigtNSwgMjcpOwogICAgIHJvb3QtPnNjcm9sbEJ5KHNjcm9sbERlbHRhMik7
CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAg
ICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDF1KTsKKyAgICBBU1NFUlRf
RVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDB1KTsKICAgICBFWFBFQ1RfRVEocm9vdC0+
c2VudFNjcm9sbERlbHRhKCksIHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKLSAgICBleHBl
Y3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgcm9vdC0+aWQoKSwgc2Nyb2xsRGVsdGEgKyBz
Y3JvbGxEZWx0YTIpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEs
IHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKIAogICAgIHJvb3QtPnNjcm9sbEJ5KEludFNp
emUoKSk7CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMo
KTsKQEAgLTE1NSw2ICsxNTUsOTQgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxSb290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1
ZXN0Q29tbWl0KTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxS
b290SWdub3JlZCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIG1faG9z
dEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoMCwgMCkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdu
b3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNU
X0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykKK3sKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNl
dFNjcm9sbGFibGUoZmFsc2UpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDEpOworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAg
IGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hp
bGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVj
dChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENo
aWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAgICBF
WFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnko
SW50U2l6ZSgwLCAxMCkpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIEVYUEVD
VF9UUlVFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0
Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNz
ZXNDaGlsZCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIGNoaWxkLT5z
ZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRT
aXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBj
aGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAs
IDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRS
b290TGF5ZXIocm9vdCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKElu
dFBvaW50KDE1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAg
ICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9k
aWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKKyAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7
CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPnNldFZpc2libGVM
YXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAs
IDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwg
NSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1w
bC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZh
Y3RvckFuZExpbWl0cygyLCAxLCAyKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkg
dG8gdGhlIHJvb3Qgc2Nyb2xsIGRlbHRhLgorICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0
PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIEVY
UEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIEludFNpemUoc2Nyb2xsRGVsdGEu
d2lkdGgoKSAqIDIsIHNjcm9sbERlbHRhLmhlaWdodCgpICogMikpOworfQorCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlKQorewor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxSb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgx
KTsKKyAgICBzY3JvbGxSb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIGNoaWxkLT5zZXRT
Y3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXpl
KDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGls
ZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEw
KSkpOworICAgIHJvb3QtPmFkZENoaWxkKHNjcm9sbFJvb3QpOworICAgIHNjcm9sbFJvb3QtPmFk
ZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsUm9vdCk7
CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwor
ICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygyLCAxLCAyKTsKKwor
ICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgbm90IGFwcGx5IHRvIHRoZSBjaGlsZCBzY3JvbGwgZGVs
dGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJ
bXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbElu
Zm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBzY3JvbGxEZWx0YSk7Cit9CisKIGNsYXNzIEJsZW5kU3Rh
dGVUcmFja2VyQ29udGV4dDogcHVibGljIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJs
aWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCmluZGV4IDE4NzYyMzhiNTg1NjJiNGFhODdiOTIxNTA4NThjMDg2ZGExOTcyNzguLjlj
ZWZmYWY3MDg2YjBjZGRmYjZjMjBjYjRlN2EzM2NhM2JmY2EzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtOTI3
LDYgKzkyNywxMjEgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXRWaXNpYmxlLCBydW5N
dWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RUZXN0U2Nyb2xsQmFzZSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25seSB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0KEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1f
cm9vdFNjcm9sbExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX3Jv
b3RTY3JvbGxMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9v
dFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxM
YXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RTY3JvbGxMYXllcik7
CisgICAgICAgIG1fY2hpbGRMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAg
ICAgbV9jaGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1MCwgNTApKTsKKyAgICAgICAgbV9j
aGlsZExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNl
dE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9yb290U2Ny
b2xsTGF5ZXItPmFkZENoaWxkKG1fY2hpbGRMYXllcik7CisgICAgICAgIHBvc3RTZXROZWVkc0Nv
bW1pdFRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9s
bEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCkKKyAgICB7CisgICAg
ICAgIEludFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biArIHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkK
KyAgICB7CisgICAgfQorcHJvdGVjdGVkOgorICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2No
aWxkTGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOwor
fTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKCkKKyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAx
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9y
b290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBp
ZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9F
UShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigp
LCBJbnRQb2ludCgpICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsK
KyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQ
RUNUX0VRKGltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3Jv
bGxBbW91bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciwgcnVuTXVsdGlUaHJl
YWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7Cit9CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyQmV5b25kTGltaXQoKQorICAgICAgICA6IG1faW5pdGlhbFJvb3RTY3JvbGxQb3Np
dGlvbigzLCA2KQorICAgICAgICAsIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24oMjAsIDAp
CisgICAgICAgICwgbV9zY3JvbGxBbW91bnQoLTI1LCAtNSkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5z
ZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24pOworICAgICAgICBt
X2NoaWxkTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRp
b24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NM
YXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhv
c3QtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgQ0NMYXllckltcGwqIHJvb3Qg
PSBpbXBsLT5yb290TGF5ZXIoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxSb290
ID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBj
aGlsZCA9IHNjcm9sbFJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoY2hpbGQtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRp
b24pOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxkLT5zY3JvbGxEZWx0YSgpLCBJbnRTaXpl
KC0yMCwgMCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9sbFJvb3QtPnNjcm9sbFBvc2l0
aW9uKCksIG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoc2Nyb2xsUm9vdC0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgwLCAtNSkpOworICAgICAgICB9
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIo
KSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAg
ICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAgICBpbXBsLT5z
Y3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDIp
CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBJbnRQ
b2ludCBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb247CisgICAgY29uc3QgSW50UG9pbnQgbV9p
bml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1v
dW50OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5
b25kTGltaXQsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQor
CiBjbGFzcyBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRl
bGVnYXRlIHsKIHB1YmxpYzoKICAgICBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUoQ0NM
YXllclRyZWVIb3N0VGVzdCogdGVzdCkKQEAgLTk0Myw2ICsxMDU4LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBib29sIHByZXNlcnZlczNEKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5
KGNvbnN0IEludFNpemUmKSB7IH0KIAogcHJpdmF0ZToKICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0
KiBtX3Rlc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVy
Q2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCmluZGV4IDI4NjY1YWE3NzZiY2FlMDFjZjBiODg1ZmVkNWM1YTVjOGVkMzE4
ZDAuLmE0NzY2ZWI2ZDI3MmRjNjM4NGUyMWY0ZDRjZjIyOTkzZmM3NzE0YjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC01
Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0Qs
IGJvb2woKSk7CiAgICAgTU9DS19NRVRIT0QyKHBhaW50Q29udGVudHMsIHZvaWQoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYpKTsKICAgICBNT0NLX01FVEhPRDAobm90aWZ5U3luY1Jl
cXVpcmVkLCB2b2lkKCkpOworICAgIE1PQ0tfTUVUSE9EMShzY3JvbGxCeSwgdm9pZChjb25zdCBJ
bnRTaXplJikpOwogfTsKIAogY2xhc3MgTW9ja0xheWVyUGFpbnRlckNocm9taXVtIDogcHVibGlj
IExheWVyUGFpbnRlckNocm9taXVtIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120067</attachid>
            <date>2011-12-20 13:22:48 -0800</date>
            <delta_ts>2012-01-09 11:16:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20111220212246.patch</filename>
            <type>text/plain</type>
            <size>48608</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFiY2Y5MTNiNDNhMDE2
OWVjNjliYzAwNmE5MmE1MTA3ZjQ0ZDliMS4uNDE0Y2JkOTMxNTdjNjE1MjhkNThmZGY5OTA1NGY2
YWQ4MWU2ZWFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDExLTEyLTIwICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTAzMjkxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5MTYw
NzA4NGIzMzdmODU5OTIwYTIyY2RjN2MyNzRjZWM2Mzk0YzAxLi5jZDU1ZDY4MTg1MDM4ZTViZmJm
Yjg2ZTRhNWY5MWUyMDNmYWVhYmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDU3IEBACisyMDExLTEyLTA5ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0
aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTczMzUwCisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGlu
ZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwg
ZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQK
KyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJl
YWQuCisKKyAgICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZl
biBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9s
bGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVu
dC5oOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q2hyb21lQ2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAg
ICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVW
aWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBs
eVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
Vmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVW
aWV3SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseVJvb3RM
YXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseUxheWVy
U2Nyb2xsKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFwcGx5Um9v
dExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENs
aWVudDo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxTaW1wbGU6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRyYXc6OmFwcGx5Um9vdExh
eWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQmFzZTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbEJhc2U6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphZnRlclRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlTY3JvbGxUb0NoaWxk
TGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
cjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRy
YXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmJlZ2luVGVz
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5
b25kTGltaXQ6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmRyYXdMYXllcnNPbkNDVGhy
ZWFkKToKKwogMjAxMS0xMi0xOSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIENvbXBpbGUgZml4IGZvciBjaHJvbWl1bSBvbiB3aW5kb3dzIGR1ZSB0byBj
b2xsaXNpb24gb2YgdGVzdGluZzo6Tm90TnVsbCBmcm9tIGd0ZXN0IGFuZCBOb3ROdWxsIGZyb20g
VmVjdG9yLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGQyMmYx
ZGM0NTU0ZDAyMjc4NWUwMTUxOGZkZTEyYTUwZjIzMWIwYTYuLjRhNTE2NTFiMWFkMmY2ZTM4NzY5
YzFmM2NhNTBjM2U5YmMxYjU5NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcApAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogCiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC03MCw2ICs3MSw3IEBAIFBhc3NPd25QdHI8
R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQq
IGNsaWVudCkKIAogR3JhcGhpY3NMYXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hyb21pdW0o
R3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQp
CisgICAgLCBtX3Njcm9sbGFibGVBcmVhKDApCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3Nl
KE5vQ29udGVudHNMYXllcikKICAgICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xv
cihmYWxzZSkKICAgICAsIG1faW5TZXRDaGlsZHJlbihmYWxzZSkKQEAgLTY2NSw2ICs2NjcsMTMg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWMKICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50
cyhjb250ZXh0LCBjbGlwKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNjcm9s
bEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIGlmICghbV9zY3JvbGxhYmxl
QXJlYSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpICsg
c2Nyb2xsRGVsdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oCmluZGV4IDM0YzNkMzI2NDVkMGQ2MzJjZjRjMDc3ZTM1YmZiZWVkNDc0ZThiZGUuLmViYzVm
NTUwYmQ2ZmQ3ODEzYzc3NDBlMDk3ODY3OTAyNjdkYTc5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIExheWVyQ2hyb21pdW07CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIAogY2xhc3MgR3Jh
cGhpY3NMYXllckNocm9taXVtIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBDQ0xheWVy
RGVsZWdhdGUgewogcHVibGljOgpAQCAtOTksNiArMTAwLDEwIEBAIHB1YmxpYzoKICAgICAvLyBU
aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIENDTGF5ZXJEZWxlZ2F0ZSBpbnRl
cmZhY2UuCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNs
aXApOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSk7CisKKyAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbGFibGVBcmVhOyB9CisgICAgdm9pZCBzZXRTY3JvbGxhYmxlQXJlYShTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpIHsgbV9zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVB
cmVhOyB9CiAKICAgICAvLyBFeHBvc2VkIGZvciB0ZXN0cy4KICAgICBMYXllckNocm9taXVtKiBj
b250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9CkBA
IC0xMzQsNiArMTM5LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90
cmFuc2Zvcm1MYXllcjsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVy
OwogCisgICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7CisKICAgICBlbnVtIENv
bnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAgICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAg
ICAgQ29udGVudHNMYXllckZvckltYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA1ZWZh
ZGNmZjJiMTE3ZDFlYTI5YzM1OWYwNTFlODU4ZDg0OTUwMjcyLi5kODc3MGFlZmEzZDU3OGUzYTRk
ZjBkNGRhYTU4ZjE4NjEwNWI4ZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNDE2LDYg
KzQxNiw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1w
bCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOwogICAgIGxheWVy
LT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9u
KG1fbWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybSht
X3N1YmxheWVyVHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3Jt
KTsKICAgICBsYXllci0+c2V0VXBkYXRlUmVjdChtX3VwZGF0ZVJlY3QpOwpAQCAtNDcyLDYgKzQ3
MywxMyBAQCBib29sIExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpzY3JvbGxCeShjb25zdCBJ
bnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3Np
dGlvbigpICsgc2Nyb2xsRGVsdGEpOworICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2Rl
bGVnYXRlLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Cit9CisKIHZvaWQgc29ydExheWVycyhWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJhdG9yLCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID46Oml0ZXJhdG9yLCB2b2lkKikKIHsKICAgICAvLyBDdXJyZW50bHkgd2UgZG9u
J3QgdXNlIHotb3JkZXIgdG8gZGVjaWRlIHdoYXQgdG8gcGFpbnQsIHNvIHRoZXJlJ3Mgbm8gbmVl
ZCB0byBhY3R1YWxseSBzb3J0IExheWVyQ2hyb21pdW1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4
IGY5Mzc1NWYwOWJmMWM4ZTY2NTk0YzM3NDhiMDk2ZmYzZTZlYzA2ODcuLmQ2NGQxMGY3YjBlYTVh
NmZiM2QyYjgzY2QwM2VhOWU0NzhmMGJlNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTYxLDYg
KzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5ZXJEZWxlZ2F0ZSgpIHsgfQogICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkg
PSAwOwogfTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNwZWNpYWwg
bGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQpAQCAtMTMxLDkgKzEzMiwxNCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIGNvbnN0
IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRp
b247IH0KIAorICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRp
b24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhTY3JvbGxQb3NpdGlv
biA9IG1heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICB2b2lkIHNldFNjcm9sbGFibGUoYm9vbCk7
CiAgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlOyB9CiAK
KyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKKwogICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KIAogICAgIGZs
b2F0IHBhZ2VTY2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4gMTsgfQpAQCAtMjU1LDYgKzI2MSw3
IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlzaWJs
ZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOworICAgIEludFNpemUg
bV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJsZTsKICAgICBGbG9hdFBv
aW50IG1fcG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCmluZGV4IDAzNjY2MDkyZjIzMmJiMDEzN2I2MjIxZjc2OTZkZWQwZWQzZTU0
NGIuLjA2NmRlOWEwNjZmZjE0OTI1Yzk0ZTE2MThkN2Q2NmZjYWI2NTRiYzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKQEAgLTE0OSw5ICsxNDksOSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpiaW5k
Q29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUm
IHNjcm9sbCkKK3ZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Ny
b2xsKQogewotICAgIEludFNpemUgbmV3RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Nyb2xsOwor
ICAgIEZsb2F0U2l6ZSBuZXdEZWx0YSA9IG1fc2Nyb2xsRGVsdGEgKyBzY3JvbGw7CiAgICAgSW50
U2l6ZSBtaW5EZWx0YSA9IC10b1NpemUobV9zY3JvbGxQb3NpdGlvbik7CiAgICAgSW50U2l6ZSBt
YXhEZWx0YSA9IG1fbWF4U2Nyb2xsUG9zaXRpb24gLSB0b1NpemUobV9zY3JvbGxQb3NpdGlvbik7
CiAgICAgLy8gQ2xhbXAgbmV3RGVsdGEgc28gdGhhdCBwb3NpdGlvbiArIGRlbHRhIHN0YXlzIHdp
dGhpbiBzY3JvbGwgYm91bmRzLgpAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgQ0NMYXllckltcGw6
OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKICAgICBu
b3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgQ0NMYXllcklt
cGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQordm9pZCBDQ0xh
eWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSkKIHsK
ICAgICBpZiAobV9zY3JvbGxEZWx0YSA9PSBzY3JvbGxEZWx0YSkKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMjZjN2EyZjRkNWVjNTk0Zjg3YmNjNzUzMTJjNjhiMDdk
MDgxZGY2OS4uZmZiZTllZDU5MWE0YmM5NTkxZjM2M2YyZTcyNmJjNjlmNjJlZGFhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCkBAIC0xNjAsMTYgKzE2MCwxNiBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
SW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7cmV0dXJuIG1fbWF4U2Nyb2xsUG9z
aXRpb247IH0KICAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1h
eFNjcm9sbFBvc2l0aW9uKSB7IG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlv
bjsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbERlbHRhOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJik7
CisgICAgY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYpOwog
CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZURl
bHRhOyB9CiAgICAgdm9pZCBzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCk7CiAKLSAgICBjb25zdCBJ
bnRTaXplJiBzZW50U2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3NlbnRTY3JvbGxEZWx0
YTsgfQotICAgIHZvaWQgc2V0U2VudFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNlbnRTY3Jv
bGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsgfQorICAgIGNv
bnN0IEZsb2F0U2l6ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Ny
b2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0YShjb25zdCBGbG9hdFNpemUm
IHNlbnRTY3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsg
fQogCi0gICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpOworICAgIHZvaWQg
c2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpOwogCiAgICAgYm9vbCBzY3JvbGxhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxhYmxl
KGJvb2wgc2Nyb2xsYWJsZSkgeyBtX3Njcm9sbGFibGUgPSBzY3JvbGxhYmxlOyB9CkBAIC0yNTYs
OCArMjU2LDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CiAKLSAgICBJ
bnRTaXplIG1fc2Nyb2xsRGVsdGE7Ci0gICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKKyAg
ICBGbG9hdFNpemUgbV9zY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zZW50U2Nyb2xsRGVs
dGE7CiAgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGZsb2F0IG1fcGFnZVNj
YWxlRGVsdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDI5YzgxYWE1
NTUwMDYyNjAyZjZmOGRhM2RmNDMxYTZjZGQzYWFjZTIuLmUxZGU2YWRmNjdlZTZkYTY1M2EwZTRi
MDFhYWU3NTkzZWVlZDFkNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAt
NDk3LDE1ICs0OTcsMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0
ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKK3N0YXRpYyBMYXllckNocm9taXVt
KiBmaW5kTGF5ZXJCeUlkKExheWVyQ2hyb21pdW0qIGxheWVyLCBpbnQgaWQpCit7CisgICAgaWYg
KCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPmlkKCkgPT0gaWQp
CisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5
ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91
bmQgPSBmaW5kTGF5ZXJCeUlkKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBpZCk7CisgICAg
ICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUo
Y29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVzaGlu
ZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0gICAg
aWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFpbmZv
LnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSB8fCBpbmZvLnBhZ2VTY2FsZURlbHRhICE9IDEpCisg
ICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKGluZm8ucm9vdFNjcm9sbERlbHRh
LCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgp
ID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xs
RGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGlu
Zm8ucGFnZVNjYWxlRGVsdGEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zY3Jv
bGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gZmluZExh
eWVyQnlJZChtX3Jvb3RMYXllci5nZXQoKSwgaW5mby5zY3JvbGxzW2ldLmxheWVySWQpOworICAg
ICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxheWVyLT5z
Y3JvbGxCeShpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOworICAgIH0KIH0KIAogdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDJlMGNiY2Yy
YzU4NWU4MjE1ZDI4NmRlZTliNjFlNTM1MTgwY2ZmYWQuLjBkMjQ2ZjUzOTM1MDU1YTY5NTA0ODY5
MTZhYzMyMjdlY2FkNDVlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogc3RydWN0IENDU2Nyb2xsQW5kU2NhbGVT
ZXQgewogICAgIFZlY3RvcjxDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8+
IHNjcm9sbHM7CisgICAgSW50U2l6ZSByb290U2Nyb2xsRGVsdGE7CiAgICAgZmxvYXQgcGFnZVNj
YWxlRGVsdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmlu
ZGV4IDA5NDY1YmY5OWU3OWZlNzFmMjQxNzQ2Nzg0NTJkYWVmODc1OTEwNzQuLmEwYzg5Zjg4ODQz
NTcwNjA3MjVlZTNmZGQ2Y2E2Nzg5ZWRlOGFkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwCkBAIC03Niw2ICs3NiwxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmJlZ2luQ29tbWl0KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21w
bGV0ZSgpCiB7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc2Nyb2xsaW5nIGxheWVyIGlzIHN0aWxs
IHByZXNlbnQgaW4gdGhlIHRyZWUuCisgICAgaWYgKG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJ
bXBsKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9jdXJyZW50bHlTY3JvbGxpbmdM
YXllckltcGwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChyb290LT5wYXJlbnQoKSkKKyAgICAgICAg
ICAgIHJvb3QgPSByb290LT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHJvb3QgIT0gbV9yb290TGF5
ZXJJbXBsKQorICAgICAgICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuY2xlYXIo
KTsKKyAgICB9CiAgICAgLy8gUmVjb21wdXRlIG1heCBzY3JvbGwgcG9zaXRpb247IG11c3QgYmUg
YWZ0ZXIgbGF5ZXIgY29udGVudCBib3VuZHMgYXJlCiAgICAgLy8gdXBkYXRlZC4KICAgICB1cGRh
dGVNYXhTY3JvbGxQb3NpdGlvbigpOwpAQCAtMTAwLDcgKzEwOCw3IEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKICAgICBpZiAoIW1f
cGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNjcm9s
bFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsVG90YWwg
PSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBmbG9vcmVkSW50
UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKIAogICAgIHNldFBhZ2VT
Y2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUoZnJhbWVCZWdp
blRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdl
U2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGltZU1zKTsKQEAg
LTExOSw3ICsxMjcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxl
QW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIGlmICghbV9zY3Jv
bGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90YWwg
PSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6
ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29yZWRJbnRQb2ludCht
X3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogICAgIHNjcm9sbFRvdGFsLnNjYWxl
KG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlVG90YWwgPSBtX3BhZ2VTY2FsZSAq
IG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2FsZWRDb250ZW50U2l6ZSA9IG1fc2Ny
b2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7CkBAIC0zMTgsOCAr
MzI2LDYgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwq
IGxheWVyKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0
cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7Ci0K
LSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhlIGZpcnN0IHNjcm9s
bGFibGUgbGF5ZXIuCiAgICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXIobV9y
b290TGF5ZXJJbXBsLmdldCgpKTsKIH0KIApAQCAtMzg3LDE1ICszOTMsMTMgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoZmxvYXQgcGFnZVNj
YWxlLCBmbG9hdCBtaW4KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphZGp1c3RTY3JvbGxz
Rm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKIHsKLSAgICBpZiAocGFn
ZVNjYWxlQ2hhbmdlID09IDEpCisgICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCBwYWdlU2Nh
bGVDaGFuZ2UgPT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgYWxzbyBuZWVkIHRv
IGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxlIHNwYWNlLgotICAg
IGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0g
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgICAgIHNjcm9sbERlbHRhLnNj
YWxlKHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3Jv
bGxEZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb252
ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGEgZm9yIHRoZSByb290IGxheWVyIHRvIHBhZ2VTY2Fs
ZSBzcGFjZS4KKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwor
ICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEp
CkBAIC00MzcsOSArNDQxLDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhT
Y3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5nIGEgdmVydGljYWwgc2Nyb2xsYmFyIGJ1dCBu
byBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1heFNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJv
KCk7CiAKKyAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSByb290IGxheWVyIHNjcm9s
bCByYW5nZSwgc2luY2UgdGhlIGNoaWxkCisgICAgLy8gbGF5ZXJzIHVzZSB1bnNjYWxlZCBzY3Jv
bGwgY29vcmRpbmF0ZXMuCiAgICAgbV9zY3JvbGxMYXllckltcGwtPnNldE1heFNjcm9sbFBvc2l0
aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6IEFsc28gdXBkYXRlIHN1Ymxh
eWVycy4KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRab29tQW5pbWF0b3JUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHpvb20pCkBAIC00NjAsMjggKzQ2NCwx
NDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCiAgICAgbV9j
bGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CiAKLUNDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4oY29u
c3QgSW50UG9pbnQmKQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppc0NvbnRlbnRQb2ludFdp
dGhpbkxheWVyKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGNvbnN0IEludFBvaW50JiBjb250ZW50
UG9pbnQpIGNvbnN0Cit7CisgICAgSW50UmVjdCBsYXllckNvbnRlbnRSZWN0KGxheWVySW1wbC0+
dmlzaWJsZUxheWVyUmVjdCgpKTsKKyAgICAvLyBUaGUgdmlzaWJsZSBsYXllciByZWN0IGlzIGlu
IHNjYWxlZCBjb29yZGluYXRlcywgc28gdW5kbyB0aGUgcGFnZSBzY2FsZS4gTm90ZSB0aGF0IHRo
ZXJlIGlzCisgICAgLy8gbm8gbmVlZCB0byB1bmRvIHRoZSBwYWdlIHNjYWxlIGRlbHRhLCBiZWNh
dXNlIHRoZSBsYXllciBjb250ZW50IHJlY3QgaXMgb25seSBzY2FsZWQgd2l0aCB0aGUKKyAgICAv
LyBvcmlnaW5hbCBwYWdlIHNjYWxlLgorICAgIGxheWVyQ29udGVudFJlY3Quc2NhbGUoMSAvIG1f
cGFnZVNjYWxlKTsKKyAgICByZXR1cm4gbGF5ZXJDb250ZW50UmVjdC5jb250YWlucyhjb250ZW50
UG9pbnQpOworfQorCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmJlZ2luU2Nyb2xsaW5nTGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCwg
Y29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpCit7CisgICAgaWYgKCFsYXllckltcGwpCisg
ICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOworCisgICAg
aWYgKCFsYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaXNJbnZlcnRpYmxlKCkpCisg
ICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOworCisgICAg
SW50UG9pbnQgY29udGVudFBvaW50KGxheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5p
bnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworICAgIGlmIChsYXllckltcGwtPmRy
YXdzQ29udGVudCgpICYmICFpc0NvbnRlbnRQb2ludFdpdGhpbkxheWVyKGxheWVySW1wbCwgY29u
dGVudFBvaW50KSkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxG
YWlsZWQ7CisKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1
cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisKKyAgICBtX2N1cnJlbnRs
eVNjcm9sbGluZ0xheWVySW1wbCA9IGxheWVySW1wbDsKKyAgICByZXR1cm4gQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y29sbGVjdEFsbExheWVycyhDQ0xheWVyTGlzdCYgbGF5ZXJzLCBDQ0xheWVySW1wbCogbGF5ZXJJ
bXBsKQoreworICAgIGxheWVycy5hcHBlbmQobGF5ZXJJbXBsKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAg
IENDTGF5ZXJJbXBsKiBjaGlsZCA9IGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAg
ICAgICAgY29sbGVjdEFsbExheWVycyhsYXllcnMsIGNoaWxkKTsKKyAgICB9Cit9CisKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdE5vbkRyYXdpbmdTY3JvbGxhYmxlTGF5ZXJzKEND
TGF5ZXJMaXN0JiBsYXllcnMsIENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgaWYgKCFs
YXllckltcGwtPmRyYXdzQ29udGVudCgpICYmIGxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAg
ICAgICBsYXllcnMuYXBwZW5kKGxheWVySW1wbCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBDQ0xheWVy
SW1wbCogY2hpbGQgPSBsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCk7CisgICAgICAgIGlm
IChjaGlsZC0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Y29sbGVjdE5vbkRyYXdpbmdTY3JvbGxhYmxlTGF5ZXJzKGxheWVycywgY2hpbGQpOworICAgIH0K
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb2xsZWN0TGF5ZXJzSW5QYWludE9yZGVy
KENDTGF5ZXJMaXN0JiBsYXllcnMsIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSkKK3sK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNp
emUoKTsgKytpKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSByZW5kZXJTdXJm
YWNlLT5sYXllckxpc3QoKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKGxheWVySW1wbC0+cmVuZGVy
U3VyZmFjZSgpICYmIGxheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2Up
IHsKKyAgICAgICAgICAgIGNvbGxlY3RMYXllcnNJblBhaW50T3JkZXIobGF5ZXJzLCBsYXllcklt
cGwtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVySW1wbCk7CisgICAgICAgIGNvbGxlY3ROb25EcmF3
aW5nU2Nyb2xsYWJsZUxheWVycyhsYXllcnMsIGxheWVySW1wbCk7CisgICAgfQorfQorCitDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9s
bEJlZ2luKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50KQogewotICAgIC8vIFRPRE86IENo
ZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBs
IHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQotICAgICAgICByZXR1cm4gU2Ny
b2xsSWdub3JlZDsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigpOwor
CisgICAgaWYgKCFyb290TGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJZ25vcmVkOwogCi0gICAgcmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgQ0NM
YXllckxpc3QgbGF5ZXJzOworICAgIGlmIChyb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpKSB7
CisgICAgICAgIGNvbGxlY3ROb25EcmF3aW5nU2Nyb2xsYWJsZUxheWVycyhsYXllcnMsIHJvb3RM
YXllcigpKTsKKyAgICAgICAgY29sbGVjdExheWVyc0luUGFpbnRPcmRlcihsYXllcnMsIHJvb3RM
YXllcigpLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEluIHNv
bWUgdGVzdHMgd2UgZG8gbm90IGhhdmUgYSByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgY29sbGVj
dEFsbExheWVycyhsYXllcnMsIHJvb3RMYXllcigpKTsKKyAgICB9CisKKyAgICAvLyBMb29rIGZv
ciBhIHNjcm9sbGFibGUgbGF5ZXIgaW4gZnJvbnQgdG8gYmFjayBvcmRlci4KKyAgICBmb3IgKGlu
dCBpID0gbGF5ZXJzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIENDTGF5ZXJJ
bXBsKiBsYXllckltcGwgPSBsYXllcnNbaV0uZ2V0KCk7CisgICAgICAgIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGF0dXMgc3RhdHVzID0gYmVnaW5TY3JvbGxpbmdMYXllcihsYXllcklt
cGwsIHZpZXdwb3J0UG9pbnQpOworICAgICAgICAvLyBIaXR0aW5nIGEgbm9uLXNjcm9sbGFibGUg
YW5kIG5vbi1jb250ZW50LWRyYXdpbmcgb3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudCBsYXllciBz
aG91bGQKKyAgICAgICAgLy8gbm90IHRlcm1pbmF0ZSB0aGUgc2VhcmNoLCBiZWNhdXNlIGl0IHdv
dWxkIGNhdXNlIHVzIHRvIGlnbm9yZSB0aGUgb3V0ZXIgc2Nyb2xsaW5nIGxheWVyCisgICAgICAg
IC8vIGZvciB0aGUgcm9vdCBsYXllci4KKyAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCAmJiAoIWxheWVySW1wbC0+ZHJhd3NDb250ZW50KCkg
fHwgbGF5ZXJJbXBsLT5pc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpKQorICAgICAgICAgICAgc3Rh
dHVzID0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKyAgICAgICAgaWYgKHN0
YXR1cyAhPSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKQorICAgICAgICAgICAg
cmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJZ25vcmVkOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXllcklt
cGwpCisgICAgaWYgKCFtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKLSAg
ICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICBtX2NsaWVudC0+
c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBJbnRTaXplIHBlbmRpbmdEZWx0YShz
Y3JvbGxEZWx0YSk7CisgICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9IG1fY3VycmVudGx5U2Ny
b2xsaW5nTGF5ZXJJbXBsLmdldCgpOworICAgIHdoaWxlIChsYXllckltcGwgJiYgIXBlbmRpbmdE
ZWx0YS5pc1plcm8oKSkgeworICAgICAgICBpZiAobGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpIHsK
KyAgICAgICAgICAgIEZsb2F0U2l6ZSBwcmV2aW91c0RlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVs
dGEoKSk7CisgICAgICAgICAgICBGbG9hdFNpemUgc2NhbGVkUGVuZGluZ0RlbHRhKHBlbmRpbmdE
ZWx0YSk7CisgICAgICAgICAgICAvLyBTaW5jZSBzY3JvbGxEZWx0YSBpcyBpbiB3aW5kb3cgY29v
cmRpbmF0ZXMsIGl0IGFscmVhZHkgaGFzIHRoZSBwYWdlIHNjYWxlIGFwcGxpZWQuCisgICAgICAg
ICAgICAvLyBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgcm9vdCBzY3JvbGwgbGF5ZXIgZXhwZWN0cywg
YnV0IGNoaWxkIGxheWVycyBhcmUgc2Nyb2xsZWQgdXNpbmcKKyAgICAgICAgICAgIC8vIHVuc2Nh
bGVkIGNvbnRlbnQgY29vcmRpbmF0ZXMgaW5zdGVhZCwgc28gd2UgaGF2ZSB0byB1bmRvIHRoZSBz
Y2FsaW5nIGZvciB0aGVtLiBUaGUKKyAgICAgICAgICAgIC8vIHBhZ2Ugc2NhbGUgZGVsdGEgbmVl
ZHMgdG8gYmUgdW5hcHBsaWVkIHdpdGggYm90aCBsYXllciB0eXBlcyBzaW5jZSB0aGUgc2Nyb2xs
CisgICAgICAgICAgICAvLyBjb29yZGluYXRlcyBkbyBub3QgcmVzcGVjdCBpdC4KKyAgICAgICAg
ICAgIGlmIChsYXllckltcGwgPT0gbV9zY3JvbGxMYXllckltcGwpIHsKKyAgICAgICAgICAgICAg
ICBzY2FsZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOworICAgICAg
ICAgICAgICAgIGxheWVySW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVuZGluZ0RlbHRhKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NhbGVkUGVuZGluZ0RlbHRhLnNjYWxl
KDEgLyAobV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhKSk7CisgICAgICAgICAgICAgICAg
bGF5ZXJJbXBsLT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHBlbmRpbmcgc2Nyb2xsIGRlbHRhIHRvIHplcm8gaWYg
dGhlIGxheWVyIHdhcyBhYmxlIHRvIG1vdmUgYWxvbmcgdGhlIHJlcXVlc3RlZAorICAgICAgICAg
ICAgLy8gYXhpcy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xsIGV4
YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAgICAgICAgICAgLy8gc2Nyb2xs
IGFyZWEgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZvciBkaWFnb25hbCBzY3JvbGxz
IHRoaXMgYWxzbyBhdm9pZHMgYXBwbHlpbmcKKyAgICAgICAgICAgIC8vIHRoZSBzY3JvbGwgb24g
b25lIGF4aXMgdG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgaWYgKHByZXZpb3VzRGVs
dGEud2lkdGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAgICAg
ICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAgICAgICAgICBpZiAocHJldmlv
dXNEZWx0YS5oZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkpCisg
ICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICAgICAgfQorICAg
ICAgICBsYXllckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpOworICAgIH0KKworICAgIGlmIChw
ZW5kaW5nRGVsdGEgIT0gc2Nyb2xsRGVsdGEpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRz
Q29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09u
SW1wbFRocmVhZCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3Jv
bGxFbmQoKQogeworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CiB9
CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpCkBA
IC01MjQsMjUgKzY0Nyw0OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVy
ZUVuZCgpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiB9CiAK
K3N0YXRpYyBib29sIGRpZFNjcm9sbFN1YnRyZWUoQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sK
KyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRy
ZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKGRpZFNjcm9sbFN1YnRyZWUobGF5ZXJJbXBs
LT5jaGlsZHJlbigpW2ldLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbGxlY3RTY3Jv
bGxEZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwqIGxh
eWVySW1wbCkgY29uc3QKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1pl
cm8oKSkgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gdG9TaXplKGZsb29yZWRJbnRQ
b2ludChsYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKKyAgICAgICAgaWYgKGxheWVySW1wbCAh
PSBtX3Njcm9sbExheWVySW1wbCkgeworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgICAgIHNjcm9sbC5sYXllcklkID0g
bGF5ZXJJbXBsLT5pZCgpOworICAgICAgICAgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xs
RGVsdGE7CisgICAgICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSA9
IHNjcm9sbERlbHRhOworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShsYXll
ckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0U2Ny
b2xsRGVsdGFzKHNjcm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9
CisKIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6
cHJvY2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+
IHNjcm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBi
b29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7CisgICAg
Ym9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKGRpZFNjcm9sbFN1YnRyZWUobV9z
Y3JvbGxMYXllckltcGwuZ2V0KCkpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMSk7CiAgICAgaWYg
KCFkaWRNb3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9u
KSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxl
RGVsdGEgPSAxOwogICAgICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiAgICAgfQog
CisgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBtX3Njcm9sbExheWVy
SW1wbC5nZXQoKSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdl
U2NhbGVEZWx0YSA9IG1fcGFnZVNjYWxlRGVsdGE7CiAKLSAgICAvLyBGSVhNRTogdHJhY2sgc2Ny
b2xscyBmcm9tIGxheWVycyBvdGhlciB0aGFuIHRoZSByb290Ci0gICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9IG1f
c2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5k
KHNjcm9sbCk7Ci0KLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNj
cm9sbC5zY3JvbGxEZWx0YSk7Ci0KICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBlZDM4Yjg2ZGU0NmZj
YjM1NDViODA4OWVmMTZjNmI0NTIxMzg4ZGQxLi4xMDdiNGQ0N2U1ZDUwMDQwOGQ1ZDUzYWY2N2U5
MTkyNWEwZDZhZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0x
MzUsMTAgKzEzNSwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRp
b24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJv
b3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
ICAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFz
cz4gPiYpOworICAgIGJvb2wgaXNDb250ZW50UG9pbnRXaXRoaW5MYXllcihDQ0xheWVySW1wbCos
IGNvbnN0IEludFBvaW50JiBjb250ZW50UG9pbnQpIGNvbnN0OworICAgIHN0YXRpYyB2b2lkIGNv
bGxlY3RMYXllcnNJblBhaW50T3JkZXIoQ0NMYXllckxpc3QmLCBDQ1JlbmRlclN1cmZhY2UqKTsK
KyAgICBzdGF0aWMgdm9pZCBjb2xsZWN0Tm9uRHJhd2luZ1Njcm9sbGFibGVMYXllcnMoQ0NMYXll
ckxpc3QmLCBDQ0xheWVySW1wbCopOworICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RBbGxMYXllcnMo
Q0NMYXllckxpc3QmLCBDQ0xheWVySW1wbCopOworICAgIFNjcm9sbFN0YXR1cyBiZWdpblNjcm9s
bGluZ0xheWVyKENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpOwor
ICAgIHZvaWQgY29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiwgQ0NMYXll
ckltcGwqKSBjb25zdDsKIAogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5
ZXJSZW5kZXJlcjsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKICAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IG1fc2Nyb2xsTGF5ZXJJbXBsOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7CiAgICAgQ0NTZXR0aW5ncyBt
X3NldHRpbmdzOwogICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgYm9vbCBtX3Zpc2li
bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDcyYmVjMmE3
MTY2NGFmNDNjZDY0ZDAxNGQyOGI4NDI2NTA5NWIyMDMuLmE2Y2E2ZjcwMjEyN2VjNzJlOTY2NTli
MGNmYzJkN2MwMGJhZDc2OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCkBAIC0xNjUsNiArMTY1LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0NvbW1p
dCgpCiAgICAgICAgIC8vIEluIHRoZSBzaW5nbGUtdGhyZWFkZWQgY2FzZSwgdGhlIHNjcm9sbCBk
ZWx0YXMgc2hvdWxkIG5ldmVyIGJlCiAgICAgICAgIC8vIHRvdWNoZWQgb24gdGhlIGltcGwgbGF5
ZXIgdHJlZS4KICAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8g
PSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgICAgIEFT
U0VSVChzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkpOwogICAgICAgICBBU1NF
UlQoIXNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpKTsKICNlbmRpZgogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggNmJhODM2
Njc3ZGY4MjgyMjkzNDVlNDAyYzM2YjJkZjM5ZDc5YzRiMC4uZDUwZjc3ZGIzNmMyYjk3ZDI5MWQw
ZDJjNGI5NTY0MTE3ZWU3NzRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJHZW9sb2Nh
dGlvbi5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWNv
bi5oIgpAQCAtODY4LDYgKzg2OSwyOCBAQCBib29sIENocm9tZUNsaWVudEltcGw6OnBhaW50Q3Vz
dG9tT3ZlcmhhbmdBcmVhKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAordm9pZCBDaHJvbWVDbGllbnRJbXBsOjphZGRPclVwZGF0ZVNjcm9s
bGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJs
ZUFyZWEpCit7CisgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBsYXllckNocm9taXVtID0gc3Rh
dGljX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtKj4obGF5ZXIpOworICAgIGxheWVyQ2hyb21p
dW0tPnNldFNjcm9sbGFibGVBcmVhKHNjcm9sbGFibGVBcmVhKTsKKworICAgIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIgPSBsYXllci0+cGxhdGZvcm1MYXllcigpOworICAgIHBsYXRmb3Jt
TGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcGxhdGZvcm1MYXllci0+c2V0U2Nyb2xs
UG9zaXRpb24oc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIHBsYXRmb3Jt
TGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bFNpemUoSG9yaXpvbnRhbFNjcm9sbGJhciksIHNjcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKFZl
cnRpY2FsU2Nyb2xsYmFyKSkpOworfQorCit2b2lkIENocm9tZUNsaWVudEltcGw6OnJlbW92ZVNj
cm9sbGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogbGF5ZXJDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSo+KGxheWVyKTsKKyAgICBsYXllckNocm9taXVtLT5zZXRTY3JvbGxhYmxlQXJlYSgwKTsKKwor
ICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBsYXllci0+cGxhdGZvcm1MYXllcigp
OworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIHBsYXRmb3Jt
TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworICAgIHBsYXRmb3JtTGF5ZXIt
PnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoKSk7Cit9CisKIC8vIEZJWE1FOiBSZW1vdmUg
Q2hyb21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lIGFu
ZCBDaHJvbWVDbGllbnRJbXBsOjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9y
RnJhbWUKIC8vIG9uY2UgYWxsIHBvcnRzIGhhdmUgbW92ZWQgdG8gY2xpZW50LWJhc2VkIGdlb2xv
Y2F0aW9uIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzcz
ICkuCiAvLyBGb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uLCB0aGVzZSBtZXRob2RzIGFyZSBu
b3cgaW1wbGVtZW50ZWQgYXMgV2ViR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9u
IGFuZCBXZWJHZW9sb2NhdGlvbkNsaWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggMjExM2Vj
MWFmNGY4MWQ3ZDE5YmVjYTY1MTg3MzIzMjE3N2FjNDdkZC4uMjlkZDI5M2YzMWU5NDJmMzdkOWRl
Yjk1NTliMGJkYjJiNjBiODFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuaApAQCAtNDQsOSArNDQsMTEgQEAgY2xhc3MgQ29sb3JDaG9vc2VyQ2xp
ZW50OwogI2VuZGlmCiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBH
cmFwaGljc0xheWVyOwogY2xhc3MgUG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGll
bnQ7CiBjbGFzcyBSZW5kZXJCb3g7CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogfQpAQCAtMTM2LDYgKzEzOCw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90
IHNwYWNlTmVlZGVkKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5RdW90YShXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiosIGludDY0X3QgdG90YWxTcGFjZU5l
ZWRlZCk7CiAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYSopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXll
cihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9s
b2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Okdlb2xv
Y2F0aW9uKik7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAj
aWYgRU5BQkxFKElOUFVUX0NPTE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAppbmRleCA3OWUyMGZlZjc5NTJlZWM4MTcwZTNkZWYy
ZWNmMWUzMTIxZmUyOTVlLi5kZWQ0MzgwNzQ1YmQ2OWQxNTAxMGNmOGIwZmExMTQyYWFjNWRhZWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmNwcApAQCAtNzgsNCArNzgsOCBAQCB2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcAogICAgIG1f
Y29udGVudENsaWVudC0+cGFpbnRDb250ZW50cyhjYW52YXMsIFdlYlJlY3QoY2xpcCkpOwogfQog
Cit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCBiMzBjOGFlNTYyZGQ0MzY5
YzM5MWI4MWZiNDg2NzQ3ODQ4ZDYzZDM0Li4yNmY2ODEzOWU1YTY5ZjYwZDcyNGIwOTdmMDJjYTkx
YWYwMzM0YTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVu
dExheWVySW1wbC5oCkBAIC00Myw2ICs0Myw3IEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBX
ZWJDb250ZW50TGF5ZXJJbXBsKFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7
CiAgICAgdmlydHVhbCB+V2ViQ29udGVudExheWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7CiAKICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsK
ICAgICBib29sIG1fZHJhd3NDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAKaW5kZXggMWIxZGEx
MDNjOWZiNjc0YzgwZTg0OGNhOTRmMzA3ZGM2YmQ4MTI3YS4uZDBiNThkMTNiNWVhYmNjZjZjODE4
MjdhMWY2NDQyMjY3ZWUyY2E1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCkBAIC01OCw0ICs1OCw4
IEBAIHZvaWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmCiB7CiB9CiAKK3ZvaWQgV2ViRXh0ZXJuYWxUZXh0
dXJlTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikKK3sKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5oCmluZGV4IDFhZDJiODE5OThmMzBk
ZjZjOWVjYTA5M2EwYzJmZjVhYmVlOTFjZWEuLjljY2I3N2U0NmE2NzZiYzg0ZGE2NDNhZWEyYTAx
NzdlZjZhZGU4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4
dGVybmFsVGV4dHVyZUxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5oCkBAIC00MCw2ICs0MCw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwoKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVySW1wbC5jcHAKaW5kZXggYTRhMmYwOWYwOTc5OTc5NDEzNTE3YTRmYzIyZGQ4
MWUzY2JkOTMzYS4uYjliMDc1ZTViZGI3NGUyMTI1NzhhZTkxM2FhYTg4ODQ0ZTU2MzUzOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCkBAIC01NCw0ICs1
NCw4IEBAIHZvaWQgV2ViTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmIGNsaXApCiB7CiB9CiAKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpzY3JvbGxC
eShjb25zdCBJbnRTaXplJikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCmluZGV4IDAyOTg5NTlhNWQ1NjdiNjNm
MTA1ZGY4N2Q0ZTg4MzhjZTZkMDNmMWIuLjFjYjI1MzRlMTQwN2Y1MzM3MjhhMzg4Y2Y1Y2VlOGM3
ZTBkYzFlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCkBA
IC00MCw2ICs0MCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5XZWJMYXllckltcGwoKTsK
ICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNjcm9sbERlbHRhKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcAppbmRleCBjNDdhN2MyOTBjNGQxMDRjZDVkN2Y5YmJhOTYwNDg3ZDhlZmQ3MjEz
Li5lOWJhYzI2ZDRkNGU3NGQ3M2ViNDcxMjZjYWM4ZTMzZTEyOWE1MmUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcApAQCAtMTI1LDE2ICsxMjUsMTYgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxEZWx0YVJlcGVhdGVkU2Nyb2xscykKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2Fs
ZVNldD4gc2Nyb2xsSW5mbzsKIAogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNz
U2Nyb2xsRGVsdGFzKCk7Ci0gICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgp
LCAxdSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7CiAg
ICAgRVhQRUNUX0VRKHJvb3QtPnNlbnRTY3JvbGxEZWx0YSgpLCBzY3JvbGxEZWx0YSk7Ci0gICAg
ZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERlbHRh
KTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBzY3JvbGxEZWx0
YSk7CiAKICAgICBJbnRTaXplIHNjcm9sbERlbHRhMigtNSwgMjcpOwogICAgIHJvb3QtPnNjcm9s
bEJ5KHNjcm9sbERlbHRhMik7CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NT
Y3JvbGxEZWx0YXMoKTsKLSAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCks
IDF1KTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDB1KTsKICAg
ICBFWFBFQ1RfRVEocm9vdC0+c2VudFNjcm9sbERlbHRhKCksIHNjcm9sbERlbHRhICsgc2Nyb2xs
RGVsdGEyKTsKLSAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgcm9vdC0+aWQo
KSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZv
LT5yb290U2Nyb2xsRGVsdGEsIHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKIAogICAgIHJv
b3QtPnNjcm9sbEJ5KEludFNpemUoKSk7CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnBy
b2Nlc3NTY3JvbGxEZWx0YXMoKTsKQEAgLTE1NSw2ICsxNTUsOTQgQEAgVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiAgICAgRVhQ
RUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUo
ZmFsc2UpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKyAgICBFWFBFQ1Rf
RVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCkpLCBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJl
ZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJh
dykKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIGNoaWxkLT5zZXRTY3Jv
bGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEw
MCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGlsZC0+
c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEwKSkp
OworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5
ZXIocm9vdCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9o
b3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOworICAgIG1faG9zdEltcGwtPnNjcm9s
bEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNU
X1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzY3JvbGxNaXNzZXNDaGlsZCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFs
c2UpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDEpOworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhT
Y3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBv
aW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAg
ICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlKQoreworICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9v
dC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJ
bnRTaXplKDEwMCwgMTAwKSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAg
IHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEw
LCAxMCkpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAgICBJbnRT
aXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRl
ZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdElt
cGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygyLCAxLCAyKTsKKworICAgIC8vIFRoZSBz
Y2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3Qgc2Nyb2xsIGRlbHRhLgorICAgIE93blB0cjxD
Q1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9s
bERlbHRhcygpOworICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIElu
dFNpemUoc2Nyb2xsRGVsdGEud2lkdGgoKSAqIDIsIHNjcm9sbERlbHRhLmhlaWdodCgpICogMikp
OworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQW5kQ2hh
bmdlUGFnZVNjYWxlKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxSb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBzY3JvbGxSb290LT5zZXRTY3JvbGxhYmxlKHRydWUp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIp
OworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3Jv
bGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50
KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxkKHNjcm9sbFJvb3QpOwor
ICAgIHNjcm9sbFJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIoc2Nyb2xsUm9vdCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAg
ICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xs
Qnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExp
bWl0cygyLCAxLCAyKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgbm90IGFwcGx5IHRvIHRo
ZSBjaGlsZCBzY3JvbGwgZGVsdGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNj
cm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0
Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBzY3JvbGxEZWx0YSk7Cit9
CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0KCkgOiBt
X2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDYyMjIwMGM5ZjUzOGE3MjI1MTcyMmE1MDIx
MjY3NDYwOGUxYmIwZjIuLjg0NTdjZDQ1NDcxODAyMWJkZWM4ZjU4MWExOTE5YTU3OTVlN2Q1OWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcApAQCAtOTA2LDYgKzkwNiwxMjEgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRl
c3RTZXRWaXNpYmxlLCBydW5NdWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCitj
bGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhv
c3RUZXN0VGhyZWFkT25seSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgp
CisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0KEludFNpemUoMTAs
IDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KDApOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEw
KSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAg
ICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAs
IDEwMCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZCht
X3Jvb3RTY3JvbGxMYXllcik7CisgICAgICAgIG1fY2hpbGRMYXllciA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1MCwg
NTApKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAg
ICBtX2NoaWxkTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsK
KyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPmFkZENoaWxkKG1fY2hpbGRMYXllcik7CisgICAg
ICAgIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBm
bG9hdCkKKyAgICB7CisgICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Nyb2xsTGF5
ZXItPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3Jv
bGxQb3NpdGlvbihwb3NpdGlvbiArIHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorcHJvdGVjdGVkOgorICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBtX2NoaWxkTGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1f
cm9vdFNjcm9sbExheWVyOworfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENo
aWxkTGF5ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGlj
OgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKCkKKyAgICAgICAgOiBt
X3Njcm9sbEFtb3VudCgyLCAxKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAg
ICAgICBFWFBFQ1RfRVEobV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBv
aW50KCkpOworICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAg
ICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBv
aW50KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVy
LT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJ
bXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkg
eworICAgICAgICAgICAgRVhQRUNUX0VRKGltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUp
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1w
bC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5k
KCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAg
ICAgICAgZW5kVGVzdCgpOworICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Nj
cm9sbEFtb3VudDsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRM
YXllciwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7Cit9CisKK2Ns
YXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQgOiBwdWJs
aWMgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQoKQorICAgICAgICA6IG1faW5p
dGlhbFJvb3RTY3JvbGxQb3NpdGlvbigzLCA2KQorICAgICAgICAsIG1faW5pdGlhbENoaWxkU2Ny
b2xsUG9zaXRpb24oMjAsIDApCisgICAgICAgICwgbV9zY3JvbGxBbW91bnQoLTI1LCAtNSkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAg
ICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KCk7CisgICAgICAgIG1f
cm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxSb290U2Nyb2xsUG9z
aXRpb24pOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlh
bENoaWxkU2Nyb2xsUG9zaXRpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNv
bW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAg
IGlmIChtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAg
Q0NMYXllckltcGwqIHJvb3QgPSBpbXBsLT5yb290TGF5ZXIoKTsKKyAgICAgICAgICAgIENDTGF5
ZXJJbXBsKiBzY3JvbGxSb290ID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAg
ICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IHNjcm9sbFJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoY2hpbGQtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlh
bENoaWxkU2Nyb2xsUG9zaXRpb24pOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxkLT5zY3Jv
bGxEZWx0YSgpLCBJbnRTaXplKC0yMCwgMCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9s
bFJvb3QtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgw
LCAtNSkpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNP
bkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAo
aW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7Cisg
ICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5m
cmFtZU51bWJlcigpID09IDIpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorcHJpdmF0
ZToKKyAgICBjb25zdCBJbnRQb2ludCBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb247CisgICAg
Y29uc3QgSW50UG9pbnQgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJ
bnRTaXplIG1fc2Nyb2xsQW1vdW50OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRl
c3RUaHJlYWRlZCgpOworfQorCiBjbGFzcyBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUg
OiBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBUZXN0T3BhY2l0eUNoYW5n
ZUxheWVyRGVsZWdhdGUoQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKQEAgLTkyMSw2ICsxMDM2
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzM0QoKSB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJikgeyB9CiAK
IHByaXZhdGU6CiAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121696</attachid>
            <date>2012-01-09 11:16:43 -0800</date>
            <delta_ts>2012-01-10 09:56:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120109191641.patch</filename>
            <type>text/plain</type>
            <size>48541</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uODgzZDU2N2UzZmE3NTNmOTc2MDBkNDVjODgzNWY5
NzlmZTU2YjcwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDEyLTAxLTA5ICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTA0NDE4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlZWZj
MmY5MTNjMmEzYTVjY2I0YmZmYmQ4OGJmNzk4Y2UxM2ZiNGE1Li5mZjU0NGQxMDBlZTEzNTYzODk5
MjljZTIwYjE5MzRjY2E0MGE5NTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDU3IEBACisyMDExLTEyLTA5ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0
aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTczMzUwCisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGlu
ZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwg
ZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQK
KyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJl
YWQuCisKKyAgICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZl
biBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9s
bGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVu
dC5oOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q2hyb21lQ2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAg
ICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVW
aWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBs
eVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
Vmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVW
aWV3SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseVJvb3RM
YXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjphcHBseUxheWVy
U2Nyb2xsKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFwcGx5Um9v
dExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENs
aWVudDo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxTaW1wbGU6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRyYXc6OmFwcGx5Um9vdExh
eWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQmFzZTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbEJhc2U6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphZnRlclRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlTY3JvbGxUb0NoaWxk
TGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
cjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRy
YXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmJlZ2luVGVz
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5
b25kTGltaXQ6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmRyYXdMYXllcnNPbkNDVGhy
ZWFkKToKKwogMjAxMi0wMS0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFp
bC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNDQxOC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY3ZTA1ZjhkY2U0YWZjYjBlODIy
NWM5MmNmZTU0NGQzMzExZDA5OWEuLjQ5YzhiODAzN2ZmNDY1ZjAzZmFkM2U0Nzc1OTk2MDdkMDFl
MzBjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNTMsNiAr
NTMsNyBAQAogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcm9s
bGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogCiAjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CkBAIC03MCw2ICs3MSw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIAogR3Jh
cGhpY3NMYXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNs
aWVudCogY2xpZW50KQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisgICAgLCBtX3Njcm9s
bGFibGVBcmVhKDApCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29udGVudHNMYXll
cikKICAgICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihmYWxzZSkKICAgICAs
IG1faW5TZXRDaGlsZHJlbihmYWxzZSkKQEAgLTY4Miw2ICs2ODQsMTMgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBJbnRSZWMKICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBjbGlw
KTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVsdGEpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGRmYTEw
OWQzZTAzOWU3MGE2ZDVmZGU4N2VhZjc2ODE0MzAxM2FiYjcuLjUwYWMyZTUyYzdhNzY5NGMwNTgz
NmIxMjdjZDY0OTQ3ZmE4YjA5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
CkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hy
b21pdW07CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIAogY2xhc3MgR3JhcGhpY3NMYXllckNocm9t
aXVtIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBDQ0xheWVyRGVsZWdhdGUgewogcHVi
bGljOgpAQCAtOTksNiArMTAwLDEwIEBAIHB1YmxpYzoKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgQ0NMYXllckRlbGVnYXRlIGludGVyZmFjZS4KICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0
JiBjbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEpOworCisgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsYWJsZUFyZWEoU2Ny
b2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKSB7IG1fc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxh
YmxlQXJlYTsgfQogCiAgICAgLy8gRXhwb3NlZCBmb3IgdGVzdHMuCiAgICAgTGF5ZXJDaHJvbWl1
bSogY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllci5nZXQoKTsg
fQpAQCAtMTM0LDYgKzEzOSw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IG1fdHJhbnNmb3JtTGF5ZXI7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY29udGVudHNM
YXllcjsKIAorICAgIFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOworCiAgICAgZW51
bSBDb250ZW50c0xheWVyUHVycG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCiAg
ICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFnZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
MmRmMDViNTljYjg1YWQ3YzA4NzAxOGNjMjU2ZWUxNzQwOTRiOWJkNS4uZTk0ZGZlZDg4NmU4NmJm
MTVhZWMyZDUyOGE1ODIzZDUwMTQ1NjkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM2
NSw2ICszNjUsMTQgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAor
dm9pZCBMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBt
YXhTY3JvbGxQb3NpdGlvbikKK3sKKyAgICBpZiAobV9tYXhTY3JvbGxQb3NpdGlvbiA9PSBtYXhT
Y3JvbGxQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fbWF4U2Nyb2xsUG9zaXRpb24g
PSBtYXhTY3JvbGxQb3NpdGlvbjsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiB2b2lkIExh
eWVyQ2hyb21pdW06OnNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxhYmxlKQogewogICAgIGlmICht
X3Njcm9sbGFibGUgPT0gc2Nyb2xsYWJsZSkKQEAgLTQzMSw2ICs0MzksNyBAQCB2b2lkIExheWVy
Q2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGxheWVy
LT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJl
c2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRp
b24pOworICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNjcm9sbFBvc2l0aW9u
KTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7
CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFVw
ZGF0ZVJlY3QobV91cGRhdGVSZWN0KTsKQEAgLTQ4Nyw2ICs0OTYsMTMgQEAgYm9vbCBMYXllckNo
cm9taXVtOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEp
Cit7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSArIHNjcm9sbERlbHRh
KTsKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+c2Nyb2xsQnkoc2Ny
b2xsRGVsdGEpOworfQorCiB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRv
ciwgdm9pZCopCiB7CiAgICAgLy8gQ3VycmVudGx5IHdlIGRvbid0IHVzZSB6LW9yZGVyIHRvIGRl
Y2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gYWN0dWFsbHkgc29ydCBM
YXllckNocm9taXVtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA4N2Y1MDU2ZjNjM2VkYjAyZWJh
NGE5NTE4MzRiN2E4NDNiNzg0MTFhLi41YjQ4OGNhYTM4MjljYjY4ZjcwMTEwNzVlMjM4NGQzYmIy
NjhmNTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC02MCw2ICs2MCw3IEBAIGNsYXNzIENDTGF5
ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NMYXllckRlbGVnYXRlKCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UmVjdCYgY2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSkgPSAwOwogfTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRl
ZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQpAQCAtMTI4LDkg
KzEyOSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQ
b2ludCYpOwogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24o
Y29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorCiAgICAgdm9pZCBzZXRTY3Jv
bGxhYmxlKGJvb2wpOwogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsYWJsZTsgfQogCisgICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSk7CisKICAgICBJbnRTaXplIHNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgp
OyB9CiAKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KQEAg
LTI1NCw2ICsyNjAsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50
UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsK
KyAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7
CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2lu
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAyOWMzMDYwNjhiZDQ2YTc1YjljZGFiZjgy
YWRmMGViZGRiZmM0OTUxLi4zZTFiOGU0MDdlZmJkZGYyOGZkNzc2OGZiMjlkYzdjMGNkZmIwYjdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xNDksOSArMTQ5LDkgQEAgdm9pZCBDQ0xh
eWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShj
b25zdCBJbnRTaXplJiBzY3JvbGwpCit2b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBG
bG9hdFNpemUmIHNjcm9sbCkKIHsKLSAgICBJbnRTaXplIG5ld0RlbHRhID0gbV9zY3JvbGxEZWx0
YSArIHNjcm9sbDsKKyAgICBGbG9hdFNpemUgbmV3RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Ny
b2xsOwogICAgIEludFNpemUgbWluRGVsdGEgPSAtdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwog
ICAgIEludFNpemUgbWF4RGVsdGEgPSBtX21heFNjcm9sbFBvc2l0aW9uIC0gdG9TaXplKG1fc2Ny
b2xsUG9zaXRpb24pOwogICAgIC8vIENsYW1wIG5ld0RlbHRhIHNvIHRoYXQgcG9zaXRpb24gKyBk
ZWx0YSBzdGF5cyB3aXRoaW4gc2Nyb2xsIGJvdW5kcy4KQEAgLTQ0NCw3ICs0NDQsNyBAQCB2b2lk
IENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24pCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCi12
b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSkKK3ZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYgc2Ny
b2xsRGVsdGEpCiB7CiAgICAgaWYgKG1fc2Nyb2xsRGVsdGEgPT0gc2Nyb2xsRGVsdGEpCiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGExOGZkNDQyMGNlNmJmMjliYjE1
Yzk0NjQyNjdiMGM4MWQ0Yzc3ZjYuLmFjMzhiODYzOGFhY2I1NjIyMDVjNWIwOTA5MjM4ZTdjMzI5
MDgyYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTU3LDE2ICsxNTcsMTYgQEAgcHVibGlj
OgogICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3Qge3JldHVybiBt
X21heFNjcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikgeyBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4
U2Nyb2xsUG9zaXRpb247IH0KIAotICAgIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQotICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29u
c3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBG
bG9hdFNpemUmKTsKIAogICAgIGZsb2F0IHBhZ2VTY2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4g
bV9wYWdlU2NhbGVEZWx0YTsgfQogICAgIHZvaWQgc2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwog
Ci0gICAgY29uc3QgSW50U2l6ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9z
ZW50U2Nyb2xsRGVsdGE7IH0KLSAgICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0YShjb25zdCBJbnRT
aXplJiBzZW50U2Nyb2xsRGVsdGEpIHsgbV9zZW50U2Nyb2xsRGVsdGEgPSBzZW50U2Nyb2xsRGVs
dGE7IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIHNlbnRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VudFNjcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEoY29u
c3QgRmxvYXRTaXplJiBzZW50U2Nyb2xsRGVsdGEpIHsgbV9zZW50U2Nyb2xsRGVsdGEgPSBzZW50
U2Nyb2xsRGVsdGE7IH0KIAotICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
KTsKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKTsKIAogICAgIGJv
b2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogICAgIHZvaWQg
c2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpIHsgbV9zY3JvbGxhYmxlID0gc2Nyb2xsYWJs
ZTsgfQpAQCAtMjUyLDggKzI1Miw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZHJhd3NDb250
ZW50OwogCi0gICAgSW50U2l6ZSBtX3Njcm9sbERlbHRhOwotICAgIEludFNpemUgbV9zZW50U2Ny
b2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2Nyb2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1f
c2VudFNjcm9sbERlbHRhOwogICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBm
bG9hdCBtX3BhZ2VTY2FsZURlbHRhOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApp
bmRleCAzNzlkMTYwODM3NTk4NGU1OTRiMjU4YjAyODA3YmRkNTBjNjU1NGE5Li40ZWVkOTA3NWM1
NzZiY2RiMzg3M2QzNWFlMmVjNDMyOGIwNDY3ZTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKQEAgLTQ5MiwxNSArNDkyLDM0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpjbGVh
clBlbmRpbmdVcGRhdGUoKQogICAgIG1fdXBkYXRlTGlzdC5jbGVhcigpOwogfQogCitzdGF0aWMg
TGF5ZXJDaHJvbWl1bSogZmluZExheWVyQnlJZChMYXllckNocm9taXVtKiBsYXllciwgaW50IGlk
KQoreworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVy
LT5pZCgpID09IGlkKQorICAgICAgICByZXR1cm4gbGF5ZXI7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVy
Q2hyb21pdW0qIGZvdW5kID0gZmluZExheWVyQnlJZChsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQo
KSwgaWQpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNj
cm9sbEFuZFNjYWxlKGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8pCiB7Ci0gICAgLy8g
RklYTUU6IHB1c2hpbmcgc2Nyb2xsIG9mZnNldHMgdG8gbm9uLXJvb3QgbGF5ZXJzIG5vdCBpbXBs
ZW1lbnRlZAotICAgIGlmICghaW5mby5zY3JvbGxzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghaW5mby5yb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkgfHwgaW5mby5wYWdlU2NhbGVE
ZWx0YSAhPSAxKQorICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShpbmZvLnJv
b3RTY3JvbGxEZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CiAKLSAgICBBU1NFUlQoaW5mby5z
Y3JvbGxzLnNpemUoKSA9PSAxKTsKLSAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gaW5mby5zY3Jv
bGxzWzBdLnNjcm9sbERlbHRhOwotICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKHNj
cm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGluZm8uc2Nyb2xscy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBs
YXllciA9IGZpbmRMYXllckJ5SWQobV9yb290TGF5ZXIuZ2V0KCksIGluZm8uc2Nyb2xsc1tpXS5s
YXllcklkKTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBsYXllci0+c2Nyb2xsQnkoaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRhKTsKKyAgICB9
CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVMaW1pdGVyKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaApp
bmRleCAyZTBjYmNmMmM1ODVlODIxNWQyODZkZWU5YjYxZTUzNTE4MGNmZmFkLi4wZDI0NmY1Mzkz
NTA1NWE2OTUwNDg2OTE2YWMzMjI3ZWNhZDQ1ZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uaApAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiAKIHN0cnVjdCBDQ1Nj
cm9sbEFuZFNjYWxlU2V0IHsKICAgICBWZWN0b3I8Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3Jv
bGxVcGRhdGVJbmZvPiBzY3JvbGxzOworICAgIEludFNpemUgcm9vdFNjcm9sbERlbHRhOwogICAg
IGZsb2F0IHBhZ2VTY2FsZURlbHRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcAppbmRleCBiNWI3NzZhNWU1ZmIxNjMzMTBiOGI5MDg1M2U1MzZjMGRiNTJmMzk2
Li40Y2MxMzlkMzEzMjA4ZWUxMjkyZjUzNTFmODNhN2Y1NTZlNDM1ZGFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNzYsNiArNzYsMTQgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6Y29tbWl0Q29tcGxldGUoKQogeworICAgIC8vIENoZWNrIHRoYXQgdGhlIHNjcm9sbGluZyBs
YXllciBpcyBzdGlsbCBwcmVzZW50IGluIHRoZSB0cmVlLgorICAgIGlmIChtX2N1cnJlbnRseVNj
cm9sbGluZ0xheWVySW1wbCkgeworICAgICAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1fY3VycmVu
dGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmdldCgpOworICAgICAgICB3aGlsZSAocm9vdC0+cGFyZW50
KCkpCisgICAgICAgICAgICByb290ID0gcm9vdC0+cGFyZW50KCk7CisgICAgICAgIGlmIChyb290
ICE9IG1fcm9vdExheWVySW1wbCkKKyAgICAgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsLmNsZWFyKCk7CisgICAgfQogICAgIC8vIFJlY29tcHV0ZSBtYXggc2Nyb2xsIHBvc2l0
aW9uOyBtdXN0IGJlIGFmdGVyIGxheWVyIGNvbnRlbnQgYm91bmRzIGFyZQogICAgIC8vIHVwZGF0
ZWQuCiAgICAgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKQEAgLTEwMCw3ICsxMDgsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMp
CiAgICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9z
aXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXpl
IHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigp
ICsgZmxvb3JlZEludFBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKSk7CiAK
ICAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+cGFnZVNjYWxlQXRU
aW1lKGZyYW1lQmVnaW5UaW1lTXMpIC8gbV9wYWdlU2NhbGUpOwogICAgIEludFNpemUgbmV4dFNj
cm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZzZXRBdFRpbWUoZnJhbWVCZWdp
blRpbWVNcyk7CkBAIC0xMTksNyArMTI3LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
dGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwKICAg
ICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXpl
IHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigp
ICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xs
VG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBmbG9v
cmVkSW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKICAgICBzY3Jv
bGxUb3RhbC5zY2FsZShtX3BhZ2VTY2FsZURlbHRhKTsKICAgICBmbG9hdCBzY2FsZVRvdGFsID0g
bV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhOwogICAgIEludFNpemUgc2NhbGVkQ29udGVu
dFNpemUgPSBtX3Njcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKVswXS0+Y29udGVudEJvdW5kcygp
OwpAQCAtMzI2LDkgKzMzNCw5IEBAIHN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVy
KENDTGF5ZXJJbXBsKiBsYXllcikKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExh
eWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGxheWVyKQogewogICAgIG1fcm9vdExheWVySW1w
bCA9IGxheWVyOwotCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgdGhpcyBvbmx5IGZpbmRzIHRo
ZSBmaXJzdCBzY3JvbGxhYmxlIGxheWVyLgogICAgIG1fc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNj
cm9sbExheWVyKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisgICAgaWYgKCFtX3Jvb3RMYXllcklt
cGwpCisgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCkBAIC0z
OTUsMTUgKzQwMywxMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZUZh
Y3RvckFuZExpbWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IG1pbgogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQgcGFnZVNj
YWxlQ2hhbmdlKQogewotICAgIGlmIChwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKKyAgICBpZiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsIHx8IHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRh
cyB0byBwYWdlU2NhbGUgc3BhY2UuCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7Ci0gICAg
ICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEo
KTsKLSAgICAgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKLSAgICAgICAg
bV9zY3JvbGxMYXllckltcGwtPnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKLSAgICB9Cisg
ICAgLy8gV2UgYWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YSBmb3Ig
dGhlIHJvb3QgbGF5ZXIgdG8gcGFnZVNjYWxlIHNwYWNlLgorICAgIEZsb2F0U2l6ZSBzY3JvbGxE
ZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOworICAgIHNjcm9sbERlbHRh
LnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7CisgICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNjcm9s
bERlbHRhKHNjcm9sbERlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQ
YWdlU2NhbGVEZWx0YShmbG9hdCBkZWx0YSkKQEAgLTQ0NSw5ICs0NTEsOSBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAgICAvLyBoYXZpbmcg
YSB2ZXJ0aWNhbCBzY3JvbGxiYXIgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cuCiAgICAgbWF4
U2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKIAorICAgIC8vIFdlIG9ubHkgbmVlZCB0byB1
cGRhdGUgdGhlIHJvb3QgbGF5ZXIgc2Nyb2xsIHJhbmdlLCBzaW5jZSB0aGUgY2hpbGQKKyAgICAv
LyBsYXllcnMgdXNlIHVuc2NhbGVkIHNjcm9sbCBjb29yZGluYXRlcy4KICAgICBtX3Njcm9sbExh
eWVySW1wbC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKLQotICAgIC8vIFRPRE8o
YWVsaWFzKTogQWxzbyB1cGRhdGUgc3VibGF5ZXJzLgogfQogCiBkb3VibGUgQ0NMYXllclRyZWVI
b3N0SW1wbDo6Y3VycmVudFRpbWVNcygpIGNvbnN0CkBAIC00NjAsMjggKzQ2NiwxNDcgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCiAgICAgbV9jbGllbnQtPnNl
dE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CiAKLUNDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4oY29uc3QgSW50UG9p
bnQmKQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppc0NvbnRlbnRQb2ludFdpdGhpbkxheWVy
KENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGNvbnN0IEludFBvaW50JiBjb250ZW50UG9pbnQpIGNv
bnN0Cit7CisgICAgSW50UmVjdCBsYXllckNvbnRlbnRSZWN0KGxheWVySW1wbC0+dmlzaWJsZUxh
eWVyUmVjdCgpKTsKKyAgICAvLyBUaGUgdmlzaWJsZSBsYXllciByZWN0IGlzIGluIHNjYWxlZCBj
b29yZGluYXRlcywgc28gdW5kbyB0aGUgcGFnZSBzY2FsZS4gTm90ZSB0aGF0IHRoZXJlIGlzCisg
ICAgLy8gbm8gbmVlZCB0byB1bmRvIHRoZSBwYWdlIHNjYWxlIGRlbHRhLCBiZWNhdXNlIHRoZSBs
YXllciBjb250ZW50IHJlY3QgaXMgb25seSBzY2FsZWQgd2l0aCB0aGUKKyAgICAvLyBvcmlnaW5h
bCBwYWdlIHNjYWxlLgorICAgIGxheWVyQ29udGVudFJlY3Quc2NhbGUoMSAvIG1fcGFnZVNjYWxl
KTsKKyAgICByZXR1cm4gbGF5ZXJDb250ZW50UmVjdC5jb250YWlucyhjb250ZW50UG9pbnQpOwor
fQorCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmJlZ2luU2Nyb2xsaW5nTGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCwgY29uc3QgSW50
UG9pbnQmIHZpZXdwb3J0UG9pbnQpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJl
dHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOworCisgICAgaWYgKCFsYXll
ckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJl
dHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOworCisgICAgSW50UG9pbnQg
Y29udGVudFBvaW50KGxheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCku
bWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworICAgIGlmIChsYXllckltcGwtPmRyYXdzQ29udGVu
dCgpICYmICFpc0NvbnRlbnRQb2ludFdpdGhpbkxheWVyKGxheWVySW1wbCwgY29udGVudFBvaW50
KSkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisK
KyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1cm4gQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisKKyAgICBtX2N1cnJlbnRseVNjcm9sbGlu
Z0xheWVySW1wbCA9IGxheWVySW1wbDsKKyAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXJ0ZWQ7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdEFs
bExheWVycyhDQ0xheWVyTGlzdCYgbGF5ZXJzLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQorewor
ICAgIGxheWVycy5hcHBlbmQobGF5ZXJJbXBsKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDTGF5ZXJJ
bXBsKiBjaGlsZCA9IGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAgICAgICAgY29s
bGVjdEFsbExheWVycyhsYXllcnMsIGNoaWxkKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y29sbGVjdE5vbkRyYXdpbmdTY3JvbGxhYmxlTGF5ZXJzKENDTGF5ZXJMaXN0
JiBsYXllcnMsIENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgaWYgKCFsYXllckltcGwt
PmRyYXdzQ29udGVudCgpICYmIGxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICBsYXll
cnMuYXBwZW5kKGxheWVySW1wbCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVy
SW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBDQ0xheWVySW1wbCogY2hp
bGQgPSBsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCk7CisgICAgICAgIGlmIChjaGlsZC0+
ZHJhd3NDb250ZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29sbGVjdE5v
bkRyYXdpbmdTY3JvbGxhYmxlTGF5ZXJzKGxheWVycywgY2hpbGQpOworICAgIH0KK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb2xsZWN0TGF5ZXJzSW5QYWludE9yZGVyKENDTGF5ZXJM
aXN0JiBsYXllcnMsIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKTsgKytp
KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSByZW5kZXJTdXJmYWNlLT5sYXll
ckxpc3QoKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKGxheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgp
ICYmIGxheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpIHsKKyAgICAg
ICAgICAgIGNvbGxlY3RMYXllcnNJblBhaW50T3JkZXIobGF5ZXJzLCBsYXllckltcGwtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBs
YXllcnMuYXBwZW5kKGxheWVySW1wbCk7CisgICAgICAgIGNvbGxlY3ROb25EcmF3aW5nU2Nyb2xs
YWJsZUxheWVycyhsYXllcnMsIGxheWVySW1wbCk7CisgICAgfQorfQorCitDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKGNv
bnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50KQogewotICAgIC8vIFRPRE86IENoZWNrIGZvciBz
Y3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQotICAgICAgICByZXR1cm4gU2Nyb2xsSWdub3Jl
ZDsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigpOworCisgICAgaWYg
KCFyb290TGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxJZ25vcmVkOwogCi0gICAgcmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgQ0NMYXllckxpc3Qg
bGF5ZXJzOworICAgIGlmIChyb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAg
IGNvbGxlY3ROb25EcmF3aW5nU2Nyb2xsYWJsZUxheWVycyhsYXllcnMsIHJvb3RMYXllcigpKTsK
KyAgICAgICAgY29sbGVjdExheWVyc0luUGFpbnRPcmRlcihsYXllcnMsIHJvb3RMYXllcigpLT5y
ZW5kZXJTdXJmYWNlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEluIHNvbWUgdGVzdHMg
d2UgZG8gbm90IGhhdmUgYSByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgY29sbGVjdEFsbExheWVy
cyhsYXllcnMsIHJvb3RMYXllcigpKTsKKyAgICB9CisKKyAgICAvLyBMb29rIGZvciBhIHNjcm9s
bGFibGUgbGF5ZXIgaW4gZnJvbnQgdG8gYmFjayBvcmRlci4KKyAgICBmb3IgKGludCBpID0gbGF5
ZXJzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBsYXll
ckltcGwgPSBsYXllcnNbaV0uZ2V0KCk7CisgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGF0dXMgc3RhdHVzID0gYmVnaW5TY3JvbGxpbmdMYXllcihsYXllckltcGwsIHZpZXdw
b3J0UG9pbnQpOworICAgICAgICAvLyBIaXR0aW5nIGEgbm9uLXNjcm9sbGFibGUgYW5kIG5vbi1j
b250ZW50LWRyYXdpbmcgb3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudCBsYXllciBzaG91bGQKKyAg
ICAgICAgLy8gbm90IHRlcm1pbmF0ZSB0aGUgc2VhcmNoLCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNl
IHVzIHRvIGlnbm9yZSB0aGUgb3V0ZXIgc2Nyb2xsaW5nIGxheWVyCisgICAgICAgIC8vIGZvciB0
aGUgcm9vdCBsYXllci4KKyAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsSWdub3JlZCAmJiAoIWxheWVySW1wbC0+ZHJhd3NDb250ZW50KCkgfHwgbGF5ZXJJ
bXBsLT5pc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpKQorICAgICAgICAgICAgc3RhdHVzID0gQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuIHN0
YXR1czsKKyAgICB9CisgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25v
cmVkOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAg
aWYgKCFtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKLSAgICBtX2NsaWVu
dC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNS
ZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBJbnRTaXplIHBlbmRpbmdEZWx0YShzY3JvbGxEZWx0
YSk7CisgICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsLmdldCgpOworICAgIHdoaWxlIChsYXllckltcGwgJiYgIXBlbmRpbmdEZWx0YS5pc1pl
cm8oKSkgeworICAgICAgICBpZiAobGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpIHsKKyAgICAgICAg
ICAgIEZsb2F0U2l6ZSBwcmV2aW91c0RlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7Cisg
ICAgICAgICAgICBGbG9hdFNpemUgc2NhbGVkUGVuZGluZ0RlbHRhKHBlbmRpbmdEZWx0YSk7Cisg
ICAgICAgICAgICAvLyBTaW5jZSBzY3JvbGxEZWx0YSBpcyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMs
IGl0IGFscmVhZHkgaGFzIHRoZSBwYWdlIHNjYWxlIGFwcGxpZWQuCisgICAgICAgICAgICAvLyBU
aGlzIG1hdGNoZXMgd2hhdCB0aGUgcm9vdCBzY3JvbGwgbGF5ZXIgZXhwZWN0cywgYnV0IGNoaWxk
IGxheWVycyBhcmUgc2Nyb2xsZWQgdXNpbmcKKyAgICAgICAgICAgIC8vIHVuc2NhbGVkIGNvbnRl
bnQgY29vcmRpbmF0ZXMgaW5zdGVhZCwgc28gd2UgaGF2ZSB0byB1bmRvIHRoZSBzY2FsaW5nIGZv
ciB0aGVtLiBUaGUKKyAgICAgICAgICAgIC8vIHBhZ2Ugc2NhbGUgZGVsdGEgbmVlZHMgdG8gYmUg
dW5hcHBsaWVkIHdpdGggYm90aCBsYXllciB0eXBlcyBzaW5jZSB0aGUgc2Nyb2xsCisgICAgICAg
ICAgICAvLyBjb29yZGluYXRlcyBkbyBub3QgcmVzcGVjdCBpdC4KKyAgICAgICAgICAgIGlmIChs
YXllckltcGwgPT0gbV9zY3JvbGxMYXllckltcGwpIHsKKyAgICAgICAgICAgICAgICBzY2FsZWRQ
ZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOworICAgICAgICAgICAgICAg
IGxheWVySW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVuZGluZ0RlbHRhKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc2NhbGVkUGVuZGluZ0RlbHRhLnNjYWxlKDEgLyAobV9w
YWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhKSk7CisgICAgICAgICAgICAgICAgbGF5ZXJJbXBs
LT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gUmVzZXQgdGhlIHBlbmRpbmcgc2Nyb2xsIGRlbHRhIHRvIHplcm8gaWYgdGhlIGxheWVy
IHdhcyBhYmxlIHRvIG1vdmUgYWxvbmcgdGhlIHJlcXVlc3RlZAorICAgICAgICAgICAgLy8gYXhp
cy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xsIGV4YWN0bHkgdG8g
dGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAgICAgICAgICAgLy8gc2Nyb2xsIGFyZWEgcmVn
YXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZvciBkaWFnb25hbCBzY3JvbGxzIHRoaXMgYWxz
byBhdm9pZHMgYXBwbHlpbmcKKyAgICAgICAgICAgIC8vIHRoZSBzY3JvbGwgb24gb25lIGF4aXMg
dG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEud2lkdGgo
KSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAgICAgICAgICAgICBw
ZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAgICAgICAgICBpZiAocHJldmlvdXNEZWx0YS5o
ZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkpCisgICAgICAgICAg
ICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICAgICAgfQorICAgICAgICBsYXll
ckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpOworICAgIH0KKworICAgIGlmIChwZW5kaW5nRGVs
dGEgIT0gc2Nyb2xsRGVsdGEpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxFbmQoKQog
eworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CiB9CiAKIGJvb2wg
Q0NMYXllclRyZWVIb3N0SW1wbDo6aGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpCkBAIC01MjQsMjUg
KzY0OSw0OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCgpCiAg
ICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiB9CiAKK3N0YXRpYyBi
b29sIGRpZFNjcm9sbFN1YnRyZWUoQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sKKyAgICBpZiAo
IWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXpl
KCk7ICsraSkKKyAgICAgICAgaWYgKGRpZFNjcm9sbFN1YnRyZWUobGF5ZXJJbXBsLT5jaGlsZHJl
bigpW2ldLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbGxlY3RTY3JvbGxEZWx0YXMo
Q0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwqIGxheWVySW1wbCkg
Y29uc3QKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgewor
ICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gdG9TaXplKGZsb29yZWRJbnRQb2ludChsYXll
ckltcGwtPnNjcm9sbERlbHRhKCkpKTsKKyAgICAgICAgaWYgKGxheWVySW1wbCAhPSBtX3Njcm9s
bExheWVySW1wbCkgeworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxV
cGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgICAgIHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBs
LT5pZCgpOworICAgICAgICAgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7Cisg
ICAgICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSA9IHNjcm9sbERl
bHRhOworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShsYXllckltcGwtPnNj
cm9sbERlbHRhKCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJ
bXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFz
KHNjcm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisKIFBhc3NP
d25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Nj
cm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbElu
Zm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBib29sIGRpZE1v
dmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0
YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7CisgICAgYm9vbCBkaWRN
b3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKGRpZFNjcm9sbFN1YnRyZWUobV9zY3JvbGxMYXll
ckltcGwuZ2V0KCkpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMSk7CiAgICAgaWYgKCFkaWRNb3Zl
IHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9uKSB7CiAgICAg
ICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSAx
OwogICAgICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiAgICAgfQogCisgICAgY29s
bGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBtX3Njcm9sbExheWVySW1wbC5nZXQo
KSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0
YSA9IG1fcGFnZVNjYWxlRGVsdGE7CiAKLSAgICAvLyBGSVhNRTogdHJhY2sgc2Nyb2xscyBmcm9t
IGxheWVycyBvdGhlciB0aGFuIHRoZSByb290Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpT
Y3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5
ZXJJbXBsLT5pZCgpOwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpOwotICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7
Ci0KLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3Jv
bGxEZWx0YSk7Ci0KICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA0ODk3ZThlZDFhYzc0MDdhOTEwMjFl
MDc0ZWFjYTAxYzRiODdjMjE1Li5kM2RjYWVhYjE4ZThjNzhlMThlN2MyZWRjNjgzNDNlNzZhYTBk
ZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xMzUsMTAgKzEz
NSwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xh
eWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xp
c3QmKTsKICAgICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsK
KyAgICBib29sIGlzQ29udGVudFBvaW50V2l0aGluTGF5ZXIoQ0NMYXllckltcGwqLCBjb25zdCBJ
bnRQb2ludCYgY29udGVudFBvaW50KSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBjb2xsZWN0TGF5
ZXJzSW5QYWludE9yZGVyKENDTGF5ZXJMaXN0JiwgQ0NSZW5kZXJTdXJmYWNlKik7CisgICAgc3Rh
dGljIHZvaWQgY29sbGVjdE5vbkRyYXdpbmdTY3JvbGxhYmxlTGF5ZXJzKENDTGF5ZXJMaXN0Jiwg
Q0NMYXllckltcGwqKTsKKyAgICBzdGF0aWMgdm9pZCBjb2xsZWN0QWxsTGF5ZXJzKENDTGF5ZXJM
aXN0JiwgQ0NMYXllckltcGwqKTsKKyAgICBTY3JvbGxTdGF0dXMgYmVnaW5TY3JvbGxpbmdMYXll
cihDQ0xheWVySW1wbCosIGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50KTsKKyAgICB2b2lk
IGNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCosIENDTGF5ZXJJbXBsKikg
Y29uc3Q7CiAKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVy
ZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CiAgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBtX3Njcm9sbExheWVySW1wbDsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsOwogICAgIENDU2V0dGluZ3MgbV9zZXR0aW5n
czsKICAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwogICAgIGJvb2wgbV92aXNpYmxlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCA3MmJlYzJhNzE2NjRhZjQz
Y2Q2NGQwMTRkMjhiODQyNjUwOTViMjAzLi5hNmNhNmY3MDIxMjdlYzcyZTk2NjU5YjBjZmMyZDdj
MDBiYWQ3Njk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAt
MTY1LDYgKzE2NSw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZG9Db21taXQoKQogICAg
ICAgICAvLyBJbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2UsIHRoZSBzY3JvbGwgZGVsdGFzIHNo
b3VsZCBuZXZlciBiZQogICAgICAgICAvLyB0b3VjaGVkIG9uIHRoZSBpbXBsIGxheWVyIHRyZWUu
CiAgICAgICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9sYXll
clRyZWVIb3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgICAgICBBU1NFUlQoc2Ny
b2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLmlzWmVybygpKTsKICAgICAgICAgQVNTRVJUKCFzY3Jv
bGxJbmZvLT5zY3JvbGxzLnNpemUoKSk7CiAjZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IDVmMjg1MWJiNTg3N2M5
ZmY3NDI2ZDdhOGMxZTVkMTM4NjRmYTAyY2YuLjk1M2RiYjc4ODFlMzQ4NTE2ZmNlZTczMDU2Njc4
OGQ1ZTUwODNlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIK
ICNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkljb24uaCIKQEAg
LTg2OCw2ICs4NjksMjggQEAgYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpwYWludEN1c3RvbU92ZXJo
YW5nQXJlYShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXll
cihHcmFwaGljc0xheWVyKiBsYXllciwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQor
eworICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bSA9IHN0YXRpY19jYXN0
PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSo+KGxheWVyKTsKKyAgICBsYXllckNocm9taXVtLT5zZXRT
Y3JvbGxhYmxlQXJlYShzY3JvbGxhYmxlQXJlYSk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyID0gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5z
ZXRTY3JvbGxhYmxlKHRydWUpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9u
KHNjcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5z
ZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKHNjcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKEhv
cml6b250YWxTY3JvbGxiYXIpLCBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShWZXJ0aWNhbFNj
cm9sbGJhcikpKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpyZW1vdmVTY3JvbGxpbmdM
YXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0q
IGxheWVyQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihsYXll
cik7CisgICAgbGF5ZXJDaHJvbWl1bS0+c2V0U2Nyb2xsYWJsZUFyZWEoMCk7CisKKyAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyID0gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBw
bGF0Zm9ybUxheWVyLT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5z
ZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKKyAgICBwbGF0Zm9ybUxheWVyLT5zZXRNYXhT
Y3JvbGxQb3NpdGlvbihJbnRTaXplKCkpOworfQorCiAvLyBGSVhNRTogUmVtb3ZlIENocm9tZUNs
aWVudEltcGw6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSBhbmQgQ2hyb21l
Q2xpZW50SW1wbDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lCiAv
LyBvbmNlIGFsbCBwb3J0cyBoYXZlIG1vdmVkIHRvIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiAo
c2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM3MyApLgogLy8g
Rm9yIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiwgdGhlc2UgbWV0aG9kcyBhcmUgbm93IGltcGxl
bWVudGVkIGFzIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpyZXF1ZXN0UGVybWlzc2lvbiBhbmQgV2Vi
R2VvbG9jYXRpb25DbGllbnQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCmluZGV4IDIxMTNlYzFhZjRmODFk
N2QxOWJlY2E2NTE4NzMyMzIxNzdhYzQ3ZGQuLmMxNDJhZmJkMTZmYjRiMzM3Y2Q5YzVkMzAxZTZh
NTNlYWEyNTgwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGll
bnRJbXBsLmgKQEAgLTQ0LDkgKzQ0LDExIEBAIGNsYXNzIENvbG9yQ2hvb3NlckNsaWVudDsKICNl
bmRpZgogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZpbGVDaG9vc2VyOworY2xhc3MgR3JhcGhpY3NM
YXllcjsKIGNsYXNzIFBvcHVwQ29udGFpbmVyOwogY2xhc3MgUG9wdXBNZW51Q2xpZW50OwogY2xh
c3MgUmVuZGVyQm94OworY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTZWN1cml0eU9yaWdp
bjsKIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKIH0KQEAgLTE2Nyw2ICsxNjksOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKTsKIAogICAg
IHZpcnR1YWwgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dl
cnMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSopOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
Kik7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2Rl
KGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKaW5kZXggZWEwODNkZTU2MmE3ZWZhYTBhZjRkOGVj
MjJlMmEwMGRlNzVjZjY2Ni4uOWEyMzFlNjY2ODE5MTJmOTI3N2UxZmYzM2I3MjZhNWZlNDFiYjJh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
SW1wbC5jcHAKQEAgLTcyLDQgKzcyLDggQEAgdm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpwYWlu
dENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXAKICAgICBt
X2NvbnRlbnRDbGllbnQtPnBhaW50Q29udGVudHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsKIH0K
IAordm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKaW5kZXggYmMxZTI2MDA4OGI0Nzg5
Mjg5ZTI1ZWE0OWQ0MzgzYzdlMDIxN2I2Mi4uNWRiZTNmMDc4YWY0NjQ1NjBmNWMxNzk2MjFiM2Uz
NTNlZDMwN2U3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29u
dGVudExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuaApAQCAtNDIsNiArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
V2ViQ29udGVudExheWVySW1wbChXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQp
OwogICAgIHZpcnR1YWwgfldlYkNvbnRlbnRMYXllckltcGwoKTsKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBjbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOwogCiAgICAgV2ViQ29udGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRDbGllbnQ7
CiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCmluZGV4IDRkNDM5
ZmQ0MzRiZWMzZjUxNjQ5OWRhYjQxMzM1MmM0Y2Q2ZDEyYTguLjliMzRhNjMyNTc3ZDcxYzU1OGJj
NGJlNWZjYjNkZDQ4YjllZjkxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcApAQCAtNTksNCArNTks
OCBAQCB2b2lkIFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JgogewogfQogCit2b2lkIFdlYkV4dGVybmFsVGV4
dHVyZUxheWVySW1wbDo6c2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpCit7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaAppbmRleCAxYWQyYjgxOTk4ZjMw
ZGY2YzllY2EwOTNhMGMyZmY1YWJlZTkxY2VhLi45Y2NiNzdlNDZhNjc2YmM4NGRhNjQzYWVhMmEw
MTc3ZWY2YWRlOGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJF
eHRlcm5hbFRleHR1cmVMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaApAQCAtNDAsNiArNDAsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB+V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsKCk7CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJMYXllckltcGwuY3BwCmluZGV4IDA3YTE2MmQ2NDFhY2JiNWI5YTQxYWNlZTI2ZDcx
MDY1MzY2NGQ2NWEuLjY3Y2U1Mzc2ZjcxZmVjZWZlNDAyMzJlZmMwODM2N2FiY2NhYTBiN2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcApAQCAtNTIsNCAr
NTIsOCBAQCB2b2lkIFdlYkxheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBJbnRSZWN0JiBjbGlwKQogewogfQogCit2b2lkIFdlYkxheWVySW1wbDo6c2Nyb2xs
QnkoY29uc3QgSW50U2l6ZSYpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaAppbmRleCA2YmRhODNmNTQ3YzMxODUw
YTBhN2IwOWMxNTMyYTI5ZTZiYzI4NWJkLi5mZWFmZWU2MzFlOTRjNWMxMjQ1OGRiNDg4YWQ2ZGRl
ZjQ3MDJhMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaApA
QCAtMzksNiArMzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViTGF5ZXJJbXBsKCk7CiAgICAgdmly
dHVhbCB+V2ViTGF5ZXJJbXBsKCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERl
bHRhKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBm
NWI4ZGIyZTUwMmVlZDRlZjNiZDY0NmYyYjZjYzBjNGRhN2MzZjg0Li4xZjgwMzdkNzQ3ZGMyNGZi
NzgxZjk0MjUwZmQ5MmY2OGE1ZmFkNTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMTI1LDE2ICsx
MjUsMTYgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YVJlcGVh
dGVkU2Nyb2xscykKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbzsK
IAogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0g
ICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJU
X0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7CiAgICAgRVhQRUNUX0VRKHJvb3Qt
PnNlbnRTY3JvbGxEZWx0YSgpLCBzY3JvbGxEZWx0YSk7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNj
cm9sbEluZm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERlbHRhKTsKKyAgICBBU1NFUlRfRVEo
c2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBzY3JvbGxEZWx0YSk7CiAKICAgICBJbnRTaXpl
IHNjcm9sbERlbHRhMigtNSwgMjcpOwogICAgIHJvb3QtPnNjcm9sbEJ5KHNjcm9sbERlbHRhMik7
CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAg
ICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDF1KTsKKyAgICBBU1NFUlRf
RVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDB1KTsKICAgICBFWFBFQ1RfRVEocm9vdC0+
c2VudFNjcm9sbERlbHRhKCksIHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKLSAgICBleHBl
Y3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgcm9vdC0+aWQoKSwgc2Nyb2xsRGVsdGEgKyBz
Y3JvbGxEZWx0YTIpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEs
IHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKIAogICAgIHJvb3QtPnNjcm9sbEJ5KEludFNp
emUoKSk7CiAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMo
KTsKQEAgLTE1NSw2ICsxNTUsOTQgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxSb290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1
ZXN0Q29tbWl0KTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxS
b290SWdub3JlZCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIG1faG9z
dEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoMCwgMCkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdu
b3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNU
X0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykKK3sKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNl
dFNjcm9sbGFibGUoZmFsc2UpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDEpOworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAg
IGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hp
bGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGlsZC0+c2V0VmlzaWJsZUxheWVyUmVj
dChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIHJvb3QtPmFkZENo
aWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAgICBF
WFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnko
SW50U2l6ZSgwLCAxMCkpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIEVYUEVD
VF9UUlVFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0
Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNz
ZXNDaGlsZCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIGNoaWxkLT5z
ZXRTY3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRT
aXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBj
aGlsZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAs
IDEwKSkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRS
b290TGF5ZXIocm9vdCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKElu
dFBvaW50KDE1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAg
ICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9k
aWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKKyAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7
CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIHJvb3QtPnNldFZpc2libGVM
YXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAs
IDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwg
NSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1w
bC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZh
Y3RvckFuZExpbWl0cygyLCAxLCAyKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkg
dG8gdGhlIHJvb3Qgc2Nyb2xsIGRlbHRhLgorICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0
PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIEVY
UEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIEludFNpemUoc2Nyb2xsRGVsdGEu
d2lkdGgoKSAqIDIsIHNjcm9sbERlbHRhLmhlaWdodCgpICogMikpOworfQorCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlKQorewor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxSb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgx
KTsKKyAgICBzY3JvbGxSb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIGNoaWxkLT5zZXRT
Y3JvbGxhYmxlKHRydWUpOworICAgIGNoaWxkLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXpl
KDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjaGls
ZC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEw
KSkpOworICAgIHJvb3QtPmFkZENoaWxkKHNjcm9sbFJvb3QpOworICAgIHNjcm9sbFJvb3QtPmFk
ZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsUm9vdCk7
CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwor
ICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygyLCAxLCAyKTsKKwor
ICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgbm90IGFwcGx5IHRvIHRoZSBjaGlsZCBzY3JvbGwgZGVs
dGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJ
bXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbElu
Zm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBzY3JvbGxEZWx0YSk7Cit9CisKIGNsYXNzIEJsZW5kU3Rh
dGVUcmFja2VyQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJs
aWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCmluZGV4IGU2Y2U4YjA2NjNlY2E5ZWZlN2UzNGFmZDIyYzhlMWZlY2U5MTBkZjYuLjk1
ZWVmNzQ0MjZkMmExMzllMTNhZDNhNGI1YzAxYzQxZjA1OTY2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtOTEy
LDYgKzkxMiwxMjEgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXRWaXNpYmxlLCBydW5N
dWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RUZXN0U2Nyb2xsQmFzZSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25seSB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0KEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1f
cm9vdFNjcm9sbExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX3Jv
b3RTY3JvbGxMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9v
dFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxM
YXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RTY3JvbGxMYXllcik7
CisgICAgICAgIG1fY2hpbGRMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAg
ICAgbV9jaGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1MCwgNTApKTsKKyAgICAgICAgbV9j
aGlsZExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNl
dE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9yb290U2Ny
b2xsTGF5ZXItPmFkZENoaWxkKG1fY2hpbGRMYXllcik7CisgICAgICAgIHBvc3RTZXROZWVkc0Nv
bW1pdFRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9s
bEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCkKKyAgICB7CisgICAg
ICAgIEludFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biArIHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkK
KyAgICB7CisgICAgfQorcHJvdGVjdGVkOgorICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2No
aWxkTGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOwor
fTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKCkKKyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAx
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9y
b290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBp
ZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9F
UShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigp
LCBJbnRQb2ludCgpICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsK
KyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQ
RUNUX0VRKGltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3Jv
bGxBbW91bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciwgcnVuTXVsdGlUaHJl
YWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7Cit9CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyQmV5b25kTGltaXQoKQorICAgICAgICA6IG1faW5pdGlhbFJvb3RTY3JvbGxQb3Np
dGlvbigzLCA2KQorICAgICAgICAsIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24oMjAsIDAp
CisgICAgICAgICwgbV9zY3JvbGxBbW91bnQoLTI1LCAtNSkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5z
ZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24pOworICAgICAgICBt
X2NoaWxkTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRp
b24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NM
YXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhv
c3QtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgQ0NMYXllckltcGwqIHJvb3Qg
PSBpbXBsLT5yb290TGF5ZXIoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxSb290
ID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBj
aGlsZCA9IHNjcm9sbFJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoY2hpbGQtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRp
b24pOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxkLT5zY3JvbGxEZWx0YSgpLCBJbnRTaXpl
KC0yMCwgMCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9sbFJvb3QtPnNjcm9sbFBvc2l0
aW9uKCksIG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoc2Nyb2xsUm9vdC0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgwLCAtNSkpOworICAgICAgICB9
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIo
KSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAg
ICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAgICBpbXBsLT5z
Y3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDIp
CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBJbnRQ
b2ludCBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb247CisgICAgY29uc3QgSW50UG9pbnQgbV9p
bml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1v
dW50OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5
b25kTGltaXQsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQor
CiBjbGFzcyBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRl
bGVnYXRlIHsKIHB1YmxpYzoKICAgICBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUoQ0NM
YXllclRyZWVIb3N0VGVzdCogdGVzdCkKQEAgLTkyNiw2ICsxMDQxLDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKSB7IH0KIAogcHJpdmF0ZToK
ICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121861</attachid>
            <date>2012-01-10 09:56:29 -0800</date>
            <delta_ts>2012-01-11 09:47:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120110175627.patch</filename>
            <type>text/plain</type>
            <size>48564</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IzOGMyNzNlOWI2MTRl
MTYxYjJhZDNhZTUxZjUzNGEzYzgwM2E3OC4uNzY0YjAyODUxZTc2YzQ3YTVlYzlkMjMwOTYxNGFk
NWMyNTQyMWJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDEyLTAxLTA5ICBSb2IgQnVp
cyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgVXBzdHJlYW0gY2hhbmdlIHRvIGRpc2FibGUg
aW5wdXRbY29sb3JdIGNzcyBydWxlcyBmb3IgQmxhY2tCZXJyeSBwb3J0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGYwZTQyMDE1MTNhYjllNTVkMGU3NTJhZTA4MDg3ZTY1MDIyYmQyMGYu
LjkzY2MzZGYzMmM0YzhjYzc1Mjk4NDgyMjY5MmE5YzYyOWQ4MmU3NTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMTItMDkgIFNhbWkgS3lvc3RpbGEg
IDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQg
bGF5ZXIgc2Nyb2xsaW5nIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNTAKKworICAgICAgICBUaGlzIHBh
dGNoIGVuYWJsZXMgc2Nyb2xsaW5nIGNoaWxkIGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJl
YWQuCisgICAgICAgIFNjcm9sbCBkZWx0YXMgYXJlIGFjY3VtdWxhdGVkIGZvciBlYWNoIHNjcm9s
bGVkIENDTGF5ZXJJbXBsIGFuZAorICAgICAgICBzeW5jaHJvbml6ZWQgdG8gdGhlIFdlYlZpZXdJ
bXBsIGluIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29t
IHRvIHNjcm9sbCBpbiBhIGdpdmVuIGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNl
c3RvciBsYXllcnMgaXMgc2Nyb2xsZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9X
ZWJMYXllclRyZWVWaWV3Q2xpZW50Lmg6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjphZGRPclVwZGF0ZVNjcm9s
bGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cmVtb3ZlU2Ny
b2xsaW5nTGF5ZXIpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmg6CisgICAgICAg
ICogc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJUcmVlVmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAg
ICogc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFkZE9yVXBkYXRlU2Nyb2xsaW5n
TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlU2Nyb2xsaW5nTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBwbHlMYXllclNjcm9sbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxl
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVy
SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpURVNUX0YpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpU
ZXN0SG9va3M6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpU
ZXN0SG9va3M6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVl
SG9zdENsaWVudDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6
Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZTo6YXBwbHlSb290TGF5ZXJTY3JvbGxB
bmRTY2FsZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxNdWx0aXBs
ZVJlZHJhdzo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2Fs
ZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphcHBseUxh
eWVyU2Nyb2xsKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6
OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNl
OjphcHBseVNjcm9sbFRvQ2hpbGRMYXllcik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxDaGlsZExheWVyOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
cik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpi
ZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllcjo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpU
RVNUX0YpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
ckJleW9uZExpbWl0OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExp
bWl0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJC
ZXlvbmRMaW1pdDo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1p
dDo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorCiAyMDEyLTAxLTA5ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJvbGwgQ2hyb21pdW0gREVQUyBmcm9tIDExNjQ1
OSB0byAxMTY5NzkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCA2
N2UwNWY4ZGNlNGFmY2IwZTgyMjVjOTJjZmU1NDRkMzMxMWQwOTlhLi40OWM4YjgwMzdmZjQ2NWYw
M2ZhZDNlNDc3NTk5NjA3ZDAxZTMwY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJJbWFnZUxheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIK
IAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtNzAsNiArNzEsNyBAQCBQYXNzT3du
UHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xp
ZW50KiBjbGllbnQpCiAKIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NMYXllckNocm9t
aXVtKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xp
ZW50KQorICAgICwgbV9zY3JvbGxhYmxlQXJlYSgwKQogICAgICwgbV9jb250ZW50c0xheWVyUHVy
cG9zZShOb0NvbnRlbnRzTGF5ZXIpCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJIYXNCYWNrZ3JvdW5k
Q29sb3IoZmFsc2UpCiAgICAgLCBtX2luU2V0Q2hpbGRyZW4oZmFsc2UpCkBAIC02ODIsNiArNjg0
LDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjCiAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoY29udGV4dCwgY2xpcCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpz
Y3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBpZiAoIW1fc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24o
KSArIHNjcm9sbERlbHRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaAppbmRleCBkZmExMDlkM2UwMzllNzBhNmQ1ZmRlODdlYWY3NjgxNDMwMTNhYmI3Li41
MGFjMmU1MmM3YTc2OTRjMDU4MzZiMTI3Y2Q2NDk0N2ZhOGIwOWI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uaApAQCAtNDAsNiArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBMYXllckNocm9taXVtOworY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiAKIGNsYXNz
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgQ0NM
YXllckRlbGVnYXRlIHsKIHB1YmxpYzoKQEAgLTk5LDYgKzEwMCwxMCBAQCBwdWJsaWM6CiAKICAg
ICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIENDTGF5ZXJEZWxlZ2F0
ZSBpbnRlcmZhY2UuCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKKworICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0KKyAgICB2b2lkIHNl
dFNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkgeyBtX3Njcm9s
bGFibGVBcmVhID0gc2Nyb2xsYWJsZUFyZWE7IH0KIAogICAgIC8vIEV4cG9zZWQgZm9yIHRlc3Rz
LgogICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRlbnRzTGF5ZXIuZ2V0KCk7IH0KQEAgLTEzNCw2ICsxMzksOCBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBtX3RyYW5zZm9ybUxheWVyOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBtX2NvbnRlbnRzTGF5ZXI7CiAKKyAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3JvbGxh
YmxlQXJlYTsKKwogICAgIGVudW0gQ29udGVudHNMYXllclB1cnBvc2UgewogICAgICAgICBOb0Nv
bnRlbnRzTGF5ZXIgPSAwLAogICAgICAgICBDb250ZW50c0xheWVyRm9ySW1hZ2UsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDJkZjA1YjU5Y2I4NWFkN2MwODcwMThjYzI1NmVlMTc0MDk0Yjli
ZDUuLmU5NGRmZWQ4ODZlODZiZjE1YWVjMmQ1MjhhNTgyM2Q1MDE0NTY5MGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCkBAIC0zNjUsNiArMzY1LDE0IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogICAgIHNldE5l
ZWRzQ29tbWl0KCk7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TWF4U2Nyb2xsUG9zaXRp
b24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pCit7CisgICAgaWYgKG1fbWF4U2Ny
b2xsUG9zaXRpb24gPT0gbWF4U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBt
X21heFNjcm9sbFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247CisgICAgc2V0TmVlZHNDb21t
aXQoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRTY3JvbGxhYmxlKGJvb2wgc2Nyb2xs
YWJsZSkKIHsKICAgICBpZiAobV9zY3JvbGxhYmxlID09IHNjcm9sbGFibGUpCkBAIC00MzEsNiAr
NDM5LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBs
KiBsYXllcikKICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlvbik7CiAgICAgbGF5ZXIt
PnNldFByZXNlcnZlczNEKHByZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3Np
dGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
bV9tYXhTY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKG1f
c3VibGF5ZXJUcmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0p
OwogICAgIGxheWVyLT5zZXRVcGRhdGVSZWN0KG1fdXBkYXRlUmVjdCk7CkBAIC00ODcsNiArNDk2
LDEzIEBAIGJvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uKCkgKyBzY3JvbGxEZWx0YSk7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAgIG1fZGVs
ZWdhdGUtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKK30KKwogdm9pZCBzb3J0TGF5ZXJzKFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKQogewogICAgIC8vIEN1cnJlbnRseSB3ZSBkb24n
dCB1c2Ugei1vcmRlciB0byBkZWNpZGUgd2hhdCB0byBwYWludCwgc28gdGhlcmUncyBubyBuZWVk
IHRvIGFjdHVhbGx5IHNvcnQgTGF5ZXJDaHJvbWl1bXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXgg
ODdmNTA1NmYzYzNlZGIwMmViYTRhOTUxODM0YjdhODQzYjc4NDExYS4uNWI0ODhjYWEzODI5Y2I2
OGY3MDExMDc1ZTIzODRkM2JiMjY4ZjU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNjAsNiAr
NjAsNyBAQCBjbGFzcyBDQ0xheWVyRGVsZWdhdGUgewogcHVibGljOgogICAgIHZpcnR1YWwgfkND
TGF5ZXJEZWxlZ2F0ZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpID0gMDsKIH07CiAKIC8vIEJhc2Ug
Y2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBkZXJp
dmVkIGZyb20KQEAgLTEyOCw5ICsxMjksMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xs
UG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNl
dE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBt
YXhTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0K
KwogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sKTsKICAgICBib29sIHNjcm9sbGFibGUoKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KIAorICAgIHZvaWQgc2Nyb2xsQnkoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpOworCiAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgpIGNvbnN0
IHsgcmV0dXJuIEludFNpemUoKTsgfQogCiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGEoKSBjb25z
dCB7IHJldHVybiAxOyB9CkBAIC0yNTQsNiArMjYwLDcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXpl
IG1fYm91bmRzOwogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OwogICAgIEludFBvaW50
IG1fc2Nyb2xsUG9zaXRpb247CisgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAg
IGJvb2wgbV9zY3JvbGxhYmxlOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBGbG9h
dFBvaW50IG1fYW5jaG9yUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMjljMzA2
MDY4YmQ0NmE3NWI5Y2RhYmY4MmFkZjBlYmRkYmZjNDk1MS4uM2UxYjhlNDA3ZWZiZGRmMjhmZDc3
NjhmYjI5ZGM3YzBjZGZiMGI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTQ5LDkg
KzE0OSw5IEBAIHZvaWQgQ0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBDQ0xh
eWVySW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsKQordm9pZCBDQ0xheWVySW1w
bDo6c2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpCiB7Ci0gICAgSW50U2l6ZSBuZXdE
ZWx0YSA9IG1fc2Nyb2xsRGVsdGEgKyBzY3JvbGw7CisgICAgRmxvYXRTaXplIG5ld0RlbHRhID0g
bV9zY3JvbGxEZWx0YSArIHNjcm9sbDsKICAgICBJbnRTaXplIG1pbkRlbHRhID0gLXRvU2l6ZSht
X3Njcm9sbFBvc2l0aW9uKTsKICAgICBJbnRTaXplIG1heERlbHRhID0gbV9tYXhTY3JvbGxQb3Np
dGlvbiAtIHRvU2l6ZShtX3Njcm9sbFBvc2l0aW9uKTsKICAgICAvLyBDbGFtcCBuZXdEZWx0YSBz
byB0aGF0IHBvc2l0aW9uICsgZGVsdGEgc3RheXMgd2l0aGluIHNjcm9sbCBib3VuZHMuCkBAIC00
NDQsNyArNDQ0LDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZv
clN1YnRyZWUoKTsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit2b2lkIENDTGF5ZXJJbXBsOjpzZXRTY3JvbGxEZWx0YShj
b25zdCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIGlmIChtX3Njcm9sbERlbHRhID09
IHNjcm9sbERlbHRhKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBh
MThmZDQ0MjBjZTZiZjI5YmIxNWM5NDY0MjY3YjBjODFkNGM3N2Y2Li5hYzM4Yjg2MzhhYWNiNTYy
MjA1YzViMDkwOTIzOGU3YzMyOTA4MmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE1Nywx
NiArMTU3LDE2IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlv
bigpIGNvbnN0IHtyZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0TWF4
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhT
Y3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOyB9CiAKLSAgICBjb25zdCBJbnRTaXpl
JiBzY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsRGVsdGE7IH0KLSAgICB2b2lk
IHNldFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBGbG9hdFNpemUmIHNj
cm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQorICAgIHZvaWQgc2V0
U2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJik7CiAKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVNjYWxlRGVsdGE7IH0KICAgICB2b2lkIHNldFBhZ2VT
Y2FsZURlbHRhKGZsb2F0KTsKIAotICAgIGNvbnN0IEludFNpemUmIHNlbnRTY3JvbGxEZWx0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VudFNjcm9sbERlbHRhOyB9Ci0gICAgdm9pZCBzZXRTZW50U2Ny
b2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgc2VudFNjcm9sbERlbHRhKSB7IG1fc2VudFNjcm9sbERl
bHRhID0gc2VudFNjcm9sbERlbHRhOyB9CisgICAgY29uc3QgRmxvYXRTaXplJiBzZW50U2Nyb2xs
RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3NlbnRTY3JvbGxEZWx0YTsgfQorICAgIHZvaWQgc2V0
U2VudFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYgc2VudFNjcm9sbERlbHRhKSB7IG1fc2Vu
dFNjcm9sbERlbHRhID0gc2VudFNjcm9sbERlbHRhOyB9CiAKLSAgICB2b2lkIHNjcm9sbEJ5KGNv
bnN0IEludFNpemUmIHNjcm9sbCk7CisgICAgdm9pZCBzY3JvbGxCeShjb25zdCBGbG9hdFNpemUm
IHNjcm9sbCk7CiAKICAgICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGU7IH0KICAgICB2b2lkIHNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxhYmxlKSB7IG1fc2Ny
b2xsYWJsZSA9IHNjcm9sbGFibGU7IH0KQEAgLTI1Miw4ICsyNTIsOCBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBtX2RyYXdzQ29udGVudDsKIAotICAgIEludFNpemUgbV9zY3JvbGxEZWx0YTsKLSAg
ICBJbnRTaXplIG1fc2VudFNjcm9sbERlbHRhOworICAgIEZsb2F0U2l6ZSBtX3Njcm9sbERlbHRh
OworICAgIEZsb2F0U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKICAgICBJbnRTaXplIG1fbWF4U2Ny
b2xsUG9zaXRpb247CiAgICAgZmxvYXQgbV9wYWdlU2NhbGVEZWx0YTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNmM2NTFkNjViZGU2Y2Q5M2RjNGJlZWZlYWM5ZTIxZTRh
ZGFmYzEwNS4uZjc3OGI4NzA3ZTA3NmI0MTI2ZWUwYWZmNThmODZiZmVkZWU1MDgzNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC00ODAsMTUgKzQ4MCwzNCBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6Y2xlYXJQZW5kaW5nVXBkYXRlKCkKICAgICBtX3VwZGF0ZUxpc3QuY2xl
YXIoKTsKIH0KIAorc3RhdGljIExheWVyQ2hyb21pdW0qIGZpbmRMYXllckJ5SWQoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIsIGludCBpZCkKK3sKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChsYXllci0+aWQoKSA9PSBpZCkKKyAgICAgICAgcmV0dXJuIGxheWVyOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsr
aSkgeworICAgICAgICBMYXllckNocm9taXVtKiBmb3VuZCA9IGZpbmRMYXllckJ5SWQobGF5ZXIt
PmNoaWxkcmVuKClbaV0uZ2V0KCksIGlkKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAg
ICAgcmV0dXJuIGZvdW5kOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBDQ1Njcm9sbEFuZFNjYWxlU2V0
JiBpbmZvKQogewotICAgIC8vIEZJWE1FOiBwdXNoaW5nIHNjcm9sbCBvZmZzZXRzIHRvIG5vbi1y
b290IGxheWVycyBub3QgaW1wbGVtZW50ZWQKLSAgICBpZiAoIWluZm8uc2Nyb2xscy5zaXplKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWluZm8ucm9vdFNjcm9sbERlbHRhLmlzWmVybygp
IHx8IGluZm8ucGFnZVNjYWxlRGVsdGEgIT0gMSkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Ny
b2xsQW5kU2NhbGUoaW5mby5yb290U2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOwog
Ci0gICAgQVNTRVJUKGluZm8uc2Nyb2xscy5zaXplKCkgPT0gMSk7Ci0gICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSA9IGluZm8uc2Nyb2xsc1swXS5zY3JvbGxEZWx0YTsKLSAgICBtX2NsaWVudC0+YXBw
bHlTY3JvbGxBbmRTY2FsZShzY3JvbGxEZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmZvLnNjcm9sbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBmaW5kTGF5ZXJCeUlkKG1fcm9vdExheWVyLmdldCgp
LCBpbmZvLnNjcm9sbHNbaV0ubGF5ZXJJZCk7CisgICAgICAgIGlmICghbGF5ZXIpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgbGF5ZXItPnNjcm9sbEJ5KGluZm8uc2Nyb2xsc1tpXS5z
Y3JvbGxEZWx0YSk7CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRl
TGltaXRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgKaW5kZXggMmUwY2JjZjJjNTg1ZTgyMTVkMjg2ZGVlOWI2MWU1MzUx
ODBjZmZhZC4uMGQyNDZmNTM5MzUwNTVhNjk1MDQ4NjkxNmFjMzIyN2VjYWQ0NWVhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVi
bGljOgogCiBzdHJ1Y3QgQ0NTY3JvbGxBbmRTY2FsZVNldCB7CiAgICAgVmVjdG9yPENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbz4gc2Nyb2xsczsKKyAgICBJbnRTaXplIHJv
b3RTY3JvbGxEZWx0YTsKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0YTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggMDIxODZjYWFmNWE4NWNiNTY5M2Jk
YjEzNWU4MGNiYmFkZmM5OTE2YS4uZGQ2OWE5NGZkYTZlMzExNTE3MjY4MGZlMWM5MDFiZWU2MjA2
ODFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTc2LDYg
Kzc2LDE0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQoKQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKCkKIHsKKyAgICAvLyBDaGVjayB0
aGF0IHRoZSBzY3JvbGxpbmcgbGF5ZXIgaXMgc3RpbGwgcHJlc2VudCBpbiB0aGUgdHJlZS4KKyAg
ICBpZiAobV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwpIHsKKyAgICAgICAgQ0NMYXllcklt
cGwqIHJvb3QgPSBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5nZXQoKTsKKyAgICAgICAg
d2hpbGUgKHJvb3QtPnBhcmVudCgpKQorICAgICAgICAgICAgcm9vdCA9IHJvb3QtPnBhcmVudCgp
OworICAgICAgICBpZiAocm9vdCAhPSBtX3Jvb3RMYXllckltcGwpCisgICAgICAgICAgICBtX2N1
cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigpOworICAgIH0KICAgICAvLyBSZWNvbXB1
dGUgbWF4IHNjcm9sbCBwb3NpdGlvbjsgbXVzdCBiZSBhZnRlciBsYXllciBjb250ZW50IGJvdW5k
cyBhcmUKICAgICAvLyB1cGRhdGVkLgogICAgIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CkBA
IC0xMDAsNyArMTA4LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJs
ZSBmcmFtZUJlZ2luVGltZU1zKQogICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxM
YXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVs
dGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29yZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKSkpOwogCiAgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmlt
YXRpb24tPnBhZ2VTY2FsZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNjYWxlKTsK
ICAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zm
c2V0QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpOwpAQCAtMTE5LDcgKzEyNyw3IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYg
dGFyZ2V0UG9zaXRpb24sCiAgICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsK
KyAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpICsgZmxvb3JlZEludFBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxE
ZWx0YSgpKSk7CiAgICAgc2Nyb2xsVG90YWwuc2NhbGUobV9wYWdlU2NhbGVEZWx0YSk7CiAgICAg
ZmxvYXQgc2NhbGVUb3RhbCA9IG1fcGFnZVNjYWxlICogbV9wYWdlU2NhbGVEZWx0YTsKICAgICBJ
bnRTaXplIHNjYWxlZENvbnRlbnRTaXplID0gbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClb
MF0tPmNvbnRlbnRCb3VuZHMoKTsKQEAgLTMyNiw5ICszMzQsOSBAQCBzdGF0aWMgQ0NMYXllcklt
cGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsK
ICAgICBtX3Jvb3RMYXllckltcGwgPSBsYXllcjsKLQotICAgIC8vIEZJWE1FOiBDdXJyZW50bHks
IHRoaXMgb25seSBmaW5kcyB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBsYXllci4KICAgICBtX3Njcm9s
bExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOworICAg
IGlmICghbV9yb290TGF5ZXJJbXBsKQorICAgICAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVy
SW1wbC5jbGVhcigpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUo
Ym9vbCB2aXNpYmxlKQpAQCAtMzk1LDE1ICs0MDMsMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBt
aW4KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxl
Q2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKIHsKLSAgICBpZiAocGFnZVNjYWxlQ2hhbmdl
ID09IDEpCisgICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCBwYWdlU2NhbGVDaGFuZ2UgPT0g
MSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgYWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1w
bC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxlIHNwYWNlLgotICAgIGlmIChtX3Njcm9s
bExheWVySW1wbCkgewotICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgICAgIHNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2Fs
ZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3Jv
bGxEZWx0YSk7Ci0gICAgfQorICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwtc2lk
ZSBzY3JvbGwgZGVsdGEgZm9yIHRoZSByb290IGxheWVyIHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAg
ICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEo
KTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOworICAgIG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEpCkBAIC00NDUsOSAr
NDUxLDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bigpCiAgICAgLy8gaGF2aW5nIGEgdmVydGljYWwgc2Nyb2xsYmFyIGJ1dCBubyBob3Jpem9udGFs
IG92ZXJmbG93LgogICAgIG1heFNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKKyAgICAv
LyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSByb290IGxheWVyIHNjcm9sbCByYW5nZSwgc2lu
Y2UgdGhlIGNoaWxkCisgICAgLy8gbGF5ZXJzIHVzZSB1bnNjYWxlZCBzY3JvbGwgY29vcmRpbmF0
ZXMuCiAgICAgbV9zY3JvbGxMYXllckltcGwtPnNldE1heFNjcm9sbFBvc2l0aW9uKG1heFNjcm9s
bCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6IEFsc28gdXBkYXRlIHN1YmxheWVycy4KIH0KIAog
ZG91YmxlIENDTGF5ZXJUcmVlSG9zdEltcGw6OmN1cnJlbnRUaW1lTXMoKSBjb25zdApAQCAtNDYw
LDI4ICs0NjYsMTQ3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXco
KQogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQogCi1DQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9s
bEJlZ2luKGNvbnN0IEludFBvaW50JikKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aXNDb250
ZW50UG9pbnRXaXRoaW5MYXllcihDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRQb2lu
dCYgY29udGVudFBvaW50KSBjb25zdAoreworICAgIEludFJlY3QgbGF5ZXJDb250ZW50UmVjdChs
YXllckltcGwtPnZpc2libGVMYXllclJlY3QoKSk7CisgICAgLy8gVGhlIHZpc2libGUgbGF5ZXIg
cmVjdCBpcyBpbiBzY2FsZWQgY29vcmRpbmF0ZXMsIHNvIHVuZG8gdGhlIHBhZ2Ugc2NhbGUuIE5v
dGUgdGhhdCB0aGVyZSBpcworICAgIC8vIG5vIG5lZWQgdG8gdW5kbyB0aGUgcGFnZSBzY2FsZSBk
ZWx0YSwgYmVjYXVzZSB0aGUgbGF5ZXIgY29udGVudCByZWN0IGlzIG9ubHkgc2NhbGVkIHdpdGgg
dGhlCisgICAgLy8gb3JpZ2luYWwgcGFnZSBzY2FsZS4KKyAgICBsYXllckNvbnRlbnRSZWN0LnNj
YWxlKDEgLyBtX3BhZ2VTY2FsZSk7CisgICAgcmV0dXJuIGxheWVyQ29udGVudFJlY3QuY29udGFp
bnMoY29udGVudFBvaW50KTsKK30KKworQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1
cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpblNjcm9sbGluZ0xheWVyKENDTGF5ZXJJbXBsKiBs
YXllckltcGwsIGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50KQoreworICAgIGlmICghbGF5
ZXJJbXBsKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxl
ZDsKKworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmlzSW52ZXJ0
aWJsZSgpKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxl
ZDsKKworICAgIEludFBvaW50IGNvbnRlbnRQb2ludChsYXllckltcGwtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHZpZXdwb3J0UG9pbnQpKTsKKyAgICBpZiAobGF5
ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSAmJiAhaXNDb250ZW50UG9pbnRXaXRoaW5MYXllcihsYXll
ckltcGwsIGNvbnRlbnRQb2ludCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsRmFpbGVkOworCisgICAgaWYgKCFsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAg
ICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworCisgICAg
bV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSBsYXllckltcGw7CisgICAgcmV0dXJuIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOworfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmNvbGxlY3RBbGxMYXllcnMoQ0NMYXllckxpc3QmIGxheWVycywgQ0NMYXllcklt
cGwqIGxheWVySW1wbCkKK3sKKyAgICBsYXllcnMuYXBwZW5kKGxheWVySW1wbCk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkg
eworICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBsYXllckltcGwtPmNoaWxkcmVuKClbaV0u
Z2V0KCk7CisgICAgICAgIGNvbGxlY3RBbGxMYXllcnMobGF5ZXJzLCBjaGlsZCk7CisgICAgfQor
fQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbGxlY3ROb25EcmF3aW5nU2Nyb2xsYWJs
ZUxheWVycyhDQ0xheWVyTGlzdCYgbGF5ZXJzLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQorewor
ICAgIGlmICghbGF5ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllckltcGwtPnNjcm9sbGFi
bGUoKSkKKyAgICAgICAgbGF5ZXJzLmFwcGVuZChsYXllckltcGwpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgQ0NMYXllckltcGwqIGNoaWxkID0gbGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpOwor
ICAgICAgICBpZiAoY2hpbGQtPmRyYXdzQ29udGVudCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNvbGxlY3ROb25EcmF3aW5nU2Nyb2xsYWJsZUxheWVycyhsYXllcnMsIGNoaWxk
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdExheWVyc0lu
UGFpbnRPcmRlcihDQ0xheWVyTGlzdCYgbGF5ZXJzLCBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1
cmZhY2UpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJTdXJmYWNlLT5sYXll
ckxpc3QoKS5zaXplKCk7ICsraSkgeworICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0g
cmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KClbaV0uZ2V0KCk7CisgICAgICAgIGlmIChsYXllcklt
cGwtPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllckltcGwtPnJlbmRlclN1cmZhY2UoKSAhPSByZW5k
ZXJTdXJmYWNlKSB7CisgICAgICAgICAgICBjb2xsZWN0TGF5ZXJzSW5QYWludE9yZGVyKGxheWVy
cywgbGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgbGF5ZXJzLmFwcGVuZChsYXllckltcGwpOworICAgICAgICBjb2xs
ZWN0Tm9uRHJhd2luZ1Njcm9sbGFibGVMYXllcnMobGF5ZXJzLCBsYXllckltcGwpOworICAgIH0K
K30KKworQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCkKIHsKLSAgICAv
LyBUT0RPOiBDaGVjayBmb3Igc2Nyb2xsYWJsZSBzdWJsYXllcnMuCi0gICAgaWYgKCFtX3Njcm9s
bExheWVySW1wbCB8fCAhbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbGFibGUoKSkKLSAgICAgICAg
cmV0dXJuIFNjcm9sbElnbm9yZWQ7CisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwu
Y2xlYXIoKTsKKworICAgIGlmICghcm9vdExheWVyKCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKIAotICAgIHJldHVybiBTY3JvbGxTdGFydGVk
OworICAgIENDTGF5ZXJMaXN0IGxheWVyczsKKyAgICBpZiAocm9vdExheWVyKCktPnJlbmRlclN1
cmZhY2UoKSkgeworICAgICAgICBjb2xsZWN0Tm9uRHJhd2luZ1Njcm9sbGFibGVMYXllcnMobGF5
ZXJzLCByb290TGF5ZXIoKSk7CisgICAgICAgIGNvbGxlY3RMYXllcnNJblBhaW50T3JkZXIobGF5
ZXJzLCByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBJbiBzb21lIHRlc3RzIHdlIGRvIG5vdCBoYXZlIGEgcmVuZGVyIHN1cmZhY2UuCisgICAg
ICAgIGNvbGxlY3RBbGxMYXllcnMobGF5ZXJzLCByb290TGF5ZXIoKSk7CisgICAgfQorCisgICAg
Ly8gTG9vayBmb3IgYSBzY3JvbGxhYmxlIGxheWVyIGluIGZyb250IHRvIGJhY2sgb3JkZXIuCisg
ICAgZm9yIChpbnQgaSA9IGxheWVycy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAg
ICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gbGF5ZXJzW2ldLmdldCgpOworICAgICAgICBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHN0YXR1cyA9IGJlZ2luU2Nyb2xsaW5nTGF5
ZXIobGF5ZXJJbXBsLCB2aWV3cG9ydFBvaW50KTsKKyAgICAgICAgLy8gSGl0dGluZyBhIG5vbi1z
Y3JvbGxhYmxlIGFuZCBub24tY29udGVudC1kcmF3aW5nIG9yIG5vbi1jb21wb3NpdGVkIGNvbnRl
bnQgbGF5ZXIgc2hvdWxkCisgICAgICAgIC8vIG5vdCB0ZXJtaW5hdGUgdGhlIHNlYXJjaCwgYmVj
YXVzZSBpdCB3b3VsZCBjYXVzZSB1cyB0byBpZ25vcmUgdGhlIG91dGVyIHNjcm9sbGluZyBsYXll
cgorICAgICAgICAvLyBmb3IgdGhlIHJvb3QgbGF5ZXIuCisgICAgICAgIGlmIChzdGF0dXMgPT0g
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQgJiYgKCFsYXllckltcGwtPmRyYXdz
Q29udGVudCgpIHx8IGxheWVySW1wbC0+aXNOb25Db21wb3NpdGVkQ29udGVudCgpKSkKKyAgICAg
ICAgICAgIHN0YXR1cyA9IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisgICAg
ICAgIGlmIChzdGF0dXMgIT0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHJldHVybiBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
Y3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAoIW1fc2Ny
b2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShzY3JvbGxE
ZWx0YSk7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0gICAg
bV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgSW50U2l6ZSBwZW5k
aW5nRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBtX2N1
cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5nZXQoKTsKKyAgICB3aGlsZSAobGF5ZXJJbXBsICYm
ICFwZW5kaW5nRGVsdGEuaXNaZXJvKCkpIHsKKyAgICAgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xs
YWJsZSgpKSB7CisgICAgICAgICAgICBGbG9hdFNpemUgcHJldmlvdXNEZWx0YShsYXllckltcGwt
PnNjcm9sbERlbHRhKCkpOworICAgICAgICAgICAgRmxvYXRTaXplIHNjYWxlZFBlbmRpbmdEZWx0
YShwZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgLy8gU2luY2Ugc2Nyb2xsRGVsdGEgaXMgaW4g
d2luZG93IGNvb3JkaW5hdGVzLCBpdCBhbHJlYWR5IGhhcyB0aGUgcGFnZSBzY2FsZSBhcHBsaWVk
LgorICAgICAgICAgICAgLy8gVGhpcyBtYXRjaGVzIHdoYXQgdGhlIHJvb3Qgc2Nyb2xsIGxheWVy
IGV4cGVjdHMsIGJ1dCBjaGlsZCBsYXllcnMgYXJlIHNjcm9sbGVkIHVzaW5nCisgICAgICAgICAg
ICAvLyB1bnNjYWxlZCBjb250ZW50IGNvb3JkaW5hdGVzIGluc3RlYWQsIHNvIHdlIGhhdmUgdG8g
dW5kbyB0aGUgc2NhbGluZyBmb3IgdGhlbS4gVGhlCisgICAgICAgICAgICAvLyBwYWdlIHNjYWxl
IGRlbHRhIG5lZWRzIHRvIGJlIHVuYXBwbGllZCB3aXRoIGJvdGggbGF5ZXIgdHlwZXMgc2luY2Ug
dGhlIHNjcm9sbAorICAgICAgICAgICAgLy8gY29vcmRpbmF0ZXMgZG8gbm90IHJlc3BlY3QgaXQu
CisgICAgICAgICAgICBpZiAobGF5ZXJJbXBsID09IG1fc2Nyb2xsTGF5ZXJJbXBsKSB7CisgICAg
ICAgICAgICAgICAgc2NhbGVkUGVuZGluZ0RlbHRhLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRh
KTsKKyAgICAgICAgICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHNjYWxlZFBlbmRpbmdEZWx0
YSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjYWxlZFBlbmRpbmdE
ZWx0YS5zY2FsZSgxIC8gKG1fcGFnZVNjYWxlICogbV9wYWdlU2NhbGVEZWx0YSkpOworICAgICAg
ICAgICAgICAgIGxheWVySW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVuZGluZ0RlbHRhKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIHNjcm9sbCBkZWx0YSB0
byB6ZXJvIGlmIHRoZSBsYXllciB3YXMgYWJsZSB0byBtb3ZlIGFsb25nIHRoZSByZXF1ZXN0ZWQK
KyAgICAgICAgICAgIC8vIGF4aXMuIFRoaXMgaXMgdG8gZW5zdXJlIGl0IGlzIHBvc3NpYmxlIHRv
IHNjcm9sbCBleGFjdGx5IHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEKKyAgICAgICAgICAg
IC8vIHNjcm9sbCBhcmVhIHJlZ2FyZGxlc3Mgb2YgdGhlIHNjcm9sbCBzdGVwLiBGb3IgZGlhZ29u
YWwgc2Nyb2xscyB0aGlzIGFsc28gYXZvaWRzIGFwcGx5aW5nCisgICAgICAgICAgICAvLyB0aGUg
c2Nyb2xsIG9uIG9uZSBheGlzIHRvIG11bHRpcGxlIGxheWVycy4KKyAgICAgICAgICAgIGlmIChw
cmV2aW91c0RlbHRhLndpZHRoKCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLndpZHRoKCkp
CisgICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldFdpZHRoKDApOworICAgICAgICAgICAg
aWYgKHByZXZpb3VzRGVsdGEuaGVpZ2h0KCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmhl
aWdodCgpKQorICAgICAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRIZWlnaHQoMCk7CisgICAg
ICAgIH0KKyAgICAgICAgbGF5ZXJJbXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKTsKKyAgICB9CisK
KyAgICBpZiAocGVuZGluZ0RlbHRhICE9IHNjcm9sbERlbHRhKSB7CisgICAgICAgIG1fY2xpZW50
LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICBtX2NsaWVudC0+c2V0TmVl
ZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2Nyb2xsRW5kKCkKIHsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5j
bGVhcigpOwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmhhdmVXaGVlbEV2ZW50SGFu
ZGxlcnMoKQpAQCAtNTI0LDI1ICs2NDksNDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpw
aW5jaEdlc3R1cmVFbmQoKQogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVh
ZCgpOwogfQogCitzdGF0aWMgYm9vbCBkaWRTY3JvbGxTdWJ0cmVlKENDTGF5ZXJJbXBsKiBsYXll
ckltcGwpCit7CisgICAgaWYgKCFsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcklt
cGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChkaWRTY3JvbGxTdWJ0cmVl
KGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
b2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIENDTGF5
ZXJJbXBsKiBsYXllckltcGwpIGNvbnN0Cit7CisgICAgaWYgKCFsYXllckltcGwtPnNjcm9sbERl
bHRhKCkuaXNaZXJvKCkpIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IHRvU2l6ZShm
bG9vcmVkSW50UG9pbnQobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKSk7CisgICAgICAgIGlmIChs
YXllckltcGwgIT0gbV9zY3JvbGxMYXllckltcGwpIHsKKyAgICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7CisgICAgICAgICAgICBzY3JvbGwu
bGF5ZXJJZCA9IGxheWVySW1wbC0+aWQoKTsKKyAgICAgICAgICAgIHNjcm9sbC5zY3JvbGxEZWx0
YSA9IHNjcm9sbERlbHRhOworICAgICAgICAgICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQo
c2Nyb2xsKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JvbGxJbmZvLT5yb290U2Ny
b2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xs
RGVsdGEobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAg
Y29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLCBsYXllckltcGwtPmNoaWxkcmVuKClbaV0u
Z2V0KCkpOworfQorCiBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVl
SG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogewogICAgIE93blB0cjxDQ1Njcm9sbEFu
ZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gYWRvcHRQdHIobmV3IENDU2Nyb2xsQW5kU2NhbGVTZXQo
KSk7Ci0gICAgYm9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKCFtX3Njcm9sbExh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDEu
MGYpOworICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsICYmIChkaWRTY3JvbGxT
dWJ0cmVlKG1fc2Nyb2xsTGF5ZXJJbXBsLmdldCgpKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDEp
OwogICAgIGlmICghZGlkTW92ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2ZSB8fCBtX3BhZ2VTY2Fs
ZUFuaW1hdGlvbikgewogICAgICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8t
PnBhZ2VTY2FsZURlbHRhID0gMTsKICAgICAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgp
OwogICAgIH0KIAorICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mby5nZXQoKSwgbV9z
Y3JvbGxMYXllckltcGwuZ2V0KCkpOwogICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xs
SW5mby0+cGFnZVNjYWxlRGVsdGEgPSBtX3BhZ2VTY2FsZURlbHRhOwogCi0gICAgLy8gRklYTUU6
IHRyYWNrIHNjcm9sbHMgZnJvbSBsYXllcnMgb3RoZXIgdGhhbiB0aGUgcm9vdAotICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxh
eWVySWQgPSBtX3Njcm9sbExheWVySW1wbC0+aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEg
PSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKLSAgICBzY3JvbGxJbmZvLT5zY3Jv
bGxzLmFwcGVuZChzY3JvbGwpOwotCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3Jv
bGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOwotCiAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVs
ZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZTRk
MDA2ZDRmODZlOWMyNmNlNzFjYjdlZTRmYWFhMWI5NzVmNzQ0YS4uODk5NDdjZDFmYTFkYTJhNDY5
ZWVhYmRjMjZlYzlkMTE0MGU1ZGEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaApAQCAtMTM1LDEwICsxMzUsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRyYWNrRGFtYWdl
Rm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBh
c3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CiAgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBhc3NlcyhD
Q1JlbmRlclBhc3NMaXN0Jik7CisgICAgYm9vbCBpc0NvbnRlbnRQb2ludFdpdGhpbkxheWVyKEND
TGF5ZXJJbXBsKiwgY29uc3QgSW50UG9pbnQmIGNvbnRlbnRQb2ludCkgY29uc3Q7CisgICAgc3Rh
dGljIHZvaWQgY29sbGVjdExheWVyc0luUGFpbnRPcmRlcihDQ0xheWVyTGlzdCYsIENDUmVuZGVy
U3VyZmFjZSopOworICAgIHN0YXRpYyB2b2lkIGNvbGxlY3ROb25EcmF3aW5nU2Nyb2xsYWJsZUxh
eWVycyhDQ0xheWVyTGlzdCYsIENDTGF5ZXJJbXBsKik7CisgICAgc3RhdGljIHZvaWQgY29sbGVj
dEFsbExheWVycyhDQ0xheWVyTGlzdCYsIENDTGF5ZXJJbXBsKik7CisgICAgU2Nyb2xsU3RhdHVz
IGJlZ2luU2Nyb2xsaW5nTGF5ZXIoQ0NMYXllckltcGwqLCBjb25zdCBJbnRQb2ludCYgdmlld3Bv
cnRQb2ludCk7CisgICAgdm9pZCBjb2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVT
ZXQqLCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5
ZXJJbXBsOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9zY3JvbGxMYXllckltcGw7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKICAgICBD
Q1NldHRpbmdzIG1fc2V0dGluZ3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBi
b29sIG1fdmlzaWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5k
ZXggNzJiZWMyYTcxNjY0YWY0M2NkNjRkMDE0ZDI4Yjg0MjY1MDk1YjIwMy4uYTZjYTZmNzAyMTI3
ZWM3MmU5NjY1OWIwY2ZjMmQ3YzAwYmFkNzY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5jcHAKQEAgLTE2NSw2ICsxNjUsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OmRvQ29tbWl0KCkKICAgICAgICAgLy8gSW4gdGhlIHNpbmdsZS10aHJlYWRlZCBjYXNlLCB0
aGUgc2Nyb2xsIGRlbHRhcyBzaG91bGQgbmV2ZXIgYmUKICAgICAgICAgLy8gdG91Y2hlZCBvbiB0
aGUgaW1wbCBsYXllciB0cmVlLgogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4g
c2Nyb2xsSW5mbyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsK
KyAgICAgICAgQVNTRVJUKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSk7CiAg
ICAgICAgIEFTU0VSVCghc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCkpOwogI2VuZGlmCiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApp
bmRleCA1ZjI4NTFiYjU4NzdjOWZmNzQyNmQ3YThjMWU1ZDEzODY0ZmEwMmNmLi45NTNkYmI3ODgx
ZTM0ODUxNmZjZWU3MzA1NjY3ODhkNWU1MDgzZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1
ZGUgIkdlb2xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJJY29uLmgiCkBAIC04NjgsNiArODY5LDI4IEBAIGJvb2wgQ2hyb21lQ2xpZW50SW1w
bDo6cGFpbnRDdXN0b21PdmVyaGFuZ0FyZWEoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIENocm9tZUNsaWVudEltcGw6OmFkZE9y
VXBkYXRlU2Nyb2xsaW5nTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIFNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIGxheWVyQ2hy
b21pdW0gPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihsYXllcik7CisgICAg
bGF5ZXJDaHJvbWl1bS0+c2V0U2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEpOworCisgICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciA9IGxheWVyLT5wbGF0Zm9ybUxheWVyKCk7Cisg
ICAgcGxhdGZvcm1MYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBwbGF0Zm9ybUxheWVy
LT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7Cisg
ICAgcGxhdGZvcm1MYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZShzY3JvbGxhYmxl
QXJlYS0+c2Nyb2xsU2l6ZShIb3Jpem9udGFsU2Nyb2xsYmFyKSwgc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpKSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1w
bDo6cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3Jh
cGhpY3NMYXllckNocm9taXVtKiBsYXllckNocm9taXVtID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NM
YXllckNocm9taXVtKj4obGF5ZXIpOworICAgIGxheWVyQ2hyb21pdW0tPnNldFNjcm9sbGFibGVB
cmVhKDApOworCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciA9IGxheWVyLT5wbGF0
Zm9ybUxheWVyKCk7CisgICAgcGxhdGZvcm1MYXllci0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7Cisg
ICAgcGxhdGZvcm1MYXllci0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoKSk7CisgICAgcGxh
dGZvcm1MYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgpKTsKK30KKwogLy8gRklY
TUU6IFJlbW92ZSBDaHJvbWVDbGllbnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9u
Rm9yRnJhbWUgYW5kIENocm9tZUNsaWVudEltcGw6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RGb3JGcmFtZQogLy8gb25jZSBhbGwgcG9ydHMgaGF2ZSBtb3ZlZCB0byBjbGllbnQt
YmFzZWQgZ2VvbG9jYXRpb24gKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDAzNzMgKS4KIC8vIEZvciBjbGllbnQtYmFzZWQgZ2VvbG9jYXRpb24sIHRoZXNlIG1l
dGhvZHMgYXJlIG5vdyBpbXBsZW1lbnRlZCBhcyBXZWJHZW9sb2NhdGlvbkNsaWVudDo6cmVxdWVz
dFBlcm1pc3Npb24gYW5kIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpjYW5jZWxQZXJtaXNzaW9uUmVx
dWVzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApp
bmRleCAyMTEzZWMxYWY0ZjgxZDdkMTliZWNhNjUxODczMjMyMTc3YWM0N2RkLi5jMTQyYWZiZDE2
ZmI0YjMzN2NkOWM1ZDMwMWU2YTUzZWFhMjU4MDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCkBAIC00NCw5ICs0NCwxMSBAQCBjbGFzcyBDb2xv
ckNob29zZXJDbGllbnQ7CiAjZW5kaWYKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGaWxlQ2hvb3Nl
cjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBQb3B1cENvbnRhaW5lcjsKIGNsYXNzIFBv
cHVwTWVudUNsaWVudDsKIGNsYXNzIFJlbmRlckJveDsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOwog
Y2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7CiB9CkBAIC0xNjcs
NiArMTY5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJTeW5jKCk7CiAKICAgICB2aXJ0dWFsIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93
ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkT3JV
cGRhdGVTY3JvbGxpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWEqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBXZWJDb3JlOjpOb2RlKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCmluZGV4IGVhMDgz
ZGU1NjJhN2VmYWEwYWY0ZDhlYzIyZTJhMDBkZTc1Y2Y2NjYuLjlhMjMxZTY2NjgxOTEyZjkyNzdl
MWZmMzNiNzI2YTVmZTQxYmIyYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC03Miw0ICs3Miw4IEBAIHZvaWQgV2ViQ29u
dGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJ
bnRSZWN0JiBjbGlwCiAgICAgbV9jb250ZW50Q2xpZW50LT5wYWludENvbnRlbnRzKGNhbnZhcywg
V2ViUmVjdChjbGlwKSk7CiB9CiAKK3ZvaWQgV2ViQ29udGVudExheWVySW1wbDo6c2Nyb2xsQnko
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCmlu
ZGV4IGJjMWUyNjAwODhiNDc4OTI4OWUyNWVhNDlkNDM4M2M3ZTAyMTdiNjIuLjVkYmUzZjA3OGFm
NDY0NTYwZjVjMTc5NjIxYjNlMzUzZWQzMDdlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKQEAgLTQyLDYgKzQyLDcgQEAgcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IFdlYkNvbnRlbnRMYXllckltcGwoV2ViQ29udGVudExheWVyQ2xp
ZW50KiBjb250ZW50Q2xpZW50KTsKICAgICB2aXJ0dWFsIH5XZWJDb250ZW50TGF5ZXJJbXBsKCk7
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9s
bEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKIAogICAgIFdlYkNvbnRlbnRMYXllckNsaWVu
dCogbV9jb250ZW50Q2xpZW50OwogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJ
bXBsLmNwcAppbmRleCA0ZDQzOWZkNDM0YmVjM2Y1MTY0OTlkYWI0MTMzNTJjNGNkNmQxMmE4Li45
YjM0YTYzMjU3N2Q3MWM1NThiYzRiZTVmY2IzZGQ0OGI5ZWY5MTNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1w
bC5jcHAKQEAgLTU5LDQgKzU5LDggQEAgdm9pZCBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6
OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYKIHsKIH0KIAor
dm9pZCBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmgK
aW5kZXggMWFkMmI4MTk5OGYzMGRmNmM5ZWNhMDkzYTBjMmZmNWFiZWU5MWNlYS4uOWNjYjc3ZTQ2
YTY3NmJjODRkYTY0M2FlYTJhMDE3N2VmNmFkZThlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmgKQEAgLTQw
LDYgKzQwLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfldlYkV4dGVybmFsVGV4dHVyZUxh
eWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwogICAgIHZpcnR1YWwg
Ym9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcAppbmRleCAwN2ExNjJkNjQx
YWNiYjViOWE0MWFjZWUyNmQ3MTA2NTM2NjRkNjVhLi42N2NlNTM3NmY3MWZlY2VmZTQwMjMyZWZj
MDgzNjdhYmNjYWEwYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
SW1wbC5jcHAKQEAgLTUyLDQgKzUyLDggQEAgdm9pZCBXZWJMYXllckltcGw6OnBhaW50Q29udGVu
dHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkKIHsKIH0KIAordm9pZCBX
ZWJMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmKQoreworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKaW5k
ZXggNmJkYTgzZjU0N2MzMTg1MGEwYTdiMDljMTUzMmEyOWU2YmMyODViZC4uZmVhZmVlNjMxZTk0
YzVjMTI0NThkYjQ4OGFkNmRkZWY0NzAyYTA5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXJJbXBsLmgKQEAgLTM5LDYgKzM5LDcgQEAgcHJvdGVjdGVkOgogICAgIFdlYkxh
eWVySW1wbCgpOwogICAgIHZpcnR1YWwgfldlYkxheWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzY3JvbGxEZWx0YSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHAKaW5kZXggOWI4N2QwMGZhNmJmMDZhZTg3YzVmOTQxMmExNzE1ZGIzZjliZDBk
ZS4uNWRlYTZkZWUwZGIxZGUwZTVkZDA4YWI0OTdiMWE2MWEyMTAxZmY5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHAKQEAgLTEyNSwxNiArMTI1LDE2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc2Nyb2xsRGVsdGFSZXBlYXRlZFNjcm9sbHMpCiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2Nh
bGVTZXQ+IHNjcm9sbEluZm87CiAKICAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vz
c1Njcm9sbERlbHRhcygpOwotICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUo
KSwgMXUpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMHUpOwog
ICAgIEVYUEVDVF9FUShyb290LT5zZW50U2Nyb2xsRGVsdGEoKSwgc2Nyb2xsRGVsdGEpOwotICAg
IGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCByb290LT5pZCgpLCBzY3JvbGxEZWx0
YSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgc2Nyb2xsRGVs
dGEpOwogCiAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTIoLTUsIDI3KTsKICAgICByb290LT5zY3Jv
bGxCeShzY3JvbGxEZWx0YTIpOwogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNz
U2Nyb2xsRGVsdGFzKCk7Ci0gICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgp
LCAxdSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7CiAg
ICAgRVhQRUNUX0VRKHJvb3QtPnNlbnRTY3JvbGxEZWx0YSgpLCBzY3JvbGxEZWx0YSArIHNjcm9s
bERlbHRhMik7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHJvb3QtPmlk
KCksIHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5m
by0+cm9vdFNjcm9sbERlbHRhLCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7CiAKICAgICBy
b290LT5zY3JvbGxCeShJbnRTaXplKCkpOwogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5w
cm9jZXNzU2Nyb2xsRGVsdGFzKCk7CkBAIC0xNTUsNiArMTU1LDk0IEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0QW5kUmVkcmF3KQogICAgIEVY
UEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7CiB9CiAKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsUm9vdElnbm9yZWQpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxl
KGZhbHNlKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgRVhQRUNU
X0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RS
ZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRBbmRSZWRy
YXcpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBjaGlsZC0+c2V0U2Ny
b2xsYWJsZSh0cnVlKTsKKyAgICBjaGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgx
MDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQt
PnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkp
KTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExh
eWVyKHJvb3QpOworCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1f
aG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3Jv
bGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVD
VF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hpbGQpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZh
bHNlKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgxKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBjaGlsZC0+c2V0TWF4
U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIEVYUEVDVF9FUShtX2hvc3RJ
bXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7Cisg
ICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJv
b3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
SW50U2l6ZSgxMDAsIDEwMCkpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAg
ICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgx
MCwgMTApKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworCisgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0
ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMiwgMSwgMik7CisKKyAgICAvLyBUaGUg
c2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSByb290IHNjcm9sbCBkZWx0YS4KKyAgICBPd25QdHI8
Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3Jv
bGxEZWx0YXMoKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBJ
bnRTaXplKHNjcm9sbERlbHRhLndpZHRoKCkgKiAyLCBzY3JvbGxEZWx0YS5oZWlnaHQoKSAqIDIp
KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENo
YW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gc2Nyb2xsUm9vdCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgc2Nyb2xsUm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgy
KTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBjaGlsZC0+c2V0TWF4U2Ny
b2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICByb290LT5hZGRDaGlsZChzY3JvbGxSb290KTsK
KyAgICBzY3JvbGxSb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9v
dExheWVyKHNjcm9sbFJvb3QpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7Cisg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9s
bEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMoMiwgMSwgMik7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIG5vdCBhcHBseSB0byB0
aGUgY2hpbGQgc2Nyb2xsIGRlbHRhLgorICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBz
Y3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIGV4cGVj
dENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBjaGlsZC0+aWQoKSwgc2Nyb2xsRGVsdGEpOwor
fQorCiBjbGFzcyBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0QgewogcHVibGljOgogICAgIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dCgpIDog
bV9ibGVuZChmYWxzZSkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBiZmExYjA4MjIyZTdlYmQwZmJkZTdmOTgw
ZTEyN2RjNDBmYTBjNDJhLi4xNzlmNWZkMDU1OWRmNDAwMDM5ZTA3ODM0MzEwNmFiNWViZTJlODI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKQEAgLTkxMiw2ICs5MTIsMTIxIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RU
ZXN0U2V0VmlzaWJsZSwgcnVuTXVsdGlUaHJlYWQpCiAgICAgcnVuVGVzdCh0cnVlKTsKIH0KIAor
Y2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0VGVzdFRocmVhZE9ubHkgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3Qo
KQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6
ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXIgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgx
MCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7
CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXpl
KDEwMCwgMTAwKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZENo
aWxkKG1fcm9vdFNjcm9sbExheWVyKTsKKyAgICAgICAgbV9jaGlsZExheWVyID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDUwLCA1MCkpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7Cisg
ICAgICAgIG1fY2hpbGRMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+YWRkQ2hpbGQobV9jaGlsZExheWVyKTsK
KyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVs
dGEsIGZsb2F0KQorICAgIHsKKyAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBtX3Jvb3RTY3Jv
bGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNl
dFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbV9yb290U2Nyb2xsTGF5ZXI7Cit9OworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllciA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7Citw
dWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIoKQorICAgICAg
ICA6IG1fc2Nyb2xsQW1vdW50KDIsIDEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7
CisgICAgICAgIEVYUEVDVF9FUShtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwg
SW50UG9pbnQoKSk7CisgICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5mcmFtZU51bWJlcigp
KQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwg
SW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxk
TGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkgKyBtX3Njcm9sbEFtb3VudCk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9
PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
NSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgICAg
ICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAgICBpbXBsLT5zY3Jv
bGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDIpCisg
ICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBJbnRTaXpl
IG1fc2Nyb2xsQW1vdW50OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyLCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsKK30K
KworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7CitwdWJsaWM6CisgICAgQ0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCgpCisgICAgICAgIDog
bV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKDMsIDYpCisgICAgICAgICwgbV9pbml0aWFsQ2hp
bGRTY3JvbGxQb3NpdGlvbigyMCwgMCkKKyAgICAgICAgLCBtX3Njcm9sbEFtb3VudCgtMjUsIC01
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7Cisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjpiZWdpblRlc3QoKTsKKyAgICAg
ICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbFJvb3RTY3Jv
bGxQb3NpdGlvbik7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9p
bml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJl
Z2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAg
ICAgICBDQ0xheWVySW1wbCogcm9vdCA9IGltcGwtPnJvb3RMYXllcigpOworICAgICAgICAgICAg
Q0NMYXllckltcGwqIHNjcm9sbFJvb3QgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAg
ICAgICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gc2Nyb2xsUm9vdC0+Y2hpbGRyZW4oKVswXS5n
ZXQoKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGlsZC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9p
bml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoY2hpbGQt
PnNjcm9sbERlbHRhKCksIEludFNpemUoLTIwLCAwKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
c2Nyb2xsUm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9u
KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxSb290LT5zY3JvbGxEZWx0YSgpLCBJbnRT
aXplKDAsIC01KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xh
eWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAg
IGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShp
bXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGFydGVkKTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50
KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgpOworICAgICAgICB9IGVsc2UgaWYgKGlt
cGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9Citw
cml2YXRlOgorICAgIGNvbnN0IEludFBvaW50IG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbjsK
KyAgICBjb25zdCBJbnRQb2ludCBtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uOworICAgIGNv
bnN0IEludFNpemUgbV9zY3JvbGxBbW91bnQ7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAg
cnVuVGVzdFRocmVhZGVkKCk7Cit9CisKIGNsYXNzIFRlc3RPcGFjaXR5Q2hhbmdlTGF5ZXJEZWxl
Z2F0ZSA6IHB1YmxpYyBDQ0xheWVyRGVsZWdhdGUgewogcHVibGljOgogICAgIFRlc3RPcGFjaXR5
Q2hhbmdlTGF5ZXJEZWxlZ2F0ZShDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQpAQCAtOTI2LDYg
KzEwNDEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIHByZXNlcnZlczNE
KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50
U2l6ZSYpIHsgfQogCiBwcml2YXRlOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122041</attachid>
            <date>2012-01-11 09:47:14 -0800</date>
            <delta_ts>2012-01-12 06:24:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120111174713.patch</filename>
            <type>text/plain</type>
            <size>48649</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjhkODE3OGViYjBjMzc1
OTc4NDBlNjdhNjljZDAzZWZiOGNiOGMxMy4uYmJiMzdhMTU5NzhjYmI1YmY4OGUwZDI4ZTMyNzgy
NGViMjFhMzk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDEyLTAxLTExICBBbGV4YW5k
cnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAgICAgICBDU1MgRmlsdGVyczog
YXBwbHkgdGhlIGZpbHRlcnMgaW4gUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllciB3
aGVuIGZpbHRlcnMgY2Fubm90IGJlIGNvbXBvc2l0ZWQgaW4gaGFyZHdhcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMGYzZDdlZjQyZWMzM2M5M2ZiZWY4YjZmNzlmZDMwZDMxN2NkOWMx
YS4uZDcwMWUzYTdhMmE3OGIwYjI4NjZiNzNkMDg3MzE5OWFhZjQ5MmMwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMS0xMi0wOSAgU2FtaSBLeW9zdGls
YSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVu
dCBsYXllciBzY3JvbGxpbmcgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAorCisgICAgICAgIFRoaXMg
cGF0Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRo
cmVhZC4KKyAgICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Ny
b2xsZWQgQ0NMYXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgV2ViVmll
d0ltcGwgaW4gdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAgIElmIGEgbGF5ZXIgaGFzIG5vIHJv
b20gdG8gc2Nyb2xsIGluIGEgZ2l2ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCisgICAgICAgIGFu
Y2VzdG9yIGxheWVycyBpcyBzY3JvbGxlZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3Jt
L1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaDoKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmFkZE9yVXBkYXRlU2Ny
b2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZW1vdmVT
Y3JvbGxpbmdMYXllcik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAg
ICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllclRyZWVWaWV3SW1wbDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAg
ICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0lt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxp
bmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVTY3JvbGxpbmdM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2Nh
bGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL0NDTGF5
ZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6
CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6
OlRlc3RIb29rczo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6
OlRlc3RIb29rczo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50OjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdU
Rjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlOjphcHBseVJvb3RMYXllclNjcm9s
bEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRp
cGxlUmVkcmF3OjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNj
YWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5
TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFz
ZTo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJh
c2U6OmFwcGx5U2Nyb2xsVG9DaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6
OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyOjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6
OlRFU1RfRik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyQmV5b25kTGltaXQ6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25k
TGltaXQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
ckJleW9uZExpbWl0OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExp
bWl0OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisKIDIwMTItMDEtMTEgIEpvY2hlbiBFaXNpbmdl
ciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTW92ZSB0aGUgY2hlY2sgZm9yIGNh
bkV4ZWN1dGVTY3JpcHRzIG91dCBvZiBWOFByb3h5OjpyZXRyaWV2ZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjdlMDVmOGRjZTRhZmNiMGU4MjI1YzkyY2ZlNTQ0
ZDMzMTFkMDk5YS4uNDljOGI4MDM3ZmY0NjVmMDNmYWQzZTQ3NzU5OTYwN2QwMWUzMGNjZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw3IEBACiAj
aW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEu
aCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KQEAgLTcwLDYgKzcxLDcgQEAgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xh
eWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogCiBHcmFwaGljc0xheWVy
Q2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGll
bnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKKyAgICAsIG1fc2Nyb2xsYWJsZUFyZWEo
MCkKICAgICAsIG1fY29udGVudHNMYXllclB1cnBvc2UoTm9Db250ZW50c0xheWVyKQogICAgICwg
bV9jb250ZW50c0xheWVySGFzQmFja2dyb3VuZENvbG9yKGZhbHNlKQogICAgICwgbV9pblNldENo
aWxkcmVuKGZhbHNlKQpAQCAtNjgyLDYgKzY4NCwxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJl
YwogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOwogfQogCit2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEpCit7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggZGZhMTA5ZDNlMDM5ZTcw
YTZkNWZkZTg3ZWFmNzY4MTQzMDEzYWJiNy4uNTBhYzJlNTJjN2E3Njk0YzA1ODM2YjEyN2NkNjQ5
NDdmYThiMDliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTQwLDYg
KzQwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKK2Ns
YXNzIFNjcm9sbGFibGVBcmVhOwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ2hyb21pdW0gOiBwdWJs
aWMgR3JhcGhpY3NMYXllciwgcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CkBAIC05
OSw2ICsxMDAsMTAgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMg
aW1wbGVtZW50IHRoZSBDQ0xheWVyRGVsZWdhdGUgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOwor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CisK
KyAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhOyB9CisgICAgdm9pZCBzZXRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWEpIHsgbV9zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhOyB9
CiAKICAgICAvLyBFeHBvc2VkIGZvciB0ZXN0cy4KICAgICBMYXllckNocm9taXVtKiBjb250ZW50
c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9CkBAIC0xMzQs
NiArMTM5LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zv
cm1MYXllcjsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVyOwogCisg
ICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7CisKICAgICBlbnVtIENvbnRlbnRz
TGF5ZXJQdXJwb3NlIHsKICAgICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAgICAgQ29u
dGVudHNMYXllckZvckltYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCAyZGYwNWI1OWNi
ODVhZDdjMDg3MDE4Y2MyNTZlZTE3NDA5NGI5YmQ1Li5lOTRkZmVkODg2ZTg2YmYxNWFlYzJkNTI4
YTU4MjNkNTAxNDU2OTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzY1LDYgKzM2NSwx
NCBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50
JiBzY3JvbGxQb3NpdGlvbikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIExheWVy
Q2hyb21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBv
c2l0aW9uKQoreworICAgIGlmIChtX21heFNjcm9sbFBvc2l0aW9uID09IG1heFNjcm9sbFBvc2l0
aW9uKQorICAgICAgICByZXR1cm47CisgICAgbV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9s
bFBvc2l0aW9uOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6c2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpCiB7CiAgICAgaWYgKG1fc2Nyb2xsYWJs
ZSA9PSBzY3JvbGxhYmxlKQpAQCAtNDMxLDYgKzQzOSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0
aW9uKG1fcG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgp
KTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAg
bGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxh
eWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKICAgICBsYXll
ci0+c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VXBkYXRlUmVjdCht
X3VwZGF0ZVJlY3QpOwpAQCAtNDg3LDYgKzQ5NiwxMyBAQCBib29sIExheWVyQ2hyb21pdW06OmRl
c2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBMYXll
ckNocm9taXVtOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBz
ZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVsdGEpOworICAgIGlm
IChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7
Cit9CisKIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0
ZXJhdG9yLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJhdG9yLCB2b2lkKikK
IHsKICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHotb3JkZXIgdG8gZGVjaWRlIHdoYXQg
dG8gcGFpbnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBhY3R1YWxseSBzb3J0IExheWVyQ2hyb21p
dW1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDg3ZjUwNTZmM2MzZWRiMDJlYmE0YTk1MTgzNGI3
YTg0M2I3ODQxMWEuLjViNDg4Y2FhMzgyOWNiNjhmNzAxMTA3NWUyMzg0ZDNiYjI2OGY1OTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgQ0NMYXllckRlbGVnYXRl
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DQ0xheWVyRGVsZWdhdGUoKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBj
bGlwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhKSA9IDA7CiB9OwogCiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxheWVycy4g
U3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCkBAIC0xMjgsOSArMTI5LDE0IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CiAg
ICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxQb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRT
aXplJik7CisgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX21heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICB2b2lkIHNldFNjcm9sbGFibGUoYm9v
bCk7CiAgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlOyB9
CiAKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKKwogICAg
IEludFNpemUgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KIAogICAg
IGZsb2F0IHBhZ2VTY2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4gMTsgfQpAQCAtMjU0LDYgKzI2
MCw3IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlz
aWJsZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOworICAgIEludFNp
emUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJsZTsKICAgICBGbG9h
dFBvaW50IG1fcG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCmluZGV4IDY4MzdmMGE1Yzg2YzU2OGU4OTNiYjViMTA0ZGVmMTY2MjBi
MzQ2YzEuLjNlODRhMDUxYjFjNjBkYjdlZmU4MmQ0NTQyMzk0ZGUyOTIwNjA4YjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKQEAgLTE0Nyw5ICsxNDcsOSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpi
aW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNp
emUmIHNjcm9sbCkKK3ZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYg
c2Nyb2xsKQogewotICAgIEludFNpemUgbmV3RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Nyb2xs
OworICAgIEZsb2F0U2l6ZSBuZXdEZWx0YSA9IG1fc2Nyb2xsRGVsdGEgKyBzY3JvbGw7CiAgICAg
SW50U2l6ZSBtaW5EZWx0YSA9IC10b1NpemUobV9zY3JvbGxQb3NpdGlvbik7CiAgICAgSW50U2l6
ZSBtYXhEZWx0YSA9IG1fbWF4U2Nyb2xsUG9zaXRpb24gLSB0b1NpemUobV9zY3JvbGxQb3NpdGlv
bik7CiAgICAgLy8gQ2xhbXAgbmV3RGVsdGEgc28gdGhhdCBwb3NpdGlvbiArIGRlbHRhIHN0YXlz
IHdpdGhpbiBzY3JvbGwgYm91bmRzLgpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgQ0NMYXllcklt
cGw6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKICAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgQ0NMYXll
ckltcGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQordm9pZCBD
Q0xheWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSkK
IHsKICAgICBpZiAobV9zY3JvbGxEZWx0YSA9PSBzY3JvbGxEZWx0YSkKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMDEzNmIwMWY4ODhhMTFkYWE5MDFmNjNiZTk5NGYy
MjIwNGNlNTU0OC4uNmE2NWU4YzBkZjBkYTQyYWNjMDBiYWI3ODljNzBhMGI2ZjRiODkxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNTgsMTYgKzE1OCwxNiBAQCBwdWJsaWM6CiAgICAgY29u
c3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7cmV0dXJuIG1fbWF4U2Nyb2xs
UG9zaXRpb247IH0KICAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUm
IG1heFNjcm9sbFBvc2l0aW9uKSB7IG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3Np
dGlvbjsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbERlbHRhOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXpl
Jik7CisgICAgY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Nyb2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYp
OwogCiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2Fs
ZURlbHRhOyB9CiAgICAgdm9pZCBzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCk7CiAKLSAgICBjb25z
dCBJbnRTaXplJiBzZW50U2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3NlbnRTY3JvbGxE
ZWx0YTsgfQotICAgIHZvaWQgc2V0U2VudFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNlbnRT
Y3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsgfQorICAg
IGNvbnN0IEZsb2F0U2l6ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50
U2Nyb2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0YShjb25zdCBGbG9hdFNp
emUmIHNlbnRTY3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0
YTsgfQogCi0gICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpOworICAgIHZv
aWQgc2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpOwogCiAgICAgYm9vbCBzY3JvbGxh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxh
YmxlKGJvb2wgc2Nyb2xsYWJsZSkgeyBtX3Njcm9sbGFibGUgPSBzY3JvbGxhYmxlOyB9CkBAIC0y
NTMsOCArMjUzLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CiAKLSAg
ICBJbnRTaXplIG1fc2Nyb2xsRGVsdGE7Ci0gICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsK
KyAgICBGbG9hdFNpemUgbV9zY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zZW50U2Nyb2xs
RGVsdGE7CiAgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGZsb2F0IG1fcGFn
ZVNjYWxlRGVsdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDg2NjNl
YzBhYzJjZGYzNmIyNDcyMjgxY2ZmYWVhMTk0MDIyNWEyM2MuLmYwMWNjZmM3MTVkNGIxMzg3NTY3
NjQxZTlmOTZlZmIyOGI2OTViZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApA
QCAtNDc5LDE1ICs0NzksMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1Vw
ZGF0ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKK3N0YXRpYyBMYXllckNocm9t
aXVtKiBmaW5kTGF5ZXJCeUlkKExheWVyQ2hyb21pdW0qIGxheWVyLCBpbnQgaWQpCit7CisgICAg
aWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPmlkKCkgPT0g
aWQpCisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSog
Zm91bmQgPSBmaW5kTGF5ZXJCeUlkKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBpZCk7Cisg
ICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2Nh
bGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVz
aGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0g
ICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFp
bmZvLnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSB8fCBpbmZvLnBhZ2VTY2FsZURlbHRhICE9IDEp
CisgICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKGluZm8ucm9vdFNjcm9sbERl
bHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6
ZSgpID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Ny
b2xsRGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEs
IGluZm8ucGFnZVNjYWxlRGVsdGEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5z
Y3JvbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gZmlu
ZExheWVyQnlJZChtX3Jvb3RMYXllci5nZXQoKSwgaW5mby5zY3JvbGxzW2ldLmxheWVySWQpOwor
ICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxheWVy
LT5zY3JvbGxCeShpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOworICAgIH0KIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDJlMGNi
Y2YyYzU4NWU4MjE1ZDI4NmRlZTliNjFlNTM1MTgwY2ZmYWQuLjBkMjQ2ZjUzOTM1MDU1YTY5NTA0
ODY5MTZhYzMyMjdlY2FkNDVlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogc3RydWN0IENDU2Nyb2xsQW5kU2Nh
bGVTZXQgewogICAgIFZlY3RvcjxDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUlu
Zm8+IHNjcm9sbHM7CisgICAgSW50U2l6ZSByb290U2Nyb2xsRGVsdGE7CiAgICAgZmxvYXQgcGFn
ZVNjYWxlRGVsdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CmluZGV4IDAyMTg2Y2FhZjVhODVjYjU2OTNiZGIxMzVlODBjYmJhZGZjOTkxNmEuLmRkNjlhOTRm
ZGE2ZTMxMTUxNzI2ODBmZTFjOTAxYmVlNjIwNjgxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC03Niw2ICs3NiwxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmJlZ2luQ29tbWl0KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRD
b21wbGV0ZSgpCiB7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc2Nyb2xsaW5nIGxheWVyIGlzIHN0
aWxsIHByZXNlbnQgaW4gdGhlIHRyZWUuCisgICAgaWYgKG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9jdXJyZW50bHlTY3JvbGxp
bmdMYXllckltcGwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChyb290LT5wYXJlbnQoKSkKKyAgICAg
ICAgICAgIHJvb3QgPSByb290LT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHJvb3QgIT0gbV9yb290
TGF5ZXJJbXBsKQorICAgICAgICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuY2xl
YXIoKTsKKyAgICB9CiAgICAgLy8gUmVjb21wdXRlIG1heCBzY3JvbGwgcG9zaXRpb247IG11c3Qg
YmUgYWZ0ZXIgbGF5ZXIgY29udGVudCBib3VuZHMgYXJlCiAgICAgLy8gdXBkYXRlZC4KICAgICB1
cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwpAQCAtMTAwLDcgKzEwOCw3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKICAgICBpZiAo
IW1fcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNj
cm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsg
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsVG90
YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBmbG9vcmVk
SW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKIAogICAgIHNldFBh
Z2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUoZnJhbWVC
ZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9w
YWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGltZU1zKTsK
QEAgLTExOSw3ICsxMjcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNj
YWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIGlmICghbV9z
Y3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90
YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRv
U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29yZWRJbnRQb2lu
dChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogICAgIHNjcm9sbFRvdGFsLnNj
YWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlVG90YWwgPSBtX3BhZ2VTY2Fs
ZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2FsZWRDb250ZW50U2l6ZSA9IG1f
c2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7CkBAIC0zMjYs
OSArMzM0LDkgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllcklt
cGwqIGxheWVyKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIoUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7
Ci0KLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhlIGZpcnN0IHNj
cm9sbGFibGUgbGF5ZXIuCiAgICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXIo
bV9yb290TGF5ZXJJbXBsLmdldCgpKTsKKyAgICBpZiAoIW1fcm9vdExheWVySW1wbCkKKyAgICAg
ICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuY2xlYXIoKTsKIH0KIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTM5NSwxNSArNDAz
LDEzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGlt
aXRzKGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgbWluCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdlU2NhbGVDaGFuZ2Up
CiB7Ci0gICAgaWYgKHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQorICAgIGlmICghbV9zY3JvbGxMYXll
ckltcGwgfHwgcGFnZVNjYWxlQ2hhbmdlID09IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8v
IFdlIGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VT
Y2FsZSBzcGFjZS4KLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwpIHsKLSAgICAgICAgSW50U2l6
ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgICAg
ICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9sbExh
eWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICAvLyBXZSBh
bHNvIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhIGZvciB0aGUgcm9vdCBs
YXllciB0byBwYWdlU2NhbGUgc3BhY2UuCisgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFn
ZVNjYWxlQ2hhbmdlKTsKKyAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Ny
b2xsRGVsdGEpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZURl
bHRhKGZsb2F0IGRlbHRhKQpAQCAtNDQ1LDkgKzQ1MSw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogICAgIC8vIGhhdmluZyBhIHZlcnRpY2Fs
IHNjcm9sbGJhciBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdy4KICAgICBtYXhTY3JvbGwuY2xh
bXBOZWdhdGl2ZVRvWmVybygpOwogCisgICAgLy8gV2Ugb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUg
cm9vdCBsYXllciBzY3JvbGwgcmFuZ2UsIHNpbmNlIHRoZSBjaGlsZAorICAgIC8vIGxheWVycyB1
c2UgdW5zY2FsZWQgc2Nyb2xsIGNvb3JkaW5hdGVzLgogICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
ZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9ETyhhZWxpYXMpOiBB
bHNvIHVwZGF0ZSBzdWJsYXllcnMuCiB9CiAKIGRvdWJsZSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
dXJyZW50VGltZU1zKCkgY29uc3QKQEAgLTQ2MCwyOCArNDY2LDE0NyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRy
YXdPbkltcGxUaHJlYWQoKTsKIH0KIAotQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1
cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYpCitib29s
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGVudFBvaW50V2l0aGluTGF5ZXIoQ0NMYXllcklt
cGwqIGxheWVySW1wbCwgY29uc3QgSW50UG9pbnQmIGNvbnRlbnRQb2ludCkgY29uc3QKK3sKKyAg
ICBJbnRSZWN0IGxheWVyQ29udGVudFJlY3QobGF5ZXJJbXBsLT52aXNpYmxlTGF5ZXJSZWN0KCkp
OworICAgIC8vIFRoZSB2aXNpYmxlIGxheWVyIHJlY3QgaXMgaW4gc2NhbGVkIGNvb3JkaW5hdGVz
LCBzbyB1bmRvIHRoZSBwYWdlIHNjYWxlLiBOb3RlIHRoYXQgdGhlcmUgaXMKKyAgICAvLyBubyBu
ZWVkIHRvIHVuZG8gdGhlIHBhZ2Ugc2NhbGUgZGVsdGEsIGJlY2F1c2UgdGhlIGxheWVyIGNvbnRl
bnQgcmVjdCBpcyBvbmx5IHNjYWxlZCB3aXRoIHRoZQorICAgIC8vIG9yaWdpbmFsIHBhZ2Ugc2Nh
bGUuCisgICAgbGF5ZXJDb250ZW50UmVjdC5zY2FsZSgxIC8gbV9wYWdlU2NhbGUpOworICAgIHJl
dHVybiBsYXllckNvbnRlbnRSZWN0LmNvbnRhaW5zKGNvbnRlbnRQb2ludCk7Cit9CisKK0NDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5T
Y3JvbGxpbmdMYXllcihDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRQb2ludCYgdmll
d3BvcnRQb2ludCkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBpZiAoIWxheWVySW1wbC0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBJbnRQb2ludCBjb250ZW50UG9p
bnQobGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2
aWV3cG9ydFBvaW50KSk7CisgICAgaWYgKGxheWVySW1wbC0+ZHJhd3NDb250ZW50KCkgJiYgIWlz
Q29udGVudFBvaW50V2l0aGluTGF5ZXIobGF5ZXJJbXBsLCBjb250ZW50UG9pbnQpKQorICAgICAg
ICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKworICAgIGlmICgh
bGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsSWdub3JlZDsKKworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBs
ID0gbGF5ZXJJbXBsOworICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb2xsZWN0QWxsTGF5ZXJzKEND
TGF5ZXJMaXN0JiBsYXllcnMsIENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgbGF5ZXJz
LmFwcGVuZChsYXllckltcGwpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcklt
cGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGNoaWxk
ID0gbGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpOworICAgICAgICBjb2xsZWN0QWxsTGF5
ZXJzKGxheWVycywgY2hpbGQpOworICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojpjb2xsZWN0Tm9uRHJhd2luZ1Njcm9sbGFibGVMYXllcnMoQ0NMYXllckxpc3QmIGxheWVycywg
Q0NMYXllckltcGwqIGxheWVySW1wbCkKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+ZHJhd3NDb250
ZW50KCkgJiYgbGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIGxheWVycy5hcHBlbmQo
bGF5ZXJJbXBsKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGls
ZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IGxheWVy
SW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKGNoaWxkLT5kcmF3c0NvbnRl
bnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb2xsZWN0Tm9uRHJhd2luZ1Nj
cm9sbGFibGVMYXllcnMobGF5ZXJzLCBjaGlsZCk7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmNvbGxlY3RMYXllcnNJblBhaW50T3JkZXIoQ0NMYXllckxpc3QmIGxheWVy
cywgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpW2ld
LmdldCgpOworICAgICAgICBpZiAobGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXJJ
bXBsLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkgeworICAgICAgICAgICAgY29s
bGVjdExheWVyc0luUGFpbnRPcmRlcihsYXllcnMsIGxheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGxheWVycy5hcHBl
bmQobGF5ZXJJbXBsKTsKKyAgICAgICAgY29sbGVjdE5vbkRyYXdpbmdTY3JvbGxhYmxlTGF5ZXJz
KGxheWVycywgbGF5ZXJJbXBsKTsKKyAgICB9Cit9CisKK0NDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4oY29uc3QgSW50UG9p
bnQmIHZpZXdwb3J0UG9pbnQpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHNjcm9sbGFibGUg
c3VibGF5ZXJzLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zY3JvbGxhYmxlKCkpCi0gICAgICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOworICAgIG1f
Y3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CisKKyAgICBpZiAoIXJvb3RMYXll
cigpKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7
CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAgICBDQ0xheWVyTGlzdCBsYXllcnM7Cisg
ICAgaWYgKHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgY29sbGVjdE5v
bkRyYXdpbmdTY3JvbGxhYmxlTGF5ZXJzKGxheWVycywgcm9vdExheWVyKCkpOworICAgICAgICBj
b2xsZWN0TGF5ZXJzSW5QYWludE9yZGVyKGxheWVycywgcm9vdExheWVyKCktPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW4gc29tZSB0ZXN0cyB3ZSBkbyBub3Qg
aGF2ZSBhIHJlbmRlciBzdXJmYWNlLgorICAgICAgICBjb2xsZWN0QWxsTGF5ZXJzKGxheWVycywg
cm9vdExheWVyKCkpOworICAgIH0KKworICAgIC8vIExvb2sgZm9yIGEgc2Nyb2xsYWJsZSBsYXll
ciBpbiBmcm9udCB0byBiYWNrIG9yZGVyLgorICAgIGZvciAoaW50IGkgPSBsYXllcnMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9IGxh
eWVyc1tpXS5nZXQoKTsKKyAgICAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1
cyBzdGF0dXMgPSBiZWdpblNjcm9sbGluZ0xheWVyKGxheWVySW1wbCwgdmlld3BvcnRQb2ludCk7
CisgICAgICAgIC8vIEhpdHRpbmcgYSBub24tc2Nyb2xsYWJsZSBhbmQgbm9uLWNvbnRlbnQtZHJh
d2luZyBvciBub24tY29tcG9zaXRlZCBjb250ZW50IGxheWVyIHNob3VsZAorICAgICAgICAvLyBu
b3QgdGVybWluYXRlIHRoZSBzZWFyY2gsIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgdXMgdG8gaWdu
b3JlIHRoZSBvdXRlciBzY3JvbGxpbmcgbGF5ZXIKKyAgICAgICAgLy8gZm9yIHRoZSByb290IGxh
eWVyLgorICAgICAgICBpZiAoc3RhdHVzID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJ
Z25vcmVkICYmICghbGF5ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSB8fCBsYXllckltcGwtPmlzTm9u
Q29tcG9zaXRlZENvbnRlbnQoKSkpCisgICAgICAgICAgICBzdGF0dXMgPSBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsRmFpbGVkOworICAgICAgICBpZiAoc3RhdHVzICE9IENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAg
IH0KKyAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5
IiwgdGhpcywgMCk7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fY3Vy
cmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwotICAgIG1fY2xpZW50LT5zZXROZWVk
c0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1w
bFRocmVhZCgpOworICAgIEludFNpemUgcGVuZGluZ0RlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBD
Q0xheWVySW1wbCogbGF5ZXJJbXBsID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuZ2V0
KCk7CisgICAgd2hpbGUgKGxheWVySW1wbCAmJiAhcGVuZGluZ0RlbHRhLmlzWmVybygpKSB7Cisg
ICAgICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICAgICAgRmxvYXRT
aXplIHByZXZpb3VzRGVsdGEobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgICAg
IEZsb2F0U2l6ZSBzY2FsZWRQZW5kaW5nRGVsdGEocGVuZGluZ0RlbHRhKTsKKyAgICAgICAgICAg
IC8vIFNpbmNlIHNjcm9sbERlbHRhIGlzIGluIHdpbmRvdyBjb29yZGluYXRlcywgaXQgYWxyZWFk
eSBoYXMgdGhlIHBhZ2Ugc2NhbGUgYXBwbGllZC4KKyAgICAgICAgICAgIC8vIFRoaXMgbWF0Y2hl
cyB3aGF0IHRoZSByb290IHNjcm9sbCBsYXllciBleHBlY3RzLCBidXQgY2hpbGQgbGF5ZXJzIGFy
ZSBzY3JvbGxlZCB1c2luZworICAgICAgICAgICAgLy8gdW5zY2FsZWQgY29udGVudCBjb29yZGlu
YXRlcyBpbnN0ZWFkLCBzbyB3ZSBoYXZlIHRvIHVuZG8gdGhlIHNjYWxpbmcgZm9yIHRoZW0uIFRo
ZQorICAgICAgICAgICAgLy8gcGFnZSBzY2FsZSBkZWx0YSBuZWVkcyB0byBiZSB1bmFwcGxpZWQg
d2l0aCBib3RoIGxheWVyIHR5cGVzIHNpbmNlIHRoZSBzY3JvbGwKKyAgICAgICAgICAgIC8vIGNv
b3JkaW5hdGVzIGRvIG5vdCByZXNwZWN0IGl0LgorICAgICAgICAgICAgaWYgKGxheWVySW1wbCA9
PSBtX3Njcm9sbExheWVySW1wbCkgeworICAgICAgICAgICAgICAgIHNjYWxlZFBlbmRpbmdEZWx0
YS5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisgICAgICAgICAgICAgICAgbGF5ZXJJbXBs
LT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzY2FsZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvIChtX3BhZ2VTY2FsZSAq
IG1fcGFnZVNjYWxlRGVsdGEpKTsKKyAgICAgICAgICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5
KHNjYWxlZFBlbmRpbmdEZWx0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBSZXNl
dCB0aGUgcGVuZGluZyBzY3JvbGwgZGVsdGEgdG8gemVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUg
dG8gbW92ZSBhbG9uZyB0aGUgcmVxdWVzdGVkCisgICAgICAgICAgICAvLyBheGlzLiBUaGlzIGlz
IHRvIGVuc3VyZSBpdCBpcyBwb3NzaWJsZSB0byBzY3JvbGwgZXhhY3RseSB0byB0aGUgYmVnaW5u
aW5nIG9yIGVuZCBvZiBhCisgICAgICAgICAgICAvLyBzY3JvbGwgYXJlYSByZWdhcmRsZXNzIG9m
IHRoZSBzY3JvbGwgc3RlcC4gRm9yIGRpYWdvbmFsIHNjcm9sbHMgdGhpcyBhbHNvIGF2b2lkcyBh
cHBseWluZworICAgICAgICAgICAgLy8gdGhlIHNjcm9sbCBvbiBvbmUgYXhpcyB0byBtdWx0aXBs
ZSBsYXllcnMuCisgICAgICAgICAgICBpZiAocHJldmlvdXNEZWx0YS53aWR0aCgpICE9IGxheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgpKQorICAgICAgICAgICAgICAgIHBlbmRpbmdEZWx0
YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLmhlaWdodCgpICE9
IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBwZW5k
aW5nRGVsdGEuc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGxheWVySW1wbCA9IGxh
eWVySW1wbC0+cGFyZW50KCk7CisgICAgfQorCisgICAgaWYgKHBlbmRpbmdEZWx0YSAhPSBzY3Jv
bGxEZWx0YSkgeworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQo
KTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAg
fQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCgpCiB7CisgICAgbV9j
dXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuY2xlYXIoKTsKIH0KIAogYm9vbCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpoYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkKQEAgLTUyNCwyNSArNjQ5LDQ4IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlRW5kKCkKICAgICBtX2NsaWVu
dC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKIH0KIAorc3RhdGljIGJvb2wgZGlkU2Ny
b2xsU3VidHJlZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQoreworICAgIGlmICghbGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQor
ICAgICAgICBpZiAoZGlkU2Nyb2xsU3VidHJlZShsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFu
ZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKSBjb25zdAorewor
ICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSB0b1NpemUoZmxvb3JlZEludFBvaW50KGxheWVySW1wbC0+c2Ny
b2xsRGVsdGEoKSkpOworICAgICAgICBpZiAobGF5ZXJJbXBsICE9IG1fc2Nyb2xsTGF5ZXJJbXBs
KSB7CisgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8g
c2Nyb2xsOworICAgICAgICAgICAgc2Nyb2xsLmxheWVySWQgPSBsYXllckltcGwtPmlkKCk7Cisg
ICAgICAgICAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgICAg
IHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAg
ICAgIGxheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEo
KSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxk
cmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5m
bywgbGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKK30KKwogUGFzc093blB0cjxDQ1Nj
cm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFz
KCkKIHsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0
UHRyKG5ldyBDQ1Njcm9sbEFuZFNjYWxlU2V0KCkpOwotICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Ny
b2xsTGF5ZXJJbXBsICYmICghbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJv
KCkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxLjBmKTsKKyAgICBib29sIGRpZE1vdmUgPSBtX3Nj
cm9sbExheWVySW1wbCAmJiAoZGlkU2Nyb2xsU3VidHJlZShtX3Njcm9sbExheWVySW1wbC5nZXQo
KSkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxKTsKICAgICBpZiAoIWRpZE1vdmUgfHwgbV9waW5j
aEdlc3R1cmVBY3RpdmUgfHwgbV9wYWdlU2NhbGVBbmltYXRpb24pIHsKICAgICAgICAgbV9zZW50
UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IDE7CiAgICAgICAg
IHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKICAgICB9CiAKKyAgICBjb2xsZWN0U2Nyb2xs
RGVsdGFzKHNjcm9sbEluZm8uZ2V0KCksIG1fc2Nyb2xsTGF5ZXJJbXBsLmdldCgpKTsKICAgICBt
X3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gbV9wYWdl
U2NhbGVEZWx0YTsKIAotICAgIC8vIEZJWE1FOiB0cmFjayBzY3JvbGxzIGZyb20gbGF5ZXJzIG90
aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0
ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlk
KCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERl
bHRhKCk7Ci0gICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLQotICAgIG1f
c2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsK
LQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGU0ZDAwNmQ0Zjg2ZTljMjZjZTcxY2I3ZWU0ZmFhYTFi
OTc1Zjc0NGEuLjg5OTQ3Y2QxZmExZGEyYTQ2OWVlYWJkYzI2ZWM5ZDExNDBlNWRhM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEzNSwxMCArMTM1LDE3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiBy
b290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOwogICAg
IHZvaWQgb3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOworICAgIGJvb2wg
aXNDb250ZW50UG9pbnRXaXRoaW5MYXllcihDQ0xheWVySW1wbCosIGNvbnN0IEludFBvaW50JiBj
b250ZW50UG9pbnQpIGNvbnN0OworICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RMYXllcnNJblBhaW50
T3JkZXIoQ0NMYXllckxpc3QmLCBDQ1JlbmRlclN1cmZhY2UqKTsKKyAgICBzdGF0aWMgdm9pZCBj
b2xsZWN0Tm9uRHJhd2luZ1Njcm9sbGFibGVMYXllcnMoQ0NMYXllckxpc3QmLCBDQ0xheWVySW1w
bCopOworICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RBbGxMYXllcnMoQ0NMYXllckxpc3QmLCBDQ0xh
eWVySW1wbCopOworICAgIFNjcm9sbFN0YXR1cyBiZWdpblNjcm9sbGluZ0xheWVyKENDTGF5ZXJJ
bXBsKiwgY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpOworICAgIHZvaWQgY29sbGVjdFNj
cm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiwgQ0NMYXllckltcGwqKSBjb25zdDsKIAog
ICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKICAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IG1fc2Nyb2xsTGF5ZXJJbXBsOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9jdXJyZW50
bHlTY3JvbGxpbmdMYXllckltcGw7CiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogICAgIElu
dFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgYm9vbCBtX3Zpc2libGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVh
ZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDcyYmVjMmE3MTY2NGFmNDNjZDY0ZDAxNGQy
OGI4NDI2NTA5NWIyMDMuLmE2Y2E2ZjcwMjEyN2VjNzJlOTY2NTliMGNmYzJkN2MwMGJhZDc2OTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0xNjUsNiArMTY1
LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0NvbW1pdCgpCiAgICAgICAgIC8vIElu
IHRoZSBzaW5nbGUtdGhyZWFkZWQgY2FzZSwgdGhlIHNjcm9sbCBkZWx0YXMgc2hvdWxkIG5ldmVy
IGJlCiAgICAgICAgIC8vIHRvdWNoZWQgb24gdGhlIGltcGwgbGF5ZXIgdHJlZS4KICAgICAgICAg
T3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxJbmZvLT5y
b290U2Nyb2xsRGVsdGEuaXNaZXJvKCkpOwogICAgICAgICBBU1NFUlQoIXNjcm9sbEluZm8tPnNj
cm9sbHMuc2l6ZSgpKTsKICNlbmRpZgogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggNWYyODUxYmI1ODc3YzlmZjc0MjZkN2E4
YzFlNWQxMzg2NGZhMDJjZi4uOTUzZGJiNzg4MWUzNDg1MTZmY2VlNzMwNTY2Nzg4ZDVlNTA4M2Uw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5j
cHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uU2VydmljZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWNvbi5oIgpAQCAtODY4LDYgKzg2
OSwyOCBAQCBib29sIENocm9tZUNsaWVudEltcGw6OnBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSQogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
dm9pZCBDaHJvbWVDbGllbnRJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyLCBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7CisgICAgR3Jh
cGhpY3NMYXllckNocm9taXVtKiBsYXllckNocm9taXVtID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NM
YXllckNocm9taXVtKj4obGF5ZXIpOworICAgIGxheWVyQ2hyb21pdW0tPnNldFNjcm9sbGFibGVB
cmVhKHNjcm9sbGFibGVBcmVhKTsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIg
PSBsYXllci0+cGxhdGZvcm1MYXllcigpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9sbGFi
bGUodHJ1ZSk7CisgICAgcGxhdGZvcm1MYXllci0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldE1heFNjcm9s
bFBvc2l0aW9uKEludFNpemUoc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoSG9yaXpvbnRhbFNj
cm9sbGJhciksIHNjcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKFZlcnRpY2FsU2Nyb2xsYmFyKSkp
OworfQorCit2b2lkIENocm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJv
bWl1bSA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSo+KGxheWVyKTsKKyAgICBs
YXllckNocm9taXVtLT5zZXRTY3JvbGxhYmxlQXJlYSgwKTsKKworICAgIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIgPSBsYXllci0+cGxhdGZvcm1MYXllcigpOworICAgIHBsYXRmb3JtTGF5
ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9sbFBv
c2l0aW9uKEludFBvaW50KCkpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0
aW9uKEludFNpemUoKSk7Cit9CisKIC8vIEZJWE1FOiBSZW1vdmUgQ2hyb21lQ2xpZW50SW1wbDo6
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lIGFuZCBDaHJvbWVDbGllbnRJbXBs
OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUKIC8vIG9uY2UgYWxs
IHBvcnRzIGhhdmUgbW92ZWQgdG8gY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIChzZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzczICkuCiAvLyBGb3IgY2xpZW50
LWJhc2VkIGdlb2xvY2F0aW9uLCB0aGVzZSBtZXRob2RzIGFyZSBub3cgaW1wbGVtZW50ZWQgYXMg
V2ViR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uIGFuZCBXZWJHZW9sb2NhdGlv
bkNsaWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggMjExM2VjMWFmNGY4MWQ3ZDE5YmVjYTY1
MTg3MzIzMjE3N2FjNDdkZC4uYzE0MmFmYmQxNmZiNGIzMzdjZDljNWQzMDFlNmE1M2VhYTI1ODA2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApA
QCAtNDQsOSArNDQsMTEgQEAgY2xhc3MgQ29sb3JDaG9vc2VyQ2xpZW50OwogI2VuZGlmCiBjbGFz
cyBFbGVtZW50OwogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBHcmFwaGljc0xheWVyOwogY2xh
c3MgUG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBSZW5kZXJC
b3g7CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogc3RydWN0
IFdpbmRvd0ZlYXR1cmVzOwogfQpAQCAtMTY3LDYgKzE2OSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwogCiAgICAgdmlydHVhbCBD
b21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoV2ViQ29yZTo6
R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKik7CisgICAgdmlydHVhbCB2
b2lkIHJlbW92ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICNlbmRp
ZgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2Vi
Q29yZTo6Tm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29udGVudExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmNwcAppbmRleCBlYTA4M2RlNTYyYTdlZmFhMGFmNGQ4ZWMyMmUyYTAwZGU3
NWNmNjY2Li45YTIzMWU2NjY4MTkxMmY5Mjc3ZTFmZjMzYjcyNmE1ZmU0MWJiMmFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcApA
QCAtNzIsNCArNzIsOCBAQCB2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50Q29udGVudHMo
R3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcAogICAgIG1fY29udGVudENs
aWVudC0+cGFpbnRDb250ZW50cyhjYW52YXMsIFdlYlJlY3QoY2xpcCkpOwogfQogCit2b2lkIFdl
YkNvbnRlbnRMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQorewor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCBiYzFlMjYwMDg4YjQ3ODkyODllMjVlYTQ5
ZDQzODNjN2UwMjE3YjYyLi41ZGJlM2YwNzhhZjQ2NDU2MGY1YzE3OTYyMWIzZTM1M2VkMzA3ZTc5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1w
bC5oCkBAIC00Miw2ICs0Miw3IEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBXZWJDb250ZW50
TGF5ZXJJbXBsKFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CiAgICAgdmly
dHVhbCB+V2ViQ29udGVudExheWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRl
bnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNs
aXApOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CiAKICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsKICAgICBib29s
IG1fZHJhd3NDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAKaW5kZXggNGQ0MzlmZDQzNGJlYzNm
NTE2NDk5ZGFiNDEzMzUyYzRjZDZkMTJhOC4uOWIzNGE2MzI1NzdkNzFjNTU4YmM0YmU1ZmNiM2Rk
NDhiOWVmOTEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0
ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCkBAIC01OSw0ICs1OSw4IEBAIHZvaWQg
V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFJlY3QmCiB7CiB9CiAKK3ZvaWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJ
bXBsOjpzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikKK3sKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJF
eHRlcm5hbFRleHR1cmVMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5oCmluZGV4IDFhZDJiODE5OThmMzBkZjZjOWVjYTA5
M2EwYzJmZjVhYmVlOTFjZWEuLjljY2I3N2U0NmE2NzZiYzg0ZGE2NDNhZWEyYTAxNzdlZjZhZGU4
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4
dHVyZUxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVy
bmFsVGV4dHVyZUxheWVySW1wbC5oCkBAIC00MCw2ICs0MCw3IEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIH5XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwoKTsKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBjbGlwKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVySW1wbC5jcHAKaW5kZXggMDdhMTYyZDY0MWFjYmI1YjlhNDFhY2VlMjZkNzEwNjUzNjY0ZDY1
YS4uNjdjZTUzNzZmNzFmZWNlZmU0MDIzMmVmYzA4MzY3YWJjY2FhMGI3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCkBAIC01Miw0ICs1Miw4IEBAIHZv
aWQgV2ViTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFJlY3QmIGNsaXApCiB7CiB9CiAKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBJ
bnRTaXplJikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkxheWVySW1wbC5oCmluZGV4IDZiZGE4M2Y1NDdjMzE4NTBhMGE3YjA5YzE1
MzJhMjllNmJjMjg1YmQuLmZlYWZlZTYzMWU5NGM1YzEyNDU4ZGI0ODhhZDZkZGVmNDcwMmEwOTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCkBAIC0zOSw2ICsz
OSw3IEBAIHByb3RlY3RlZDoKICAgICBXZWJMYXllckltcGwoKTsKICAgICB2aXJ0dWFsIH5XZWJM
YXllckltcGwoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDliODdkMDBmYTZi
ZjA2YWU4N2M1Zjk0MTJhMTcxNWRiM2Y5YmQwZGUuLjVkZWE2ZGVlMGRiMWRlMGU1ZGQwOGFiNDk3
YjFhNjFhMjEwMWZmOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xMjUsMTYgKzEyNSwxNiBAQCBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbERlbHRhUmVwZWF0ZWRTY3JvbGxz
KQogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvOwogCiAgICAgc2Ny
b2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBBU1NFUlRf
RVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDF1KTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xs
SW5mby0+c2Nyb2xscy5zaXplKCksIDB1KTsKICAgICBFWFBFQ1RfRVEocm9vdC0+c2VudFNjcm9s
bERlbHRhKCksIHNjcm9sbERlbHRhKTsKLSAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5n
ZXQoKSwgcm9vdC0+aWQoKSwgc2Nyb2xsRGVsdGEpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZv
LT5yb290U2Nyb2xsRGVsdGEsIHNjcm9sbERlbHRhKTsKIAogICAgIEludFNpemUgc2Nyb2xsRGVs
dGEyKC01LCAyNyk7CiAgICAgcm9vdC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEyKTsKICAgICBzY3Jv
bGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIEFTU0VSVF9F
UShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAgIEFTU0VSVF9FUShzY3JvbGxJ
bmZvLT5zY3JvbGxzLnNpemUoKSwgMHUpOwogICAgIEVYUEVDVF9FUShyb290LT5zZW50U2Nyb2xs
RGVsdGEoKSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOwotICAgIGV4cGVjdENvbnRhaW5z
KCpzY3JvbGxJbmZvLmdldCgpLCByb290LT5pZCgpLCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRh
Mik7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgc2Nyb2xsRGVs
dGEgKyBzY3JvbGxEZWx0YTIpOwogCiAgICAgcm9vdC0+c2Nyb2xsQnkoSW50U2l6ZSgpKTsKICAg
ICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwpAQCAtMTU1
LDYgKzE1NSw5NCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RD
YWxsc0NvbW1pdEFuZFJlZHJhdykKICAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQp
OwogfQogCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RJZ25vcmVk
KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
MCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0
Um9vdExheWVyKHJvb3QpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJ
bnRQb2ludCgwLCAwKSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAg
ICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9k
aWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxDaGlsZENhbGxzQ29tbWl0QW5kUmVkcmF3KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJs
ZShmYWxzZSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMSk7CisgICAgY2hpbGQtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgY2hpbGQtPnNl
dE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworICAgIGNoaWxkLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQp
OworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKworICAgIEVYUEVDVF9FUSht
X2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAs
IDEwKSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNUX1RSVUUobV9k
aWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOwor
fQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0NoaWxkKQor
eworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7
CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgY2hpbGQtPnNldFNjcm9sbGFi
bGUodHJ1ZSk7CisgICAgY2hpbGQtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAx
MDApKTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNoaWxkLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7Cisg
ICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihy
b290KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUs
IDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9G
QUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RD
b21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RB
bmRDaGFuZ2VQYWdlU2NhbGUpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAg
IHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICByb290
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJ
bnRSZWN0KEludFBvaW50KCksIEludFNpemUoMTAsIDEwKSkpOworICAgIG1faG9zdEltcGwtPnNl
dFJvb3RMYXllcihyb290KTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxC
eShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGlt
aXRzKDIsIDEsIDIpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgcm9v
dCBzY3JvbGwgZGVsdGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbElu
Zm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgRVhQRUNUX0VRKHNj
cm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgSW50U2l6ZShzY3JvbGxEZWx0YS53aWR0aCgpICog
Miwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKiAyKSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGUpCit7CisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IHNjcm9sbFJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIHNj
cm9sbFJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBj
aGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgY2hpbGQtPnNldFNjcm9sbGFibGUo
dHJ1ZSk7CisgICAgY2hpbGQtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDAp
KTsKKyAgICBjaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNoaWxkLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7CisgICAg
cm9vdC0+YWRkQ2hpbGQoc2Nyb2xsUm9vdCk7CisgICAgc2Nyb2xsUm9vdC0+YWRkQ2hpbGQoY2hp
bGQpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxSb290KTsKKworICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFy
dGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDIsIDEsIDIpOworCisgICAgLy8gVGhl
IHNjYWxlIHNob3VsZCBub3QgYXBwbHkgdG8gdGhlIGNoaWxkIHNjcm9sbCBkZWx0YS4KKyAgICBP
d25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nl
c3NTY3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwg
Y2hpbGQtPmlkKCksIHNjcm9sbERlbHRhKTsKK30KKwogY2xhc3MgQmxlbmRTdGF0ZVRyYWNrZXJD
b250ZXh0OiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKICAgICBC
bGVuZFN0YXRlVHJhY2tlckNvbnRleHQoKSA6IG1fYmxlbmQoZmFsc2UpIHsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5k
ZXggYmZhMWIwODIyMmU3ZWJkMGZiZGU3Zjk4MGUxMjdkYzQwZmEwYzQyYS4uMTc5ZjVmZDA1NTlk
ZjQwMDAzOWUwNzgzNDMxMDZhYjVlYmUyZTgyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC05MTIsNiArOTEyLDEy
MSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldFZpc2libGUsIHJ1bk11bHRpVGhyZWFk
KQogICAgIHJ1blRlc3QodHJ1ZSk7CiB9CiAKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3Jv
bGxCYXNlIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNj
cm9sbExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX3Jvb3RTY3Jv
bGxMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9s
bExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+
c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RTY3JvbGxMYXllcik7CisgICAg
ICAgIG1fY2hpbGRMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9j
aGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1MCwgNTApKTsKKyAgICAgICAgbV9jaGlsZExh
eWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldE1heFNj
cm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5
ZXItPmFkZENoaWxkKG1fY2hpbGRMYXllcik7CisgICAgICAgIHBvc3RTZXROZWVkc0NvbW1pdFRv
TWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNj
YWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCkKKyAgICB7CisgICAgICAgIElu
dFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7Cisg
ICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiArIHNj
cm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7
CisgICAgfQorcHJvdGVjdGVkOgorICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NoaWxkTGF5
ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOworfTsKKwor
Y2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMgQ0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyKCkKKyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAxKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5
ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9yb290U2Ny
b2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBpZiAoIW1f
bGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2No
aWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQ
b2ludCgpICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3
TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAg
ICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX0VR
KGltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91
bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAo
aW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0K
K3ByaXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisKK1RFU1Rf
RihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciwgcnVuTXVsdGlUaHJlYWQpCit7
CisgICAgcnVuVGVzdFRocmVhZGVkKCk7Cit9CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyQmV5b25kTGltaXQoKQorICAgICAgICA6IG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbigz
LCA2KQorICAgICAgICAsIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24oMjAsIDApCisgICAg
ICAgICwgbV9zY3JvbGxBbW91bnQoLTI1LCAtNSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQmFzZTo6YmVnaW5UZXN0KCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3Jv
bGxQb3NpdGlvbihtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24pOworICAgICAgICBtX2NoaWxk
TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24pOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRy
ZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QtPmZy
YW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgQ0NMYXllckltcGwqIHJvb3QgPSBpbXBs
LT5yb290TGF5ZXIoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxSb290ID0gcm9v
dC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9
IHNjcm9sbFJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
Y2hpbGQtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb24pOwor
ICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxkLT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKC0yMCwg
MCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9sbFJvb3QtPnNjcm9sbFBvc2l0aW9uKCks
IG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc2Ny
b2xsUm9vdC0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgwLCAtNSkpOworICAgICAgICB9CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9z
dEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAx
KSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwg
NSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgICAgICBp
bXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxF
bmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDIpCisgICAg
ICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBJbnRQb2ludCBt
X2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb247CisgICAgY29uc3QgSW50UG9pbnQgbV9pbml0aWFs
Q2hpbGRTY3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50Owor
fTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGlt
aXQsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQorCiBjbGFz
cyBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRl
IHsKIHB1YmxpYzoKICAgICBUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGUoQ0NMYXllclRy
ZWVIb3N0VGVzdCogdGVzdCkKQEAgLTkyNiw2ICsxMDQxLDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKSB7IH0KIAogcHJpdmF0ZToKICAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122229</attachid>
            <date>2012-01-12 06:24:58 -0800</date>
            <delta_ts>2012-01-27 16:27:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120112142456.patch</filename>
            <type>text/plain</type>
            <size>50013</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0Nzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ0NDRlYjJlNzNhZWQz
NjBiNzBhNmM2M2Q5YjIwZWNjOWNiMWI5My4uZmVkMWY0NTUwZDg4M2FjYzBhNjlmMGQxZmQzOWZi
NmJkMjQwYTc2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDEyLTAxLTExICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNjc5
MDM1PiBJbXBsZW1lbnQgZm9udC12YXJpYW50LWxpZ2F0dXJlczoge25vLX1jb21tb24tbGlnYXR1
cmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDNjZWQzMmI5ZmJmZWVkMDZjZDU0YmRl
Zjg1YjM3M2UyNmRhYTQ5M2IuLmM4YzlkNmFiZTE4ODc4NTU4ZDFmNmQyNzBmNTBhNTBjMDhkYTZl
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMTIt
MDkgIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2No
cm9taXVtXSBJbXBsZW1lbnQgbGF5ZXIgc2Nyb2xsaW5nIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNTAK
KworICAgICAgICBUaGlzIHBhdGNoIGVuYWJsZXMgc2Nyb2xsaW5nIGNoaWxkIGxheWVycyBpbiB0
aGUgY29tcG9zaXRvciB0aHJlYWQuCisgICAgICAgIFNjcm9sbCBkZWx0YXMgYXJlIGFjY3VtdWxh
dGVkIGZvciBlYWNoIHNjcm9sbGVkIENDTGF5ZXJJbXBsIGFuZAorICAgICAgICBzeW5jaHJvbml6
ZWQgdG8gdGhlIFdlYlZpZXdJbXBsIGluIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICBJZiBh
IGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVuIGRpcmVjdGlvbiwgb25lIG9m
IGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xsZWQgaW5zdGVhZCBpZiBwb3Nz
aWJsZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHB1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50Lmg6CisgICAgICAgICogc3Jj
L0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBs
OjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50SW1wbDo6cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGll
bnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5k
U2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlMYXll
clNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmg6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFk
ZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBw
bHlMYXllclNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseVJvb3RM
YXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAg
ICAgKiB0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAo
V2ViS2l0OjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
OgorICAgICAgICAoV1RGOjpUZXN0SG9va3M6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUp
OgorICAgICAgICAoV1RGOjpUZXN0SG9va3M6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAo
V1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2Fs
ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjphcHBseUxheWVyU2Ny
b2xsKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZTo6YXBw
bHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxNdWx0aXBsZVJlZHJhdzo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjpiZWdpblRlc3Qp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlSb290
TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxCYXNlOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbEJhc2U6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxCYXNlOjphcHBseVNjcm9sbFRvQ2hpbGRMYXllcik6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsQ2hpbGRMYXllcik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxDaGlsZExheWVyOjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6ZHJhd0xheWVyc09uQ0NUaHJlYWQp
OgorICAgICAgICAoV1RGOjpURVNUX0YpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xs
Q2hpbGRMYXllckJleW9uZExpbWl0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6YmVnaW5Db21t
aXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENo
aWxkTGF5ZXJCZXlvbmRMaW1pdDo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorCiAyMDEyLTAxLTEx
ICBTY290dCBWaW9sZXQgIDxza3lAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFRp
bGVkTGF5ZXJDaHJvbWl1bSBkcm9wcyBpbnZhbGlkYXRlcyB0aGF0IG9jY3VyIGR1cmluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjdlMDVmOGRjZTRhZmNiMGU4
MjI1YzkyY2ZlNTQ0ZDMzMTFkMDk5YS4uNDljOGI4MDM3ZmY0NjVmMDNmYWQzZTQ3NzU5OTYwN2Qw
MWUzMGNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Myw2
ICs1Myw3IEBACiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KQEAgLTcwLDYgKzcxLDcgQEAgUGFzc093blB0cjxHcmFwaGljc0xheWVy
PiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogCiBH
cmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKKyAgICAsIG1fc2Ny
b2xsYWJsZUFyZWEoMCkKICAgICAsIG1fY29udGVudHNMYXllclB1cnBvc2UoTm9Db250ZW50c0xh
eWVyKQogICAgICwgbV9jb250ZW50c0xheWVySGFzQmFja2dyb3VuZENvbG9yKGZhbHNlKQogICAg
ICwgbV9pblNldENoaWxkcmVuKGZhbHNlKQpAQCAtNjgyLDYgKzY4NCwxMyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlYwogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNs
aXApOwogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkoY29uc3QgSW50
U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAg
ICByZXR1cm47CisgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggZGZh
MTA5ZDNlMDM5ZTcwYTZkNWZkZTg3ZWFmNzY4MTQzMDEzYWJiNy4uNTBhYzJlNTJjN2E3Njk0YzA1
ODM2YjEyN2NkNjQ5NDdmYThiMDliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmgKQEAgLTQwLDYgKzQwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJD
aHJvbWl1bTsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ2hy
b21pdW0gOiBwdWJsaWMgR3JhcGhpY3NMYXllciwgcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CiBw
dWJsaWM6CkBAIC05OSw2ICsxMDAsMTAgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBDQ0xheWVyRGVsZWdhdGUgaW50ZXJmYWNlLgogICAg
IHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3Jv
bGxEZWx0YSk7CisKKyAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CisgICAgdm9pZCBzZXRTY3JvbGxhYmxlQXJlYShT
Y3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpIHsgbV9zY3JvbGxhYmxlQXJlYSA9IHNjcm9s
bGFibGVBcmVhOyB9CiAKICAgICAvLyBFeHBvc2VkIGZvciB0ZXN0cy4KICAgICBMYXllckNocm9t
aXVtKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgp
OyB9CkBAIC0xMzQsNiArMTM5LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbV90cmFuc2Zvcm1MYXllcjsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50
c0xheWVyOwogCisgICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7CisKICAgICBl
bnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAgICAgICAgTm9Db250ZW50c0xheWVyID0gMCwK
ICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRl
eCAyZGYwNWI1OWNiODVhZDdjMDg3MDE4Y2MyNTZlZTE3NDA5NGI5YmQ1Li5lOTRkZmVkODg2ZTg2
YmYxNWFlYzJkNTI4YTU4MjNkNTAxNDU2OTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAt
MzY1LDYgKzM2NSwxNCBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbFBvc2l0aW9uKGNv
bnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQog
Cit2b2lkIExheWVyQ2hyb21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUm
IG1heFNjcm9sbFBvc2l0aW9uKQoreworICAgIGlmIChtX21heFNjcm9sbFBvc2l0aW9uID09IG1h
eFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbV9tYXhTY3JvbGxQb3NpdGlv
biA9IG1heFNjcm9sbFBvc2l0aW9uOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6c2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpCiB7CiAgICAgaWYg
KG1fc2Nyb2xsYWJsZSA9PSBzY3JvbGxhYmxlKQpAQCAtNDMxLDYgKzQzOSw3IEBAIHZvaWQgTGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5
ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChw
cmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3Np
dGlvbik7CisgICAgbGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRp
b24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3Jt
KTsKICAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0
VXBkYXRlUmVjdChtX3VwZGF0ZVJlY3QpOwpAQCAtNDg3LDYgKzQ5NiwxMyBAQCBib29sIExheWVy
Q2hyb21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAordm9pZCBMYXllckNocm9taXVtOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSkKK3sKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVs
dGEpOworICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5zY3JvbGxCeShz
Y3JvbGxEZWx0YSk7Cit9CisKIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID46Oml0ZXJhdG9yLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJh
dG9yLCB2b2lkKikKIHsKICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHotb3JkZXIgdG8g
ZGVjaWRlIHdoYXQgdG8gcGFpbnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBhY3R1YWxseSBzb3J0
IExheWVyQ2hyb21pdW1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDg5ODQ1YTUxOGVjNzRkY2Y0
NDU0ZmE5ZGVjZDEwNWEwZDM2ODkyODcuLmI4ZTIxODAxZGVkOTczNDgzMTI4YzU2MzUzOTYzYjBl
M2Y0NTYxODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgQ0NM
YXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DQ0xheWVyRGVsZWdhdGUoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRSZWN0JiBjbGlwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhKSA9IDA7CiB9OwogCiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3Np
dGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCkBAIC0xMjgs
OSArMTI5LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IElu
dFBvaW50Jik7CiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRNYXhTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRTaXplJik7CisgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX21heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICB2b2lkIHNldFNj
cm9sbGFibGUoYm9vbCk7CiAgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JvbGxhYmxlOyB9CiAKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhKTsKKwogICAgIEludFNpemUgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBJbnRTaXpl
KCk7IH0KIAogICAgIGZsb2F0IHBhZ2VTY2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4gMTsgfQpA
QCAtMjU0LDYgKzI2MCw3IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJ
bnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9u
OworICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJs
ZTsKICAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX2FuY2hvclBv
aW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDY4MzdmMGE1Yzg2YzU2OGU4OTNiYjVi
MTA0ZGVmMTY2MjBiMzQ2YzEuLjdjNDI2Mjk3MTM4MjQzZDUzY2RhM2NiMzZiNDNhZDI4ZTIwM2Nh
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTk0LDYgKzk0LDE1IEBAIHZvaWQgQ0NM
YXllckltcGw6OnJlbW92ZUFsbENoaWxkcmVuKCkKICAgICAgICAgbV9jaGlsZHJlblswXS0+cmVt
b3ZlRnJvbVBhcmVudCgpOwogfQogCitib29sIENDTGF5ZXJJbXBsOjppc0xheWVySW5EZXNjZW5k
YW50cyhpbnQgbGF5ZXJJZCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Y2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0tPmlkKCkg
PT0gbGF5ZXJJZCB8fCBtX2NoaWxkcmVuW2ldLT5pc0xheWVySW5EZXNjZW5kYW50cyhsYXllcklk
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIHZvaWQgQ0NMYXllckltcGw6OmNsZWFyQ2hpbGRMaXN0KCkKIHsKICAgICBtX2NoaWxkcmVu
LmNsZWFyKCk7CkBAIC0xNDcsOSArMTU2LDkgQEAgdm9pZCBDQ0xheWVySW1wbDo6YmluZENvbnRl
bnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3Jv
bGwpCit2b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCkK
IHsKLSAgICBJbnRTaXplIG5ld0RlbHRhID0gbV9zY3JvbGxEZWx0YSArIHNjcm9sbDsKKyAgICBG
bG9hdFNpemUgbmV3RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Nyb2xsOwogICAgIEludFNpemUg
bWluRGVsdGEgPSAtdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIEludFNpemUgbWF4RGVs
dGEgPSBtX21heFNjcm9sbFBvc2l0aW9uIC0gdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwogICAg
IC8vIENsYW1wIG5ld0RlbHRhIHNvIHRoYXQgcG9zaXRpb24gKyBkZWx0YSBzdGF5cyB3aXRoaW4g
c2Nyb2xsIGJvdW5kcy4KQEAgLTQ0Nyw3ICs0NTYsNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzZXRT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpz
ZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3ZvaWQgQ0NMYXllcklt
cGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAg
aWYgKG1fc2Nyb2xsRGVsdGEgPT0gc2Nyb2xsRGVsdGEpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oCmluZGV4IDAxMzZiMDFmODg4YTExZGFhOTAxZjYzYmU5OTRmMjIyMDRjZTU1
NDguLjUwYzE0M2IyNTgwYTNiYjQ1NWMxOTVkYmE1ZTQxZmM3MzNkNTY0YjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRDaGlsZChQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CiAgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CiAg
ICAgdm9pZCByZW1vdmVBbGxDaGlsZHJlbigpOworICAgIGJvb2wgaXNMYXllckluRGVzY2VuZGFu
dHMoaW50IGxheWVySWQpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoUGFzc1JlZlB0
cjxDQ0xheWVySW1wbD4pOwogICAgIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX21hc2tMYXllci5nZXQoKTsgfQpAQCAtMTU4LDE2ICsxNTksMTYgQEAgcHVibGljOgog
ICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3Qge3JldHVybiBtX21h
eFNjcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJ
bnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikgeyBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4U2Ny
b2xsUG9zaXRpb247IH0KIAotICAgIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQotICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29uc3Qg
SW50U2l6ZSYpOworICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBGbG9h
dFNpemUmKTsKIAogICAgIGZsb2F0IHBhZ2VTY2FsZURlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9w
YWdlU2NhbGVEZWx0YTsgfQogICAgIHZvaWQgc2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwogCi0g
ICAgY29uc3QgSW50U2l6ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50
U2Nyb2xsRGVsdGE7IH0KLSAgICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXpl
JiBzZW50U2Nyb2xsRGVsdGEpIHsgbV9zZW50U2Nyb2xsRGVsdGEgPSBzZW50U2Nyb2xsRGVsdGE7
IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIHNlbnRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VudFNjcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEoY29uc3Qg
RmxvYXRTaXplJiBzZW50U2Nyb2xsRGVsdGEpIHsgbV9zZW50U2Nyb2xsRGVsdGEgPSBzZW50U2Ny
b2xsRGVsdGE7IH0KIAotICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsKTsK
KyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKTsKIAogICAgIGJvb2wg
c2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogICAgIHZvaWQgc2V0
U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpIHsgbV9zY3JvbGxhYmxlID0gc2Nyb2xsYWJsZTsg
fQpAQCAtMjUzLDggKzI1NCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50
OwogCi0gICAgSW50U2l6ZSBtX3Njcm9sbERlbHRhOwotICAgIEludFNpemUgbV9zZW50U2Nyb2xs
RGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2Nyb2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc2Vu
dFNjcm9sbERlbHRhOwogICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBmbG9h
dCBtX3BhZ2VTY2FsZURlbHRhOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRl
eCA4NjYzZWMwYWMyY2RmMzZiMjQ3MjI4MWNmZmFlYTE5NDAyMjVhMjNjLi5mMDFjY2ZjNzE1ZDRi
MTM4NzU2NzY0MWU5Zjk2ZWZiMjhiNjk1YmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKQEAgLTQ3OSwxNSArNDc5LDM0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpjbGVhclBl
bmRpbmdVcGRhdGUoKQogICAgIG1fdXBkYXRlTGlzdC5jbGVhcigpOwogfQogCitzdGF0aWMgTGF5
ZXJDaHJvbWl1bSogZmluZExheWVyQnlJZChMYXllckNocm9taXVtKiBsYXllciwgaW50IGlkKQor
eworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVyLT5p
ZCgpID09IGlkKQorICAgICAgICByZXR1cm4gbGF5ZXI7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hy
b21pdW0qIGZvdW5kID0gZmluZExheWVyQnlJZChsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwg
aWQpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9s
bEFuZFNjYWxlKGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8pCiB7Ci0gICAgLy8gRklY
TUU6IHB1c2hpbmcgc2Nyb2xsIG9mZnNldHMgdG8gbm9uLXJvb3QgbGF5ZXJzIG5vdCBpbXBsZW1l
bnRlZAotICAgIGlmICghaW5mby5zY3JvbGxzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGlmICghaW5mby5yb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkgfHwgaW5mby5wYWdlU2NhbGVEZWx0
YSAhPSAxKQorICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShpbmZvLnJvb3RT
Y3JvbGxEZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CiAKLSAgICBBU1NFUlQoaW5mby5zY3Jv
bGxzLnNpemUoKSA9PSAxKTsKLSAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gaW5mby5zY3JvbGxz
WzBdLnNjcm9sbERlbHRhOwotICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKHNjcm9s
bERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGluZm8uc2Nyb2xscy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBsYXll
ciA9IGZpbmRMYXllckJ5SWQobV9yb290TGF5ZXIuZ2V0KCksIGluZm8uc2Nyb2xsc1tpXS5sYXll
cklkKTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBsYXllci0+c2Nyb2xsQnkoaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRhKTsKKyAgICB9CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVMaW1pdGVyKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRl
eCAyZTBjYmNmMmM1ODVlODIxNWQyODZkZWU5YjYxZTUzNTE4MGNmZmFkLi4wZDI0NmY1MzkzNTA1
NWE2OTUwNDg2OTE2YWMzMjI3ZWNhZDQ1ZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaApAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiAKIHN0cnVjdCBDQ1Njcm9s
bEFuZFNjYWxlU2V0IHsKICAgICBWZWN0b3I8Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxV
cGRhdGVJbmZvPiBzY3JvbGxzOworICAgIEludFNpemUgcm9vdFNjcm9sbERlbHRhOwogICAgIGZs
b2F0IHBhZ2VTY2FsZURlbHRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAppbmRleCAwMjE4NmNhYWY1YTg1Y2I1NjkzYmRiMTM1ZTgwY2JiYWRmYzk5MTZhLi4y
MjBhYzMyNTc5YWIzZDhhNGMwZDRmMzdjZjRkNWYzMWJmYmY4OTYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKICAgICBpZiAo
IW1fcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNj
cm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsg
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsVG90
YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBmbG9vcmVk
SW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKIAogICAgIHNldFBh
Z2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUoZnJhbWVC
ZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9w
YWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGltZU1zKTsK
QEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNj
YWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIGlmICghbV9z
Y3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90
YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRv
U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29yZWRJbnRQb2lu
dChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogICAgIHNjcm9sbFRvdGFsLnNj
YWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlVG90YWwgPSBtX3BhZ2VTY2Fs
ZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2FsZWRDb250ZW50U2l6ZSA9IG1f
c2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7CkBAIC0zMjYs
OSArMzI2LDEwIEBAIHN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJ
bXBsKiBsYXllcikKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKFBhc3NS
ZWZQdHI8Q0NMYXllckltcGw+IGxheWVyKQogewogICAgIG1fcm9vdExheWVySW1wbCA9IGxheWVy
OwotCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgdGhpcyBvbmx5IGZpbmRzIHRoZSBmaXJzdCBz
Y3JvbGxhYmxlIGxheWVyLgogICAgIG1fc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNjcm9sbExheWVy
KG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisKKyAgICBpZiAobV9jdXJyZW50bHlTY3JvbGxpbmdM
YXllckltcGwgJiYgKCFtX3Jvb3RMYXllckltcGwgfHwgIW1fcm9vdExheWVySW1wbC0+aXNMYXll
ckluRGVzY2VuZGFudHMobV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwtPmlkKCkpKSkKKyAg
ICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuY2xlYXIoKTsKIH0KIAogdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTM5NSwxNSAr
Mzk2LDEzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5k
TGltaXRzKGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgbWluCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdlU2NhbGVDaGFu
Z2UpCiB7Ci0gICAgaWYgKHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQorICAgIGlmICghbV9zY3JvbGxM
YXllckltcGwgfHwgcGFnZVNjYWxlQ2hhbmdlID09IDEpCiAgICAgICAgIHJldHVybjsKIAotICAg
IC8vIFdlIGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBh
Z2VTY2FsZSBzcGFjZS4KLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwpIHsKLSAgICAgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAg
ICAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9s
bExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICAvLyBX
ZSBhbHNvIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhIGZvciB0aGUgcm9v
dCBsYXllciB0byBwYWdlU2NhbGUgc3BhY2UuCisgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0g
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgc2Nyb2xsRGVsdGEuc2NhbGUo
cGFnZVNjYWxlQ2hhbmdlKTsKKyAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEo
c2Nyb2xsRGVsdGEpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2Fs
ZURlbHRhKGZsb2F0IGRlbHRhKQpAQCAtNDQ1LDkgKzQ0NCw5IEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogICAgIC8vIGhhdmluZyBhIHZlcnRp
Y2FsIHNjcm9sbGJhciBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdy4KICAgICBtYXhTY3JvbGwu
Y2xhbXBOZWdhdGl2ZVRvWmVybygpOwogCisgICAgLy8gV2Ugb25seSBuZWVkIHRvIHVwZGF0ZSB0
aGUgcm9vdCBsYXllciBzY3JvbGwgcmFuZ2UsIHNpbmNlIHRoZSBjaGlsZAorICAgIC8vIGxheWVy
cyB1c2UgdW5zY2FsZWQgc2Nyb2xsIGNvb3JkaW5hdGVzLgogICAgIG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9ETyhhZWxpYXMp
OiBBbHNvIHVwZGF0ZSBzdWJsYXllcnMuCiB9CiAKIGRvdWJsZSBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjdXJyZW50VGltZU1zKCkgY29uc3QKQEAgLTQ2MCwyOCArNDU5LDE0NyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNS
ZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAotQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0
YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYpCiti
b29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGVudFBvaW50V2l0aGluTGF5ZXIoQ0NMYXll
ckltcGwqIGxheWVySW1wbCwgY29uc3QgSW50UG9pbnQmIGNvbnRlbnRQb2ludCkgY29uc3QKK3sK
KyAgICBJbnRSZWN0IGxheWVyQ29udGVudFJlY3QobGF5ZXJJbXBsLT52aXNpYmxlTGF5ZXJSZWN0
KCkpOworICAgIC8vIFRoZSB2aXNpYmxlIGxheWVyIHJlY3QgaXMgaW4gc2NhbGVkIGNvb3JkaW5h
dGVzLCBzbyB1bmRvIHRoZSBwYWdlIHNjYWxlLiBOb3RlIHRoYXQgdGhlcmUgaXMKKyAgICAvLyBu
byBuZWVkIHRvIHVuZG8gdGhlIHBhZ2Ugc2NhbGUgZGVsdGEsIGJlY2F1c2UgdGhlIGxheWVyIGNv
bnRlbnQgcmVjdCBpcyBvbmx5IHNjYWxlZCB3aXRoIHRoZQorICAgIC8vIG9yaWdpbmFsIHBhZ2Ug
c2NhbGUuCisgICAgbGF5ZXJDb250ZW50UmVjdC5zY2FsZSgxIC8gbV9wYWdlU2NhbGUpOworICAg
IHJldHVybiBsYXllckNvbnRlbnRSZWN0LmNvbnRhaW5zKGNvbnRlbnRQb2ludCk7Cit9CisKK0ND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVn
aW5TY3JvbGxpbmdMYXllcihDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRQb2ludCYg
dmlld3BvcnRQb2ludCkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBpZiAoIWxheWVySW1wbC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBJbnRQb2ludCBjb250ZW50
UG9pbnQobGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2lu
dCh2aWV3cG9ydFBvaW50KSk7CisgICAgaWYgKGxheWVySW1wbC0+ZHJhd3NDb250ZW50KCkgJiYg
IWlzQ29udGVudFBvaW50V2l0aGluTGF5ZXIobGF5ZXJJbXBsLCBjb250ZW50UG9pbnQpKQorICAg
ICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKworICAgIGlm
ICghbGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKKworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJ
bXBsID0gbGF5ZXJJbXBsOworICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb2xsZWN0QWxsTGF5ZXJz
KENDTGF5ZXJMaXN0JiBsYXllcnMsIENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgbGF5
ZXJzLmFwcGVuZChsYXllckltcGwpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXll
ckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGNo
aWxkID0gbGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpOworICAgICAgICBjb2xsZWN0QWxs
TGF5ZXJzKGxheWVycywgY2hpbGQpOworICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpjb2xsZWN0Tm9uRHJhd2luZ1Njcm9sbGFibGVMYXllcnMoQ0NMYXllckxpc3QmIGxheWVy
cywgQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+ZHJhd3ND
b250ZW50KCkgJiYgbGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIGxheWVycy5hcHBl
bmQobGF5ZXJJbXBsKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5j
aGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IGxh
eWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKGNoaWxkLT5kcmF3c0Nv
bnRlbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb2xsZWN0Tm9uRHJhd2lu
Z1Njcm9sbGFibGVMYXllcnMobGF5ZXJzLCBjaGlsZCk7CisgICAgfQorfQorCit2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbGxlY3RMYXllcnNJblBhaW50T3JkZXIoQ0NMYXllckxpc3QmIGxh
eWVycywgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgp
W2ldLmdldCgpOworICAgICAgICBpZiAobGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5
ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkgeworICAgICAgICAgICAg
Y29sbGVjdExheWVyc0luUGFpbnRPcmRlcihsYXllcnMsIGxheWVySW1wbC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGxheWVycy5h
cHBlbmQobGF5ZXJJbXBsKTsKKyAgICAgICAgY29sbGVjdE5vbkRyYXdpbmdTY3JvbGxhYmxlTGF5
ZXJzKGxheWVycywgbGF5ZXJJbXBsKTsKKyAgICB9Cit9CisKK0NDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4oY29uc3QgSW50
UG9pbnQmIHZpZXdwb3J0UG9pbnQpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHNjcm9sbGFi
bGUgc3VibGF5ZXJzLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCi0gICAgICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOworICAg
IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CisKKyAgICBpZiAoIXJvb3RM
YXllcigpKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9y
ZWQ7CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAgICBDQ0xheWVyTGlzdCBsYXllcnM7
CisgICAgaWYgKHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgY29sbGVj
dE5vbkRyYXdpbmdTY3JvbGxhYmxlTGF5ZXJzKGxheWVycywgcm9vdExheWVyKCkpOworICAgICAg
ICBjb2xsZWN0TGF5ZXJzSW5QYWludE9yZGVyKGxheWVycywgcm9vdExheWVyKCktPnJlbmRlclN1
cmZhY2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW4gc29tZSB0ZXN0cyB3ZSBkbyBu
b3QgaGF2ZSBhIHJlbmRlciBzdXJmYWNlLgorICAgICAgICBjb2xsZWN0QWxsTGF5ZXJzKGxheWVy
cywgcm9vdExheWVyKCkpOworICAgIH0KKworICAgIC8vIExvb2sgZm9yIGEgc2Nyb2xsYWJsZSBs
YXllciBpbiBmcm9udCB0byBiYWNrIG9yZGVyLgorICAgIGZvciAoaW50IGkgPSBsYXllcnMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9
IGxheWVyc1tpXS5nZXQoKTsKKyAgICAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0
YXR1cyBzdGF0dXMgPSBiZWdpblNjcm9sbGluZ0xheWVyKGxheWVySW1wbCwgdmlld3BvcnRQb2lu
dCk7CisgICAgICAgIC8vIEhpdHRpbmcgYSBub24tc2Nyb2xsYWJsZSBhbmQgbm9uLWNvbnRlbnQt
ZHJhd2luZyBvciBub24tY29tcG9zaXRlZCBjb250ZW50IGxheWVyIHNob3VsZAorICAgICAgICAv
LyBub3QgdGVybWluYXRlIHRoZSBzZWFyY2gsIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgdXMgdG8g
aWdub3JlIHRoZSBvdXRlciBzY3JvbGxpbmcgbGF5ZXIKKyAgICAgICAgLy8gZm9yIHRoZSByb290
IGxheWVyLgorICAgICAgICBpZiAoc3RhdHVzID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxJZ25vcmVkICYmICghbGF5ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSB8fCBsYXllckltcGwtPmlz
Tm9uQ29tcG9zaXRlZENvbnRlbnQoKSkpCisgICAgICAgICAgICBzdGF0dXMgPSBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOworICAgICAgICBpZiAoc3RhdHVzICE9IENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwor
ICAgIH0KKyAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGVsdGEpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9s
bEJ5IiwgdGhpcywgMCk7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1f
Y3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwotICAgIG1fY2xpZW50LT5zZXRO
ZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09u
SW1wbFRocmVhZCgpOworICAgIEludFNpemUgcGVuZGluZ0RlbHRhKHNjcm9sbERlbHRhKTsKKyAg
ICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwu
Z2V0KCk7CisgICAgd2hpbGUgKGxheWVySW1wbCAmJiAhcGVuZGluZ0RlbHRhLmlzWmVybygpKSB7
CisgICAgICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICAgICAgRmxv
YXRTaXplIHByZXZpb3VzRGVsdGEobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAg
ICAgIEZsb2F0U2l6ZSBzY2FsZWRQZW5kaW5nRGVsdGEocGVuZGluZ0RlbHRhKTsKKyAgICAgICAg
ICAgIC8vIFNpbmNlIHNjcm9sbERlbHRhIGlzIGluIHdpbmRvdyBjb29yZGluYXRlcywgaXQgYWxy
ZWFkeSBoYXMgdGhlIHBhZ2Ugc2NhbGUgYXBwbGllZC4KKyAgICAgICAgICAgIC8vIFRoaXMgbWF0
Y2hlcyB3aGF0IHRoZSByb290IHNjcm9sbCBsYXllciBleHBlY3RzLCBidXQgY2hpbGQgbGF5ZXJz
IGFyZSBzY3JvbGxlZCB1c2luZworICAgICAgICAgICAgLy8gdW5zY2FsZWQgY29udGVudCBjb29y
ZGluYXRlcyBpbnN0ZWFkLCBzbyB3ZSBoYXZlIHRvIHVuZG8gdGhlIHNjYWxpbmcgZm9yIHRoZW0u
IFRoZQorICAgICAgICAgICAgLy8gcGFnZSBzY2FsZSBkZWx0YSBuZWVkcyB0byBiZSB1bmFwcGxp
ZWQgd2l0aCBib3RoIGxheWVyIHR5cGVzIHNpbmNlIHRoZSBzY3JvbGwKKyAgICAgICAgICAgIC8v
IGNvb3JkaW5hdGVzIGRvIG5vdCByZXNwZWN0IGl0LgorICAgICAgICAgICAgaWYgKGxheWVySW1w
bCA9PSBtX3Njcm9sbExheWVySW1wbCkgeworICAgICAgICAgICAgICAgIHNjYWxlZFBlbmRpbmdE
ZWx0YS5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisgICAgICAgICAgICAgICAgbGF5ZXJJ
bXBsLT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzY2FsZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvIChtX3BhZ2VTY2Fs
ZSAqIG1fcGFnZVNjYWxlRGVsdGEpKTsKKyAgICAgICAgICAgICAgICBsYXllckltcGwtPnNjcm9s
bEJ5KHNjYWxlZFBlbmRpbmdEZWx0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBS
ZXNldCB0aGUgcGVuZGluZyBzY3JvbGwgZGVsdGEgdG8gemVybyBpZiB0aGUgbGF5ZXIgd2FzIGFi
bGUgdG8gbW92ZSBhbG9uZyB0aGUgcmVxdWVzdGVkCisgICAgICAgICAgICAvLyBheGlzLiBUaGlz
IGlzIHRvIGVuc3VyZSBpdCBpcyBwb3NzaWJsZSB0byBzY3JvbGwgZXhhY3RseSB0byB0aGUgYmVn
aW5uaW5nIG9yIGVuZCBvZiBhCisgICAgICAgICAgICAvLyBzY3JvbGwgYXJlYSByZWdhcmRsZXNz
IG9mIHRoZSBzY3JvbGwgc3RlcC4gRm9yIGRpYWdvbmFsIHNjcm9sbHMgdGhpcyBhbHNvIGF2b2lk
cyBhcHBseWluZworICAgICAgICAgICAgLy8gdGhlIHNjcm9sbCBvbiBvbmUgYXhpcyB0byBtdWx0
aXBsZSBsYXllcnMuCisgICAgICAgICAgICBpZiAocHJldmlvdXNEZWx0YS53aWR0aCgpICE9IGxh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgpKQorICAgICAgICAgICAgICAgIHBlbmRpbmdE
ZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLmhlaWdodCgp
ICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBw
ZW5kaW5nRGVsdGEuc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGxheWVySW1wbCA9
IGxheWVySW1wbC0+cGFyZW50KCk7CisgICAgfQorCisgICAgaWYgKHBlbmRpbmdEZWx0YSAhPSBz
Y3JvbGxEZWx0YSkgeworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJl
YWQoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7Cisg
ICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCgpCiB7CisgICAg
bV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuY2xlYXIoKTsKIH0KIAogYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpoYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkKQEAgLTUyNCwyNSArNjQyLDQ4
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlRW5kKCkKICAgICBtX2Ns
aWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKIH0KIAorc3RhdGljIGJvb2wgZGlk
U2Nyb2xsU3VidHJlZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQoreworICAgIGlmICghbGF5ZXJJ
bXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytp
KQorICAgICAgICBpZiAoZGlkU2Nyb2xsU3VidHJlZShsYXllckltcGwtPmNoaWxkcmVuKClbaV0u
Z2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9s
bEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKSBjb25zdAor
eworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAg
IEludFNpemUgc2Nyb2xsRGVsdGEgPSB0b1NpemUoZmxvb3JlZEludFBvaW50KGxheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKSkpOworICAgICAgICBpZiAobGF5ZXJJbXBsICE9IG1fc2Nyb2xsTGF5ZXJJ
bXBsKSB7CisgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUlu
Zm8gc2Nyb2xsOworICAgICAgICAgICAgc2Nyb2xsLmxheWVySWQgPSBsYXllckltcGwtPmlkKCk7
CisgICAgICAgICAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAg
ICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7Cisg
ICAgICAgIGxheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVs
dGEoKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNo
aWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xs
SW5mbywgbGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKK30KKwogUGFzc093blB0cjxD
Q1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVs
dGFzKCkKIHsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFk
b3B0UHRyKG5ldyBDQ1Njcm9sbEFuZFNjYWxlU2V0KCkpOwotICAgIGJvb2wgZGlkTW92ZSA9IG1f
c2Nyb2xsTGF5ZXJJbXBsICYmICghbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNa
ZXJvKCkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxLjBmKTsKKyAgICBib29sIGRpZE1vdmUgPSBt
X3Njcm9sbExheWVySW1wbCAmJiAoZGlkU2Nyb2xsU3VidHJlZShtX3Njcm9sbExheWVySW1wbC5n
ZXQoKSkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxKTsKICAgICBpZiAoIWRpZE1vdmUgfHwgbV9w
aW5jaEdlc3R1cmVBY3RpdmUgfHwgbV9wYWdlU2NhbGVBbmltYXRpb24pIHsKICAgICAgICAgbV9z
ZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IDE7CiAgICAg
ICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKICAgICB9CiAKKyAgICBjb2xsZWN0U2Ny
b2xsRGVsdGFzKHNjcm9sbEluZm8uZ2V0KCksIG1fc2Nyb2xsTGF5ZXJJbXBsLmdldCgpKTsKICAg
ICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gbV9w
YWdlU2NhbGVEZWx0YTsKIAotICAgIC8vIEZJWE1FOiB0cmFjayBzY3JvbGxzIGZyb20gbGF5ZXJz
IG90aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVw
ZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwt
PmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9s
bERlbHRhKCk7Ci0gICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLQotICAg
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRh
KTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGU0ZDAwNmQ0Zjg2ZTljMjZjZTcxY2I3ZWU0ZmFh
YTFiOTc1Zjc0NGEuLjg5OTQ3Y2QxZmExZGEyYTQ2OWVlYWJkYzI2ZWM5ZDExNDBlNWRhM2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEzNSwxMCArMTM1LDE3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBs
KiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOwog
ICAgIHZvaWQgb3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOworICAgIGJv
b2wgaXNDb250ZW50UG9pbnRXaXRoaW5MYXllcihDQ0xheWVySW1wbCosIGNvbnN0IEludFBvaW50
JiBjb250ZW50UG9pbnQpIGNvbnN0OworICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RMYXllcnNJblBh
aW50T3JkZXIoQ0NMYXllckxpc3QmLCBDQ1JlbmRlclN1cmZhY2UqKTsKKyAgICBzdGF0aWMgdm9p
ZCBjb2xsZWN0Tm9uRHJhd2luZ1Njcm9sbGFibGVMYXllcnMoQ0NMYXllckxpc3QmLCBDQ0xheWVy
SW1wbCopOworICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RBbGxMYXllcnMoQ0NMYXllckxpc3QmLCBD
Q0xheWVySW1wbCopOworICAgIFNjcm9sbFN0YXR1cyBiZWdpblNjcm9sbGluZ0xheWVyKENDTGF5
ZXJJbXBsKiwgY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpOworICAgIHZvaWQgY29sbGVj
dFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiwgQ0NMYXllckltcGwqKSBjb25zdDsK
IAogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKICAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IG1fc2Nyb2xsTGF5ZXJJbXBsOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9jdXJy
ZW50bHlTY3JvbGxpbmdMYXllckltcGw7CiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogICAg
IEludFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgYm9vbCBtX3Zpc2libGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDcyYmVjMmE3MTY2NGFmNDNjZDY0ZDAx
NGQyOGI4NDI2NTA5NWIyMDMuLmE2Y2E2ZjcwMjEyN2VjNzJlOTY2NTliMGNmYzJkN2MwMGJhZDc2
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0xNjUsNiAr
MTY1LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0NvbW1pdCgpCiAgICAgICAgIC8v
IEluIHRoZSBzaW5nbGUtdGhyZWFkZWQgY2FzZSwgdGhlIHNjcm9sbCBkZWx0YXMgc2hvdWxkIG5l
dmVyIGJlCiAgICAgICAgIC8vIHRvdWNoZWQgb24gdGhlIGltcGwgbGF5ZXIgdHJlZS4KICAgICAg
ICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhv
c3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxJbmZv
LT5yb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkpOwogICAgICAgICBBU1NFUlQoIXNjcm9sbEluZm8t
PnNjcm9sbHMuc2l6ZSgpKTsKICNlbmRpZgogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggNWYyODUxYmI1ODc3YzlmZjc0MjZk
N2E4YzFlNWQxMzg2NGZhMDJjZi4uOTUzZGJiNzg4MWUzNDg1MTZmY2VlNzMwNTY2Nzg4ZDVlNTA4
M2UwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2luY2x1
ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWNvbi5oIgpAQCAtODY4LDYg
Kzg2OSwyOCBAQCBib29sIENocm9tZUNsaWVudEltcGw6OnBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVh
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAordm9pZCBDaHJvbWVDbGllbnRJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKEdyYXBo
aWNzTGF5ZXIqIGxheWVyLCBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7CisgICAg
R3JhcGhpY3NMYXllckNocm9taXVtKiBsYXllckNocm9taXVtID0gc3RhdGljX2Nhc3Q8R3JhcGhp
Y3NMYXllckNocm9taXVtKj4obGF5ZXIpOworICAgIGxheWVyQ2hyb21pdW0tPnNldFNjcm9sbGFi
bGVBcmVhKHNjcm9sbGFibGVBcmVhKTsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIgPSBsYXllci0+cGxhdGZvcm1MYXllcigpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9s
bGFibGUodHJ1ZSk7CisgICAgcGxhdGZvcm1MYXllci0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldE1heFNj
cm9sbFBvc2l0aW9uKEludFNpemUoc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoSG9yaXpvbnRh
bFNjcm9sbGJhciksIHNjcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKFZlcnRpY2FsU2Nyb2xsYmFy
KSkpOworfQorCit2b2lkIENocm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbGF5ZXJD
aHJvbWl1bSA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSo+KGxheWVyKTsKKyAg
ICBsYXllckNocm9taXVtLT5zZXRTY3JvbGxhYmxlQXJlYSgwKTsKKworICAgIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIgPSBsYXllci0+cGxhdGZvcm1MYXllcigpOworICAgIHBsYXRmb3Jt
TGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldFNjcm9s
bFBvc2l0aW9uKEludFBvaW50KCkpOworICAgIHBsYXRmb3JtTGF5ZXItPnNldE1heFNjcm9sbFBv
c2l0aW9uKEludFNpemUoKSk7Cit9CisKIC8vIEZJWE1FOiBSZW1vdmUgQ2hyb21lQ2xpZW50SW1w
bDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lIGFuZCBDaHJvbWVDbGllbnRJ
bXBsOjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUKIC8vIG9uY2Ug
YWxsIHBvcnRzIGhhdmUgbW92ZWQgdG8gY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIChzZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzczICkuCiAvLyBGb3IgY2xp
ZW50LWJhc2VkIGdlb2xvY2F0aW9uLCB0aGVzZSBtZXRob2RzIGFyZSBub3cgaW1wbGVtZW50ZWQg
YXMgV2ViR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uIGFuZCBXZWJHZW9sb2Nh
dGlvbkNsaWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggMjExM2VjMWFmNGY4MWQ3ZDE5YmVj
YTY1MTg3MzIzMjE3N2FjNDdkZC4uYzE0MmFmYmQxNmZiNGIzMzdjZDljNWQzMDFlNmE1M2VhYTI1
ODA2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwu
aApAQCAtNDQsOSArNDQsMTEgQEAgY2xhc3MgQ29sb3JDaG9vc2VyQ2xpZW50OwogI2VuZGlmCiBj
bGFzcyBFbGVtZW50OwogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBHcmFwaGljc0xheWVyOwog
Y2xhc3MgUG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBSZW5k
ZXJCb3g7CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogc3Ry
dWN0IFdpbmRvd0ZlYXR1cmVzOwogfQpAQCAtMTY3LDYgKzE2OSw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwogCiAgICAgdmlydHVh
bCBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNv
bnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKik7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICNl
bmRpZgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3Qg
V2ViQ29yZTo6Tm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQ29udGVudExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b250ZW50TGF5ZXJJbXBsLmNwcAppbmRleCBlYTA4M2RlNTYyYTdlZmFhMGFmNGQ4ZWMyMmUyYTAw
ZGU3NWNmNjY2Li45YTIzMWU2NjY4MTkxMmY5Mjc3ZTFmZjMzYjcyNmE1ZmU0MWJiMmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNw
cApAQCAtNzIsNCArNzIsOCBAQCB2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50Q29udGVu
dHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcAogICAgIG1fY29udGVu
dENsaWVudC0+cGFpbnRDb250ZW50cyhjYW52YXMsIFdlYlJlY3QoY2xpcCkpOwogfQogCit2b2lk
IFdlYkNvbnRlbnRMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQor
eworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCBiYzFlMjYwMDg4YjQ3ODkyODllMjVl
YTQ5ZDQzODNjN2UwMjE3YjYyLi41ZGJlM2YwNzhhZjQ2NDU2MGY1YzE3OTYyMWIzZTM1M2VkMzA3
ZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5
ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
SW1wbC5oCkBAIC00Miw2ICs0Miw3IEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBXZWJDb250
ZW50TGF5ZXJJbXBsKFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CiAgICAg
dmlydHVhbCB+V2ViQ29udGVudExheWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jik7CiAKICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsKICAgICBi
b29sIG1fZHJhd3NDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAKaW5kZXggNGQ0MzlmZDQzNGJl
YzNmNTE2NDk5ZGFiNDEzMzUyYzRjZDZkMTJhOC4uOWIzNGE2MzI1NzdkNzFjNTU4YmM0YmU1ZmNi
M2RkNDhiOWVmOTEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuY3BwCkBAIC01OSw0ICs1OSw4IEBAIHZv
aWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmCiB7CiB9CiAKK3ZvaWQgV2ViRXh0ZXJuYWxUZXh0dXJlTGF5
ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikKK3sKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5oCmluZGV4IDFhZDJiODE5OThmMzBkZjZjOWVj
YTA5M2EwYzJmZjVhYmVlOTFjZWEuLjljY2I3N2U0NmE2NzZiYzg0ZGE2NDNhZWEyYTAxNzdlZjZh
ZGU4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFs
VGV4dHVyZUxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4
dGVybmFsVGV4dHVyZUxheWVySW1wbC5oCkBAIC00MCw2ICs0MCw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIH5XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwoKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjbGlwKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkxheWVySW1wbC5jcHAKaW5kZXggMDdhMTYyZDY0MWFjYmI1YjlhNDFhY2VlMjZkNzEwNjUzNjY0
ZDY1YS4uNjdjZTUzNzZmNzFmZWNlZmU0MDIzMmVmYzA4MzY3YWJjY2FhMGI3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCkBAIC01Miw0ICs1Miw4IEBA
IHZvaWQgV2ViTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmIGNsaXApCiB7CiB9CiAKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25z
dCBJbnRTaXplJikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCmluZGV4IDZiZGE4M2Y1NDdjMzE4NTBhMGE3YjA5
YzE1MzJhMjllNmJjMjg1YmQuLmZlYWZlZTYzMWU5NGM1YzEyNDU4ZGI0ODhhZDZkZGVmNDcwMmEw
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCkBAIC0zOSw2
ICszOSw3IEBAIHByb3RlY3RlZDoKICAgICBXZWJMYXllckltcGwoKTsKICAgICB2aXJ0dWFsIH5X
ZWJMYXllckltcGwoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKaW5kZXggMTY1NDA1ZDQ5MTA3NjdiOTY2MzNlOTdm
NjRkNzBlYjI3MzdjYThjNy4uZWVhMzk2YWQ1NzhiODQ5NGRjZjNjZWI3ODI3N2MyZWUyNDBmZGVl
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0
LmNwcApAQCAtMTYzLDQgKzE2MywyMiBAQCBURVNUKENDTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5TGF5
ZXJDaGFuZ2VzQXJlVHJhY2tlZFByb3Blcmx5KQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJU
UkVFX0RJRF9OT1RfQ0hBTkdFKHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKGFyYml0cmFyeUlu
dFNpemUpKTsKIH0KIAorVEVTVChDQ0xheWVySW1wbFRlc3QsIHZlcmlmeURlc2NlbmRhbnRTZWFy
Y2gpCit7CisgICAgLy8gVGhlIGNvbnN0cnVjdG9yIG9uIHRoaXMgd2lsbCBmYWtlIHRoYXQgd2Ug
YXJlIG9uIHRoZSBjb3JyZWN0IHRocmVhZC4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
c2V0SW1wbFRocmVhZDsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMik7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgzKTsKKworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBj
aGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CisKKyAgICBFWFBFQ1RfRkFMU0Uocm9vdC0+aXNM
YXllckluRGVzY2VuZGFudHMoMSkpOworICAgIEVYUEVDVF9UUlVFKHJvb3QtPmlzTGF5ZXJJbkRl
c2NlbmRhbnRzKDIpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290LT5pc0xheWVySW5EZXNjZW5kYW50
cygzKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPmlzTGF5ZXJJbkRlc2NlbmRhbnRzKDQpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggOWI4N2QwMGZhNmJmMDZh
ZTg3YzVmOTQxMmExNzE1ZGIzZjliZDBkZS4uNWRlYTZkZWUwZGIxZGUwZTVkZDA4YWI0OTdiMWE2
MWEyMTAxZmY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTEyNSwxNiArMTI1LDE2IEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFSZXBlYXRlZFNjcm9sbHMpCiAg
ICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm87CiAKICAgICBzY3JvbGxJ
bmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIEFTU0VSVF9FUShz
Y3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZv
LT5zY3JvbGxzLnNpemUoKSwgMHUpOwogICAgIEVYUEVDVF9FUShyb290LT5zZW50U2Nyb2xsRGVs
dGEoKSwgc2Nyb2xsRGVsdGEpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgp
LCByb290LT5pZCgpLCBzY3JvbGxEZWx0YSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnJv
b3RTY3JvbGxEZWx0YSwgc2Nyb2xsRGVsdGEpOwogCiAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTIo
LTUsIDI3KTsKICAgICByb290LT5zY3JvbGxCeShzY3JvbGxEZWx0YTIpOwogICAgIHNjcm9sbElu
Zm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgQVNTRVJUX0VRKHNj
cm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8t
PnNjcm9sbHMuc2l6ZSgpLCAwdSk7CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNlbnRTY3JvbGxEZWx0
YSgpLCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNj
cm9sbEluZm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsK
KyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBzY3JvbGxEZWx0YSAr
IHNjcm9sbERlbHRhMik7CiAKICAgICByb290LT5zY3JvbGxCeShJbnRTaXplKCkpOwogICAgIHNj
cm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CkBAIC0xNTUsNiAr
MTU1LDk0IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxz
Q29tbWl0QW5kUmVkcmF3KQogICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7CiB9
CiAKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdElnbm9yZWQpCit7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsK
KyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDAsIDApKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVY
UEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJl
cXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9s
bENoaWxkQ2FsbHNDb21taXRBbmRSZWRyYXcpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZh
bHNlKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgxKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBjaGlsZC0+c2V0TWF4
U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworCisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTAp
KTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJl
cXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hpbGQpCit7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAg
ICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNo
aWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKKyAgICBjaGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2li
bGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICBy
b290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3Qp
OworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxNSwgNSkp
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNF
KG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1p
dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENo
YW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9v
dC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIHJvb3QtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKyAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgSW50U2l6ZSgxMCwgMTApKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9v
dExheWVyKHJvb3QpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgRVhQ
RUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNj
cm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMo
MiwgMSwgMik7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSByb290IHNj
cm9sbCBkZWx0YS4KKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9
IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xs
SW5mby0+cm9vdFNjcm9sbERlbHRhLCBJbnRTaXplKHNjcm9sbERlbHRhLndpZHRoKCkgKiAyLCBz
Y3JvbGxEZWx0YS5oZWlnaHQoKSAqIDIpKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gc2Nyb2xsUm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgc2Nyb2xs
Um9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxk
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKKyAgICBjaGlsZC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwor
ICAgIGNoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY2hpbGQtPnNldFZpc2libGVM
YXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKDEwLCAxMCkpKTsKKyAgICByb290
LT5hZGRDaGlsZChzY3JvbGxSb290KTsKKyAgICBzY3JvbGxSb290LT5hZGRDaGlsZChjaGlsZCk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9sbFJvb3QpOworCisgICAgSW50U2l6
ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJl
Z2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQp
OworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBs
LT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMiwgMSwgMik7CisKKyAgICAvLyBUaGUgc2Nh
bGUgc2hvdWxkIG5vdCBhcHBseSB0byB0aGUgY2hpbGQgc2Nyb2xsIGRlbHRhLgorICAgIE93blB0
cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Nj
cm9sbERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBjaGls
ZC0+aWQoKSwgc2Nyb2xsRGVsdGEpOworfQorCiBjbGFzcyBCbGVuZFN0YXRlVHJhY2tlckNvbnRl
eHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAgIEJsZW5k
U3RhdGVUcmFja2VyQ29udGV4dCgpIDogbV9ibGVuZChmYWxzZSkgeyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBi
ZmExYjA4MjIyZTdlYmQwZmJkZTdmOTgwZTEyN2RjNDBmYTBjNDJhLi4xNzlmNWZkMDU1OWRmNDAw
MDM5ZTA3ODM0MzEwNmFiNWViZTJlODI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTkxMiw2ICs5MTIsMTIxIEBA
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0VmlzaWJsZSwgcnVuTXVsdGlUaHJlYWQpCiAg
ICAgcnVuVGVzdCh0cnVlKTsKIH0KIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJh
c2UgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgeworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xs
TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5
ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRN
YXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+cm9vdExheWVyKCktPmFkZENoaWxkKG1fcm9vdFNjcm9sbExheWVyKTsKKyAgICAgICAg
bV9jaGlsZExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgICAgICBtX2NoaWxk
TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUwLCA1MCkpOworICAgICAgICBtX2NoaWxkTGF5ZXIt
PnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+
YWRkQ2hpbGQobV9jaGlsZExheWVyKTsKKyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWlu
VGhyZWFkKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUo
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0KQorICAgIHsKKyAgICAgICAgSW50UG9p
bnQgcG9zaXRpb24gPSBtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAg
ICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xs
RGVsdGEpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAg
ICB9Citwcm90ZWN0ZWQ6CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290U2Nyb2xsTGF5ZXI7Cit9OworCitjbGFz
cyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQmFzZSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbENoaWxkTGF5ZXIoKQorICAgICAgICA6IG1fc2Nyb2xsQW1vdW50KDIsIDEpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRy
ZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUShtX3Jvb3RTY3JvbGxM
YXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGlmICghbV9sYXll
clRyZWVIb3N0LT5mcmFtZU51bWJlcigpKQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRM
YXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50
KCkgKyBtX3Njcm9sbEFtb3VudCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXll
cnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBp
ZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1w
bC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsU3RhcnRlZCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7
CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBs
LT5mcmFtZU51bWJlcigpID09IDIpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorcHJp
dmF0ZToKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50OworfTsKKworVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5NdWx0aVRocmVhZCkKK3sKKyAg
ICBydW5UZXN0VGhyZWFkZWQoKTsKK30KKworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9s
bENoaWxkTGF5ZXJCZXlvbmRMaW1pdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xs
QmFzZSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJC
ZXlvbmRMaW1pdCgpCisgICAgICAgIDogbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKDMsIDYp
CisgICAgICAgICwgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbigyMCwgMCkKKyAgICAgICAg
LCBtX3Njcm9sbEFtb3VudCgtMjUsIC01KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxC
YXNlOjpiZWdpblRlc3QoKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbFBv
c2l0aW9uKG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7CisgICAgICAgIG1fY2hpbGRMYXll
ci0+c2V0U2Nyb2xsUG9zaXRpb24obV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhv
c3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVO
dW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBDQ0xheWVySW1wbCogcm9vdCA9IGltcGwtPnJv
b3RMYXllcigpOworICAgICAgICAgICAgQ0NMYXllckltcGwqIHNjcm9sbFJvb3QgPSByb290LT5j
aGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gc2Ny
b2xsUm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGls
ZC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAg
ICAgICAgICBFWFBFQ1RfRVEoY2hpbGQtPnNjcm9sbERlbHRhKCksIEludFNpemUoLTIwLCAwKSk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9p
bml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxS
b290LT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKDAsIC01KSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1w
bCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsK
KyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgICAgIGltcGwt
PnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgp
OworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAgICAgICAg
ICAgIGVuZFRlc3QoKTsKKyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IEludFBvaW50IG1faW5p
dGlhbFJvb3RTY3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJbnRQb2ludCBtX2luaXRpYWxDaGls
ZFNjcm9sbFBvc2l0aW9uOworICAgIGNvbnN0IEludFNpemUgbV9zY3JvbGxBbW91bnQ7Cit9Owor
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCwg
cnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7Cit9CisKIGNsYXNzIFRl
c3RPcGFjaXR5Q2hhbmdlTGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBDQ0xheWVyRGVsZWdhdGUgewog
cHVibGljOgogICAgIFRlc3RPcGFjaXR5Q2hhbmdlTGF5ZXJEZWxlZ2F0ZShDQ0xheWVyVHJlZUhv
c3RUZXN0KiB0ZXN0KQpAQCAtOTI2LDYgKzEwNDEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dmlydHVhbCBib29sIHByZXNlcnZlczNEKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpIHsgfQogCiBwcml2YXRlOgogICAgIENDTGF5
ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124395</attachid>
            <date>2012-01-27 16:28:07 -0800</date>
            <delta_ts>2012-02-06 08:27:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120128002805.patch</filename>
            <type>text/plain</type>
            <size>52343</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzVhNmRkMzhjMzRmYmYz
MDI0MDA2NGJiNWRhZTM5Y2NmZWU3ZTdjOS4uNTFlZjI4OTFiNzAyZjdjY2EzY2JiNWNiODUzYmM2
YmQ1ZDczYThmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDEyLTAxLTI3ICBBYmhpc2hl
ayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gRG9jdW1l
bnRMb2FkZXI6OmRldGFjaEZyb21GcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
OTVlMjE0Mjk3Mjk1Y2I3MTZhMjY4MDk0MGQ0Mjg3NmM4MzAyMWY3YS4uNGM5MjI0MmFjYTI2ZDVk
MTNlOGEzZjZiOTZhMDE1ZTZhZWFiMDI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw1NyBAQAorMjAxMS0xMi0wOSAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBsYXllciBzY3JvbGxpbmcg
aW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MzM1MAorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyBzY3Jv
bGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICAgICAgU2Ny
b2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xsZWQgQ0NMYXllckltcGwg
YW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgV2ViVmlld0ltcGwgaW4gdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIElmIGEgbGF5ZXIgaGFzIG5vIHJvb20gdG8gc2Nyb2xsIGluIGEg
Z2l2ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCisgICAgICAgIGFuY2VzdG9yIGxheWVycyBpcyBz
Y3JvbGxlZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdD
bGllbnQuaDoKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcik6Cisg
ICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJU
cmVlVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6
YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
VHJlZVZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJU
cmVlVmlld0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAqIHNy
Yy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RIb29rczo6YXBwbHlS
b290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OlRlc3RIb29rczo6YXBwbHlM
YXllclNjcm9sbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjphcHBs
eVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhv
c3RDbGllbnQ6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2Nyb2xsU2ltcGxlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRpcGxlUmVkcmF3OjphcHBseVJv
b3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbEJhc2U6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxCYXNlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YWZ0ZXJUZXN0KToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5U2Nyb2xsVG9D
aGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2luQ29tbWl0T25DQ1Ro
cmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVy
OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OlRFU1RfRik6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpiZWdp
blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
ckJleW9uZExpbWl0OjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpkcmF3TGF5ZXJzT25D
Q1RocmVhZCk6CisKIDIwMTItMDEtMjYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtDaHJvbWl1bV0gQ2xlYW51cCBvZiBXZWJQb3B1cE1lbnVJbXBsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTI5ZmNlMDM2NGE4Mjg1NWFhNDA2
Mzk3MTU2ZTBmYmI0ZTNhOTUwZS4uNjAyMzZmNDZiZGVkNzA4OWQwMjY3OTMzYzA0YTcwMzhjY2Zj
MzA0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTQyLDUgKzE0
MiwxMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRPcGFxdWUoYm9vbCBvcGFxdWUp
CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnNldE9wYXF1ZShvcGFxdWUpOwogfQogCit2b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSkKK3sKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVs
dGEpOworICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5zY3JvbGxCeShz
Y3JvbGxEZWx0YSk7Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCA0MjY2NzljYWZhYmI3Mzk0
YzAyZTc5MDFiZTMzMmQ3YmNiNWUwODFhLi4zNmZmZmViZGVlZjIwNzk0MzA2MGQ0OTI0N2UxMTEy
YTFiMGQ4ODdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTQ2LDYgKzQ2
LDcgQEAgY2xhc3MgQ29udGVudExheWVyRGVsZWdhdGUgewogcHVibGljOgogICAgIHZpcnR1YWwg
fkNvbnRlbnRMYXllckRlbGVnYXRlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVu
dHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJikgPSAwOwogfTsKIAogLy8gQSBMYXllciB0
aGF0IHJlcXVpcmVzIGEgR3JhcGhpY3NDb250ZXh0IHRvIHJlbmRlciBpdHMgY29udGVudHMuCkBA
IC02Myw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9v
bCk7CiAKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKKwogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKENvbnRlbnRMYXllckRlbGVnYXRlKik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDMxYTUxMThmZmQw
M2QxODI0OGQwN2U1MWUyNGFlZWQzMmFmZTk3MGUuLjhhN2E2MzliZTkwNjkwMmI1ZTQ4ZDlmMjNm
OWFjYjA3OTE0NmExZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApA
QCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogCiAjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC03MCw2ICs3MSw3IEBAIFBhc3NPd25QdHI8R3JhcGhp
Y3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVu
dCkKIAogR3JhcGhpY3NMYXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hyb21pdW0oR3JhcGhp
Y3NMYXllckNsaWVudCogY2xpZW50KQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisgICAg
LCBtX3Njcm9sbGFibGVBcmVhKDApCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29u
dGVudHNMYXllcikKICAgICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihmYWxz
ZSkKICAgICAsIG1faW5TZXRDaGlsZHJlbihmYWxzZSkKQEAgLTY3Niw2ICs2NzgsMTMgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBJbnRSZWMKICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250
ZXh0LCBjbGlwKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xs
RGVsdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IDM5YjM2N2I5ZDNmMGUyZjgzYTMyMGY5MDJiNTQwNjJmYjkzMWU4NjYuLjQxODI4ZDNlMWNk
MjQ4NTBkNzdhMzQ3YjFhY2EzZTA3Njc1NDkxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5oCkBAIC00MSw2ICs0MSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IExheWVyQ2hyb21pdW07CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIAogY2xhc3MgR3JhcGhpY3NM
YXllckNocm9taXVtIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBDb250ZW50TGF5ZXJE
ZWxlZ2F0ZSB7CiBwdWJsaWM6CkBAIC0xMDAsNiArMTAxLDEwIEBAIHB1YmxpYzoKIAogICAgIC8v
IENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOworICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CisKKyAg
ICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGVBcmVhOyB9CisgICAgdm9pZCBzZXRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEpIHsgbV9zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhOyB9CiAK
ICAgICAvLyBFeHBvc2VkIGZvciB0ZXN0cy4KICAgICBMYXllckNocm9taXVtKiBjb250ZW50c0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9CkBAIC0xMzUsNiAr
MTQwLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zvcm1M
YXllcjsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVyOwogCisgICAg
U2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7CisKICAgICBlbnVtIENvbnRlbnRzTGF5
ZXJQdXJwb3NlIHsKICAgICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAgICAgQ29udGVu
dHNMYXllckZvckltYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA0YTkyNzUxZjczMDgy
MjQ5MDNmMDRkOTU3NWQ5MDI3ZGM4MWQxN2FhLi5lNWNlZGJhOGExZGM4ZGE5ZjJmZjhlNTJjYmJi
MGVjNGI4NjZkNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzYwLDYgKzM2MCwxNCBA
QCB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBz
Y3JvbGxQb3NpdGlvbikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIExheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0
aW9uKQoreworICAgIGlmIChtX21heFNjcm9sbFBvc2l0aW9uID09IG1heFNjcm9sbFBvc2l0aW9u
KQorICAgICAgICByZXR1cm47CisgICAgbV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBv
c2l0aW9uOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
c2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpCiB7CiAgICAgaWYgKG1fc2Nyb2xsYWJsZSA9
PSBzY3JvbGxhYmxlKQpAQCAtNDI3LDYgKzQzNSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVz
aFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9u
KG1fcG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsK
ICAgICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgbGF5
ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVy
LT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKICAgICBsYXllci0+
c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VXBkYXRlUmVjdChtX3Vw
ZGF0ZVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDY4NWRlMGMwMzRiOTdlMDMxMGVjYWU5
NDdlMWRkMTU5Nzk0YjZkZDQuLjE1ODhkYTZjMDUyZmUyNjYwNDA3NWRlYTRiYWVmYTVmN2FjYTcy
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEyNSw2ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0K
IAorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYpOworICAgIGNv
bnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXhTY3Jv
bGxQb3NpdGlvbjsgfQorCiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wpOwogICAgIGJvb2wg
c2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogCkBAIC0yNDgsNiAr
MjUxLDcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3QgbV92
aXNpYmxlTGF5ZXJSZWN0OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisgICAgSW50
U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGJvb2wgbV9zY3JvbGxhYmxlOwogICAgIEZs
b2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKaW5kZXggODZkZTAwZDJjYWU4NGExOWIwZTMyNTA5MjMwM2VhM2Jm
ZWNkN2RkNC4uODU2OTQ3M2ViY2VhNGNiMjdkODdkZGZjMzc3OTExNGJlMjcwY2EyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtOTUsNiArOTUsMTUgQEAgdm9pZCBDQ0xheWVySW1wbDo6
cmVtb3ZlQWxsQ2hpbGRyZW4oKQogICAgICAgICBtX2NoaWxkcmVuWzBdLT5yZW1vdmVGcm9tUGFy
ZW50KCk7CiB9CiAKK2Jvb2wgQ0NMYXllckltcGw6OmlzTGF5ZXJJbkRlc2NlbmRhbnRzKGludCBs
YXllcklkKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXS0+aWQoKSA9PSBsYXllcklk
IHx8IG1fY2hpbGRyZW5baV0tPmlzTGF5ZXJJbkRlc2NlbmRhbnRzKGxheWVySWQpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBD
Q0xheWVySW1wbDo6Y2xlYXJDaGlsZExpc3QoKQogewogICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsK
QEAgLTE3OSw5ICsxODgsOSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJl
KExheWVyUmVuZGVyZXJDaHJvbWl1bSopCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LXZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbCkKK3ZvaWQg
Q0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQogewotICAgIElu
dFNpemUgbmV3RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Nyb2xsOworICAgIEZsb2F0U2l6ZSBu
ZXdEZWx0YSA9IG1fc2Nyb2xsRGVsdGEgKyBzY3JvbGw7CiAgICAgSW50U2l6ZSBtaW5EZWx0YSA9
IC10b1NpemUobV9zY3JvbGxQb3NpdGlvbik7CiAgICAgSW50U2l6ZSBtYXhEZWx0YSA9IG1fbWF4
U2Nyb2xsUG9zaXRpb24gLSB0b1NpemUobV9zY3JvbGxQb3NpdGlvbik7CiAgICAgLy8gQ2xhbXAg
bmV3RGVsdGEgc28gdGhhdCBwb3NpdGlvbiArIGRlbHRhIHN0YXlzIHdpdGhpbiBzY3JvbGwgYm91
bmRzLgpAQCAtNDg4LDcgKzQ5Nyw3IEBAIHZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKICAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbERl
bHRhKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQordm9pZCBDQ0xheWVySW1wbDo6c2V0U2Ny
b2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBpZiAobV9zY3Jv
bGxEZWx0YSA9PSBzY3JvbGxEZWx0YSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmgKaW5kZXggMDBlMGFkZjhhNTFmZGVjMDRhOWY0MjVmMDQ1N2FhMzM4OGNlYTNhYS4uZWYxYjA3
ZmMxZjQ3MjI0YTZkZTU0NjM0NjY1ZDFhOWJkNDUwMzE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENoaWxkKFBhc3NSZWZQdHI8
Q0NMYXllckltcGw+KTsKICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKICAgICB2b2lkIHJl
bW92ZUFsbENoaWxkcmVuKCk7CisgICAgYm9vbCBpc0xheWVySW5EZXNjZW5kYW50cyhpbnQgbGF5
ZXJJZCkgY29uc3Q7CiAKICAgICB2b2lkIHNldE1hc2tMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPik7CiAgICAgQ0NMYXllckltcGwqIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFz
a0xheWVyLmdldCgpOyB9CkBAIC0xNjEsMTYgKzE2MiwxNiBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
SW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7cmV0dXJuIG1fbWF4U2Nyb2xsUG9z
aXRpb247IH0KICAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1h
eFNjcm9sbFBvc2l0aW9uKSB7IG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlv
bjsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbERlbHRhOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJik7
CisgICAgY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYpOwog
CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZURl
bHRhOyB9CiAgICAgdm9pZCBzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCk7CiAKLSAgICBjb25zdCBJ
bnRTaXplJiBzZW50U2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3NlbnRTY3JvbGxEZWx0
YTsgfQotICAgIHZvaWQgc2V0U2VudFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNlbnRTY3Jv
bGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsgfQorICAgIGNv
bnN0IEZsb2F0U2l6ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Ny
b2xsRGVsdGE7IH0KKyAgICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0YShjb25zdCBGbG9hdFNpemUm
IHNlbnRTY3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsg
fQogCi0gICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpOworICAgIHZvaWQg
c2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpOwogCiAgICAgYm9vbCBzY3JvbGxhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxhYmxl
KGJvb2wgc2Nyb2xsYWJsZSkgeyBtX3Njcm9sbGFibGUgPSBzY3JvbGxhYmxlOyB9CkBAIC0yNTks
OCArMjYwLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CiAKLSAgICBJ
bnRTaXplIG1fc2Nyb2xsRGVsdGE7Ci0gICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKKyAg
ICBGbG9hdFNpemUgbV9zY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zZW50U2Nyb2xsRGVs
dGE7CiAgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGZsb2F0IG1fcGFnZVNj
YWxlRGVsdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGI5OTIzNjAy
YmM5OWFkNDVkMGFiNTlmMTNiNjFjYmFkOGE3MWE2ODUuLmU3NDQ0YTg4NzVkZTkwNDc2NTYwMjA1
Mjc2Mzc3OTNkYTA2ZTc0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAt
NDc5LDE1ICs0NzksMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0
ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CiB9CiAKK3N0YXRpYyBMYXllckNocm9taXVt
KiBmaW5kTGF5ZXJCeUlkKExheWVyQ2hyb21pdW0qIGxheWVyLCBpbnQgaWQpCit7CisgICAgaWYg
KCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPmlkKCkgPT0gaWQp
CisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5
ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91
bmQgPSBmaW5kTGF5ZXJCeUlkKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBpZCk7CisgICAg
ICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUo
Y29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVzaGlu
ZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0gICAg
aWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFpbmZv
LnJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSB8fCBpbmZvLnBhZ2VTY2FsZURlbHRhICE9IDEpCisg
ICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKGluZm8ucm9vdFNjcm9sbERlbHRh
LCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgp
ID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xs
RGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGlu
Zm8ucGFnZVNjYWxlRGVsdGEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zY3Jv
bGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gZmluZExh
eWVyQnlJZChtX3Jvb3RMYXllci5nZXQoKSwgaW5mby5zY3JvbGxzW2ldLmxheWVySWQpOworICAg
ICAgICBpZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIHN0YXRpY19jYXN0PENvbnRlbnRMYXllckNocm9taXVtKj4obGF5ZXIp
LT5zY3JvbGxCeShpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOworICAgIH0KIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDJlMGNi
Y2YyYzU4NWU4MjE1ZDI4NmRlZTliNjFlNTM1MTgwY2ZmYWQuLjBkMjQ2ZjUzOTM1MDU1YTY5NTA0
ODY5MTZhYzMyMjdlY2FkNDVlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogc3RydWN0IENDU2Nyb2xsQW5kU2Nh
bGVTZXQgewogICAgIFZlY3RvcjxDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUlu
Zm8+IHNjcm9sbHM7CisgICAgSW50U2l6ZSByb290U2Nyb2xsRGVsdGE7CiAgICAgZmxvYXQgcGFn
ZVNjYWxlRGVsdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CmluZGV4IDZjMmM3NDI2ZmMwYjk1MDAxZGVlZThhNzA5NGVjOWNkOGY1MGM5NWYuLjRlZWUzMWQ3
ZWMxMmY5NzYwZDRjZjc0ZWNiOTA5ZDVlZWY2NTBiNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgImNjL0ND
RGFtYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmgiCkBAIC0xMDAsNyAr
MTAxLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJl
Z2luVGltZU1zKQogICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwt
PnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7Cisg
ICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xs
UG9zaXRpb24oKSArIGZsb29yZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVs
dGEoKSkpOwogCiAgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBh
Z2VTY2FsZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNjYWxlKTsKICAgICBJbnRT
aXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1l
KGZyYW1lQmVnaW5UaW1lTXMpOwpAQCAtMTE5LDcgKzEyMCw3IEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9z
aXRpb24sCiAgICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xs
UG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRT
aXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlv
bigpICsgZmxvb3JlZEludFBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKSk7
CiAgICAgc2Nyb2xsVG90YWwuc2NhbGUobV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2Nh
bGVUb3RhbCA9IG1fcGFnZVNjYWxlICogbV9wYWdlU2NhbGVEZWx0YTsKICAgICBJbnRTaXplIHNj
YWxlZENvbnRlbnRTaXplID0gbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClbMF0tPmNvbnRl
bnRCb3VuZHMoKTsKQEAgLTE4Nyw5ICsxODgsOCBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUlu
U3VyZmFjZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwog
ICAgIHJldHVybiBzdXJmYWNlRGFtYWdlUmVjdDsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlcyhDQ0xheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKLSAgICBDQ0xheWVyTGlzdCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXll
cigpKTsKIAogICAgIGlmICghcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKSkKQEAgLTE5OSwx
MSArMTk5LDIwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFz
c2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcykKIAogICAgIHJvb3RMYXllcigpLT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50KCksIHZpZXdwb3J0U2l6ZSgpKSk7CiAKKyAgICAvLyBEdXJp
bmcgdGVzdGluZyB3ZSBtYXkgbm90IGhhdmUgYW4gYWN0aXZlIHJlbmRlcmVyLgorICAgIGludCBt
YXhUZXh0dXJlU2l6ZSA9IG1fbGF5ZXJSZW5kZXJlciA/IGxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS5tYXhUZXh0dXJlU2l6ZSA6IDI1NjsKKwogICAgIHsKICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOwotICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIo
KSwgcm9vdExheWVyKCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCks
ICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNp
emUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIoKSwgcm9vdExheWVyKCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyKCktPnJl
bmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6
ZSk7CiAgICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRl
clBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCit7CisgICAgQ0NMYXllckxpc3QgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBjYWxjdWxhdGVSZW5kZXJTdXJmYWNlcyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
dXNpbmdQYXJ0aWFsU3dhcCkKICAgICAgICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290
TGF5ZXIoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CkBAIC0zMjYsOSArMzM1LDEwIEBAIHN0
YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IGxheWVyKQogewogICAgIG1fcm9vdExheWVySW1wbCA9IGxheWVyOwotCi0gICAgLy8gRklY
TUU6IEN1cnJlbnRseSwgdGhpcyBvbmx5IGZpbmRzIHRoZSBmaXJzdCBzY3JvbGxhYmxlIGxheWVy
LgogICAgIG1fc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNjcm9sbExheWVyKG1fcm9vdExheWVySW1w
bC5nZXQoKSk7CisKKyAgICBpZiAobV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgJiYgKCFt
X3Jvb3RMYXllckltcGwgfHwgIW1fcm9vdExheWVySW1wbC0+aXNMYXllckluRGVzY2VuZGFudHMo
bV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwtPmlkKCkpKSkKKyAgICAgICAgbV9jdXJyZW50
bHlTY3JvbGxpbmdMYXllckltcGwuY2xlYXIoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTM5NywxNSArNDA3LDEzIEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0IHBh
Z2VTY2FsZSwgZmxvYXQgbWluCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Ny
b2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCiB7Ci0gICAgaWYg
KHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQorICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgcGFn
ZVNjYWxlQ2hhbmdlID09IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGFsc28gbmVl
ZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBzcGFjZS4K
LSAgICBpZiAobV9zY3JvbGxMYXllckltcGwpIHsKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0
YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgICAgICBzY3JvbGxEZWx0
YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0
U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICAvLyBXZSBhbHNvIG5lZWQgdG8g
Y29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhIGZvciB0aGUgcm9vdCBsYXllciB0byBwYWdl
U2NhbGUgc3BhY2UuCisgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXllcklt
cGwtPnNjcm9sbERlbHRhKCk7CisgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdl
KTsKKyAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwog
fQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZURlbHRhKGZsb2F0IGRl
bHRhKQpAQCAtNDQ3LDkgKzQ1NSw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRl
TWF4U2Nyb2xsUG9zaXRpb24oKQogICAgIC8vIGhhdmluZyBhIHZlcnRpY2FsIHNjcm9sbGJhciBi
dXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdy4KICAgICBtYXhTY3JvbGwuY2xhbXBOZWdhdGl2ZVRv
WmVybygpOwogCisgICAgLy8gV2Ugb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgcm9vdCBsYXllciBz
Y3JvbGwgcmFuZ2UsIHNpbmNlIHRoZSBjaGlsZAorICAgIC8vIGxheWVycyB1c2UgdW5zY2FsZWQg
c2Nyb2xsIGNvb3JkaW5hdGVzLgogICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRNYXhTY3JvbGxQ
b3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9ETyhhZWxpYXMpOiBBbHNvIHVwZGF0ZSBz
dWJsYXllcnMuCiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXco
KQpAQCAtNDU3LDI4ICs0NjUsMTA0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVl
ZHNSZWRyYXcoKQogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwog
fQogCi1DQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnNjcm9sbEJlZ2luKGNvbnN0IEludFBvaW50JikKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1w
bDo6aXNDb250ZW50UG9pbnRXaXRoaW5MYXllcihDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25z
dCBJbnRQb2ludCYgY29udGVudFBvaW50KSBjb25zdAogewotICAgIC8vIFRPRE86IENoZWNrIGZv
ciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8ICFt
X3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQotICAgICAgICByZXR1cm4gU2Nyb2xsSWdu
b3JlZDsKKyAgICBJbnRSZWN0IGxheWVyQ29udGVudFJlY3QobGF5ZXJJbXBsLT52aXNpYmxlTGF5
ZXJSZWN0KCkpOworICAgIC8vIFRoZSB2aXNpYmxlIGxheWVyIHJlY3QgaXMgaW4gc2NhbGVkIGNv
b3JkaW5hdGVzLCBzbyB1bmRvIHRoZSBwYWdlIHNjYWxlIHVubGVzcyBpdCBpcyB0aGUKKyAgICAv
LyBub24tY29tcG9zaXRlZCBjb250ZW50IHdoZXJlIHRoZSBjb250ZW50IHBvaW50IGlzIGFsc28g
aW4gc2NhbGVkIGNvb3JkaW5hdGVzLiBOb3RlIHRoYXQKKyAgICAvLyB0aGVyZSBpcyBubyBuZWVk
IHRvIHVuZG8gdGhlIHBhZ2Ugc2NhbGUgZGVsdGEsIGJlY2F1c2UgdGhlIGxheWVyIGNvbnRlbnQg
cmVjdCBpcyBvbmx5CisgICAgLy8gc2NhbGVkIHdpdGggdGhlIG9yaWdpbmFsIHBhZ2Ugc2NhbGUu
CisgICAgaWYgKCFsYXllckltcGwtPmlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSkKKyAgICAgICAg
bGF5ZXJDb250ZW50UmVjdC5zY2FsZSgxIC8gbV9wYWdlU2NhbGUpOworICAgIHJldHVybiBsYXll
ckNvbnRlbnRSZWN0LmNvbnRhaW5zKGNvbnRlbnRQb2ludCk7Cit9CisKK0NDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5TY3JvbGxpbmdM
YXllcihDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2lu
dCkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBpZiAoIWxheWVySW1wbC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBJbnRQb2ludCBjb250ZW50UG9pbnQobGF5ZXJJ
bXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2aWV3cG9ydFBv
aW50KSk7CisgICAgaWYgKGxheWVySW1wbC0+ZHJhd3NDb250ZW50KCkgJiYgIWlzQ29udGVudFBv
aW50V2l0aGluTGF5ZXIobGF5ZXJJbXBsLCBjb250ZW50UG9pbnQpKQorICAgICAgICByZXR1cm4g
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKworICAgIGlmICghbGF5ZXJJbXBs
LT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsSWdub3JlZDsKIAotICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIG1fY3VycmVudGx5
U2Nyb2xsaW5nTGF5ZXJJbXBsID0gbGF5ZXJJbXBsOworICAgIHJldHVybiBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsU3RhcnRlZDsKK30KKworQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYg
dmlld3BvcnRQb2ludCkKK3sKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVh
cigpOworCisgICAgaWYgKCFyb290TGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworCisgICAgLy8gTG9vayBmb3IgYSBzY3JvbGxhYmxl
IGxheWVyIGluIGZyb250IHRvIGJhY2sgb3JkZXIuCisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0
b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6
RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisgICAgQ0NMYXllckxpc3QgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdDsKKyAgICBjYWxjdWxhdGVSZW5kZXJTdXJmYWNlcyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0
ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5
ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDQ0xheWVySW1wbCog
bGF5ZXJJbXBsID0gKml0OworICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
dHVzIHN0YXR1cyA9IGJlZ2luU2Nyb2xsaW5nTGF5ZXIobGF5ZXJJbXBsLCB2aWV3cG9ydFBvaW50
KTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFp
bGVkKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlm
ICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVy
SW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5
KHNjcm9sbERlbHRhKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQo
KTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBJbnRT
aXplIHBlbmRpbmdEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgQ0NMYXllckltcGwqIGxheWVySW1w
bCA9IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmdldCgpOworICAgIHdoaWxlIChsYXll
ckltcGwgJiYgIXBlbmRpbmdEZWx0YS5pc1plcm8oKSkgeworICAgICAgICBpZiAobGF5ZXJJbXBs
LT5zY3JvbGxhYmxlKCkpIHsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBwcmV2aW91c0RlbHRhKGxh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgICAgICAgICBGbG9hdFNpemUgc2NhbGVkUGVu
ZGluZ0RlbHRhKHBlbmRpbmdEZWx0YSk7CisgICAgICAgICAgICAvLyBTaW5jZSBzY3JvbGxEZWx0
YSBpcyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMsIGl0IGFscmVhZHkgaGFzIHRoZSBwYWdlIHNjYWxl
IGFwcGxpZWQuCisgICAgICAgICAgICAvLyBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgcm9vdCBzY3Jv
bGwgbGF5ZXIgZXhwZWN0cywgYnV0IGNoaWxkIGxheWVycyBhcmUgc2Nyb2xsZWQgdXNpbmcKKyAg
ICAgICAgICAgIC8vIHVuc2NhbGVkIGNvbnRlbnQgY29vcmRpbmF0ZXMgaW5zdGVhZCwgc28gd2Ug
aGF2ZSB0byB1bmRvIHRoZSBzY2FsaW5nIGZvciB0aGVtLiBUaGUKKyAgICAgICAgICAgIC8vIHBh
Z2Ugc2NhbGUgZGVsdGEgbmVlZHMgdG8gYmUgdW5hcHBsaWVkIHdpdGggYm90aCBsYXllciB0eXBl
cyBzaW5jZSB0aGUgc2Nyb2xsCisgICAgICAgICAgICAvLyBjb29yZGluYXRlcyBkbyBub3QgcmVz
cGVjdCBpdC4KKyAgICAgICAgICAgIGlmIChsYXllckltcGwgPT0gbV9zY3JvbGxMYXllckltcGwp
IHsKKyAgICAgICAgICAgICAgICBzY2FsZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNj
YWxlRGVsdGEpOworICAgICAgICAgICAgICAgIGxheWVySW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVu
ZGluZ0RlbHRhKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NhbGVk
UGVuZGluZ0RlbHRhLnNjYWxlKDEgLyAobV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhKSk7
CisgICAgICAgICAgICAgICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHBlbmRpbmcgc2Nyb2xs
IGRlbHRhIHRvIHplcm8gaWYgdGhlIGxheWVyIHdhcyBhYmxlIHRvIG1vdmUgYWxvbmcgdGhlIHJl
cXVlc3RlZAorICAgICAgICAgICAgLy8gYXhpcy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9z
c2libGUgdG8gc2Nyb2xsIGV4YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAg
ICAgICAgICAgLy8gc2Nyb2xsIGFyZWEgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZv
ciBkaWFnb25hbCBzY3JvbGxzIHRoaXMgYWxzbyBhdm9pZHMgYXBwbHlpbmcKKyAgICAgICAgICAg
IC8vIHRoZSBzY3JvbGwgb24gb25lIGF4aXMgdG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAg
ICAgaWYgKHByZXZpb3VzRGVsdGEud2lkdGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCku
d2lkdGgoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAg
ICAgICAgICBpZiAocHJldmlvdXNEZWx0YS5oZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERl
bHRhKCkuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgw
KTsKKyAgICAgICAgfQorICAgICAgICBsYXllckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpOwor
ICAgIH0KKworICAgIGlmIChwZW5kaW5nRGVsdGEgIT0gc2Nyb2xsRGVsdGEpIHsKKyAgICAgICAg
bV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgICAgIG1fY2xpZW50
LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzY3JvbGxFbmQoKQogeworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsLmNsZWFyKCk7CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aGF2ZVdoZWVs
RXZlbnRIYW5kbGVycygpCkBAIC01MjEsMjUgKzYwNSw0OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnBpbmNoR2VzdHVyZUVuZCgpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCk7CiB9CiAKK3N0YXRpYyBib29sIGRpZFNjcm9sbFN1YnRyZWUoQ0NMYXllcklt
cGwqIGxheWVySW1wbCkKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1pl
cm8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKGRpZFNjcm9s
bFN1YnRyZWUobGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5m
bywgQ0NMYXllckltcGwqIGxheWVySW1wbCkgY29uc3QKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0g
dG9TaXplKGZsb29yZWRJbnRQb2ludChsYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKKyAgICAg
ICAgaWYgKGxheWVySW1wbCAhPSBtX3Njcm9sbExheWVySW1wbCkgeworICAgICAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgICAg
IHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgpOworICAgICAgICAgICAgc2Nyb2xsLnNj
cm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxz
LmFwcGVuZChzY3JvbGwpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcm9sbEluZm8t
PnJvb3RTY3JvbGxEZWx0YSA9IHNjcm9sbERlbHRhOworICAgICAgICBsYXllckltcGwtPnNldFNl
bnRTY3JvbGxEZWx0YShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIH0KKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQor
ICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRy
ZW4oKVtpXS5nZXQoKSk7Cit9CisKIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NM
YXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRT
Y2FsZVNldCgpKTsKLSAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVs
dGEgIT0gMS4wZik7CisgICAgYm9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKGRp
ZFNjcm9sbFN1YnRyZWUobV9zY3JvbGxMYXllckltcGwuZ2V0KCkpIHx8IG1fcGFnZVNjYWxlRGVs
dGEgIT0gMSk7CiAgICAgaWYgKCFkaWRNb3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1f
cGFnZVNjYWxlQW5pbWF0aW9uKSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Ny
b2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSAxOwogICAgICAgICByZXR1cm4gc2Nyb2xsSW5mby5y
ZWxlYXNlKCk7CiAgICAgfQogCisgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdl
dCgpLCBtX3Njcm9sbExheWVySW1wbC5nZXQoKSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEg
PSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IG1fcGFnZVNjYWxlRGVsdGE7CiAKLSAgICAv
LyBGSVhNRTogdHJhY2sgc2Nyb2xscyBmcm9tIGxheWVycyBvdGhlciB0aGFuIHRoZSByb290Ci0g
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKLSAgICBz
Y3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAgIHNjcm9sbC5zY3Jv
bGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgIHNjcm9sbElu
Zm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7Ci0KLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0
U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7Ci0KICAgICByZXR1cm4gc2Nyb2xs
SW5mby5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApp
bmRleCBkZWJhNmM4NmI4YmMyY2ZhYWQ0NDY0OWQyMjM5MGZkZWM2ZjFhYmUyLi5jOTM3NjEyOTAy
ZTI3YjFkZjc0ODhkMTBlNjZmYWYxYWI4N2IzMDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oCkBAIC0xMzIsMTIgKzEzMiwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRq
dXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCk7CiAgICAgdm9pZCB1cGRhdGVNYXhT
Y3JvbGxQb3NpdGlvbigpOwogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xh
eWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOworICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyU3VyZmFjZXMoQ0NMYXllckxpc3Qm
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2Vz
KENDUmVuZGVyUGFzc0xpc3QmKTsKICAgICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVu
ZGVyUGFzc0xpc3QmKTsKKyAgICBib29sIGlzQ29udGVudFBvaW50V2l0aGluTGF5ZXIoQ0NMYXll
ckltcGwqLCBjb25zdCBJbnRQb2ludCYgY29udGVudFBvaW50KSBjb25zdDsKKyAgICBTY3JvbGxT
dGF0dXMgYmVnaW5TY3JvbGxpbmdMYXllcihDQ0xheWVySW1wbCosIGNvbnN0IEludFBvaW50JiB2
aWV3cG9ydFBvaW50KTsKKyAgICB2b2lkIGNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NTY3JvbGxBbmRT
Y2FsZVNldCosIENDTGF5ZXJJbXBsKikgY29uc3Q7CiAKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJl
ckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jv
b3RMYXllckltcGw7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Njcm9sbExheWVySW1wbDsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsOwog
ICAgIENDU2V0dGluZ3MgbV9zZXR0aW5nczsKICAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwog
ICAgIGJvb2wgbV92aXNpYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cAppbmRleCA3MmJlYzJhNzE2NjRhZjQzY2Q2NGQwMTRkMjhiODQyNjUwOTViMjAzLi5hNmNhNmY3
MDIxMjdlYzcyZTk2NjU5YjBjZmMyZDdjMDBiYWQ3Njk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTY1LDYgKzE2NSw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6ZG9Db21taXQoKQogICAgICAgICAvLyBJbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNh
c2UsIHRoZSBzY3JvbGwgZGVsdGFzIHNob3VsZCBuZXZlciBiZQogICAgICAgICAvLyB0b3VjaGVk
IG9uIHRoZSBpbXBsIGxheWVyIHRyZWUuCiAgICAgICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxl
U2V0PiBzY3JvbGxJbmZvID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRh
cygpOworICAgICAgICBBU1NFUlQoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLmlzWmVybygp
KTsKICAgICAgICAgQVNTRVJUKCFzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSk7CiAjZW5kaWYK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGll
bnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwu
Y3BwCmluZGV4IGZiMDdiNGMxMDNmYjI3OWEyNGM0ZjE2NzhlYjU5ODhmMzIxNzNiYTYuLjkyZTQw
ZjZiMzRhMGQ1MzE5ZjhlYTI3MTQxOGVlNzE0N2JjZDgxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC01Myw2ICs1Myw3IEBACiAj
aW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIkljb24uaCIKQEAgLTg2OCw2ICs4NjksMjggQEAgYm9vbCBDaHJvbWVDbGll
bnRJbXBsOjpwYWludEN1c3RvbU92ZXJoYW5nQXJlYShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6
YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhKQoreworICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogZ3Jh
cGhpY3NMYXllckNocm9taXVtID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtKj4o
bGF5ZXIpOworICAgIGdyYXBoaWNzTGF5ZXJDaHJvbWl1bS0+c2V0U2Nyb2xsYWJsZUFyZWEoc2Ny
b2xsYWJsZUFyZWEpOworCisgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bSA9IGxheWVy
LT5wbGF0Zm9ybUxheWVyKCk7CisgICAgbGF5ZXJDaHJvbWl1bS0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKKyAgICBsYXllckNocm9taXVtLT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxhYmxlQXJlYS0+
c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgbGF5ZXJDaHJvbWl1bS0+c2V0TWF4U2Nyb2xsUG9zaXRp
b24oSW50U2l6ZShzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShIb3Jpem9udGFsU2Nyb2xsYmFy
KSwgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpKSk7Cit9CisK
K3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBncmFwaGljc0xheWVyQ2hy
b21pdW0gPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihsYXllcik7CisgICAg
Z3JhcGhpY3NMYXllckNocm9taXVtLT5zZXRTY3JvbGxhYmxlQXJlYSgwKTsKKworICAgIExheWVy
Q2hyb21pdW0qIGxheWVyQ2hyb21pdW0gPSBsYXllci0+cGxhdGZvcm1MYXllcigpOworICAgIGxh
eWVyQ2hyb21pdW0tPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIGxheWVyQ2hyb21pdW0tPnNl
dFNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworICAgIGxheWVyQ2hyb21pdW0tPnNldE1heFNj
cm9sbFBvc2l0aW9uKEludFNpemUoKSk7Cit9CisKIC8vIEZJWE1FOiBSZW1vdmUgQ2hyb21lQ2xp
ZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lIGFuZCBDaHJvbWVD
bGllbnRJbXBsOjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUKIC8v
IG9uY2UgYWxsIHBvcnRzIGhhdmUgbW92ZWQgdG8gY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uIChz
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzczICkuCiAvLyBG
b3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uLCB0aGVzZSBtZXRob2RzIGFyZSBub3cgaW1wbGVt
ZW50ZWQgYXMgV2ViR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uIGFuZCBXZWJH
ZW9sb2NhdGlvbkNsaWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggOGZkMjQ4OGQ5ZWU2NjEw
ZmUxMzg1OGI4ZWM5ZTU1ODBjNzU0MDUyOC4uNzYxODUyMDU1OGJhY2VkYzhhZjYyZDVjNzQxM2Nl
MDhjNjE3NWY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuaApAQCAtNDQsOSArNDQsMTEgQEAgY2xhc3MgQ29sb3JDaG9vc2VyQ2xpZW50OwogI2Vu
ZGlmCiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBHcmFwaGljc0xh
eWVyOwogY2xhc3MgUG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFz
cyBSZW5kZXJCb3g7CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2lu
Owogc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogfQpAQCAtMTY3LDYgKzE2OSw5IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwogCiAgICAg
dmlydHVhbCBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2Vy
cygpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIo
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKik7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUo
Y29uc3QgV2ViQ29yZTo6Tm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAppbmRleCA0ZjY0ZDU0NzFlMzk2NjUwZjdjYTc1ZTll
MTYyNWM2NmQ3MmYxMWI2Li4zNDk5MTM1MTJlNWFkNGEzZGY4MTY1MmNhZDc4OTI2ZGMzN2Y1ZmZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmNwcApAQCAtNzIsNCArNzIsOCBAQCB2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcAogICAgIG1f
Y29udGVudENsaWVudC0+cGFpbnRDb250ZW50cyhjYW52YXMsIFdlYlJlY3QoY2xpcCkpOwogfQog
Cit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCA1MWYzNDRmN2NhZjEyNzEx
MjZhYzdiNDI2OGVkNTQ2MTIxNDIxOWQ4Li45ZDI4NWFlNmVlZjllNGI3NjE5ZTk0NWEwYTBmMDEx
ZDVlYjhlNGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVu
dExheWVySW1wbC5oCkBAIC00NCw2ICs0NCw3IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIENvbnRl
bnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jik7CiAKICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsKICAgICBi
b29sIG1fZHJhd3NDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVySW1wbFRlc3QuY3BwCmluZGV4IDI3NzI4Y2JlZjBlM2IzMTg3OTNkMGRkYzEwZmMzN2Fk
NjBmMTdkN2QuLjEwZWMyZjRhY2ViNDZiYzViZjUxZjNiNjkzODBiZjEzOTg0ZmMyNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKQEAg
LTE2NCw0ICsxNjQsMjIgQEAgVEVTVChDQ0xheWVySW1wbFRlc3QsIHZlcmlmeUxheWVyQ2hhbmdl
c0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJFRV9ESURf
Tk9UX0NIQU5HRShyb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihhcmJpdHJhcnlJbnRTaXplKSk7
CiB9CiAKK1RFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlEZXNjZW5kYW50U2VhcmNoKQorewor
ICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBvbiB0aGlzIHdpbGwgZmFrZSB0aGF0IHdlIGFyZSBvbiB0
aGUgY29ycmVjdCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxU
aHJlYWQ7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDEpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDIpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMyk7CisKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFk
ZENoaWxkKGdyYW5kQ2hpbGQpOworCisgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPmlzTGF5ZXJJbkRl
c2NlbmRhbnRzKDEpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290LT5pc0xheWVySW5EZXNjZW5kYW50
cygyKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdC0+aXNMYXllckluRGVzY2VuZGFudHMoMykpOwor
ICAgIEVYUEVDVF9GQUxTRShyb290LT5pc0xheWVySW5EZXNjZW5kYW50cyg0KSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDg2ODNiODRiMDNjYTM2ZmZjZDg0YzI1
ZGI2MTk1NGY2ZTI2NjRkYzIuLjdlNjNjZDUzNGM2Mjg3NDE2MThhNGNkNGM2YjU3ZTYzZTM4ZWIx
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC04OCw2ICs4OCwxNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKGludCBpZCwgY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGxheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZShpZCk7Cisg
ICAgICAgIGxheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBsYXllci0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworICAgICAgICBsYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24pOwor
ICAgICAgICBsYXllci0+c2V0Qm91bmRzKHNpemUpOworICAgICAgICBsYXllci0+c2V0TWF4U2Ny
b2xsUG9zaXRpb24oSW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpICogMikp
OworICAgICAgICByZXR1cm4gbGF5ZXI7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIG1fYWx3YXlzSW1wbFRocmVhZDsKICAgICBPd25QdHI8Q0NMYXll
clRyZWVIb3N0SW1wbD4gbV9ob3N0SW1wbDsKQEAgLTE0MCwxNiArMTUxLDE2IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFSZXBlYXRlZFNjcm9sbHMpCiAgICAg
T3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm87CiAKICAgICBzY3JvbGxJbmZv
ID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIEFTU0VSVF9FUShzY3Jv
bGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5z
Y3JvbGxzLnNpemUoKSwgMHUpOwogICAgIEVYUEVDVF9FUShyb290LT5zZW50U2Nyb2xsRGVsdGEo
KSwgc2Nyb2xsRGVsdGEpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBy
b290LT5pZCgpLCBzY3JvbGxEZWx0YSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnJvb3RT
Y3JvbGxEZWx0YSwgc2Nyb2xsRGVsdGEpOwogCiAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTIoLTUs
IDI3KTsKICAgICByb290LT5zY3JvbGxCeShzY3JvbGxEZWx0YTIpOwogICAgIHNjcm9sbEluZm8g
PSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgQVNTRVJUX0VRKHNjcm9s
bEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNj
cm9sbHMuc2l6ZSgpLCAwdSk7CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNlbnRTY3JvbGxEZWx0YSgp
LCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9s
bEluZm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKKyAg
ICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBzY3JvbGxEZWx0YSArIHNj
cm9sbERlbHRhMik7CiAKICAgICByb290LT5zY3JvbGxCeShJbnRTaXplKCkpOwogICAgIHNjcm9s
bEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CkBAIC0yMjUsNyArMjM2
LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwaW5jaEdlc3R1cmUpCiAgICAg
ICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgbWluUGFnZVNjYWxlKTsK
IAogICAgICAgICAvLyBQdXNoZWQgdG8gKDAsMCkgdmlhIGNsYW1waW5nIGFnYWluc3QgY29udGVu
dHMgbGF5ZXIgc2l6ZS4KLSAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCks
IHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKC01MCwgLTUwKSk7CisgICAgICAgIEVYUEVDVF9F
UShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIEludFNpemUoLTUwLCAtNTApKTsKICAgICB9
CiB9CiAKQEAgLTI1NSw3ICsyNjYsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHBhZ2VTY2FsZUFuaW1hdGlvbikKIAogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNl
dD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKICAgICAg
ICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCAyKTsKLSAgICAgICAgZXhw
ZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXpl
KC01MCwgLTUwKSk7CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVs
dGEsIEludFNpemUoLTUwLCAtNTApKTsKICAgICB9CiAKICAgICAvLyBBbmNob3Igem9vbS1vdXQK
QEAgLTI3MiwxMCArMjgzLDEzNSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBh
Z2VTY2FsZUFuaW1hdGlvbikKICAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNj
cm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CiAgICAgICAgIEVY
UEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgbWluUGFnZVNjYWxlKTsKICAgICAg
ICAgLy8gUHVzaGVkIHRvICgwLDApIHZpYSBjbGFtcGluZyBhZ2FpbnN0IGNvbnRlbnRzIGxheWVy
IHNpemUuCi0gICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBzY3JvbGxM
YXllci0+aWQoKSwgSW50U2l6ZSgtNTAsIC01MCkpOworICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xs
SW5mby0+cm9vdFNjcm9sbERlbHRhLCBJbnRTaXplKC01MCwgLTUwKSk7CiAgICAgfQogfQogCitU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RJZ25vcmVkKQoreworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAg
cm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3QpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgw
LCAwKSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1Rf
RkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0
Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGls
ZENhbGxzQ29tbWl0QW5kUmVkcmF3KQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEw
KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDAp
OworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworCisgICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5
KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBF
Q1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVz
dENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlz
c2VzQ2hpbGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+
YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIG1faG9z
dEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcp
OworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0JhY2tmYWNpbmdDaGlsZCkKK3sKKyAg
ICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNo
aWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VT
aXplKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9v
dExheWVyKHJvb3QpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6
ZSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4LnJvdGF0
ZTNkKDE4MCwgMCwgMCk7CisgICAgY2hpbGQtPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgIGNo
aWxkLT5zZXREb3VibGVTaWRlZChmYWxzZSk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
SWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQ
RUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBJbnRTaXpl
IHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAg
IHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRT
aXplKHN1cmZhY2VTaXplKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAg
IGludCBwYWdlU2NhbGUgPSAyOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdp
bihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsK
KyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+
c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwgMSwgcGFnZVNjYWxlKTsKKwor
ICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3Qgc2Nyb2xsIGRlbHRhLgor
ICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+
cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Ny
b2xsRGVsdGEsIEludFNpemUoc2Nyb2xsRGVsdGEud2lkdGgoKSAqIHBhZ2VTY2FsZSwgc2Nyb2xs
RGVsdGEuaGVpZ2h0KCkgKiBwYWdlU2NhbGUpKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBJbnRTaXpl
IHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3RTY3JvbGwg
PSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIo
MiwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIHJvb3QtPmFkZENoaWxkKHJv
b3RTY3JvbGwpOworICAgIHJvb3RTY3JvbGwtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXpl
KHN1cmZhY2VTaXplKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIGlu
dCBwYWdlU2NhbGUgPSAyOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJ
bnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAg
ICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2V0
UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwgMSwgcGFnZVNjYWxlKTsKKworICAg
IC8vIFRoZSBzY2FsZSBzaG91bGQgbm90IGFwcGx5IHRvIHRoZSBjaGlsZCBzY3JvbGwgZGVsdGEu
CisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBs
LT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8u
Z2V0KCksIGNoaWxkLT5pZCgpLCBzY3JvbGxEZWx0YSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgc2Nyb2xsU2NhbGVkTGF5ZXIpCit7CisgICAgSW50U2l6ZSBzdXJmYWNl
U2l6ZSgxMCwgMTApOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9s
bGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6
ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoMTUsIDE1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsK
KyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMC41LCAwLjUsIDAu
NSk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCAx
NSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7Cit9CisKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsU2NhbGVkTm9uQ29tcG9zaXRlZExheWVyKQor
eworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpOworICAgIHJvb3QtPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQodHJ1ZSk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIG1faG9zdEltcGwtPnNldFZp
ZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBzaG91bGQg
bm90IGJlIHJlbW92ZWQgZnJvbSBub24tY29tcG9zaXRlZCBsYXllciBib3VuZHMuCisgICAgRVhQ
RUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCAxNSkpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNj
YWxlRmFjdG9yQW5kTGltaXRzKDAuNSwgMC41LCAwLjUpOworICAgIEVYUEVDVF9FUShtX2hvc3RJ
bXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxNSwgMTUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbElnbm9yZWQpOworfQorCiBjbGFzcyBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQ6IHB1
YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAgIEJsZW5kU3RhdGVU
cmFja2VyQ29udGV4dCgpIDogbV9ibGVuZChmYWxzZSkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCAwY2IyNjA1
ZThhNmQzZDMyMmZjZWIwZmM3M2FhN2FmZTY5NDkyMDkwLi5lMzVmMTU2ZjMxNDIzNTk1YzYzYTU4
OWY5YWI2MTIwMzIwYzk0ODgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTk4OSw2ICs5ODksNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIHByZXNlcnZlczNEKCkgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpIHsgfQogCiBwcml2
YXRlOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKQEAgLTExMzUsNyArMTEzNiw4
IEBAIGNsYXNzIE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBDb250ZW50TGF5ZXJE
ZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgICAgTU9DS19DT05TVF9NRVRIT0QwKHByZXNlcnZlczNELCBib29sKCkpOwot
ICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0Jikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXpl
JikgeyB9CiAgICAgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKSB7IH0KIH07CiAKQEAgLTEyMjgs
NCArMTIzMCwxMjMgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RBdG9taWNDb21taXQsIHJ1
bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3QodHJ1ZSk7CiB9CiAKK2NsYXNzIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxCYXNlIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGlj
OgorICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290
U2Nyb2xsTGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0
ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTAp
KTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX3Jv
b3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RTY3Jv
bGxMYXllcik7CisgICAgICAgIG1fY2hpbGRMYXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpj
cmVhdGUoJm1fbW9ja0RlbGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRCb3VuZHMo
SW50U2l6ZSg1MCwgNTApKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRJc0RyYXdhYmxlKHRy
dWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAg
IG1fY2hpbGRMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwor
ICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+YWRkQ2hpbGQobV9jaGlsZExheWVyKTsKKyAgICAg
ICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZs
b2F0KQorICAgIHsKKyAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBtX3Jvb3RTY3JvbGxMYXll
ci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9s
bFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBNb2NrQ29u
dGVudExheWVyRGVsZWdhdGUgbV9tb2NrRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290U2Nyb2xs
TGF5ZXI7Cit9OworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7CitwdWJsaWM6CisgICAgQ0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIoKQorICAgICAgICA6IG1fc2Nyb2xsQW1v
dW50KDIsIDEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9u
Q0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIEVYUEVD
VF9FUShtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7Cisg
ICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5mcmFtZU51bWJlcigpKQorICAgICAgICAgICAg
RVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBv
c2l0aW9uKCksIEludFBvaW50KCkgKyBtX3Njcm9sbEFtb3VudCk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwp
CisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxC
eShtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDIpCisgICAgICAgICAgICBlbmRU
ZXN0KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50
OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5N
dWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0KHRydWUpOworfQorCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0IDogcHVibGljIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxCYXNlIHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllckJleW9uZExpbWl0KCkKKyAgICAgICAgOiBtX2luaXRpYWxSb290U2Nyb2xs
UG9zaXRpb24oMywgNikKKyAgICAgICAgLCBtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uKDIw
LCAwKQorICAgICAgICAsIG1fc2Nyb2xsQW1vdW50KC0yNSwgLTUpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbEJhc2U6OmJlZ2luVGVzdCgpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXll
ci0+c2V0U2Nyb2xsUG9zaXRpb24obV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKTsKKyAgICAg
ICAgbV9jaGlsZExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxDaGlsZFNjcm9sbFBv
c2l0aW9uKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAobV9sYXllclRy
ZWVIb3N0LT5mcmFtZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBy
b290ID0gaW1wbC0+cm9vdExheWVyKCk7CisgICAgICAgICAgICBDQ0xheWVySW1wbCogc2Nyb2xs
Um9vdCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgICAgICBDQ0xheWVySW1w
bCogY2hpbGQgPSBzY3JvbGxSb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICAgICAg
RVhQRUNUX0VRKGNoaWxkLT5zY3JvbGxQb3NpdGlvbigpLCBtX2luaXRpYWxDaGlsZFNjcm9sbFBv
c2l0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGlsZC0+c2Nyb2xsRGVsdGEoKSwgSW50
U2l6ZSgtMjAsIDApKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxSb290LT5zY3JvbGxQ
b3NpdGlvbigpLCBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24pOworICAgICAgICAgICAgRVhQ
RUNUX0VRKHNjcm9sbFJvb3QtPnNjcm9sbERlbHRhKCksIEludFNpemUoMCwgLTUpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xh
eWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVt
YmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKGltcGwtPnNjcm9sbEJlZ2luKElu
dFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAg
ICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOworICAgICAgICAgICAgaW1w
bC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9
PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3Qg
SW50UG9pbnQgbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uOworICAgIGNvbnN0IEludFBvaW50
IG1faW5pdGlhbENoaWxkU2Nyb2xsUG9zaXRpb247CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9s
bEFtb3VudDsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
ckJleW9uZExpbWl0LCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0KHRydWUpOworfQor
CiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125653</attachid>
            <date>2012-02-06 08:28:01 -0800</date>
            <delta_ts>2012-02-09 07:59:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120206162759.patch</filename>
            <type>text/plain</type>
            <size>53616</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2Nzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDZiYjQ1MDllMDE3ZDYz
Y2RiMDk5OTA3Y2ExODgxZmU5NmZiMWJhMC4uYjkzMTkzZjc4MmQzYjMyYzFhMzFmMjUzY2U4YWM4
NzliOWRmMGZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBv
c2l0b3IgdGhyZWFkLgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3Ig
ZWFjaCBzY3JvbGxlZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRo
ZSBXZWJWaWV3SW1wbCBpbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgSWYgYSBsYXllciBo
YXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAg
ICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9sbGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5z
aWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVy
Q29udGVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
SW5zaWRlU2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpsYXllckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDEyLTAyLTA2ICBIYXlhdG8g
SXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgPHNoYWRvdz4gZWxlbWVu
dCwgd2hpY2ggaXMgZ3VhcmRlZCBieSBTSEFET1dfRE9NIGZsYWcuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDRmYmFmZmRkY2ZkZTEyZTJiZDgwNTBmNGI3ZTZjYzg0MDJkMDBmZjcuLjZh
MDk2MDJmYjVmMzM4NzJkYzc0ZTg4Mjc1ZmY0YTFjYjNmYThkZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMTItMDkgIFNhbWkgS3lvc3RpbGEgIDxz
a3lvc3RpbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgbGF5
ZXIgc2Nyb2xsaW5nIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNTAKKworICAgICAgICBUaGlzIHBhdGNo
IGVuYWJsZXMgc2Nyb2xsaW5nIGNoaWxkIGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQu
CisgICAgICAgIFNjcm9sbCBkZWx0YXMgYXJlIGFjY3VtdWxhdGVkIGZvciBlYWNoIHNjcm9sbGVk
IENDTGF5ZXJJbXBsIGFuZAorICAgICAgICBzeW5jaHJvbml6ZWQgdG8gdGhlIFdlYlZpZXdJbXBs
IGluIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRv
IHNjcm9sbCBpbiBhIGdpdmVuIGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3Rv
ciBsYXllcnMgaXMgc2Nyb2xsZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJM
YXllclRyZWVWaWV3Q2xpZW50Lmg6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjphZGRPclVwZGF0ZVNjcm9sbGlu
Z0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cmVtb3ZlU2Nyb2xs
aW5nTGF5ZXIpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmg6CisgICAgICAgICog
c3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlVmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlMYXllclNjcm9sbCk6CisgICAgICAgICog
c3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBwbHlMYXllclNjcm9sbCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToK
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVySW1w
bFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpURVNUX0YpOgorICAg
ICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpUZXN0
SG9va3M6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpUZXN0
SG9va3M6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9z
dENsaWVudDo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0Q2xpZW50OjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZTo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRT
Y2FsZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxNdWx0aXBsZVJl
ZHJhdzo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OkNDTGF5
ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphcHBseUxheWVy
U2Nyb2xsKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFm
dGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjph
cHBseVNjcm9sbFRvQ2hpbGRMYXllcik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcik6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpiZWdp
bkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllcjo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpURVNU
X0YpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJl
eW9uZExpbWl0OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlv
bmRMaW1pdDo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6
ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorCiAyMDEyLTAyLTA0ICBTaGF3biBTaW5naCAgPHNoYXdu
c2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQWRkIHN1cHBvcnQgdG8g
Zm9yY2UgZnVsbCBkYW1hZ2UgaW4gQ0NEYW1hZ2VUcmFja2VyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggYWE3ZmI1Y2Y0NmIwNjI1N2ZmNWJmMjM1ZmIzYmYwNzg0NTM1
NDk5Zi4uY2NiNTZiZTYyZTUzZDc0ZTMzMmEwMWEzNDlkYmVhNDBkOWRmN2MyNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTQ5LDUgKzE0OSwxMiBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpzZXRPcGFxdWUoYm9vbCBvcGFxdWUpCiAgICAgICAgIG1fdGV4
dHVyZVVwZGF0ZXItPnNldE9wYXF1ZShvcGFxdWUpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNo
cm9taXVtOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBzZXRT
Y3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVsdGEpOworICAgIGlmICht
X2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Cit9
CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaAppbmRleCAzZTg2ODZkMGEwZGJjZTJjMWU4YzYxYjYwMTgxNDAy
NjM3NjZiZjIzLi4zZmZhNDZmYTE4NzhiY2MzOTI0MzQ0ZWIzMGYwMGI5YTZkNThiOGZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgY2xhc3MgQ29u
dGVudExheWVyRGVsZWdhdGUgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRlbnRMYXllckRl
bGVnYXRlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxC
eShjb25zdCBJbnRTaXplJikgPSAwOwogfTsKIAogLy8gQSBMYXllciB0aGF0IHJlcXVpcmVzIGEg
R3JhcGhpY3NDb250ZXh0IHRvIHJlbmRlciBpdHMgY29udGVudHMuCkBAIC02NCw2ICs2NSw4IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CiAKKyAgICB2b2lk
IHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENv
bnRlbnRMYXllckNocm9taXVtKENvbnRlbnRMYXllckRlbGVnYXRlKik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDMxYTUxMThmZmQwM2QxODI0OGQwN2U1MWUy
NGFlZWQzMmFmZTk3MGUuLjhhN2E2MzliZTkwNjkwMmI1ZTQ4ZDlmMjNmOWFjYjA3OTE0NmExZDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNTMsNiArNTMsNyBA
QAogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVB
cmVhLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CkBAIC03MCw2ICs3MSw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIAogR3JhcGhpY3NM
YXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNsaWVudCog
Y2xpZW50KQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisgICAgLCBtX3Njcm9sbGFibGVB
cmVhKDApCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29udGVudHNMYXllcikKICAg
ICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihmYWxzZSkKICAgICAsIG1faW5T
ZXRDaGlsZHJlbihmYWxzZSkKQEAgLTY3Niw2ICs2NzgsMTMgQEAgdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRSZWMKICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBjbGlwKTsKIH0K
IAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbiht
X3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVsdGEpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDM5YjM2N2I5ZDNm
MGUyZjgzYTMyMGY5MDJiNTQwNjJmYjkzMWU4NjYuLjQxODI4ZDNlMWNkMjQ4NTBkNzdhMzQ3YjFh
Y2EzZTA3Njc1NDkxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC00
MSw2ICs0MSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hyb21pdW07
CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIAogY2xhc3MgR3JhcGhpY3NMYXllckNocm9taXVtIDog
cHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJs
aWM6CkBAIC0xMDAsNiArMTAxLDEwIEBAIHB1YmxpYzoKIAogICAgIC8vIENvbnRlbnRMYXllckRl
bGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CisKKyAgICBTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9Cisg
ICAgdm9pZCBzZXRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEp
IHsgbV9zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhOyB9CiAKICAgICAvLyBFeHBvc2Vk
IGZvciB0ZXN0cy4KICAgICBMYXllckNocm9taXVtKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9CkBAIC0xMzUsNiArMTQwLDggQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zvcm1MYXllcjsKICAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVyOwogCisgICAgU2Nyb2xsYWJsZUFyZWEq
IG1fc2Nyb2xsYWJsZUFyZWE7CisKICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAg
ICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdl
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCBiMmY3MDE0MWI0N2E1ZDQ3YjQ0MDI5MzgwZDM4
Y2IzZGMzYzViMzI4Li41MzRjNjMzM2NkYTgwNjBkOTUzYmQ0NzJmOGU0ZDIzMjExZTQ5MTdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzYyLDYgKzM2MiwxNCBAQCB2b2lkIExheWVyQ2hy
b21pdW06OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikK
ICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnNldE1heFNj
cm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKQoreworICAgIGlm
IChtX21heFNjcm9sbFBvc2l0aW9uID09IG1heFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgbV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOworICAgIHNl
dE5lZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0U2Nyb2xsYWJsZShi
b29sIHNjcm9sbGFibGUpCiB7CiAgICAgaWYgKG1fc2Nyb2xsYWJsZSA9PSBzY3JvbGxhYmxlKQpA
QCAtNDI5LDYgKzQzNyw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOwog
ICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0
U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXItPnNldE1heFNjcm9s
bFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRy
YW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1f
dHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VXBkYXRlUmVjdChtX3VwZGF0ZVJlY3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IDc2NGY3MzAxNTViNTQ1MzdjZGE0YzczODFiM2ZkM2JjYjc5NjA2
NGQuLjIwOGNmZDBmMWJmZDcxZDIwOWJiZDZjYWQxYTcwMzVmOGVhYmZhNzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKQEAgLTEyNiw2ICsxMjYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxQ
b3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0
TWF4U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEludFNpemUmIG1h
eFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQor
CiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wpOwogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogCkBAIC0yNjQsNiArMjY3LDcgQEAgcHJpdmF0
ZToKICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0
OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisgICAgSW50U2l6ZSBtX21heFNjcm9s
bFBvc2l0aW9uOwogICAgIGJvb2wgbV9zY3JvbGxhYmxlOwogICAgIEZsb2F0UG9pbnQgbV9wb3Np
dGlvbjsKICAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAKaW5kZXggODFmOTcxMmUwZmFjMGY5ODEyODg4ZGEyZTczZmYzM2VmZDYwNjVhNC4uODBlZTUy
MDI1MzBjN2QwMDdmMGE2MGQxODE3ZTQ3NmRkY2RjNWNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcApAQCAtOTUsNiArOTUsMTUgQEAgdm9pZCBDQ0xheWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRy
ZW4oKQogICAgICAgICBtX2NoaWxkcmVuWzBdLT5yZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAKK2Jv
b2wgQ0NMYXllckltcGw6OmlzTGF5ZXJJbkRlc2NlbmRhbnRzKGludCBsYXllcklkKSBjb25zdAor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAobV9jaGlsZHJlbltpXS0+aWQoKSA9PSBsYXllcklkIHx8IG1fY2hpbGRyZW5b
aV0tPmlzTGF5ZXJJbkRlc2NlbmRhbnRzKGxheWVySWQpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6Y2xl
YXJDaGlsZExpc3QoKQogewogICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKQEAgLTE3OSw5ICsxODgs
OSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSopCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgQ0NMYXllcklt
cGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbCkKK3ZvaWQgQ0NMYXllckltcGw6OnNj
cm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQogewotICAgIEludFNpemUgbmV3RGVsdGEg
PSBtX3Njcm9sbERlbHRhICsgc2Nyb2xsOworICAgIEZsb2F0U2l6ZSBuZXdEZWx0YSA9IG1fc2Ny
b2xsRGVsdGEgKyBzY3JvbGw7CiAgICAgSW50U2l6ZSBtaW5EZWx0YSA9IC10b1NpemUobV9zY3Jv
bGxQb3NpdGlvbik7CiAgICAgSW50U2l6ZSBtYXhEZWx0YSA9IG1fbWF4U2Nyb2xsUG9zaXRpb24g
LSB0b1NpemUobV9zY3JvbGxQb3NpdGlvbik7CiAgICAgLy8gQ2xhbXAgbmV3RGVsdGEgc28gdGhh
dCBwb3NpdGlvbiArIGRlbHRhIHN0YXlzIHdpdGhpbiBzY3JvbGwgYm91bmRzLgpAQCAtNDg4LDcg
KzQ5Nyw3IEBAIHZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbikKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0
cmVlKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhKQordm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3Qg
RmxvYXRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBpZiAobV9zY3JvbGxEZWx0YSA9PSBzY3Jv
bGxEZWx0YSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggN2JhZTIw
MTc0NGI0ZWMyMDgxNGYzMDUyOGFiNmJjZjJkMmQ4NzkyZC4uMTRkMDZiNjg4MzY1M2Y3M2JlNmMx
NTRjY2RhMTIyMzE3ZWQ1MDFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC01OCw2ICs1OCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsK
ICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKICAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVu
KCk7CisgICAgYm9vbCBpc0xheWVySW5EZXNjZW5kYW50cyhpbnQgbGF5ZXJJZCkgY29uc3Q7CiAK
ICAgICB2b2lkIHNldE1hc2tMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CiAgICAgQ0NM
YXllckltcGwqIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyLmdldCgpOyB9
CkBAIC0xNjIsMTYgKzE2MywxNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Ny
b2xsUG9zaXRpb24oKSBjb25zdCB7cmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KICAgICB2
b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9u
KSB7IG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsgfQogCi0gICAgY29u
c3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbERlbHRhOyB9
Ci0gICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJik7CisgICAgY29uc3QgRmxv
YXRTaXplJiBzY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsRGVsdGE7IH0KKyAg
ICB2b2lkIHNldFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYpOwogCiAgICAgZmxvYXQgcGFn
ZVNjYWxlRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZURlbHRhOyB9CiAgICAgdm9p
ZCBzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCk7CiAKLSAgICBjb25zdCBJbnRTaXplJiBzZW50U2Ny
b2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3NlbnRTY3JvbGxEZWx0YTsgfQotICAgIHZvaWQg
c2V0U2VudFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNlbnRTY3JvbGxEZWx0YSkgeyBtX3Nl
bnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsgfQorICAgIGNvbnN0IEZsb2F0U2l6ZSYg
c2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Nyb2xsRGVsdGE7IH0KKyAg
ICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0YShjb25zdCBGbG9hdFNpemUmIHNlbnRTY3JvbGxEZWx0
YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsgfQogCi0gICAgdm9pZCBz
Y3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpOworICAgIHZvaWQgc2Nyb2xsQnkoY29uc3Qg
RmxvYXRTaXplJiBzY3JvbGwpOwogCiAgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wgc2Nyb2xsYWJs
ZSkgeyBtX3Njcm9sbGFibGUgPSBzY3JvbGxhYmxlOyB9CkBAIC0yNjAsOCArMjYxLDggQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CiAKLSAgICBJbnRTaXplIG1fc2Nyb2xs
RGVsdGE7Ci0gICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9z
Y3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zZW50U2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6
ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGZsb2F0IG1fcGFnZVNjYWxlRGVsdGE7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDUwZDc2YTVlOGM1NDJkNzYwYjFjNjkw
MDUwZDY2ODM0ZmI3OTg1MTguLjllYjNkMGQ5YzQ1M2ZjYTU0OGUwMGEyMGQzNTJkODI5ZWEwYWYx
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTg3LDE1ICs1ODcsMzQg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRh
dGVMaXN0LmNsZWFyKCk7CiB9CiAKK3N0YXRpYyBMYXllckNocm9taXVtKiBmaW5kTGF5ZXJCeUlk
KExheWVyQ2hyb21pdW0qIGxheWVyLCBpbnQgaWQpCit7CisgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPmlkKCkgPT0gaWQpCisgICAgICAgIHJldHVy
biBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5kTGF5ZXJC
eUlkKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBpZCk7CisgICAgICAgIGlmIChmb3VuZCkK
KyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwog
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxB
bmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVzaGluZyBzY3JvbGwgb2Zmc2V0
cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0gICAgaWYgKCFpbmZvLnNjcm9s
bHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFpbmZvLnJvb3RTY3JvbGxEZWx0
YS5pc1plcm8oKSB8fCBpbmZvLnBhZ2VTY2FsZURlbHRhICE9IDEpCisgICAgICAgIG1fY2xpZW50
LT5hcHBseVNjcm9sbEFuZFNjYWxlKGluZm8ucm9vdFNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2Fs
ZURlbHRhKTsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9j
bGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVs
dGEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zY3JvbGxzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gZmluZExheWVyQnlJZChtX3Jvb3RM
YXllci5nZXQoKSwgaW5mby5zY3JvbGxzW2ldLmxheWVySWQpOworICAgICAgICBpZiAoIWxheWVy
IHx8ICFsYXllci0+c2Nyb2xsYWJsZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IHN0YXRpY19jYXN0PENvbnRlbnRMYXllckNocm9taXVtKj4obGF5ZXIpLT5zY3JvbGxCeShpbmZv
LnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDJlMGNiY2YyYzU4NWU4MjE1ZDI4
NmRlZTliNjFlNTM1MTgwY2ZmYWQuLjBkMjQ2ZjUzOTM1MDU1YTY5NTA0ODY5MTZhYzMyMjdlY2Fk
NDVlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC01NSw2
ICs1NSw3IEBAIHB1YmxpYzoKIAogc3RydWN0IENDU2Nyb2xsQW5kU2NhbGVTZXQgewogICAgIFZl
Y3RvcjxDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8+IHNjcm9sbHM7Cisg
ICAgSW50U2l6ZSByb290U2Nyb2xsRGVsdGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGE7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGU5MzBiYzI5
ZTg2YzA3NzAyZTA3MjZmMzVmMzdlYWE1YTU4YWRjODIuLmQ2Mzk4MWUwNzI3MWNjOWYzY2Y2MTRm
MTI2ZmQwYTQ3ZTRkZGRkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1
ZGUgImNjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmgiCkBAIC0xMDAsNyArMTAxLDcgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQogICAg
IGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNp
emUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9u
KCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3Jv
bGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZs
b29yZWRJbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogCiAgICAg
c2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShm
cmFtZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5leHRTY3JvbGwg
PSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKGZyYW1lQmVnaW5UaW1l
TXMpOwpAQCAtMTE5LDcgKzEyMCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQ
YWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAgaWYg
KCFtX3Njcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3Jv
bGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFs
ID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgZmxvb3JlZElu
dFBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKSk7CiAgICAgc2Nyb2xsVG90
YWwuc2NhbGUobV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVUb3RhbCA9IG1fcGFn
ZVNjYWxlICogbV9wYWdlU2NhbGVEZWx0YTsKICAgICBJbnRTaXplIHNjYWxlZENvbnRlbnRTaXpl
ID0gY29udGVudFNpemUoKTsKQEAgLTE4Nyw5ICsxODgsOCBAQCBzdGF0aWMgRmxvYXRSZWN0IGRh
bWFnZUluU3VyZmFjZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0
IEZsbwogICAgIHJldHVybiBzdXJmYWNlRGFtYWdlUmVjdDsKIH0KIAotdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2Vz
KQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlcyhDQ0xh
eWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKLSAgICBDQ0xheWVyTGlzdCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJv
b3RMYXllcigpKTsKIAogICAgIGlmICghcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKSkKQEAg
LTE5OSwxMSArMTk5LDIwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVu
ZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcykKIAogICAgIHJvb3RMYXllcigpLT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50KCksIHZpZXdwb3J0U2l6ZSgpKSk7CiAKKyAgICAv
LyBEdXJpbmcgdGVzdGluZyB3ZSBtYXkgbm90IGhhdmUgYW4gYWN0aXZlIHJlbmRlcmVyLgorICAg
IGludCBtYXhUZXh0dXJlU2l6ZSA9IG1fbGF5ZXJSZW5kZXJlciA/IGxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSA6IDI1NjsKKwogICAgIHsKICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOwotICAgICAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290
TGF5ZXIoKSwgcm9vdExheWVyKCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJM
aXN0KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4
dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIoKSwgcm9vdExheWVyKCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVy
KCktPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBtYXhUZXh0
dXJlU2l6ZSk7CiAgICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0
ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCit7CisgICAgQ0NMYXllckxp
c3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBjYWxjdWxhdGVSZW5kZXJTdXJmYWNlcyhy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKICAgICAgICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNl
cyhyb290TGF5ZXIoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CkBAIC0zMzUsOSArMzQ0LDEw
IEBAIHN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXll
cikKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8Q0NM
YXllckltcGw+IGxheWVyKQogewogICAgIG1fcm9vdExheWVySW1wbCA9IGxheWVyOwotCi0gICAg
Ly8gRklYTUU6IEN1cnJlbnRseSwgdGhpcyBvbmx5IGZpbmRzIHRoZSBmaXJzdCBzY3JvbGxhYmxl
IGxheWVyLgogICAgIG1fc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNjcm9sbExheWVyKG1fcm9vdExh
eWVySW1wbC5nZXQoKSk7CisKKyAgICBpZiAobV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwg
JiYgKCFtX3Jvb3RMYXllckltcGwgfHwgIW1fcm9vdExheWVySW1wbC0+aXNMYXllckluRGVzY2Vu
ZGFudHMobV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwtPmlkKCkpKSkKKyAgICAgICAgbV9j
dXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuY2xlYXIoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTM5OCwxNSArNDA4LDEzIEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZs
b2F0IHBhZ2VTY2FsZSwgZmxvYXQgbWluCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YWRq
dXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCiB7Ci0g
ICAgaWYgKHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQorICAgIGlmICghbV9zY3JvbGxMYXllckltcGwg
fHwgcGFnZVNjYWxlQ2hhbmdlID09IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGFs
c28gbmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBz
cGFjZS4KLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwpIHsKLSAgICAgICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgICAgICBzY3Jv
bGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9sbExheWVySW1w
bC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICAvLyBXZSBhbHNvIG5l
ZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhIGZvciB0aGUgcm9vdCBsYXllciB0
byBwYWdlU2NhbGUgc3BhY2UuCisgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbV9zY3JvbGxM
YXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxl
Q2hhbmdlKTsKKyAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVs
dGEpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZURlbHRhKGZs
b2F0IGRlbHRhKQpAQCAtNDQ2LDkgKzQ1NCw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogICAgIC8vIGhhdmluZyBhIHZlcnRpY2FsIHNjcm9s
bGJhciBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdy4KICAgICBtYXhTY3JvbGwuY2xhbXBOZWdh
dGl2ZVRvWmVybygpOwogCisgICAgLy8gV2Ugb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgcm9vdCBs
YXllciBzY3JvbGwgcmFuZ2UsIHNpbmNlIHRoZSBjaGlsZAorICAgIC8vIGxheWVycyB1c2UgdW5z
Y2FsZWQgc2Nyb2xsIGNvb3JkaW5hdGVzLgogICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRNYXhT
Y3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9ETyhhZWxpYXMpOiBBbHNvIHVw
ZGF0ZSBzdWJsYXllcnMuCiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNS
ZWRyYXcoKQpAQCAtNDU2LDI4ICs0NjQsMTA3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0TmVlZHNSZWRyYXcoKQogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpOwogfQogCi1DQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNjcm9sbEJlZ2luKGNvbnN0IEludFBvaW50JikKK2Jvb2wgQ0NMYXllclRyZWVI
b3N0SW1wbDo6aXNDb250ZW50UG9pbnRXaXRoaW5MYXllcihDQ0xheWVySW1wbCogbGF5ZXJJbXBs
LCBjb25zdCBJbnRQb2ludCYgY29udGVudFBvaW50KSBjb25zdAogewotICAgIC8vIFRPRE86IENo
ZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBs
IHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQotICAgICAgICByZXR1cm4gU2Ny
b2xsSWdub3JlZDsKKyAgICBJbnRSZWN0IGxheWVyQ29udGVudFJlY3QobGF5ZXJJbXBsLT52aXNp
YmxlTGF5ZXJSZWN0KCkpOworICAgIC8vIFRoZSB2aXNpYmxlIGxheWVyIHJlY3QgaXMgaW4gc2Nh
bGVkIGNvb3JkaW5hdGVzLCBzbyB1bmRvIHRoZSBwYWdlIHNjYWxlIHVubGVzcyBpdCBpcyB0aGUK
KyAgICAvLyBub24tY29tcG9zaXRlZCBjb250ZW50IHdoZXJlIHRoZSBjb250ZW50IHBvaW50IGlz
IGFsc28gaW4gc2NhbGVkIGNvb3JkaW5hdGVzLiBOb3RlIHRoYXQKKyAgICAvLyB0aGVyZSBpcyBu
byBuZWVkIHRvIHVuZG8gdGhlIHBhZ2Ugc2NhbGUgZGVsdGEsIGJlY2F1c2UgdGhlIGxheWVyIGNv
bnRlbnQgcmVjdCBpcyBvbmx5CisgICAgLy8gc2NhbGVkIHdpdGggdGhlIG9yaWdpbmFsIHBhZ2Ug
c2NhbGUuCisgICAgaWYgKCFsYXllckltcGwtPmlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSkKKyAg
ICAgICAgbGF5ZXJDb250ZW50UmVjdC5zY2FsZSgxIC8gbV9wYWdlU2NhbGUpOworICAgIHJldHVy
biBsYXllckNvbnRlbnRSZWN0LmNvbnRhaW5zKGNvbnRlbnRQb2ludCk7Cit9CisKK0NDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5TY3Jv
bGxpbmdMYXllcihDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRQb2ludCYgdmlld3Bv
cnRQb2ludCkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBpZiAoIWxheWVySW1wbC0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBJbnRQb2ludCBjb250ZW50UG9pbnQo
bGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2aWV3
cG9ydFBvaW50KSk7CisgICAgaWYgKGxheWVySW1wbC0+ZHJhd3NDb250ZW50KCkgJiYgIWlzQ29u
dGVudFBvaW50V2l0aGluTGF5ZXIobGF5ZXJJbXBsLCBjb250ZW50UG9pbnQpKQorICAgICAgICBy
ZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKworICAgIGlmICghbGF5
ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsSWdub3JlZDsKIAotICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIG1fY3Vy
cmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gbGF5ZXJJbXBsOworICAgIHJldHVybiBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDsKK30KKworQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQ
b2ludCYgdmlld3BvcnRQb2ludCkKK3sKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1w
bC5jbGVhcigpOworCisgICAgaWYgKCFyb290TGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworCisgICAgLy8gTG9vayBmb3IgYSBzY3Jv
bGxhYmxlIGxheWVyIGluIGZyb250IHRvIGJhY2sgb3JkZXIuCisgICAgdHlwZWRlZiBDQ0xheWVy
SXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllckl0ZXJhdG9yQWN0
aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisgICAgQ0NMYXllckxpc3Qg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBjYWxjdWxhdGVSZW5kZXJTdXJmYWNlcyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NM
YXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBmb3Ig
KENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDQ0xheWVy
SW1wbCogbGF5ZXJJbXBsID0gKml0OworICAgICAgICAvLyBBIG5vbi1jb21wb3NpdGVkIGNvbnRl
bnQgbGF5ZXIgc2hvdWxkIGJlIHNjcm9sbGVkIHZpYSB0aGUgcm9vdCBzY3JvbGwgbGF5ZXIuCisg
ICAgICAgIGlmIChsYXllckltcGwtPmlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSkKKyAgICAgICAg
ICAgIGxheWVySW1wbCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLmdldCgpOworICAgICAgICBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHN0YXR1cyA9IGJlZ2luU2Nyb2xsaW5nTGF5ZXIo
bGF5ZXJJbXBsLCB2aWV3cG9ydFBvaW50KTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsK
KyAgICB9CisgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOwog
fQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3Jv
bGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKLSAgICBtX2NsaWVudC0+c2V0
TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdP
bkltcGxUaHJlYWQoKTsKKyAgICBJbnRTaXplIHBlbmRpbmdEZWx0YShzY3JvbGxEZWx0YSk7Cisg
ICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBs
LmdldCgpOworICAgIHdoaWxlIChsYXllckltcGwgJiYgIXBlbmRpbmdEZWx0YS5pc1plcm8oKSkg
eworICAgICAgICBpZiAobGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpIHsKKyAgICAgICAgICAgIEZs
b2F0U2l6ZSBwcmV2aW91c0RlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgICAg
ICAgICBGbG9hdFNpemUgc2NhbGVkUGVuZGluZ0RlbHRhKHBlbmRpbmdEZWx0YSk7CisgICAgICAg
ICAgICAvLyBTaW5jZSBzY3JvbGxEZWx0YSBpcyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMsIGl0IGFs
cmVhZHkgaGFzIHRoZSBwYWdlIHNjYWxlIGFwcGxpZWQuCisgICAgICAgICAgICAvLyBUaGlzIG1h
dGNoZXMgd2hhdCB0aGUgcm9vdCBzY3JvbGwgbGF5ZXIgZXhwZWN0cywgYnV0IGNoaWxkIGxheWVy
cyBhcmUgc2Nyb2xsZWQgdXNpbmcKKyAgICAgICAgICAgIC8vIHVuc2NhbGVkIGNvbnRlbnQgY29v
cmRpbmF0ZXMgaW5zdGVhZCwgc28gd2UgaGF2ZSB0byB1bmRvIHRoZSBzY2FsaW5nIGZvciB0aGVt
LiBUaGUKKyAgICAgICAgICAgIC8vIHBhZ2Ugc2NhbGUgZGVsdGEgbmVlZHMgdG8gYmUgdW5hcHBs
aWVkIHdpdGggYm90aCBsYXllciB0eXBlcyBzaW5jZSB0aGUgc2Nyb2xsCisgICAgICAgICAgICAv
LyBjb29yZGluYXRlcyBkbyBub3QgcmVzcGVjdCBpdC4KKyAgICAgICAgICAgIGlmIChsYXllcklt
cGwgPT0gbV9zY3JvbGxMYXllckltcGwpIHsKKyAgICAgICAgICAgICAgICBzY2FsZWRQZW5kaW5n
RGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOworICAgICAgICAgICAgICAgIGxheWVy
SW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVuZGluZ0RlbHRhKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc2NhbGVkUGVuZGluZ0RlbHRhLnNjYWxlKDEgLyAobV9wYWdlU2Nh
bGUgKiBtX3BhZ2VTY2FsZURlbHRhKSk7CisgICAgICAgICAgICAgICAgbGF5ZXJJbXBsLT5zY3Jv
bGxCeShzY2FsZWRQZW5kaW5nRGVsdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
UmVzZXQgdGhlIHBlbmRpbmcgc2Nyb2xsIGRlbHRhIHRvIHplcm8gaWYgdGhlIGxheWVyIHdhcyBh
YmxlIHRvIG1vdmUgYWxvbmcgdGhlIHJlcXVlc3RlZAorICAgICAgICAgICAgLy8gYXhpcy4gVGhp
cyBpcyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xsIGV4YWN0bHkgdG8gdGhlIGJl
Z2lubmluZyBvciBlbmQgb2YgYQorICAgICAgICAgICAgLy8gc2Nyb2xsIGFyZWEgcmVnYXJkbGVz
cyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZvciBkaWFnb25hbCBzY3JvbGxzIHRoaXMgYWxzbyBhdm9p
ZHMgYXBwbHlpbmcKKyAgICAgICAgICAgIC8vIHRoZSBzY3JvbGwgb24gb25lIGF4aXMgdG8gbXVs
dGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEud2lkdGgoKSAhPSBs
YXllckltcGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5n
RGVsdGEuc2V0V2lkdGgoMCk7CisgICAgICAgICAgICBpZiAocHJldmlvdXNEZWx0YS5oZWlnaHQo
KSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAg
cGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICAgICAgfQorICAgICAgICBsYXllckltcGwg
PSBsYXllckltcGwtPnBhcmVudCgpOworICAgIH0KKworICAgIGlmIChwZW5kaW5nRGVsdGEgIT0g
c2Nyb2xsRGVsdGEpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhy
ZWFkKCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwor
ICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxFbmQoKQogeworICAg
IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CiB9CiAKIGJvb2wgQ0NMYXll
clRyZWVIb3N0SW1wbDo6aGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpCkBAIC01MjAsMjUgKzYwNyw0
OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUVuZCgpCiAgICAgbV9j
bGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiB9CiAKK3N0YXRpYyBib29sIGRp
ZFNjcm9sbFN1YnRyZWUoQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sKKyAgICBpZiAoIWxheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsr
aSkKKyAgICAgICAgaWYgKGRpZFNjcm9sbFN1YnRyZWUobGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ld
LmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NTY3Jv
bGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwqIGxheWVySW1wbCkgY29uc3QK
K3sKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgeworICAgICAg
ICBJbnRTaXplIHNjcm9sbERlbHRhID0gdG9TaXplKGZsb29yZWRJbnRQb2ludChsYXllckltcGwt
PnNjcm9sbERlbHRhKCkpKTsKKyAgICAgICAgaWYgKGxheWVySW1wbCAhPSBtX3Njcm9sbExheWVy
SW1wbCkgeworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJ
bmZvIHNjcm9sbDsKKyAgICAgICAgICAgIHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgp
OworICAgICAgICAgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAg
ICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSA9IHNjcm9sbERlbHRhOwor
ICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShsYXllckltcGwtPnNjcm9sbERl
bHRhKCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5j
aGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9s
bEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisKIFBhc3NPd25QdHI8
Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERl
bHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBh
ZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBib29sIGRpZE1vdmUgPSBt
X3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlz
WmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7CisgICAgYm9vbCBkaWRNb3ZlID0g
bV9zY3JvbGxMYXllckltcGwgJiYgKGRpZFNjcm9sbFN1YnRyZWUobV9zY3JvbGxMYXllckltcGwu
Z2V0KCkpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMSk7CiAgICAgaWYgKCFkaWRNb3ZlIHx8IG1f
cGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9uKSB7CiAgICAgICAgIG1f
c2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSAxOwogICAg
ICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiAgICAgfQogCisgICAgY29sbGVjdFNj
cm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBtX3Njcm9sbExheWVySW1wbC5nZXQoKSk7CiAg
ICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IG1f
cGFnZVNjYWxlRGVsdGE7CiAKLSAgICAvLyBGSVhNRTogdHJhY2sgc2Nyb2xscyBmcm9tIGxheWVy
cyBvdGhlciB0aGFuIHRoZSByb290Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxV
cGRhdGVJbmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBs
LT5pZCgpOwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpOwotICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7Ci0KLSAg
ICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0
YSk7Ci0KICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA1NjlkNjlmYTNlZDY4MGZhNTE3ZTk4YjBiMWY0
NTU0OTAwODU2NDQ1Li4xNDI5MDhiM2QzNDQ2YzZlYjA1MjY1MmM4N2U2ZDFmODU0YzlmOWFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xMjcsMTMgKzEyNywxOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9h
dCk7CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwogICAgIHZvaWQgdHJhY2tE
YW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIHZvaWQgY2FsY3VsYXRlUmVu
ZGVyU3VyZmFjZXMoQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZv
aWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsKICAgICB2b2lkIG9w
dGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsKICAgICBJbnRTaXplIGNvbnRl
bnRTaXplKCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbnRlbnRQb2ludFdpdGhpbkxheWVyKENDTGF5
ZXJJbXBsKiwgY29uc3QgSW50UG9pbnQmIGNvbnRlbnRQb2ludCkgY29uc3Q7CisgICAgU2Nyb2xs
U3RhdHVzIGJlZ2luU2Nyb2xsaW5nTGF5ZXIoQ0NMYXllckltcGwqLCBjb25zdCBJbnRQb2ludCYg
dmlld3BvcnRQb2ludCk7CisgICAgdm9pZCBjb2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5k
U2NhbGVTZXQqLCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9y
b290TGF5ZXJJbXBsOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9zY3JvbGxMYXllckltcGw7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsK
ICAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsK
ICAgICBib29sIG1fdmlzaWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAKaW5kZXggNzBkZWMwNTRjNTI1MjE2M2QzZGYwZDdmOTM0NWYzNzQxNjhkZmYyYS4uYTUwMGY3
OTU4MmQ5YjgzNmFmMWZlNTk0NDBmYTJmNDhkNjRiM2ZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE3OSw2ICsxNzksNyBAQCB2b2lkIENDU2luZ2xlVGhy
ZWFkUHJveHk6OmRvQ29tbWl0KCkKICAgICAgICAgLy8gSW4gdGhlIHNpbmdsZS10aHJlYWRlZCBj
YXNlLCB0aGUgc2Nyb2xsIGRlbHRhcyBzaG91bGQgbmV2ZXIgYmUKICAgICAgICAgLy8gdG91Y2hl
ZCBvbiB0aGUgaW1wbCBsYXllciB0cmVlLgogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2Fs
ZVNldD4gc2Nyb2xsSW5mbyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0
YXMoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YS5pc1plcm8o
KSk7CiAgICAgICAgIEFTU0VSVCghc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCkpOwogI2VuZGlm
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xp
ZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcAppbmRleCBmYjA3YjRjMTAzZmIyNzlhMjRjNGYxNjc4ZWI1OTg4ZjMyMTczYmE2Li45MmU0
MGY2YjM0YTBkNTMxOWY4ZWEyNzE0MThlZTcxNDdiY2Q4MTFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApAQCAtNTMsNiArNTMsNyBAQAog
I2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKICNpbmNsdWRlICJJY29uLmgiCkBAIC04NjgsNiArODY5LDI4IEBAIGJvb2wgQ2hyb21lQ2xp
ZW50SW1wbDo6cGFpbnRDdXN0b21PdmVyaGFuZ0FyZWEoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIENocm9tZUNsaWVudEltcGw6
OmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIFNjcm9sbGFi
bGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIGdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSo+
KGxheWVyKTsKKyAgICBncmFwaGljc0xheWVyQ2hyb21pdW0tPnNldFNjcm9sbGFibGVBcmVhKHNj
cm9sbGFibGVBcmVhKTsKKworICAgIExheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21pdW0gPSBsYXll
ci0+cGxhdGZvcm1MYXllcigpOworICAgIGxheWVyQ2hyb21pdW0tPnNldFNjcm9sbGFibGUodHJ1
ZSk7CisgICAgbGF5ZXJDaHJvbWl1bS0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbFBvc2l0aW9uKCkpOworICAgIGxheWVyQ2hyb21pdW0tPnNldE1heFNjcm9sbFBvc2l0
aW9uKEludFNpemUoc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoSG9yaXpvbnRhbFNjcm9sbGJh
ciksIHNjcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKFZlcnRpY2FsU2Nyb2xsYmFyKSkpOworfQor
Cit2b2lkIENocm9tZUNsaWVudEltcGw6OnJlbW92ZVNjcm9sbGluZ0xheWVyKEdyYXBoaWNzTGF5
ZXIqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogZ3JhcGhpY3NMYXllckNo
cm9taXVtID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtKj4obGF5ZXIpOworICAg
IGdyYXBoaWNzTGF5ZXJDaHJvbWl1bS0+c2V0U2Nyb2xsYWJsZUFyZWEoMCk7CisKKyAgICBMYXll
ckNocm9taXVtKiBsYXllckNocm9taXVtID0gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBs
YXllckNocm9taXVtLT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBsYXllckNocm9taXVtLT5z
ZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKKyAgICBsYXllckNocm9taXVtLT5zZXRNYXhT
Y3JvbGxQb3NpdGlvbihJbnRTaXplKCkpOworfQorCiAvLyBGSVhNRTogUmVtb3ZlIENocm9tZUNs
aWVudEltcGw6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSBhbmQgQ2hyb21l
Q2xpZW50SW1wbDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lCiAv
LyBvbmNlIGFsbCBwb3J0cyBoYXZlIG1vdmVkIHRvIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiAo
c2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM3MyApLgogLy8g
Rm9yIGNsaWVudC1iYXNlZCBnZW9sb2NhdGlvbiwgdGhlc2UgbWV0aG9kcyBhcmUgbm93IGltcGxl
bWVudGVkIGFzIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpyZXF1ZXN0UGVybWlzc2lvbiBhbmQgV2Vi
R2VvbG9jYXRpb25DbGllbnQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCmluZGV4IDhmZDI0ODhkOWVlNjYx
MGZlMTM4NThiOGVjOWU1NTgwYzc1NDA1MjguLjc2MTg1MjA1NThiYWNlZGM4YWY2MmQ1Yzc0MTNj
ZTA4YzYxNzVmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGll
bnRJbXBsLmgKQEAgLTQ0LDkgKzQ0LDExIEBAIGNsYXNzIENvbG9yQ2hvb3NlckNsaWVudDsKICNl
bmRpZgogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZpbGVDaG9vc2VyOworY2xhc3MgR3JhcGhpY3NM
YXllcjsKIGNsYXNzIFBvcHVwQ29udGFpbmVyOwogY2xhc3MgUG9wdXBNZW51Q2xpZW50OwogY2xh
c3MgUmVuZGVyQm94OworY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTZWN1cml0eU9yaWdp
bjsKIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKIH0KQEAgLTE2Nyw2ICsxNjksOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKTsKIAogICAg
IHZpcnR1YWwgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dl
cnMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSopOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
Kik7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2Rl
KGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKaW5kZXggNGY2NGQ1NDcxZTM5NjY1MGY3Y2E3NWU5
ZTE2MjVjNjZkNzJmMTFiNi4uMzQ5OTEzNTEyZTVhZDRhM2RmODE2NTJjYWQ3ODkyNmRjMzdmNWZm
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
SW1wbC5jcHAKQEAgLTcyLDQgKzcyLDggQEAgdm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpwYWlu
dENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXAKICAgICBt
X2NvbnRlbnRDbGllbnQtPnBhaW50Q29udGVudHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsKIH0K
IAordm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKaW5kZXggNTFmMzQ0ZjdjYWYxMjcx
MTI2YWM3YjQyNjhlZDU0NjEyMTQyMTlkOC4uOWQyODVhZTZlZWY5ZTRiNzYxOWU5NDVhMGEwZjAx
MWQ1ZWI4ZTRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29u
dGVudExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuaApAQCAtNDQsNiArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBDb250
ZW50TGF5ZXJEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBjbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOwogCiAgICAgV2ViQ29udGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRDbGllbnQ7CiAgICAg
Ym9vbCBtX2RyYXdzQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllckltcGxUZXN0LmNwcAppbmRleCAyNzcyOGNiZWYwZTNiMzE4NzkzZDBkZGMxMGZjMzdh
ZDYwZjE3ZDdkLi4xMGVjMmY0YWNlYjQ2YmM1YmY1MWYzYjY5MzgwYmYxMzk4NGZjMjU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCkBA
IC0xNjQsNCArMTY0LDIyIEBAIFRFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlMYXllckNoYW5n
ZXNBcmVUcmFja2VkUHJvcGVybHkpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRSRUVfRElE
X05PVF9DSEFOR0Uocm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oYXJiaXRyYXJ5SW50U2l6ZSkp
OwogfQogCitURVNUKENDTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5RGVzY2VuZGFudFNlYXJjaCkKK3sK
KyAgICAvLyBUaGUgY29uc3RydWN0b3Igb24gdGhpcyB3aWxsIGZha2UgdGhhdCB3ZSBhcmUgb24g
dGhlIGNvcnJlY3QgdGhyZWFkLgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzZXRJbXBs
VGhyZWFkOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgxKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgyKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDMpOworCisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5h
ZGRDaGlsZChncmFuZENoaWxkKTsKKworICAgIEVYUEVDVF9GQUxTRShyb290LT5pc0xheWVySW5E
ZXNjZW5kYW50cygxKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdC0+aXNMYXllckluRGVzY2VuZGFu
dHMoMikpOworICAgIEVYUEVDVF9UUlVFKHJvb3QtPmlzTGF5ZXJJbkRlc2NlbmRhbnRzKDMpKTsK
KyAgICBFWFBFQ1RfRkFMU0Uocm9vdC0+aXNMYXllckluRGVzY2VuZGFudHMoNCkpOworfQorCiB9
IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBmNTk4OTNkZTkwNjQxOGY4Y2JkNzU3
NDBhZTI5MzllMjNjYzIzNTBhLi44NGM4MmM5NDgzMTAxNWU3ZGVjOTgzNjJhNDc0ZjNiMWU4MmJh
MmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtODgsNiArODgsMTcgQEAgcHVibGljOgogICAgICAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CiAgICAgfQogCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZVNjcm9sbGFibGVMYXllcihpbnQgaWQsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoaWQpOwor
ICAgICAgICBsYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAgbGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsK
KyAgICAgICAgbGF5ZXItPnNldEJvdW5kcyhzaXplKTsKKyAgICAgICAgbGF5ZXItPnNldE1heFNj
cm9sbFBvc2l0aW9uKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSAqIDIp
KTsKKyAgICAgICAgcmV0dXJuIGxheWVyOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBtX2Fsd2F5c0ltcGxUaHJlYWQ7CiAgICAgT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IG1faG9zdEltcGw7CkBAIC0xNDAsMTYgKzE1MSwxNiBAQCBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbERlbHRhUmVwZWF0ZWRTY3JvbGxzKQogICAg
IE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvOwogCiAgICAgc2Nyb2xsSW5m
byA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBBU1NFUlRfRVEoc2Ny
b2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDF1KTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+
c2Nyb2xscy5zaXplKCksIDB1KTsKICAgICBFWFBFQ1RfRVEocm9vdC0+c2VudFNjcm9sbERlbHRh
KCksIHNjcm9sbERlbHRhKTsKLSAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwg
cm9vdC0+aWQoKSwgc2Nyb2xsRGVsdGEpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5yb290
U2Nyb2xsRGVsdGEsIHNjcm9sbERlbHRhKTsKIAogICAgIEludFNpemUgc2Nyb2xsRGVsdGEyKC01
LCAyNyk7CiAgICAgcm9vdC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEyKTsKICAgICBzY3JvbGxJbmZv
ID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIEFTU0VSVF9FUShzY3Jv
bGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5z
Y3JvbGxzLnNpemUoKSwgMHUpOwogICAgIEVYUEVDVF9FUShyb290LT5zZW50U2Nyb2xsRGVsdGEo
KSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3Jv
bGxJbmZvLmdldCgpLCByb290LT5pZCgpLCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7Cisg
ICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgc2Nyb2xsRGVsdGEgKyBz
Y3JvbGxEZWx0YTIpOwogCiAgICAgcm9vdC0+c2Nyb2xsQnkoSW50U2l6ZSgpKTsKICAgICBzY3Jv
bGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwpAQCAtMjI1LDcgKzIz
Niw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGluY2hHZXN0dXJlKQogICAg
ICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIG1pblBhZ2VTY2FsZSk7
CiAKICAgICAgICAgLy8gUHVzaGVkIHRvICgwLDApIHZpYSBjbGFtcGluZyBhZ2FpbnN0IGNvbnRl
bnRzIGxheWVyIHNpemUuCi0gICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgp
LCBzY3JvbGxMYXllci0+aWQoKSwgSW50U2l6ZSgtNTAsIC01MCkpOworICAgICAgICBFWFBFQ1Rf
RVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBJbnRTaXplKC01MCwgLTUwKSk7CiAgICAg
fQogfQogCkBAIC0yNTUsNyArMjY2LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBwYWdlU2NhbGVBbmltYXRpb24pCiAKICAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVT
ZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CiAgICAg
ICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgMik7Ci0gICAgICAgIGV4
cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBzY3JvbGxMYXllci0+aWQoKSwgSW50U2l6
ZSgtNTAsIC01MCkpOworICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERl
bHRhLCBJbnRTaXplKC01MCwgLTUwKSk7CiAgICAgfQogCiAgICAgLy8gQW5jaG9yIHpvb20tb3V0
CkBAIC0yNzIsMTAgKzI4MywxNjIgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBw
YWdlU2NhbGVBbmltYXRpb24pCiAgICAgICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBz
Y3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwogICAgICAgICBF
WFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIG1pblBhZ2VTY2FsZSk7CiAgICAg
ICAgIC8vIFB1c2hlZCB0byAoMCwwKSB2aWEgY2xhbXBpbmcgYWdhaW5zdCBjb250ZW50cyBsYXll
ciBzaXplLgotICAgICAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgc2Nyb2xs
TGF5ZXItPmlkKCksIEludFNpemUoLTUwLCAtNTApKTsKKyAgICAgICAgRVhQRUNUX0VRKHNjcm9s
bEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgSW50U2l6ZSgtNTAsIC01MCkpOwogICAgIH0KIH0KIAor
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKK3sKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAg
IHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXll
cihyb290KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
MCwgMCkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNU
X0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVz
dENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTm9u
Q29tcG9zaXRlZFJvb3QpCit7CisgICAgLy8gVGVzdCB0aGUgY29uZmlndXJhdGlvbiB3aGVyZSBh
IG5vbi1jb21wb3NpdGVkIHJvb3QgbGF5ZXIgaXMgZW1iZWRkZWQgaW4gYQorICAgIC8vIHNjcm9s
bGFibGUgb3V0ZXIgbGF5ZXIuCisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworCisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjb250ZW50TGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDEpOworICAgIGNvbnRlbnRMYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKTsK
KyAgICBjb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjb250ZW50TGF5
ZXItPnNldFBvc2l0aW9uKEludFBvaW50KDUsIDUpKTsKKyAgICBjb250ZW50TGF5ZXItPnNldEJv
dW5kcyhzdXJmYWNlU2l6ZSk7CisgICAgY29udGVudExheWVyLT5zZXRDb250ZW50Qm91bmRzKElu
dFNpemUoc3VyZmFjZVNpemUud2lkdGgoKSAqIDIsIHN1cmZhY2VTaXplLmhlaWdodCgpICogMikp
OworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgc2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgc2Ny
b2xsTGF5ZXItPmFkZENoaWxkKGNvbnRlbnRMYXllcik7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRS
b290TGF5ZXIoc2Nyb2xsTGF5ZXIpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShz
dXJmYWNlU2l6ZSk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAg
bV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOworICAgIG1faG9zdEltcGwtPnNj
cm9sbEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQ
RUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzY3JvbGxDaGlsZENhbGxzQ29tbWl0QW5kUmVkcmF3KQoreworICAgIEludFNp
emUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFi
bGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihyb290KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
c3VyZmFjZVNpemUpOworCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKElu
dFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAg
IG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5z
Y3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVY
UEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hpbGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6
ZSgxMCwgMTApOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExh
eWVyKHJvb3QpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7
CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUsIDUp
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxT
RShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21t
aXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0Jh
Y2tmYWNpbmdDaGlsZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0
UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIG1faG9zdEltcGwtPnNldFZp
ZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRy
aXg7CisgICAgbWF0cml4LnJvdGF0ZTNkKDE4MCwgMCwgMCk7CisgICAgY2hpbGQtPnNldFRyYW5z
Zm9ybShtYXRyaXgpOworICAgIGNoaWxkLT5zZXREb3VibGVTaWRlZChmYWxzZSk7CisKKyAgICBF
WFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVx
dWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VT
Y2FsZSkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRT
Y3JvbGxhYmxlKHRydWUpOworICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUo
MTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgbV9o
b3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKworICAgIEludFNpemUgc2Ny
b2xsRGVsdGEoMCwgMTApOworICAgIGludCBwYWdlU2NhbGUgPSAyOworICAgIEVYUEVDVF9FUSht
X2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0
YSk7CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2Fs
ZSwgMSwgcGFnZVNjYWxlKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhl
IHJvb3Qgc2Nyb2xsIGRlbHRhLgorICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3Jv
bGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIEVYUEVDVF9F
UShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIEludFNpemUoc2Nyb2xsRGVsdGEud2lkdGgo
KSAqIHBhZ2VTY2FsZSwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKiBwYWdlU2NhbGUpKTsKK30KKwor
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VT
Y2FsZSkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IHJvb3RTY3JvbGwgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2lu
dCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBj
cmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwor
ICAgIHJvb3QtPmFkZENoaWxkKHJvb3RTY3JvbGwpOworICAgIHJvb3RTY3JvbGwtPmFkZENoaWxk
KGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKworICAgIEludFNpemUgc2Nyb2xs
RGVsdGEoMCwgMTApOworICAgIGludCBwYWdlU2NhbGUgPSAyOworICAgIEVYUEVDVF9FUShtX2hv
c3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwg
MSwgcGFnZVNjYWxlKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgbm90IGFwcGx5IHRvIHRo
ZSBjaGlsZCBzY3JvbGwgZGVsdGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNj
cm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0
Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBzY3JvbGxEZWx0YSk7Cit9
CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsU2NhbGVkTGF5ZXIpCit7
CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJm
YWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIG1faG9z
dEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUsIDE1KSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JB
bmRMaW1pdHMoMC41LCAwLjUsIDAuNSk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDE1LCAxNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsU2NhbGVk
Tm9uQ29tcG9zaXRlZExheWVyKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwg
RmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIHJvb3QtPnNldElzTm9uQ29tcG9z
aXRlZENvbnRlbnQodHJ1ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOwor
ICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICAvLyBU
aGUgcGFnZSBzY2FsZSBzaG91bGQgbm90IGJlIHJlbW92ZWQgZnJvbSBub24tY29tcG9zaXRlZCBs
YXllciBib3VuZHMuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDE1LCAxNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAg
bV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDAuNSwgMC41LCAwLjUpOwor
ICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxNSwgMTUpKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworfQorCiBjbGFzcyBCbGVuZFN0
YXRlVHJhY2tlckNvbnRleHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVi
bGljOgogICAgIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dCgpIDogbV9ibGVuZChmYWxzZSkgeyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcAppbmRleCAyMDA4NjEzY2Q4OWQ1M2ZhNTlkY2VhOTVmNTJlNmYzNTdmM2FjODZiLi4z
NDVkMjBlMjk0NzM4MjNjMTYxMjVlMGRkM2Y5M2RmZmYxYThjNTNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTk5
MCw2ICs5OTAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIHByZXNlcnZl
czNEKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3Qg
SW50U2l6ZSYpIHsgfQogCiBwcml2YXRlOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVz
dDsKQEAgLTExMzksNyArMTE0MCw4IEBAIGNsYXNzIE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZSA6
IHB1YmxpYyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBkcmF3c0Nv
bnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgTU9DS19DT05TVF9NRVRIT0QwKHBy
ZXNlcnZlczNELCBib29sKCkpOwotICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxCeShjb25zdCBJbnRTaXplJikgeyB9CiAgICAgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQo
KSB7IH0KIH07CiAKQEAgLTE0NzIsNCArMTQ3NCwxMjMgQEAgcHVibGljOgogCiBTSU5HTEVfQU5E
X01VTFRJX1RIUkVBRF9URVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uKQog
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEw
KSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyID0gQ29udGVudExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmbV9tb2NrRGVsZWdhdGUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0Qm91
bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRJc0Ry
YXdhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKElu
dFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+
YWRkQ2hpbGQobV9yb290U2Nyb2xsTGF5ZXIpOworICAgICAgICBtX2NoaWxkTGF5ZXIgPSBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0ZSk7CisgICAgICAgIG1fY2hp
bGRMYXllci0+c2V0Qm91bmRzKEludFNpemUoNTAsIDUwKSk7CisgICAgICAgIG1fY2hpbGRMYXll
ci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRTY3JvbGxh
YmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKElu
dFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPmFkZENoaWxkKG1f
Y2hpbGRMYXllcik7CisgICAgICAgIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFpblRocmVhZCgpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhLCBmbG9hdCkKKyAgICB7CisgICAgICAgIEludFBvaW50IHBvc2l0aW9u
ID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcm9vdFNj
cm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiArIHNjcm9sbERlbHRhKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIG1fbW9ja0RlbGVnYXRlOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NoaWxkTGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IG1fcm9vdFNjcm9sbExheWVyOworfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2Ug
eworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKCkKKyAg
ICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAxKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisg
ICAgeworICAgICAgICBFWFBFQ1RfRVEobV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCksIEludFBvaW50KCkpOworICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1i
ZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCksIEludFBvaW50KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9j
aGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpICsgbV9zY3JvbGxBbW91bnQp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVy
VHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVtYmVy
KCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKGltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgICAg
ICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOworICAgICAgICAgICAgaW1wbC0+
c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAy
KQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3QgSW50
U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllciwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdCh0cnVlKTsKK30K
KworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7CitwdWJsaWM6CisgICAgQ0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCgpCisgICAgICAgIDog
bV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKDMsIDYpCisgICAgICAgICwgbV9pbml0aWFsQ2hp
bGRTY3JvbGxQb3NpdGlvbigyMCwgMCkKKyAgICAgICAgLCBtX3Njcm9sbEFtb3VudCgtMjUsIC01
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7Cisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjpiZWdpblRlc3QoKTsKKyAgICAg
ICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbFJvb3RTY3Jv
bGxQb3NpdGlvbik7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9p
bml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJl
Z2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAg
ICAgICBDQ0xheWVySW1wbCogcm9vdCA9IGltcGwtPnJvb3RMYXllcigpOworICAgICAgICAgICAg
Q0NMYXllckltcGwqIHNjcm9sbFJvb3QgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAg
ICAgICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gc2Nyb2xsUm9vdC0+Y2hpbGRyZW4oKVswXS5n
ZXQoKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGlsZC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9p
bml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoY2hpbGQt
PnNjcm9sbERlbHRhKCksIEludFNpemUoLTIwLCAwKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
c2Nyb2xsUm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9u
KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxSb290LT5zY3JvbGxEZWx0YSgpLCBJbnRT
aXplKDAsIC01KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xh
eWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAg
IGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShp
bXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGFydGVkKTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50
KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgpOworICAgICAgICB9IGVsc2UgaWYgKGlt
cGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9Citw
cml2YXRlOgorICAgIGNvbnN0IEludFBvaW50IG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbjsK
KyAgICBjb25zdCBJbnRQb2ludCBtX2luaXRpYWxDaGlsZFNjcm9sbFBvc2l0aW9uOworICAgIGNv
bnN0IEludFNpemUgbV9zY3JvbGxBbW91bnQ7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAg
cnVuVGVzdCh0cnVlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126307</attachid>
            <date>2012-02-09 07:59:41 -0800</date>
            <delta_ts>2012-02-15 23:23:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120209155939.patch</filename>
            <type>text/plain</type>
            <size>53463</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDE3ZWQ4MGZiNTAyM2Ix
ZDZmYmQ5MGU3N2MxMDA5NzEyYTk3ZTJkOC4uZWE1OTVhOWQzYTU5ZDRjYmExMzAyYWU1YmI2YWEz
ZWY3YjQ5MGRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDExLTEyLTA5ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGxheWVyIHNjcm9sbGluZyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAg
ICAgQWRkIHRlc3RzIGZvciBjb21wb3NpdG9yIGxheWVyIHNjcm9sbGluZy4gVGhlIHRlc3RzIGNo
ZWNrIHZhcmlvdXMKKyAgICAgICAgbGF5ZXIgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHNjcm9s
bGluZyBnZXN0dXJlcyBhcmUgaGFuZGxlZAorICAgICAgICBjb3JyZWN0bHkuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNl
dE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NM
YXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzSW5zaWRlU2Nyb2xs
YWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Nyb2xsQnkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OnNlbnRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6c2V0U2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Zmlu
ZFNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlT
Y3JvbGxBbmRTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp3aW5kb3dUb0xheWVyQ29udGVudFBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzSW5zaWRlU2Ny
b2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpi
ZWdpblNjcm9sbGluZ0lubmVybW9zdExheWVyQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpsYXll
ckNhbkJlU2Nyb2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6
c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hH
ZXN0dXJlQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cGlu
Y2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6
OnBpbmNoR2VzdHVyZUVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorCiAyMDEyLTAyLTA5ICBLZW50YXJvIEhhcmEgIDxo
YXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggYnVpbGQgZmFp
bHVyZSBjYXVzZWQgYnkgcjEwNzE5MS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzM4
MzdkMWNmZmM0ZjViODUwNDQwMWNjYjA0MmJkMTk1Y2IzMzQ5ZS4uYTEzNTRhMjdkNDY3MWVjM2Ni
MWQzOTE1NjgxZWMzOWZjMmNiMzA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NyBAQAorMjAxMS0xMi0wOSAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBsYXllciBzY3JvbGxpbmcgaW4g
dGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzM1MAorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyBzY3JvbGxp
bmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICAgICAgU2Nyb2xs
IGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xsZWQgQ0NMYXllckltcGwgYW5k
CisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgU2Nyb2xsYWJsZUFyZWEgaW4gdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgIElmIGEgbGF5ZXIgaGFzIG5vIHJvb20gdG8gc2Nyb2xsIGluIGEg
Z2l2ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCisgICAgICAgIGFuY2VzdG9yIGxheWVycyBpcyBz
Y3JvbGxlZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdD
bGllbnQuaDoKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcik6Cisg
ICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJU
cmVlVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6
YXBwbHlSb290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
VHJlZVZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJU
cmVlVmlld0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseUxheWVyU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmFwcGx5Um9vdExheWVyU2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAqIHNy
Yy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RIb29rczo6YXBwbHlS
b290TGF5ZXJTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OlRlc3RIb29rczo6YXBwbHlM
YXllclNjcm9sbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjphcHBs
eVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhv
c3RDbGllbnQ6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2Nyb2xsU2ltcGxlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRpcGxlUmVkcmF3OjphcHBseVJv
b3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbEJhc2U6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxCYXNlOjphcHBseVJvb3RMYXllclNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5TGF5ZXJTY3JvbGwpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YWZ0ZXJUZXN0KToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2U6OmFwcGx5U2Nyb2xsVG9D
aGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2luQ29tbWl0T25DQ1Ro
cmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVy
OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OlRFU1RfRik6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpiZWdp
blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
ckJleW9uZExpbWl0OjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0OjpkcmF3TGF5ZXJzT25D
Q1RocmVhZCk6CisKIDIwMTItMDItMDggIFJheW1vbmQgTGl1ICA8cmF5bW9uZC5saXVAaW50ZWwu
Y29tPgogCiAgICAgICAgIEZpeCBhIHR5cG8gZm9yIHIxMDcxMjUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAppbmRleCBhYTdmYjVjZjQ2YjA2MjU3ZmY1YmYyMzVmYjNiZjA3ODQ1
MzU0OTlmLi4wY2FmYmQ1NTNjOGMxZWNiMzI2YzhiYmNmYmRiOGRkNDE4YWQ0MzM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDksNSArMTQ5LDEyIEBAIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OnNldE9wYXF1ZShib29sIG9wYXF1ZSkKICAgICAgICAgbV90
ZXh0dXJlVXBkYXRlci0+c2V0T3BhcXVlKG9wYXF1ZSk7CiB9CiAKK3ZvaWQgQ29udGVudExheWVy
Q2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIHNl
dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7CisgICAgaWYg
KG1fZGVsZWdhdGUpCisgICAgICAgIG1fZGVsZWdhdGUtPndhc1Njcm9sbGVkKHNjcm9sbERlbHRh
KTsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDNlODY4NmQwYTBkYmNlMmMxZThjNjFiNjAx
ODE0MDI2Mzc2NmJmMjMuLjk5NTBjMzdiMjE1MGY2YmE3ZmVhMTU2ZjQyYTY1YmZjOTIzNDcyYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNDcsNiArNDcsNyBAQCBjbGFz
cyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29udGVudExh
eWVyRGVsZWdhdGUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdh
c1Njcm9sbGVkKGNvbnN0IEludFNpemUmKSA9IDA7CiB9OwogCiAvLyBBIExheWVyIHRoYXQgcmVx
dWlyZXMgYSBHcmFwaGljc0NvbnRleHQgdG8gcmVuZGVyIGl0cyBjb250ZW50cy4KQEAgLTY0LDYg
KzY1LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKTsKIAor
ICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpOworCiBwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ29udGVudExheWVyRGVsZWdhdGUqKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMzFhNTExOGZmZDAzZDE4MjQ4
ZDA3ZTUxZTI0YWVlZDMyYWZlOTcwZS4uNzZjOTYwZWZhMTI0MjVlMDU1Y2Y0MmI2Y2ZkZWNkNGQ4
YjQ0NWI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Myw2
ICs1Myw3IEBACiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KQEAgLTcwLDYgKzcxLDcgQEAgUGFzc093blB0cjxHcmFwaGljc0xheWVy
PiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogCiBH
cmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKKyAgICAsIG1fc2Ny
b2xsYWJsZUFyZWEoMCkKICAgICAsIG1fY29udGVudHNMYXllclB1cnBvc2UoTm9Db250ZW50c0xh
eWVyKQogICAgICwgbV9jb250ZW50c0xheWVySGFzQmFja2dyb3VuZENvbG9yKGZhbHNlKQogICAg
ICwgbV9pblNldENoaWxkcmVuKGZhbHNlKQpAQCAtNjc2LDYgKzY3OCwxMiBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlYwogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNs
aXApOwogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6d2FzU2Nyb2xsZWQoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVsdGEpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDM5YjM2N2I5ZDNmMGUy
ZjgzYTMyMGY5MDJiNTQwNjJmYjkzMWU4NjYuLmQ3NjIzOWM4ZDE3OTVkNTM4ZTNiZGU0YWEyOTZj
YzgxMWMxYzU1NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC00MSw2
ICs0MSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hyb21pdW07Citj
bGFzcyBTY3JvbGxhYmxlQXJlYTsKIAogY2xhc3MgR3JhcGhpY3NMYXllckNocm9taXVtIDogcHVi
bGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6
CkBAIC0xMDAsNiArMTAxLDEwIEBAIHB1YmxpYzoKIAogICAgIC8vIENvbnRlbnRMYXllckRlbGVn
YXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCB3YXNT
Y3JvbGxlZChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CisKKyAgICBTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9Cisg
ICAgdm9pZCBzZXRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEp
IHsgbV9zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhOyB9CiAKICAgICAvLyBFeHBvc2Vk
IGZvciB0ZXN0cy4KICAgICBMYXllckNocm9taXVtKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9CkBAIC0xMzUsNiArMTQwLDggQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zvcm1MYXllcjsKICAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVyOwogCisgICAgU2Nyb2xsYWJsZUFyZWEq
IG1fc2Nyb2xsYWJsZUFyZWE7CisKICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAg
ICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdl
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA4ZDBmZTAzYjYxM2IyNDgxNzBlOGYzNjIwMGQx
NDBiZTA5MWY0NDgzLi43YThhNjhhZWViNzY3MzMwZTcyNTM5OWFkZmJiMjUyNjY4ZmUzYTc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzUzLDYgKzM1MywxNCBAQCB2b2lkIExheWVyQ2hy
b21pdW06OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikK
ICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnNldE1heFNj
cm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKQoreworICAgIGlm
IChtX21heFNjcm9sbFBvc2l0aW9uID09IG1heFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgbV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOworICAgIHNl
dE5lZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0U2Nyb2xsYWJsZShi
b29sIHNjcm9sbGFibGUpCiB7CiAgICAgaWYgKG1fc2Nyb2xsYWJsZSA9PSBzY3JvbGxhYmxlKQpA
QCAtNDIwLDYgKzQyOCw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOwog
ICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0
U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXItPnNldE1heFNjcm9s
bFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRy
YW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1f
dHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VXBkYXRlUmVjdChtX3VwZGF0ZVJlY3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IGEwNzU4MTMxZmJmZTIzNDY5MGIyNzMzYWVjNmJhMmY4YTE0ZDBj
YTcuLjZjM2M0NWQxZDU3M2YyZGQyZGUwOTZkNjJjZDk4OTY1MDJhYjVkZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKQEAgLTEyNiw2ICsxMjYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxQ
b3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0
TWF4U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEludFNpemUmIG1h
eFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQor
CiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wpOwogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogCkBAIC0yNTksNiArMjYyLDcgQEAgcHJpdmF0
ZToKICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0
OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisgICAgSW50U2l6ZSBtX21heFNjcm9s
bFBvc2l0aW9uOwogICAgIGJvb2wgbV9zY3JvbGxhYmxlOwogICAgIEZsb2F0UG9pbnQgbV9wb3Np
dGlvbjsKICAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAKaW5kZXggODFmOTcxMmUwZmFjMGY5ODEyODg4ZGEyZTczZmYzM2VmZDYwNjVhNC4uODBlZTUy
MDI1MzBjN2QwMDdmMGE2MGQxODE3ZTQ3NmRkY2RjNWNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcApAQCAtOTUsNiArOTUsMTUgQEAgdm9pZCBDQ0xheWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRy
ZW4oKQogICAgICAgICBtX2NoaWxkcmVuWzBdLT5yZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAKK2Jv
b2wgQ0NMYXllckltcGw6OmlzTGF5ZXJJbkRlc2NlbmRhbnRzKGludCBsYXllcklkKSBjb25zdAor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAobV9jaGlsZHJlbltpXS0+aWQoKSA9PSBsYXllcklkIHx8IG1fY2hpbGRyZW5b
aV0tPmlzTGF5ZXJJbkRlc2NlbmRhbnRzKGxheWVySWQpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6Y2xl
YXJDaGlsZExpc3QoKQogewogICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKQEAgLTE3OSw5ICsxODgs
OSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSopCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgQ0NMYXllcklt
cGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbCkKK3ZvaWQgQ0NMYXllckltcGw6OnNj
cm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQogewotICAgIEludFNpemUgbmV3RGVsdGEg
PSBtX3Njcm9sbERlbHRhICsgc2Nyb2xsOworICAgIEZsb2F0U2l6ZSBuZXdEZWx0YSA9IG1fc2Ny
b2xsRGVsdGEgKyBzY3JvbGw7CiAgICAgSW50U2l6ZSBtaW5EZWx0YSA9IC10b1NpemUobV9zY3Jv
bGxQb3NpdGlvbik7CiAgICAgSW50U2l6ZSBtYXhEZWx0YSA9IG1fbWF4U2Nyb2xsUG9zaXRpb24g
LSB0b1NpemUobV9zY3JvbGxQb3NpdGlvbik7CiAgICAgLy8gQ2xhbXAgbmV3RGVsdGEgc28gdGhh
dCBwb3NpdGlvbiArIGRlbHRhIHN0YXlzIHdpdGhpbiBzY3JvbGwgYm91bmRzLgpAQCAtNDg4LDcg
KzQ5Nyw3IEBAIHZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbikKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0
cmVlKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhKQordm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3Qg
RmxvYXRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBpZiAobV9zY3JvbGxEZWx0YSA9PSBzY3Jv
bGxEZWx0YSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggN2JhZTIw
MTc0NGI0ZWMyMDgxNGYzMDUyOGFiNmJjZjJkMmQ4NzkyZC4uMTRkMDZiNjg4MzY1M2Y3M2JlNmMx
NTRjY2RhMTIyMzE3ZWQ1MDFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC01OCw2ICs1OCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsK
ICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKICAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVu
KCk7CisgICAgYm9vbCBpc0xheWVySW5EZXNjZW5kYW50cyhpbnQgbGF5ZXJJZCkgY29uc3Q7CiAK
ICAgICB2b2lkIHNldE1hc2tMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CiAgICAgQ0NM
YXllckltcGwqIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyLmdldCgpOyB9
CkBAIC0xNjIsMTYgKzE2MywxNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Ny
b2xsUG9zaXRpb24oKSBjb25zdCB7cmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KICAgICB2
b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9u
KSB7IG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsgfQogCi0gICAgY29u
c3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbERlbHRhOyB9
Ci0gICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJik7CisgICAgY29uc3QgRmxv
YXRTaXplJiBzY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsRGVsdGE7IH0KKyAg
ICB2b2lkIHNldFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYpOwogCiAgICAgZmxvYXQgcGFn
ZVNjYWxlRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZURlbHRhOyB9CiAgICAgdm9p
ZCBzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCk7CiAKLSAgICBjb25zdCBJbnRTaXplJiBzZW50U2Ny
b2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3NlbnRTY3JvbGxEZWx0YTsgfQotICAgIHZvaWQg
c2V0U2VudFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNlbnRTY3JvbGxEZWx0YSkgeyBtX3Nl
bnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsgfQorICAgIGNvbnN0IEZsb2F0U2l6ZSYg
c2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Nyb2xsRGVsdGE7IH0KKyAg
ICB2b2lkIHNldFNlbnRTY3JvbGxEZWx0YShjb25zdCBGbG9hdFNpemUmIHNlbnRTY3JvbGxEZWx0
YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsgfQogCi0gICAgdm9pZCBz
Y3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGwpOworICAgIHZvaWQgc2Nyb2xsQnkoY29uc3Qg
RmxvYXRTaXplJiBzY3JvbGwpOwogCiAgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wgc2Nyb2xsYWJs
ZSkgeyBtX3Njcm9sbGFibGUgPSBzY3JvbGxhYmxlOyB9CkBAIC0yNjAsOCArMjYxLDggQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CiAKLSAgICBJbnRTaXplIG1fc2Nyb2xs
RGVsdGE7Ci0gICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9z
Y3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zZW50U2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6
ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGZsb2F0IG1fcGFnZVNjYWxlRGVsdGE7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDE1YTMwNzRlYmJlMmViMGUxNGJmYTI2
YmJmNDI5NjA0ZDFjNzU0YTIuLjkyMTAxMDlhOThjOTBkZjcxYjczMmVmNzQwYzMzYTQxN2YwNTIx
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTk0LDE1ICs1OTQsMzMg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRh
dGVMaXN0LmNsZWFyKCk7CiB9CiAKK3N0YXRpYyBMYXllckNocm9taXVtKiBmaW5kTGF5ZXJCeUlk
KExheWVyQ2hyb21pdW0qIGxheWVyLCBpbnQgaWQpCit7CisgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPmlkKCkgPT0gaWQpCisgICAgICAgIHJldHVy
biBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5kTGF5ZXJC
eUlkKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBpZCk7CisgICAgICAgIGlmIChmb3VuZCkK
KyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwog
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxB
bmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVzaGluZyBzY3JvbGwgb2Zmc2V0
cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0gICAgaWYgKCFpbmZvLnNjcm9s
bHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFpbmZvLnJvb3RTY3JvbGxEZWx0
YS5pc1plcm8oKSB8fCBpbmZvLnBhZ2VTY2FsZURlbHRhICE9IDEpCisgICAgICAgIG1fY2xpZW50
LT5hcHBseVNjcm9sbEFuZFNjYWxlKGluZm8ucm9vdFNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2Fs
ZURlbHRhKTsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9j
bGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVs
dGEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zY3JvbGxzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gZmluZExheWVyQnlJZChtX3Jvb3RM
YXllci5nZXQoKSwgaW5mby5zY3JvbGxzW2ldLmxheWVySWQpOworICAgICAgICBpZiAobGF5ZXIg
JiYgbGF5ZXItPnNjcm9sbGFibGUoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PENvbnRlbnRM
YXllckNocm9taXVtKj4obGF5ZXIpLT5zY3JvbGxCeShpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVs
dGEpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oCmluZGV4IDJlMGNiY2YyYzU4NWU4MjE1ZDI4NmRlZTliNjFlNTM1MTgwY2ZmYWQu
LjBkMjQ2ZjUzOTM1MDU1YTY5NTA0ODY5MTZhYzMyMjdlY2FkNDVlYWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIAog
c3RydWN0IENDU2Nyb2xsQW5kU2NhbGVTZXQgewogICAgIFZlY3RvcjxDQ0xheWVyVHJlZUhvc3RD
b21tb246OlNjcm9sbFVwZGF0ZUluZm8+IHNjcm9sbHM7CisgICAgSW50U2l6ZSByb290U2Nyb2xs
RGVsdGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDA4ODM3N2NkZGQ2YTc4YTg3YWU0MjFiNjJiMzEz
ZGE2MjU3OGNiZTAuLjY5YmMwOGQxNGZjZWQ5MmE0Njg0YmIxMWQ5OGFjNzI3MTlhNGRmMjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgogI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUGFnZVNjYWxlQW5p
bWF0aW9uLmgiCkBAIC0xMDAsNyArMTAxLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjph
bmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQogICAgIGlmICghbV9wYWdlU2NhbGVBbmlt
YXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1Np
emUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29yZWRJbnRQb2ludChtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogCiAgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9w
YWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSAvIG1f
cGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlv
bi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpOwpAQCAtMTE5LDcgKzEyMCw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29u
c3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgZmxvb3JlZEludFBvaW50KG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zY3JvbGxEZWx0YSgpKSk7CiAgICAgc2Nyb2xsVG90YWwuc2NhbGUobV9wYWdlU2NhbGVE
ZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVUb3RhbCA9IG1fcGFnZVNjYWxlICogbV9wYWdlU2NhbGVE
ZWx0YTsKICAgICBJbnRTaXplIHNjYWxlZENvbnRlbnRTaXplID0gY29udGVudFNpemUoKTsKQEAg
LTE4Nyw5ICsxODgsOCBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNwYWNlKEND
TGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAgIHJldHVybiBzdXJm
YWNlRGFtYWdlUmVjdDsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlcyhDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCkKIHsKLSAgICBDQ0xheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owog
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcigpKTsKIAogICAgIGlm
ICghcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKSkKQEAgLTE5OSwxMSArMTk5LDIxIEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFz
c0xpc3QmIHBhc3NlcykKIAogICAgIHJvb3RMYXllcigpLT5zZXRDbGlwUmVjdChJbnRSZWN0KElu
dFBvaW50KCksIHZpZXdwb3J0U2l6ZSgpKSk7CiAKKyAgICAvLyBEdXJpbmcgdGVzdGluZyB3ZSBt
YXkgbm90IGhhdmUgYW4gYWN0aXZlIHJlbmRlcmVyLgorICAgIGNvbnN0IGludCBrRGVmYXVsdE1h
eFRleHR1cmVTaXplID0gMjU2OworICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IG1fbGF5ZXJSZW5k
ZXJlciA/IGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSA6IGtEZWZh
dWx0TWF4VGV4dHVyZVNpemU7CisKICAgICB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OwogICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bDo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyKCksIHJvb3RM
YXllcigpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLCAmbV9sYXll
clNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKyAg
ICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocm9vdExheWVyKCksIHJvb3RMYXllcigpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllcigpLT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwogICAg
IH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMo
Q0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQoreworICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CisgICAgY2FsY3VsYXRlUmVuZGVyU3VyZmFjZXMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CiAKICAgICBpZiAobGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFy
dGlhbFN3YXApCiAgICAgICAgIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdExheWVyKCks
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwpAQCAtMzM1LDkgKzM0NSwxMiBAQCBzdGF0aWMgQ0NM
YXllckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXll
cikKIHsKICAgICBtX3Jvb3RMYXllckltcGwgPSBsYXllcjsKLQotICAgIC8vIEZJWE1FOiBDdXJy
ZW50bHksIHRoaXMgb25seSBmaW5kcyB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBsYXllci4KICAgICBt
X3Njcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkp
OworCisgICAgaWYgKG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKSB7CisgICAgICAgIGlm
ICghbV9yb290TGF5ZXJJbXBsIHx8ICFtX3Jvb3RMYXllckltcGwtPmlzTGF5ZXJJbkRlc2NlbmRh
bnRzKG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLT5pZCgpKSkKKyAgICAgICAgICAgIG1f
Y3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CisgICAgfQogfQogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAtMzk4LDE1ICs0
MTEsMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5n
ZSkKIHsKLSAgICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEpCisgICAgaWYgKCFtX3Njcm9sbExh
eWVySW1wbCB8fCBwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gV2UgYWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFn
ZVNjYWxlIHNwYWNlLgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBJbnRT
aXplIHNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAg
ICAgIHNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIC8vIFdl
IGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGEgZm9yIHRoZSByb290
IGxheWVyIHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBt
X3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZShw
YWdlU2NhbGVDaGFuZ2UpOworICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShz
Y3JvbGxEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxl
RGVsdGEoZmxvYXQgZGVsdGEpCkBAIC00NDYsOSArNDU3LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5nIGEgdmVydGlj
YWwgc2Nyb2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1heFNjcm9sbC5j
bGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKKyAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdXBkYXRlIHRo
ZSByb290IGxheWVyIHNjcm9sbCByYW5nZSwgc2luY2UgdGhlIGNoaWxkCisgICAgLy8gbGF5ZXJz
IHVzZSB1bnNjYWxlZCBzY3JvbGwgY29vcmRpbmF0ZXMuCiAgICAgbV9zY3JvbGxMYXllckltcGwt
PnNldE1heFNjcm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6
IEFsc28gdXBkYXRlIHN1YmxheWVycy4KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXROZWVkc1JlZHJhdygpCkBAIC00NTYsMjggKzQ2NywxMDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25J
bXBsVGhyZWFkKCk7CiB9CiAKLUNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NM
YXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4oY29uc3QgSW50UG9pbnQmKQorYm9vbCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjppc0NvbnRlbnRQb2ludFdpdGhpbkxheWVyKENDTGF5ZXJJbXBsKiBs
YXllckltcGwsIGNvbnN0IEludFBvaW50JiBjb250ZW50UG9pbnQpIGNvbnN0Cit7CisgICAgSW50
UmVjdCBsYXllckNvbnRlbnRSZWN0KGxheWVySW1wbC0+dmlzaWJsZUxheWVyUmVjdCgpKTsKKyAg
ICAvLyBUaGUgdmlzaWJsZSBsYXllciByZWN0IGlzIGluIHNjYWxlZCBjb29yZGluYXRlcywgc28g
dW5kbyB0aGUgcGFnZSBzY2FsZSB1bmxlc3MgaXQgaXMgdGhlCisgICAgLy8gbm9uLWNvbXBvc2l0
ZWQgY29udGVudCB3aGVyZSB0aGUgY29udGVudCBwb2ludCBpcyBhbHNvIGluIHNjYWxlZCBjb29y
ZGluYXRlcy4gTm90ZSB0aGF0CisgICAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byB1bmRvIHRoZSBw
YWdlIHNjYWxlIGRlbHRhLCBiZWNhdXNlIHRoZSBsYXllciBjb250ZW50IHJlY3QgaXMgb25seQor
ICAgIC8vIHNjYWxlZCB3aXRoIHRoZSBvcmlnaW5hbCBwYWdlIHNjYWxlLgorICAgIGlmICghbGF5
ZXJJbXBsLT5pc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpCisgICAgICAgIGxheWVyQ29udGVudFJl
Y3Quc2NhbGUoMSAvIG1fcGFnZVNjYWxlKTsKKyAgICByZXR1cm4gbGF5ZXJDb250ZW50UmVjdC5j
b250YWlucyhjb250ZW50UG9pbnQpOworfQorCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luU2Nyb2xsaW5nTGF5ZXIoQ0NMYXllcklt
cGwqIGxheWVySW1wbCwgY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpCit7CisgICAgaWYg
KCFsYXllckltcGwpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
RmFpbGVkOworCisgICAgaWYgKCFsYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaXNJ
bnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
RmFpbGVkOworCisgICAgSW50UG9pbnQgY29udGVudFBvaW50KGxheWVySW1wbC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworICAgIGlm
IChsYXllckltcGwtPmRyYXdzQ29udGVudCgpICYmICFpc0NvbnRlbnRQb2ludFdpdGhpbkxheWVy
KGxheWVySW1wbCwgY29udGVudFBvaW50KSkKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsYWJsZSgp
KQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisK
KyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IGxheWVySW1wbDsKKyAgICByZXR1
cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ7Cit9CisKK0NDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4o
Y29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9y
IHNjcm9sbGFibGUgc3VibGF5ZXJzLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCi0gICAgICAgIHJldHVybiBTY3JvbGxJZ25v
cmVkOworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7CisKKyAgICBp
ZiAoIXJvb3RMYXllcigpKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbElnbm9yZWQ7CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAgICAvLyBMb29rIGZv
ciBhIHNjcm9sbGFibGUgbGF5ZXIgaW4gZnJvbnQgdG8gYmFjayBvcmRlci4KKyAgICB0eXBlZGVm
IENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVySXRl
cmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKyAgICBDQ0xh
eWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIGNhbGN1bGF0ZVJlbmRlclN1cmZh
Y2VzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworCisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBl
bmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjplbmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJl
Z2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSAqaXQ7CisgICAgICAgIC8vIEEgbm9uLWNvbXBvc2l0
ZWQgY29udGVudCBsYXllciBzaG91bGQgYmUgc2Nyb2xsZWQgdmlhIHRoZSByb290IHNjcm9sbCBs
YXllci4KKyAgICAgICAgaWYgKGxheWVySW1wbC0+aXNOb25Db21wb3NpdGVkQ29udGVudCgpKQor
ICAgICAgICAgICAgbGF5ZXJJbXBsID0gbV9zY3JvbGxMYXllckltcGwuZ2V0KCk7CisgICAgICAg
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgc3RhdHVzID0gYmVnaW5TY3JvbGxp
bmdMYXllcihsYXllckltcGwsIHZpZXdwb3J0UG9pbnQpOworICAgICAgICBpZiAoc3RhdHVzICE9
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4g
c3RhdHVzOworICAgIH0KKyAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEln
bm9yZWQ7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50
U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGw6OnNjcm9sbEJ5IiwgdGhpcywgMCk7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAg
ICBpZiAoIW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwotICAgIG1fY2xp
ZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIG1fY2xpZW50LT5zZXROZWVk
c1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIEludFNpemUgcGVuZGluZ0RlbHRhKHNjcm9sbERl
bHRhKTsKKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gbV9jdXJyZW50bHlTY3JvbGxpbmdM
YXllckltcGwuZ2V0KCk7CisgICAgd2hpbGUgKGxheWVySW1wbCAmJiAhcGVuZGluZ0RlbHRhLmlz
WmVybygpKSB7CisgICAgICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkgeworICAgICAg
ICAgICAgRmxvYXRTaXplIHByZXZpb3VzRGVsdGEobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsK
KyAgICAgICAgICAgIEZsb2F0U2l6ZSBzY2FsZWRQZW5kaW5nRGVsdGEocGVuZGluZ0RlbHRhKTsK
KyAgICAgICAgICAgIC8vIFNpbmNlIHNjcm9sbERlbHRhIGlzIGluIHdpbmRvdyBjb29yZGluYXRl
cywgaXQgYWxyZWFkeSBoYXMgdGhlIHBhZ2Ugc2NhbGUgYXBwbGllZC4KKyAgICAgICAgICAgIC8v
IFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSByb290IHNjcm9sbCBsYXllciBleHBlY3RzLCBidXQgY2hp
bGQgbGF5ZXJzIGFyZSBzY3JvbGxlZCB1c2luZworICAgICAgICAgICAgLy8gdW5zY2FsZWQgY29u
dGVudCBjb29yZGluYXRlcyBpbnN0ZWFkLCBzbyB3ZSBoYXZlIHRvIHVuZG8gdGhlIHNjYWxpbmcg
Zm9yIHRoZW0uIFRoZQorICAgICAgICAgICAgLy8gcGFnZSBzY2FsZSBkZWx0YSBuZWVkcyB0byBi
ZSB1bmFwcGxpZWQgd2l0aCBib3RoIGxheWVyIHR5cGVzIHNpbmNlIHRoZSBzY3JvbGwKKyAgICAg
ICAgICAgIC8vIGNvb3JkaW5hdGVzIGRvIG5vdCByZXNwZWN0IGl0LgorICAgICAgICAgICAgaWYg
KGxheWVySW1wbCA9PSBtX3Njcm9sbExheWVySW1wbCkgeworICAgICAgICAgICAgICAgIHNjYWxl
ZFBlbmRpbmdEZWx0YS5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisgICAgICAgICAgICAg
ICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY2FsZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvICht
X3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGEpKTsKKyAgICAgICAgICAgICAgICBsYXllcklt
cGwtPnNjcm9sbEJ5KHNjYWxlZFBlbmRpbmdEZWx0YSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBSZXNldCB0aGUgcGVuZGluZyBzY3JvbGwgZGVsdGEgdG8gemVybyBpZiB0aGUgbGF5
ZXIgd2FzIGFibGUgdG8gbW92ZSBhbG9uZyB0aGUgcmVxdWVzdGVkCisgICAgICAgICAgICAvLyBh
eGlzLiBUaGlzIGlzIHRvIGVuc3VyZSBpdCBpcyBwb3NzaWJsZSB0byBzY3JvbGwgZXhhY3RseSB0
byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBhCisgICAgICAgICAgICAvLyBzY3JvbGwgYXJlYSBy
ZWdhcmRsZXNzIG9mIHRoZSBzY3JvbGwgc3RlcC4gRm9yIGRpYWdvbmFsIHNjcm9sbHMgdGhpcyBh
bHNvIGF2b2lkcyBhcHBseWluZworICAgICAgICAgICAgLy8gdGhlIHNjcm9sbCBvbiBvbmUgYXhp
cyB0byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICBpZiAocHJldmlvdXNEZWx0YS53aWR0
aCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgpKQorICAgICAgICAgICAgICAg
IHBlbmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0RlbHRh
LmhlaWdodCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5oZWlnaHQoKSkKKyAgICAgICAg
ICAgICAgICBwZW5kaW5nRGVsdGEuc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGxh
eWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCk7CisgICAgfQorCisgICAgaWYgKHBlbmRpbmdE
ZWx0YSAhPSBzY3JvbGxEZWx0YSkgeworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRP
bkltcGxUaHJlYWQoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhy
ZWFkKCk7CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCgp
CiB7CisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwuY2xlYXIoKTsKIH0KIAogYm9v
bCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpoYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkKQEAgLTUyMCwy
NSArNjEwLDQ4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlRW5kKCkK
ICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKIH0KIAorc3RhdGlj
IGJvb2wgZGlkU2Nyb2xsU3VidHJlZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQoreworICAgIGlm
ICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNp
emUoKTsgKytpKQorICAgICAgICBpZiAoZGlkU2Nyb2xsU3VidHJlZShsYXllckltcGwtPmNoaWxk
cmVuKClbaV0uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdFNjcm9sbERlbHRh
cyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBs
KSBjb25zdAoreworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7
CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSB0b1NpemUoZmxvb3JlZEludFBvaW50KGxh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOworICAgICAgICBpZiAobGF5ZXJJbXBsICE9IG1fc2Ny
b2xsTGF5ZXJJbXBsKSB7CisgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9s
bFVwZGF0ZUluZm8gc2Nyb2xsOworICAgICAgICAgICAgc2Nyb2xsLmxheWVySWQgPSBsYXllcklt
cGwtPmlkKCk7CisgICAgICAgICAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsK
KyAgICAgICAgICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhID0gc2Nyb2xs
RGVsdGE7CisgICAgICAgIGxheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKGxheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXll
ckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNvbGxlY3RTY3JvbGxEZWx0
YXMoc2Nyb2xsSW5mbywgbGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKK30KKwogUGFz
c093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNz
U2Nyb2xsRGVsdGFzKCkKIHsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xs
SW5mbyA9IGFkb3B0UHRyKG5ldyBDQ1Njcm9sbEFuZFNjYWxlU2V0KCkpOwotICAgIGJvb2wgZGlk
TW92ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsICYmICghbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERl
bHRhKCkuaXNaZXJvKCkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxLjBmKTsKKyAgICBib29sIGRp
ZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoZGlkU2Nyb2xsU3VidHJlZShtX3Njcm9sbExh
eWVySW1wbC5nZXQoKSkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxKTsKICAgICBpZiAoIWRpZE1v
dmUgfHwgbV9waW5jaEdlc3R1cmVBY3RpdmUgfHwgbV9wYWdlU2NhbGVBbmltYXRpb24pIHsKICAg
ICAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9
IDE7CiAgICAgICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKICAgICB9CiAKKyAgICBj
b2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8uZ2V0KCksIG1fc2Nyb2xsTGF5ZXJJbXBsLmdl
dCgpKTsKICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURl
bHRhID0gbV9wYWdlU2NhbGVEZWx0YTsKIAotICAgIC8vIEZJWE1FOiB0cmFjayBzY3JvbGxzIGZy
b20gbGF5ZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxM
YXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXllcklt
cGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xs
KTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNj
cm9sbERlbHRhKTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDU2OWQ2OWZhM2VkNjgwZmE1MTdl
OThiMGIxZjQ1NTQ5MDA4NTY0NDUuLjE0MjkwOGIzZDM0NDZjNmViMDUyNjUyYzg3ZTZkMWY4NTRj
OWY5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEyNywxMyAr
MTI3LDE4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hh
bmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9p
ZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBj
b25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBjYWxj
dWxhdGVSZW5kZXJTdXJmYWNlcyhDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOwogICAg
IHZvaWQgb3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOwogICAgIEludFNp
emUgY29udGVudFNpemUoKSBjb25zdDsKKyAgICBib29sIGlzQ29udGVudFBvaW50V2l0aGluTGF5
ZXIoQ0NMYXllckltcGwqLCBjb25zdCBJbnRQb2ludCYgY29udGVudFBvaW50KSBjb25zdDsKKyAg
ICBTY3JvbGxTdGF0dXMgYmVnaW5TY3JvbGxpbmdMYXllcihDQ0xheWVySW1wbCosIGNvbnN0IElu
dFBvaW50JiB2aWV3cG9ydFBvaW50KTsKKyAgICB2b2lkIGNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NT
Y3JvbGxBbmRTY2FsZVNldCosIENDTGF5ZXJJbXBsKikgY29uc3Q7CiAKICAgICBPd25QdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBtX3Jvb3RMYXllckltcGw7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Njcm9sbExh
eWVySW1wbDsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsOwogICAgIENDU2V0dGluZ3MgbV9zZXR0aW5nczsKICAgICBJbnRTaXplIG1fdmlld3Bv
cnRTaXplOwogICAgIGJvb2wgbV92aXNpYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVh
ZFByb3h5LmNwcAppbmRleCAyZTQ4ZTEwZjVlNWNjNzAyNDhhNTM4NDQ5ZGQ1ZTQyOGFhMmU4ODJl
Li42OTI5YjBiMjkzY2JjOTg2ZGJiNGFkM2QzMDdkMzY2NDg0ZTFjYjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVh
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTg0LDYgKzE4NCw3IEBAIHZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6ZG9Db21taXQoKQogICAgICAgICAvLyBJbiB0aGUgc2luZ2xlLXRo
cmVhZGVkIGNhc2UsIHRoZSBzY3JvbGwgZGVsdGFzIHNob3VsZCBuZXZlciBiZQogICAgICAgICAv
LyB0b3VjaGVkIG9uIHRoZSBpbXBsIGxheWVyIHRyZWUuCiAgICAgICAgIE93blB0cjxDQ1Njcm9s
bEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cHJvY2Vzc1Nj
cm9sbERlbHRhcygpOworICAgICAgICBBU1NFUlQoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRh
LmlzWmVybygpKTsKICAgICAgICAgQVNTRVJUKCFzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSk7
CiAjZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9D
aHJvbWVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwCmluZGV4IGZiMDdiNGMxMDNmYjI3OWEyNGM0ZjE2NzhlYjU5ODhmMzIxNzNi
YTYuLjkyZTQwZjZiMzRhMGQ1MzE5ZjhlYTI3MTQxOGVlNzE0N2JjZDgxMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC01Myw2ICs1
Myw3IEBACiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvblNl
cnZpY2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NM
YXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgogI2luY2x1ZGUgIkljb24uaCIKQEAgLTg2OCw2ICs4NjksMjggQEAgYm9vbCBD
aHJvbWVDbGllbnRJbXBsOjpwYWludEN1c3RvbU92ZXJoYW5nQXJlYShHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xp
ZW50SW1wbDo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihHcmFwaGljc0xheWVyKiBsYXllciwg
U2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQoreworICAgIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogZ3JhcGhpY3NMYXllckNocm9taXVtID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNo
cm9taXVtKj4obGF5ZXIpOworICAgIGdyYXBoaWNzTGF5ZXJDaHJvbWl1bS0+c2V0U2Nyb2xsYWJs
ZUFyZWEoc2Nyb2xsYWJsZUFyZWEpOworCisgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1
bSA9IGxheWVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgbGF5ZXJDaHJvbWl1bS0+c2V0U2Nyb2xs
YWJsZSh0cnVlKTsKKyAgICBsYXllckNocm9taXVtLT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgbGF5ZXJDaHJvbWl1bS0+c2V0TWF4U2Ny
b2xsUG9zaXRpb24oSW50U2l6ZShzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShIb3Jpem9udGFs
U2Nyb2xsYmFyKSwgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIp
KSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBncmFwaGlj
c0xheWVyQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihsYXll
cik7CisgICAgZ3JhcGhpY3NMYXllckNocm9taXVtLT5zZXRTY3JvbGxhYmxlQXJlYSgwKTsKKwor
ICAgIExheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21pdW0gPSBsYXllci0+cGxhdGZvcm1MYXllcigp
OworICAgIGxheWVyQ2hyb21pdW0tPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIGxheWVyQ2hy
b21pdW0tPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworICAgIGxheWVyQ2hyb21pdW0t
PnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoKSk7Cit9CisKIC8vIEZJWE1FOiBSZW1vdmUg
Q2hyb21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lIGFu
ZCBDaHJvbWVDbGllbnRJbXBsOjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9y
RnJhbWUKIC8vIG9uY2UgYWxsIHBvcnRzIGhhdmUgbW92ZWQgdG8gY2xpZW50LWJhc2VkIGdlb2xv
Y2F0aW9uIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzcz
ICkuCiAvLyBGb3IgY2xpZW50LWJhc2VkIGdlb2xvY2F0aW9uLCB0aGVzZSBtZXRob2RzIGFyZSBu
b3cgaW1wbGVtZW50ZWQgYXMgV2ViR2VvbG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9u
IGFuZCBXZWJHZW9sb2NhdGlvbkNsaWVudDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggOGZkMjQ4
OGQ5ZWU2NjEwZmUxMzg1OGI4ZWM5ZTU1ODBjNzU0MDUyOC4uNzYxODUyMDU1OGJhY2VkYzhhZjYy
ZDVjNzQxM2NlMDhjNjE3NWY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuaApAQCAtNDQsOSArNDQsMTEgQEAgY2xhc3MgQ29sb3JDaG9vc2VyQ2xp
ZW50OwogI2VuZGlmCiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBH
cmFwaGljc0xheWVyOwogY2xhc3MgUG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGll
bnQ7CiBjbGFzcyBSZW5kZXJCb3g7CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogfQpAQCAtMTY3LDYgKzE2OSw5IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygp
OwogCiAgICAgdmlydHVhbCBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRp
bmdUcmlnZ2VycygpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xs
aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
Kik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVl
bkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAppbmRleCA0ZjY0ZDU0NzFlMzk2NjUw
ZjdjYTc1ZTllMTYyNWM2NmQ3MmYxMWI2Li4yMjNmMTEyNmFmOWNkZWJmZDZkZGFhYjM2YzM4YmUw
MDM3ODc4M2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmNwcApAQCAtNzIsNCArNzIsOCBAQCB2b2lkIFdlYkNvbnRlbnRMYXllcklt
cGw6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xp
cAogICAgIG1fY29udGVudENsaWVudC0+cGFpbnRDb250ZW50cyhjYW52YXMsIFdlYlJlY3QoY2xp
cCkpOwogfQogCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6Ondhc1Njcm9sbGVkKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCA1MWYz
NDRmN2NhZjEyNzExMjZhYzdiNDI2OGVkNTQ2MTIxNDIxOWQ4Li4wNTlhNDMzZmI4ZTA3MjQ4MGM3
YzY2YTcwNjg0MDY3NGE4NzgwZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5oCkBAIC00NCw2ICs0NCw3IEBAIHByb3RlY3RlZDoKIAog
ICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCB3YXNTY3JvbGxlZChjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJik7CiAKICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVu
dENsaWVudDsKICAgICBib29sIG1fZHJhd3NDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCmluZGV4IDI3NzI4Y2JlZjBlM2IzMTg3
OTNkMGRkYzEwZmMzN2FkNjBmMTdkN2QuLjEwZWMyZjRhY2ViNDZiYzViZjUxZjNiNjkzODBiZjEz
OTg0ZmMyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
ckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJ
bXBsVGVzdC5jcHAKQEAgLTE2NCw0ICsxNjQsMjIgQEAgVEVTVChDQ0xheWVySW1wbFRlc3QsIHZl
cmlmeUxheWVyQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfU1VCVFJFRV9ESURfTk9UX0NIQU5HRShyb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihhcmJp
dHJhcnlJbnRTaXplKSk7CiB9CiAKK1RFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlEZXNjZW5k
YW50U2VhcmNoKQoreworICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBvbiB0aGlzIHdpbGwgZmFrZSB0
aGF0IHdlIGFyZSBvbiB0aGUgY29ycmVjdCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIHNldEltcGxUaHJlYWQ7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGls
ZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7
CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworCisgICAgRVhQRUNUX0ZBTFNFKHJv
b3QtPmlzTGF5ZXJJbkRlc2NlbmRhbnRzKDEpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290LT5pc0xh
eWVySW5EZXNjZW5kYW50cygyKSk7CisgICAgRVhQRUNUX1RSVUUocm9vdC0+aXNMYXllckluRGVz
Y2VuZGFudHMoMykpOworICAgIEVYUEVDVF9GQUxTRShyb290LT5pc0xheWVySW5EZXNjZW5kYW50
cyg0KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGY1OTg5M2Rl
OTA2NDE4ZjhjYmQ3NTc0MGFlMjkzOWUyM2NjMjM1MGEuLjg0YzgyYzk0ODMxMDE1ZTdkZWM5ODM2
MmE0NzRmM2IxZTgyYmEyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC04OCw2ICs4OCwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsKICAgICB9CiAK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlU2Nyb2xsYWJsZUxheWVy
KGludCBpZCwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIHNpemUp
CisgICAgeworICAgICAgICBSZWZQdHI8Q0NMYXllckltcGw+IGxheWVyID0gQ0NMYXllckltcGw6
OmNyZWF0ZShpZCk7CisgICAgICAgIGxheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAg
ICBsYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICBsYXllci0+c2V0UG9zaXRp
b24ocG9zaXRpb24pOworICAgICAgICBsYXllci0+c2V0Qm91bmRzKHNpemUpOworICAgICAgICBs
YXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXpl
LmhlaWdodCgpICogMikpOworICAgICAgICByZXR1cm4gbGF5ZXI7CisgICAgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIG1fYWx3YXlzSW1wbFRocmVhZDsKICAg
ICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbV9ob3N0SW1wbDsKQEAgLTE0MCwxNiArMTUx
LDE2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFSZXBlYXRl
ZFNjcm9sbHMpCiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm87CiAK
ICAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAg
IEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAgIEFTU0VSVF9F
UShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMHUpOwogICAgIEVYUEVDVF9FUShyb290LT5z
ZW50U2Nyb2xsRGVsdGEoKSwgc2Nyb2xsRGVsdGEpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3Jv
bGxJbmZvLmdldCgpLCByb290LT5pZCgpLCBzY3JvbGxEZWx0YSk7CisgICAgQVNTRVJUX0VRKHNj
cm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgc2Nyb2xsRGVsdGEpOwogCiAgICAgSW50U2l6ZSBz
Y3JvbGxEZWx0YTIoLTUsIDI3KTsKICAgICByb290LT5zY3JvbGxCeShzY3JvbGxEZWx0YTIpOwog
ICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAg
QVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJUX0VR
KHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7CiAgICAgRVhQRUNUX0VRKHJvb3QtPnNl
bnRTY3JvbGxEZWx0YSgpLCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7Ci0gICAgZXhwZWN0
Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERlbHRhICsgc2Ny
b2xsRGVsdGEyKTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBz
Y3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7CiAKICAgICByb290LT5zY3JvbGxCeShJbnRTaXpl
KCkpOwogICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7
CkBAIC0yMjUsNyArMjM2LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwaW5j
aEdlc3R1cmUpCiAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwg
bWluUGFnZVNjYWxlKTsKIAogICAgICAgICAvLyBQdXNoZWQgdG8gKDAsMCkgdmlhIGNsYW1waW5n
IGFnYWluc3QgY29udGVudHMgbGF5ZXIgc2l6ZS4KLSAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNj
cm9sbEluZm8uZ2V0KCksIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKC01MCwgLTUwKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIEludFNpemUoLTUw
LCAtNTApKTsKICAgICB9CiB9CiAKQEAgLTI1NSw3ICsyNjYsNyBAQCBURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikKIAogICAgICAgICBPd25QdHI8Q0NT
Y3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxE
ZWx0YXMoKTsKICAgICAgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCAy
KTsKLSAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHNjcm9sbExheWVy
LT5pZCgpLCBJbnRTaXplKC01MCwgLTUwKSk7CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZv
LT5yb290U2Nyb2xsRGVsdGEsIEludFNpemUoLTUwLCAtNTApKTsKICAgICB9CiAKICAgICAvLyBB
bmNob3Igem9vbS1vdXQKQEAgLTI3MiwxMCArMjgzLDE2MiBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikKICAgICAgICAgT3duUHRyPENDU2Nyb2xs
QW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFz
KCk7CiAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgbWluUGFn
ZVNjYWxlKTsKICAgICAgICAgLy8gUHVzaGVkIHRvICgwLDApIHZpYSBjbGFtcGluZyBhZ2FpbnN0
IGNvbnRlbnRzIGxheWVyIHNpemUuCi0gICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZv
LmdldCgpLCBzY3JvbGxMYXllci0+aWQoKSwgSW50U2l6ZSgtNTAsIC01MCkpOworICAgICAgICBF
WFBFQ1RfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9sbERlbHRhLCBJbnRTaXplKC01MCwgLTUwKSk7
CiAgICAgfQogfQogCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RJ
Z25vcmVkKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxC
ZWdpbihJbnRQb2ludCgwLCAwKSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVk
KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFM
U0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBzY3JvbGxOb25Db21wb3NpdGVkUm9vdCkKK3sKKyAgICAvLyBUZXN0IHRoZSBjb25maWd1
cmF0aW9uIHdoZXJlIGEgbm9uLWNvbXBvc2l0ZWQgcm9vdCBsYXllciBpcyBlbWJlZGRlZCBpbiBh
CisgICAgLy8gc2Nyb2xsYWJsZSBvdXRlciBsYXllci4KKyAgICBJbnRTaXplIHN1cmZhY2VTaXpl
KDEwLCAxMCk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNvbnRlbnRMYXllciA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgY29udGVudExheWVyLT5zZXRJc05vbkNvbXBvc2l0ZWRD
b250ZW50KHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwor
ICAgIGNvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oSW50UG9pbnQoNSwgNSkpOworICAgIGNvbnRl
bnRMYXllci0+c2V0Qm91bmRzKHN1cmZhY2VTaXplKTsKKyAgICBjb250ZW50TGF5ZXItPnNldENv
bnRlbnRCb3VuZHMoSW50U2l6ZShzdXJmYWNlU2l6ZS53aWR0aCgpICogMiwgc3VyZmFjZVNpemUu
aGVpZ2h0KCkgKiAyKSk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBzY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKKyAgICBzY3JvbGxMYXllci0+YWRkQ2hpbGQoY29udGVudExheWVyKTsKKworICAgIG1f
aG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxMYXllcik7CisgICAgbV9ob3N0SW1wbC0+c2V0
Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5z
Y3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxT
dGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CisgICAg
bV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0UmVk
cmF3KTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRBbmRSZWRyYXcp
Cit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIG1faG9zdEltcGwtPnNl
dFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOworICAg
IG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdFJl
ZHJhdyk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNDaGlsZCkKK3sKKyAgICBJbnRT
aXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxh
YmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXpl
KHN1cmZhY2VTaXplKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJ
bnRQb2ludCgxNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7Cisg
ICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1f
ZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUo
MTAsIDEwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDApOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxl
TGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIHJvb3QtPmFkZENo
aWxkKGNoaWxkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgbV9o
b3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeDsKKyAgICBtYXRyaXgucm90YXRlM2QoMTgwLCAwLCAwKTsKKyAgICBj
aGlsZC0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgY2hpbGQtPnNldERvdWJsZVNpZGVkKGZh
bHNlKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1
LCA1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1Rf
RkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0
Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290
QW5kQ2hhbmdlUGFnZVNjYWxlKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwor
ICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9z
aXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihy
b290KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworCisg
ICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgaW50IHBhZ2VTY2FsZSA9IDI7Cisg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9s
bEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMocGFnZVNjYWxlLCAxLCBwYWdlU2NhbGUpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3Vs
ZCBhcHBseSB0byB0aGUgcm9vdCBzY3JvbGwgZGVsdGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5k
U2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7
CisgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgSW50U2l6ZShzY3Jv
bGxEZWx0YS53aWR0aCgpICogcGFnZVNjYWxlLCBzY3JvbGxEZWx0YS5oZWlnaHQoKSAqIHBhZ2VT
Y2FsZSkpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxk
QW5kQ2hhbmdlUGFnZVNjYWxlKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdFNjcm9sbCA9IGNyZWF0ZVNjcm9sbGFibGVMYXll
cigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQocm9vdFNjcm9sbCk7CisgICAgcm9vdFNj
cm9sbC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworCisgICAg
SW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgaW50IHBhZ2VTY2FsZSA9IDI7CisgICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5
KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1p
dHMocGFnZVNjYWxlLCAxLCBwYWdlU2NhbGUpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBu
b3QgYXBwbHkgdG8gdGhlIGNoaWxkIHNjcm9sbCBkZWx0YS4KKyAgICBPd25QdHI8Q0NTY3JvbGxB
bmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMo
KTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgY2hpbGQtPmlkKCksIHNj
cm9sbERlbHRhKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxT
Y2FsZWRMYXllcikKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9p
bnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKworICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxNSwgMTUpKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIG1faG9zdEltcGwtPnNldFBh
Z2VTY2FsZUZhY3RvckFuZExpbWl0cygwLjUsIDAuNSwgMC41KTsKKyAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUsIDE1KSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGFydGVkKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxTY2FsZWROb25Db21wb3NpdGVkTGF5ZXIpCit7CisgICAgSW50U2l6ZSBzdXJmYWNl
U2l6ZSgxMCwgMTApOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9s
bGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgcm9vdC0+
c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXpl
KTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxlIHNob3VsZCBub3QgYmUgcmVtb3ZlZCBmcm9tIG5v
bi1jb21wb3NpdGVkIGxheWVyIGJvdW5kcy4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoMTUsIDE1KSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJ
Z25vcmVkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMC41
LCAwLjUsIDAuNSk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDE1LCAxNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7Cit9CisK
IGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGljc0Nv
bnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0KCkgOiBtX2Js
ZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGZjNDE0ZjczOTcxNDU4M2FkYTFhNjM1NmNhNDJh
MDU4ZGYyMzQ1MWQuLmMxNDVhOTM5NDE0NmZlYmUxODkwZTVhOGMwZWI0ODlhYTIwMmU4MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcApAQCAtOTkwLDYgKzk5MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgcHJlc2VydmVzM0QoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCB3
YXNTY3JvbGxlZChjb25zdCBJbnRTaXplJikgeyB9CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllclRy
ZWVIb3N0VGVzdCogbV90ZXN0OwpAQCAtMTEzOSw3ICsxMTQwLDggQEAgY2xhc3MgTW9ja0NvbnRl
bnRMYXllckRlbGVnYXRlIDogcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoK
ICAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBNT0NL
X0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJvb2woKSk7Ci0gICAgdm9pZCBwYWludENvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHdhc1Njcm9sbGVkKGNvbnN0IEludFNpemUmKSB7IH0KICAgICB2b2lk
IG5vdGlmeVN5bmNSZXF1aXJlZCgpIHsgfQogfTsKIApAQCAtMTY1Myw0ICsxNjU1LDEyMyBAQCBw
dWJsaWM6CiAKIFNJTkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihDQ0xheWVyVHJlZUhvc3RU
ZXN0TWFueVN1cmZhY2VzKQogCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRT
aXplKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyID0gQ29udGVu
dExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9tb2NrRGVsZWdhdGUpOworICAgICAgICBtX3Jvb3RT
Y3JvbGxMYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNj
cm9sbExheWVyLT5zZXRJc0RyYXdhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXll
ci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1h
eFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5yb290TGF5ZXIoKS0+YWRkQ2hpbGQobV9yb290U2Nyb2xsTGF5ZXIpOworICAgICAgICBt
X2NoaWxkTGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0
ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0Qm91bmRzKEludFNpemUoNTAsIDUwKSk7Cisg
ICAgICAgIG1fY2hpbGRMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKKyAgICAgICAgbV9jaGls
ZExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldE1h
eFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9yb290U2Nyb2xs
TGF5ZXItPmFkZENoaWxkKG1fY2hpbGRMYXllcik7CisgICAgICAgIHBvc3RTZXROZWVkc0NvbW1p
dFRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFu
ZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCkKKyAgICB7CisgICAgICAg
IEludFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7
CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiAr
IHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAg
ICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIG1f
bW9ja0RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NoaWxkTGF5ZXI7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOworfTsKKworY2xhc3Mg
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3Jv
bGxDaGlsZExheWVyKCkKKyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAxKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9yb290U2Nyb2xsTGF5
ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBpZiAoIW1fbGF5ZXJU
cmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5
ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgp
ICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJz
T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYg
KGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKGltcGwt
PnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOwor
ICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+
ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KK3ByaXZh
dGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKK307CisKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAg
cnVuVGVzdCh0cnVlKTsKK30KKworY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXJCZXlvbmRMaW1pdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSB7
CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRM
aW1pdCgpCisgICAgICAgIDogbV9pbml0aWFsUm9vdFNjcm9sbFBvc2l0aW9uKDMsIDYpCisgICAg
ICAgICwgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbigyMCwgMCkKKyAgICAgICAgLCBtX3Nj
cm9sbEFtb3VudCgtMjUsIC01KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5UZXN0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjpi
ZWdpblRlc3QoKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9u
KG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0
U2Nyb2xsUG9zaXRpb24obV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBs
KiBpbXBsKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIo
KSA9PSAxKSB7CisgICAgICAgICAgICBDQ0xheWVySW1wbCogcm9vdCA9IGltcGwtPnJvb3RMYXll
cigpOworICAgICAgICAgICAgQ0NMYXllckltcGwqIHNjcm9sbFJvb3QgPSByb290LT5jaGlsZHJl
bigpWzBdLmdldCgpOworICAgICAgICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gc2Nyb2xsUm9v
dC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjaGlsZC0+c2Ny
b2xsUG9zaXRpb24oKSwgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbik7CisgICAgICAgICAg
ICBFWFBFQ1RfRVEoY2hpbGQtPnNjcm9sbERlbHRhKCksIEludFNpemUoLTIwLCAwKSk7CisgICAg
ICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFs
Um9vdFNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxSb290LT5z
Y3JvbGxEZWx0YSgpLCBJbnRTaXplKDAsIC01KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1w
bCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9s
bEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgpOworICAg
ICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAgICAgICAgICAgIGVu
ZFRlc3QoKTsKKyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IEludFBvaW50IG1faW5pdGlhbFJv
b3RTY3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJbnRQb2ludCBtX2luaXRpYWxDaGlsZFNjcm9s
bFBvc2l0aW9uOworICAgIGNvbnN0IEludFNpemUgbV9zY3JvbGxBbW91bnQ7Cit9OworCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCwgcnVuTXVs
dGlUaHJlYWQpCit7CisgICAgcnVuVGVzdCh0cnVlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127318</attachid>
            <date>2012-02-15 23:23:11 -0800</date>
            <delta_ts>2012-03-28 08:42:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120215232310.patch</filename>
            <type>text/plain</type>
            <size>52294</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE4MWU1N2JlMTI5MTMy
ZjkxMDc0YWI5NDVkNGJiNDNmNGIwYTA3NC4uZTc4ZDlhZDQ0ZDhmNWI4ZmI5MGUxOTlmNmMzMzJi
NjU0OGM2YjEyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEyLTAyLTE1ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIEFs
bG93IHNjcm9sbGluZyBub24tcm9vdCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
ZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZC4K
KyAgICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xsZWQg
Q0NMYXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgU2Nyb2xsYWJsZUFy
ZWEgaW4gdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAgIElmIGEgbGF5ZXIgaGFzIG5vIHJvb20g
dG8gc2Nyb2xsIGluIGEgZ2l2ZW4gZGlyZWN0aW9uLCBvbmUgb2YgaXRzCisgICAgICAgIGFuY2Vz
dG9yIGxheWVycyBpcyBzY3JvbGxlZCBpbnN0ZWFkIGlmIHBvc3NpYmxlLgorCisgICAgICAgIFRl
c3RlZCB3aXRoIG5ldyB1bml0IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6Cisg
ICAgICAgIChDb250ZW50TGF5ZXJEZWxlZ2F0ZSk6CisgICAgICAgIChDb250ZW50TGF5ZXJDaHJv
bWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
R3JhcGhpY3NMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChHcmFwaGljc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFNjcm9sbGFibGVBcmVhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3Bl
cnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjptYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlzTGF5
ZXJJbkRlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpz
ZXRTY3JvbGxEZWx0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpzY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6c2VudFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRT
ZW50U2Nyb2xsRGVsdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojph
cHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKENDU2Nyb2xsQW5kU2NhbGVT
ZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5p
bWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VT
Y2FsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
YWxjdWxhdGVSZW5kZXJTdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2Fs
ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVN
YXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBs
Ojppc0NvbnRlbnRQb2ludFdpdGhpbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmJlZ2luU2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFNjcm9sbFN1YnRyZWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29sbGVjdFNjcm9sbERl
bHRhcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Ny
b2xsRGVsdGFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0KToKKwog
MjAxMi0wMi0xNCAgVGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgV2ViU29ja2V0Q2hhbm5lbCBtaW5vciByZWZhY3RvcmluZyBmb3IgY29kZSBtYW5h
Z2VhYmlsaXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGI3N2E2YzE0NDhiMTJhMzM0
Y2NkNzY5ZjExMGI2ZTYzMTFjNDMzNzEuLjdiOWY4OTM5ODNlMjc2YzNlYTAxMmRhYTRhYTQzYjRi
NGFmZDA1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIw
MTItMDItMTUgIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBnb29nbGUuY29tPgorCisgICAgICAg
IFtjaHJvbWl1bV0gQWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9z
aXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTczMzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRlc3RzIGZvciBjb21wb3NpdG9yIGxheWVyIHNjcm9sbGluZy4gVGhlIHRlc3RzIGNo
ZWNrIHZhcmlvdXMKKyAgICAgICAgbGF5ZXIgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHNjcm9s
bGluZyBnZXN0dXJlcyBhcmUgaGFuZGxlZAorICAgICAgICBjb3JyZWN0bHkuCisKKyAgICAgICAg
KiBzcmMvV2ViQ29udGVudExheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
bnRMYXllckltcGw6OmRpZFNjcm9sbCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNy
Yy9XZWJDb250ZW50TGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb250ZW50TGF5ZXJJbXBsKToK
KyAgICAgICAgKiB0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VEVTVCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCk6CisgICAgICAgIChXZWJLaXQ6OkNDTGF5ZXJUcmVlSG9zdEltcGxUZXN0OjpjcmVhdGVT
Y3JvbGxhYmxlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpURVNUX0YpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAg
KFdURjo6VGVzdE9wYWNpdHlDaGFuZ2VMYXllckRlbGVnYXRlOjpkaWRTY3JvbGwpOgorICAgICAg
ICAoV1RGOjpNb2NrQ29udGVudExheWVyRGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAg
ICAoV1RGOjpNb2NrQ29udGVudExheWVyRGVsZWdhdGU6OmRpZFNjcm9sbCk6CisgICAgICAgIChD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxCYXNlOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlOjphZnRlclRlc3QpOgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpkcmF3TGF5ZXJzT25DQ1Ro
cmVhZCk6CisgICAgICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsQ2hpbGRMYXllckJleW9uZExpbWl0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdDo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXJCZXlvbmRMaW1pdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmJlZ2luVGVzdCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmJl
Z2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQ6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKwogMjAx
Mi0wMi0xNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNzc2Ni4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAppbmRleCBhYTdmYjVjZjQ2YjA2MjU3ZmY1YmYyMzVmYjNiZjA3ODQ1
MzU0OTlmLi5iNzQyZTU5MTM2ZTQzZjY5MjU5YTAzNWVmYTI2OTFmY2U3ZWE4NTI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDksNSArMTQ5LDEyIEBAIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OnNldE9wYXF1ZShib29sIG9wYXF1ZSkKICAgICAgICAgbV90
ZXh0dXJlVXBkYXRlci0+c2V0T3BhcXVlKG9wYXF1ZSk7CiB9CiAKK3ZvaWQgQ29udGVudExheWVy
Q2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIHNl
dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7CisgICAgaWYg
KG1fZGVsZWdhdGUpCisgICAgICAgIG1fZGVsZWdhdGUtPmRpZFNjcm9sbChzY3JvbGxEZWx0YSk7
Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCAzZTg2ODZkMGEwZGJjZTJjMWU4YzYxYjYwMTgx
NDAyNjM3NjZiZjIzLi5lYzU5MWI2OGZhMmY1MjBiZTg4ZWQyYTA4YzkwNDRlNGJjM2UyNTJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgY2xhc3Mg
Q29udGVudExheWVyRGVsZWdhdGUgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRlbnRMYXll
ckRlbGVnYXRlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRT
Y3JvbGwoY29uc3QgSW50U2l6ZSYpID0gMDsKIH07CiAKIC8vIEEgTGF5ZXIgdGhhdCByZXF1aXJl
cyBhIEdyYXBoaWNzQ29udGV4dCB0byByZW5kZXIgaXRzIGNvbnRlbnRzLgpAQCAtNjQsNiArNjUs
OCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlKGJvb2wpOwogCisgICAg
dmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKKwogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKENvbnRlbnRMYXllckRlbGVnYXRlKik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGVhOTA1NWMzM2E0OGZj
ZmM0NTUyYWVkMzllMDZjYWYzM2EyYWRhMzguLjIxMDNiYzRiZjhkMDUwYWEyYjYxOGE5ZTMwYjg5
MjA2Zjg3NWUyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAt
NTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogCiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC03MCw2ICs3MSw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NM
YXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkK
IAogR3JhcGhpY3NMYXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NM
YXllckNsaWVudCogY2xpZW50KQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisgICAgLCBt
X3Njcm9sbGFibGVBcmVhKDApCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29udGVu
dHNMYXllcikKICAgICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihmYWxzZSkK
ICAgICAsIG1faW5TZXRDaGlsZHJlbihmYWxzZSkKQEAgLTY4OCw2ICs2OTAsMTIgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRSZWMKICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0
LCBjbGlwKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmRpZFNjcm9sbChjb25z
dCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1f
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggZGJmMTVlNTFkYjEw
YjdiZDY1MTU2ZGU4ZTdkODAxOTNmZjg3YjBkMy4uNDBiMWI2NThlZGQ5ODNkZmZjYWRkMDc1ZmI5
YTY3ZDA3NDkwYTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTQx
LDYgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJDaHJvbWl1bTsK
K2NsYXNzIFNjcm9sbGFibGVBcmVhOwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ2hyb21pdW0gOiBw
dWJsaWMgR3JhcGhpY3NMYXllciwgcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1Ymxp
YzoKQEAgLTEwMyw2ICsxMDQsMTAgQEAgcHVibGljOgogCiAgICAgLy8gQ29udGVudExheWVyRGVs
ZWdhdGUgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CisKKyAgICBTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9Cisg
ICAgdm9pZCBzZXRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEp
IHsgbV9zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhOyB9CiAKICAgICAvLyBFeHBvc2Vk
IGZvciB0ZXN0cy4KICAgICBMYXllckNocm9taXVtKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9CkBAIC0xMzgsNiArMTQzLDggQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zvcm1MYXllcjsKICAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVyOwogCisgICAgU2Nyb2xsYWJsZUFyZWEq
IG1fc2Nyb2xsYWJsZUFyZWE7CisKICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAg
ICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdl
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA0YmNmMjk3ZmY5MjQ2OGM5ODRmNWI0ZmNjMTJi
ZmY1M2IyNjZkNjc0Li41MzkzYzY1OTkwZTUzYzI1NzVjYjZhNzMyMjEyY2Q1ZDc4MDIyNmM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzYxLDYgKzM2MSwxNCBAQCB2b2lkIExheWVyQ2hy
b21pdW06OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikK
ICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnNldE1heFNj
cm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKQoreworICAgIGlm
IChtX21heFNjcm9sbFBvc2l0aW9uID09IG1heFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgbV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOworICAgIHNl
dE5lZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0U2Nyb2xsYWJsZShi
b29sIHNjcm9sbGFibGUpCiB7CiAgICAgaWYgKG1fc2Nyb2xsYWJsZSA9PSBzY3JvbGxhYmxlKQpA
QCAtNDI5LDYgKzQzNyw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOwog
ICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0
U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXItPnNldE1heFNjcm9s
bFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRy
YW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1f
dHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0VXBkYXRlUmVjdChtX3VwZGF0ZVJlY3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IDNhMWU5NmM1ZmRhNDllODFiNDVkZTdjNmM0MTE5ZWQyYjM5ODYz
ZjEuLmJmYWZkYjNhZDI0ZmM3Nzc4Nzg4NWU0YzFlMzA3MmY5ZTUxNDgyZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKQEAgLTEzMCw4ICsxMzAsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xs
UG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNl
dE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBt
YXhTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0K
KwogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sKTsKICAgICBib29sIHNjcm9sbGFibGUoKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnko
Y29uc3QgSW50U2l6ZSYpIHsgfQogCiAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgpIGNvbnN0IHsg
cmV0dXJuIEludFNpemUoKTsgfQogCkBAIC0yNjMsNiArMjY3LDcgQEAgcHJpdmF0ZToKICAgICBJ
bnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OwogICAgIElu
dFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9u
OwogICAgIGJvb2wgbV9zY3JvbGxhYmxlOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAg
ICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXgg
YTEzNjE2N2Q3YWZlYzRhNjcxZTdhNjk4MDg1ZDRkZDY2MGVkYTMxMS4uMDkyODE4YjM4YjEzZDNk
ZTBhZTI2ZWRlZDQ3YTMwMjE2NTU2OGFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAt
OTUsNiArOTUsMTUgQEAgdm9pZCBDQ0xheWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQogICAg
ICAgICBtX2NoaWxkcmVuWzBdLT5yZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAKK2Jvb2wgQ0NMYXll
ckltcGw6OmlzTGF5ZXJJbkRlc2NlbmRhbnRzKGludCBsYXllcklkKSBjb25zdAoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9jaGlsZHJlbltpXS0+aWQoKSA9PSBsYXllcklkIHx8IG1fY2hpbGRyZW5baV0tPmlzTGF5
ZXJJbkRlc2NlbmRhbnRzKGxheWVySWQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6Y2xlYXJDaGlsZExp
c3QoKQogewogICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKQEAgLTE3OSw5ICsxODgsOSBAQCB2b2lk
IENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSop
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnNjcm9s
bEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbCkKK3ZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNv
bnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQogewotICAgIEludFNpemUgbmV3RGVsdGEgPSBtX3Njcm9s
bERlbHRhICsgc2Nyb2xsOworICAgIEZsb2F0U2l6ZSBuZXdEZWx0YSA9IG1fc2Nyb2xsRGVsdGEg
KyBzY3JvbGw7CiAgICAgSW50U2l6ZSBtaW5EZWx0YSA9IC10b1NpemUobV9zY3JvbGxQb3NpdGlv
bik7CiAgICAgSW50U2l6ZSBtYXhEZWx0YSA9IG1fbWF4U2Nyb2xsUG9zaXRpb24gLSB0b1NpemUo
bV9zY3JvbGxQb3NpdGlvbik7CiAgICAgLy8gQ2xhbXAgbmV3RGVsdGEgc28gdGhhdCBwb3NpdGlv
biArIGRlbHRhIHN0YXlzIHdpdGhpbiBzY3JvbGwgYm91bmRzLgpAQCAtNDk3LDcgKzUwNiw3IEBA
IHZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9
CiAKLXZvaWQgQ0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhKQordm9pZCBDQ0xheWVySW1wbDo6c2V0U2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXpl
JiBzY3JvbGxEZWx0YSkKIHsKICAgICBpZiAobV9zY3JvbGxEZWx0YSA9PSBzY3JvbGxEZWx0YSkK
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggOGZiYWJhZTg2YTZiZDZh
YzhkNjVjYjdlN2UwNmNhNmM5YmU2OTE4MC4uZDYyZGQ4N2M1MTIzMmY1ZjM3MDY2YmIyNGFkMTA4
N2JhYWQ4MTEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC01OSw2ICs1OSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFkZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKICAgICB2b2lk
IHJlbW92ZUZyb21QYXJlbnQoKTsKICAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAg
Ym9vbCBpc0xheWVySW5EZXNjZW5kYW50cyhpbnQgbGF5ZXJJZCkgY29uc3Q7CiAKICAgICB2b2lk
IHNldE1hc2tMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CiAgICAgQ0NMYXllckltcGwq
IG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyLmdldCgpOyB9CkBAIC0xNjYs
MTYgKzE2NywxNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRp
b24oKSBjb25zdCB7cmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KICAgICB2b2lkIHNldE1h
eFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKSB7IG1fbWF4
U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsgfQogCi0gICAgY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbERlbHRhOyB9Ci0gICAgdm9p
ZCBzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJik7CisgICAgY29uc3QgRmxvYXRTaXplJiBz
Y3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsRGVsdGE7IH0KKyAgICB2b2lkIHNl
dFNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYpOwogCiAgICAgZmxvYXQgcGFnZVNjYWxlRGVs
dGEoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZURlbHRhOyB9CiAgICAgdm9pZCBzZXRQYWdl
U2NhbGVEZWx0YShmbG9hdCk7CiAKLSAgICBjb25zdCBJbnRTaXplJiBzZW50U2Nyb2xsRGVsdGEo
KSBjb25zdCB7IHJldHVybiBtX3NlbnRTY3JvbGxEZWx0YTsgfQotICAgIHZvaWQgc2V0U2VudFNj
cm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNlbnRTY3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxE
ZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsgfQorICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2VudFNjcm9s
bERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Nyb2xsRGVsdGE7IH0KKyAgICB2b2lkIHNl
dFNlbnRTY3JvbGxEZWx0YShjb25zdCBGbG9hdFNpemUmIHNlbnRTY3JvbGxEZWx0YSkgeyBtX3Nl
bnRTY3JvbGxEZWx0YSA9IHNlbnRTY3JvbGxEZWx0YTsgfQogCi0gICAgdm9pZCBzY3JvbGxCeShj
b25zdCBJbnRTaXplJiBzY3JvbGwpOworICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgRmxvYXRTaXpl
JiBzY3JvbGwpOwogCiAgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wgc2Nyb2xsYWJsZSkgeyBtX3Nj
cm9sbGFibGUgPSBzY3JvbGxhYmxlOyB9CkBAIC0yNjQsOCArMjY1LDggQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CiAKLSAgICBJbnRTaXplIG1fc2Nyb2xsRGVsdGE7Ci0g
ICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zY3JvbGxEZWx0
YTsKKyAgICBGbG9hdFNpemUgbV9zZW50U2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6ZSBtX21heFNj
cm9sbFBvc2l0aW9uOwogICAgIGZsb2F0IG1fcGFnZVNjYWxlRGVsdGE7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGY4MTQ0ZTEwMmM1YmZmOTVlZDM0MjhjOTYyMjJiYmQy
MjliNjVkNjIuLjM4MzVkNDExMmFkNWYyNWUwNDZkYzdkYTU2NTQ0OTYwMjM0YTY4MDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTk3LDE1ICs1OTcsMzMgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNs
ZWFyKCk7CiB9CiAKK3N0YXRpYyBMYXllckNocm9taXVtKiBmaW5kTGF5ZXJCeUlkKExheWVyQ2hy
b21pdW0qIGxheWVyLCBpbnQgaWQpCit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpZiAobGF5ZXItPmlkKCkgPT0gaWQpCisgICAgICAgIHJldHVybiBsYXllcjsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5kTGF5ZXJCeUlkKGxheWVy
LT5jaGlsZHJlbigpW2ldLmdldCgpLCBpZCk7CisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAg
ICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNl
dCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVzaGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24t
cm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0gICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgp
KQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFpbmZvLnJvb3RTY3JvbGxEZWx0YS5pc1plcm8o
KSB8fCBpbmZvLnBhZ2VTY2FsZURlbHRhICE9IDEpCisgICAgICAgIG1fY2xpZW50LT5hcHBseVNj
cm9sbEFuZFNjYWxlKGluZm8ucm9vdFNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsK
IAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAgIEludFNpemUgc2Ny
b2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9jbGllbnQtPmFw
cGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zY3JvbGxzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gZmluZExheWVyQnlJZChtX3Jvb3RMYXllci5nZXQo
KSwgaW5mby5zY3JvbGxzW2ldLmxheWVySWQpOworICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXIt
PnNjcm9sbGFibGUoKSkKKyAgICAgICAgICAgIGxheWVyLT5zY3JvbGxCeShpbmZvLnNjcm9sbHNb
aV0uc2Nyb2xsRGVsdGEpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0
UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IDJlMGNiY2YyYzU4NWU4MjE1ZDI4NmRlZTliNjFl
NTM1MTgwY2ZmYWQuLjBkMjQ2ZjUzOTM1MDU1YTY5NTA0ODY5MTZhYzMyMjdlY2FkNDVlYWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC01NSw2ICs1NSw3IEBA
IHB1YmxpYzoKIAogc3RydWN0IENDU2Nyb2xsQW5kU2NhbGVTZXQgewogICAgIFZlY3RvcjxDQ0xh
eWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8+IHNjcm9sbHM7CisgICAgSW50U2l6
ZSByb290U2Nyb2xsRGVsdGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGE7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGU0NmFlMzI0OWYzODE1Y2Q5
YjAxOTFhOTI4NzFmYTE3ZjJhOWRiODYuLjczODlmODlkYmYxZTQ5MGUyMjVmZDg2MzYwYzA4MmVl
MTgyNWZmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0ND
UGFnZVNjYWxlQW5pbWF0aW9uLmgiCkBAIC0xMDAsNyArMTAxLDcgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQogICAgIGlmICghbV9w
YWdlU2NhbGVBbmltYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xs
VG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9
IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIGZsb29yZWRJbnRQ
b2ludChtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSkpOwogCiAgICAgc2V0UGFnZVNj
YWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShmcmFtZUJlZ2lu
VGltZU1zKSAvIG1fcGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VT
Y2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpOwpAQCAt
MTE5LDcgKzEyMCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVB
bmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAgaWYgKCFtX3Njcm9s
bExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9
IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXpl
KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgZmxvb3JlZEludFBvaW50KG1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKSk7CiAgICAgc2Nyb2xsVG90YWwuc2NhbGUo
bV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVUb3RhbCA9IG1fcGFnZVNjYWxlICog
bV9wYWdlU2NhbGVEZWx0YTsKICAgICBJbnRTaXplIHNjYWxlZENvbnRlbnRTaXplID0gY29udGVu
dFNpemUoKTsKQEAgLTE4Nyw5ICsxODgsOCBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3Vy
ZmFjZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAg
IHJldHVybiBzdXJmYWNlRGFtYWdlUmVjdDsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlcyhDQ0xheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKLSAgICBDQ0xheWVyTGlzdCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcigp
KTsKIAogICAgIGlmICghcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKSkKQEAgLTIwNCw2ICsy
MDQsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMo
Q0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQogICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKICAgICAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVy
KCksIHJvb3RMYXllcigpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgp
LCAmbV9sYXllclNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVT
aXplKTsKICAgICB9Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVu
ZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcykKK3sKKyAgICBDQ0xheWVyTGlzdCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIGNhbGN1bGF0ZVJlbmRlclN1cmZhY2VzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOwogCiAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMo
KS51c2luZ1BhcnRpYWxTd2FwKQogICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKHJv
b3RMYXllcigpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKQEAgLTMzNSw5ICszNDEsMTIgQEAg
c3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQog
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7Ci0KLSAgICAvLyBG
SVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhlIGZpcnN0IHNjcm9sbGFibGUgbGF5
ZXIuCiAgICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXIobV9yb290TGF5ZXJJ
bXBsLmdldCgpKTsKKworICAgIGlmIChtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkgewor
ICAgICAgICBpZiAoIW1fcm9vdExheWVySW1wbCB8fCAhbV9yb290TGF5ZXJJbXBsLT5pc0xheWVy
SW5EZXNjZW5kYW50cyhtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC0+aWQoKSkpCisgICAg
ICAgICAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigpOworICAgIH0KIH0K
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAg
LTM5OCwxNSArNDA3LDEzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxl
RmFjdG9yQW5kTGltaXRzKGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgbWluCiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdl
U2NhbGVDaGFuZ2UpCiB7Ci0gICAgaWYgKHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQorICAgIGlmICgh
bV9zY3JvbGxMYXllckltcGwgfHwgcGFnZVNjYWxlQ2hhbmdlID09IDEpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVs
dGFzIHRvIHBhZ2VTY2FsZSBzcGFjZS4KLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwpIHsKLSAg
ICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0
YSgpOwotICAgICAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAg
ICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0K
KyAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhIGZv
ciB0aGUgcm9vdCBsYXllciB0byBwYWdlU2NhbGUgc3BhY2UuCisgICAgRmxvYXRTaXplIHNjcm9s
bERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgc2Nyb2xsRGVs
dGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Ny
b2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNl
dFBhZ2VTY2FsZURlbHRhKGZsb2F0IGRlbHRhKQpAQCAtNDQ2LDkgKzQ1Myw5IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogICAgIC8vIGhhdmlu
ZyBhIHZlcnRpY2FsIHNjcm9sbGJhciBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdy4KICAgICBt
YXhTY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogCisgICAgLy8gV2Ugb25seSBuZWVkIHRv
IHVwZGF0ZSB0aGUgcm9vdCBsYXllciBzY3JvbGwgcmFuZ2UsIHNpbmNlIHRoZSBjaGlsZAorICAg
IC8vIGxheWVycyB1c2UgdW5zY2FsZWQgc2Nyb2xsIGNvb3JkaW5hdGVzLgogICAgIG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9E
TyhhZWxpYXMpOiBBbHNvIHVwZGF0ZSBzdWJsYXllcnMuCiB9CiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQpAQCAtNDU2LDI4ICs0NjMsMTA3IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQogICAgIG1fY2xpZW50LT5zZXROZWVk
c1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQogCi1DQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKGNvbnN0IEludFBvaW50JikK
K2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aXNDb250ZW50UG9pbnRXaXRoaW5MYXllcihDQ0xh
eWVySW1wbCogbGF5ZXJJbXBsLCBjb25zdCBJbnRQb2ludCYgY29udGVudFBvaW50KSBjb25zdAog
ewotICAgIC8vIFRPRE86IENoZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAo
IW1fc2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQot
ICAgICAgICByZXR1cm4gU2Nyb2xsSWdub3JlZDsKKyAgICBJbnRSZWN0IGxheWVyQ29udGVudFJl
Y3QobGF5ZXJJbXBsLT52aXNpYmxlTGF5ZXJSZWN0KCkpOworICAgIC8vIFRoZSB2aXNpYmxlIGxh
eWVyIHJlY3QgaXMgaW4gc2NhbGVkIGNvb3JkaW5hdGVzLCBzbyB1bmRvIHRoZSBwYWdlIHNjYWxl
IHVubGVzcyBpdCBpcyB0aGUKKyAgICAvLyBub24tY29tcG9zaXRlZCBjb250ZW50IHdoZXJlIHRo
ZSBjb250ZW50IHBvaW50IGlzIGFsc28gaW4gc2NhbGVkIGNvb3JkaW5hdGVzLiBOb3RlIHRoYXQK
KyAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHVuZG8gdGhlIHBhZ2Ugc2NhbGUgZGVsdGEsIGJl
Y2F1c2UgdGhlIGxheWVyIGNvbnRlbnQgcmVjdCBpcyBvbmx5CisgICAgLy8gc2NhbGVkIHdpdGgg
dGhlIG9yaWdpbmFsIHBhZ2Ugc2NhbGUuCisgICAgaWYgKCFsYXllckltcGwtPmlzTm9uQ29tcG9z
aXRlZENvbnRlbnQoKSkKKyAgICAgICAgbGF5ZXJDb250ZW50UmVjdC5zY2FsZSgxIC8gbV9wYWdl
U2NhbGUpOworICAgIHJldHVybiBsYXllckNvbnRlbnRSZWN0LmNvbnRhaW5zKGNvbnRlbnRQb2lu
dCk7Cit9CisKK0NDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVI
b3N0SW1wbDo6YmVnaW5TY3JvbGxpbmdMYXllcihDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBjb25z
dCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAg
ICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBpZiAo
IWxheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pc0ludmVydGlibGUoKSkKKyAgICAg
ICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisKKyAgICBJbnRQ
b2ludCBjb250ZW50UG9pbnQobGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVy
c2UoKS5tYXBQb2ludCh2aWV3cG9ydFBvaW50KSk7CisgICAgaWYgKGxheWVySW1wbC0+ZHJhd3ND
b250ZW50KCkgJiYgIWlzQ29udGVudFBvaW50V2l0aGluTGF5ZXIobGF5ZXJJbXBsLCBjb250ZW50
UG9pbnQpKQorICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxl
ZDsKKworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKIAotICAgIHJldHVybiBTY3JvbGxT
dGFydGVkOworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gbGF5ZXJJbXBsOwor
ICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDsKK30KKworQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3Jv
bGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCkKK3sKKyAgICBtX2N1cnJlbnRs
eVNjcm9sbGluZ0xheWVySW1wbC5jbGVhcigpOworCisgICAgaWYgKCFyb290TGF5ZXIoKSkKKyAg
ICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworCisgICAg
Ly8gTG9vayBmb3IgYSBzY3JvbGxhYmxlIGxheWVyIGluIGZyb250IHRvIGJhY2sgb3JkZXIuCisg
ICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwg
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7
CisgICAgQ0NMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBjYWxjdWxhdGVS
ZW5kZXJTdXJmYWNlcyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIENDTGF5ZXJJdGVy
YXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0
b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gKml0OworICAgICAgICAvLyBBIG5v
bi1jb21wb3NpdGVkIGNvbnRlbnQgbGF5ZXIgc2hvdWxkIGJlIHNjcm9sbGVkIHZpYSB0aGUgcm9v
dCBzY3JvbGwgbGF5ZXIuCisgICAgICAgIGlmIChsYXllckltcGwtPmlzTm9uQ29tcG9zaXRlZENv
bnRlbnQoKSkKKyAgICAgICAgICAgIGxheWVySW1wbCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLmdldCgp
OworICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHN0YXR1cyA9IGJl
Z2luU2Nyb2xsaW5nTGF5ZXIobGF5ZXJJbXBsLCB2aWV3cG9ydFBvaW50KTsKKyAgICAgICAgaWYg
KHN0YXR1cyAhPSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxJZ25vcmVkOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXll
ckltcGwpCisgICAgaWYgKCFtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsK
LSAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICBtX2NsaWVu
dC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBJbnRTaXplIHBlbmRpbmdEZWx0
YShzY3JvbGxEZWx0YSk7CisgICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9IG1fY3VycmVudGx5
U2Nyb2xsaW5nTGF5ZXJJbXBsLmdldCgpOworICAgIHdoaWxlIChsYXllckltcGwgJiYgIXBlbmRp
bmdEZWx0YS5pc1plcm8oKSkgeworICAgICAgICBpZiAobGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkp
IHsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBwcmV2aW91c0RlbHRhKGxheWVySW1wbC0+c2Nyb2xs
RGVsdGEoKSk7CisgICAgICAgICAgICBGbG9hdFNpemUgc2NhbGVkUGVuZGluZ0RlbHRhKHBlbmRp
bmdEZWx0YSk7CisgICAgICAgICAgICAvLyBTaW5jZSBzY3JvbGxEZWx0YSBpcyBpbiB3aW5kb3cg
Y29vcmRpbmF0ZXMsIGl0IGFscmVhZHkgaGFzIHRoZSBwYWdlIHNjYWxlIGFwcGxpZWQuCisgICAg
ICAgICAgICAvLyBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgcm9vdCBzY3JvbGwgbGF5ZXIgZXhwZWN0
cywgYnV0IGNoaWxkIGxheWVycyBhcmUgc2Nyb2xsZWQgdXNpbmcKKyAgICAgICAgICAgIC8vIHVu
c2NhbGVkIGNvbnRlbnQgY29vcmRpbmF0ZXMgaW5zdGVhZCwgc28gd2UgaGF2ZSB0byB1bmRvIHRo
ZSBzY2FsaW5nIGZvciB0aGVtLiBUaGUKKyAgICAgICAgICAgIC8vIHBhZ2Ugc2NhbGUgZGVsdGEg
bmVlZHMgdG8gYmUgdW5hcHBsaWVkIHdpdGggYm90aCBsYXllciB0eXBlcyBzaW5jZSB0aGUgc2Ny
b2xsCisgICAgICAgICAgICAvLyBjb29yZGluYXRlcyBkbyBub3QgcmVzcGVjdCBpdC4KKyAgICAg
ICAgICAgIGlmIChsYXllckltcGwgPT0gbV9zY3JvbGxMYXllckltcGwpIHsKKyAgICAgICAgICAg
ICAgICBzY2FsZWRQZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOworICAg
ICAgICAgICAgICAgIGxheWVySW1wbC0+c2Nyb2xsQnkoc2NhbGVkUGVuZGluZ0RlbHRhKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NhbGVkUGVuZGluZ0RlbHRhLnNj
YWxlKDEgLyAobV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhKSk7CisgICAgICAgICAgICAg
ICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShzY2FsZWRQZW5kaW5nRGVsdGEpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHBlbmRpbmcgc2Nyb2xsIGRlbHRhIHRvIHplcm8g
aWYgdGhlIGxheWVyIHdhcyBhYmxlIHRvIG1vdmUgYWxvbmcgdGhlIHJlcXVlc3RlZAorICAgICAg
ICAgICAgLy8gYXhpcy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xs
IGV4YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAgICAgICAgICAgLy8gc2Ny
b2xsIGFyZWEgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZvciBkaWFnb25hbCBzY3Jv
bGxzIHRoaXMgYWxzbyBhdm9pZHMgYXBwbHlpbmcKKyAgICAgICAgICAgIC8vIHRoZSBzY3JvbGwg
b24gb25lIGF4aXMgdG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgaWYgKHByZXZpb3Vz
RGVsdGEud2lkdGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAg
ICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAgICAgICAgICBpZiAocHJl
dmlvdXNEZWx0YS5oZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkp
CisgICAgICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICAgICAgfQor
ICAgICAgICBsYXllckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpOworICAgIH0KKworICAgIGlm
IChwZW5kaW5nRGVsdGEgIT0gc2Nyb2xsRGVsdGEpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5l
ZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJh
d09uSW1wbFRocmVhZCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
Y3JvbGxFbmQoKQogeworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLmNsZWFyKCk7
CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aGF2ZVdoZWVsRXZlbnRIYW5kbGVycygp
CkBAIC01MjAsMjUgKzYwNiw0OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2Vz
dHVyZUVuZCgpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiB9
CiAKK3N0YXRpYyBib29sIGRpZFNjcm9sbFN1YnRyZWUoQ0NMYXllckltcGwqIGxheWVySW1wbCkK
K3sKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hp
bGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKGRpZFNjcm9sbFN1YnRyZWUobGF5ZXJJ
bXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbGxlY3RT
Y3JvbGxEZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwq
IGxheWVySW1wbCkgY29uc3QKK3sKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5p
c1plcm8oKSkgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gdG9TaXplKGZsb29yZWRJ
bnRQb2ludChsYXllckltcGwtPnNjcm9sbERlbHRhKCkpKTsKKyAgICAgICAgaWYgKGxheWVySW1w
bCAhPSBtX3Njcm9sbExheWVySW1wbCkgeworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgICAgIHNjcm9sbC5sYXllcklk
ID0gbGF5ZXJJbXBsLT5pZCgpOworICAgICAgICAgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Ny
b2xsRGVsdGE7CisgICAgICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0
YSA9IHNjcm9sbERlbHRhOworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShs
YXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0
U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7
Cit9CisKIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1w
bDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVT
ZXQ+IHNjcm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAg
ICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7Cisg
ICAgYm9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKGRpZFNjcm9sbFN1YnRyZWUo
bV9zY3JvbGxMYXllckltcGwuZ2V0KCkpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMSk7CiAgICAg
aWYgKCFkaWRNb3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0
aW9uKSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNj
YWxlRGVsdGEgPSAxOwogICAgICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiAgICAg
fQogCisgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBtX3Njcm9sbExh
eWVySW1wbC5nZXQoKSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5w
YWdlU2NhbGVEZWx0YSA9IG1fcGFnZVNjYWxlRGVsdGE7CiAKLSAgICAvLyBGSVhNRTogdHJhY2sg
c2Nyb2xscyBmcm9tIGxheWVycyBvdGhlciB0aGFuIHRoZSByb290Ci0gICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBw
ZW5kKHNjcm9sbCk7Ci0KLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRh
KHNjcm9sbC5zY3JvbGxEZWx0YSk7Ci0KICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA1ZWUwMzk5ZjVi
NDU3MjI1YTkxZGZmNmI3NzdjZDVkOGE3NmQ2YTlmLi5mY2NiZTcwYjg5Y2ZmZjlhNjkyNjg3Zjg0
OGQ4Y2FlNzcxZGM4ODc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBA
IC0xMzMsMTMgKzEzMywxOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBh
Z2VTY2FsZUNoYW5nZShmbG9hdCk7CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigp
OwogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERy
YXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IHZvaWQgY2FsY3VsYXRlUmVuZGVyU3VyZmFjZXMoQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xp
c3QmKTsKICAgICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsK
ICAgICBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbnRlbnRQb2lu
dFdpdGhpbkxheWVyKENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UG9pbnQmIGNvbnRlbnRQb2ludCkg
Y29uc3Q7CisgICAgU2Nyb2xsU3RhdHVzIGJlZ2luU2Nyb2xsaW5nTGF5ZXIoQ0NMYXllckltcGwq
LCBjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCk7CisgICAgdm9pZCBjb2xsZWN0U2Nyb2xs
RGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqLCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAg
T3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
bV9zY3JvbGxMYXllckltcGw7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX2N1cnJlbnRseVNj
cm9sbGluZ0xheWVySW1wbDsKICAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAgICAgSW50U2l6
ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBib29sIG1fdmlzaWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggMTdhNjk1OTNhNjQzY2ZmZTgzNzE3NjE0OTdlNGJl
YzBhMWM3MWQ5MC4uZjcwMzQ2YjE3YjM5NTRiNmMwZmMzMmM3OWY3YzYzOWJkZmM1NGZmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE4OSw2ICsxODksNyBA
QCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0KCkKICAgICAgICAgLy8gSW4gdGhl
IHNpbmdsZS10aHJlYWRlZCBjYXNlLCB0aGUgc2Nyb2xsIGRlbHRhcyBzaG91bGQgbmV2ZXIgYmUK
ICAgICAgICAgLy8gdG91Y2hlZCBvbiB0aGUgaW1wbCBsYXllciB0cmVlLgogICAgICAgICBPd25Q
dHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwt
PnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbEluZm8tPnJvb3RT
Y3JvbGxEZWx0YS5pc1plcm8oKSk7CiAgICAgICAgIEFTU0VSVCghc2Nyb2xsSW5mby0+c2Nyb2xs
cy5zaXplKCkpOwogI2VuZGlmCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAppbmRleCA0ZjY0ZDU0NzFlMzk2NjUwZjdjYTc1
ZTllMTYyNWM2NmQ3MmYxMWI2Li45ZDYxM2EzYWNhOTkxYzk5NWRlMzk3NDg3MjRjNzFmY2JhOTQy
ZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5
ZXJJbXBsLmNwcApAQCAtNzIsNCArNzIsOCBAQCB2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBh
aW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcAogICAg
IG1fY29udGVudENsaWVudC0+cGFpbnRDb250ZW50cyhjYW52YXMsIFdlYlJlY3QoY2xpcCkpOwog
fQogCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OmRpZFNjcm9sbChjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKaW5kZXggNTFmMzQ0ZjdjYWYx
MjcxMTI2YWM3YjQyNjhlZDU0NjEyMTQyMTlkOC4uMWJhODg0YzliMzU3ZWJmMzg3ZWRmZjM0OWY2
NTZlYWZhNjZhZTFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29udGVudExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllckltcGwuaApAQCAtNDQsNiArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBD
b250ZW50TGF5ZXJEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKTsKIAogICAgIFdlYkNvbnRlbnRMYXllckNsaWVudCogbV9jb250ZW50Q2xpZW50Owog
ICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKaW5kZXggMTZhMjVlMTJlOTc5ZGQ2MDEyYzU2ODFhOWRl
NGE0ZDg2ZDE2NDNkYi4uMjNmOGNhZmY3MTcxZmMxNzNmNGU3MGFmNzIzYjUyMDNhYTg3NzJmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNw
cApAQCAtMTY3LDQgKzE2NywyMiBAQCBURVNUKENDTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5TGF5ZXJD
aGFuZ2VzQXJlVHJhY2tlZFByb3Blcmx5KQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVF
X0RJRF9OT1RfQ0hBTkdFKHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKGFyYml0cmFyeUludFNp
emUpKTsKIH0KIAorVEVTVChDQ0xheWVySW1wbFRlc3QsIHZlcmlmeURlc2NlbmRhbnRTZWFyY2gp
Cit7CisgICAgLy8gVGhlIGNvbnN0cnVjdG9yIG9uIHRoaXMgd2lsbCBmYWtlIHRoYXQgd2UgYXJl
IG9uIHRoZSBjb3JyZWN0IHRocmVhZC4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2V0
SW1wbFRocmVhZDsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMik7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgzKTsKKworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGls
ZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CisKKyAgICBFWFBFQ1RfRkFMU0Uocm9vdC0+aXNMYXll
ckluRGVzY2VuZGFudHMoMSkpOworICAgIEVYUEVDVF9UUlVFKHJvb3QtPmlzTGF5ZXJJbkRlc2Nl
bmRhbnRzKDIpKTsKKyAgICBFWFBFQ1RfVFJVRShyb290LT5pc0xheWVySW5EZXNjZW5kYW50cygz
KSk7CisgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPmlzTGF5ZXJJbkRlc2NlbmRhbnRzKDQpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZjU5ODkzZGU5MDY0MThmOGNi
ZDc1NzQwYWUyOTM5ZTIzY2MyMzUwYS4uOWM3MjUyZWM1ZWQ0NWZlMDNmY2M0MmVhMDAxMjU1YzNi
NzBhZjI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTc0LDYgKzc0LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUX0VRKHRpbWVzRW5jb3VudGVyZWQsIDEpOwogICAgIH0KIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCgpKSwg
YXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQpOworICAgICAgICBt
X2hvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0KTsKKyAgICB9CisKICAg
ICB2b2lkIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoY29uc3QgSW50U2l6ZSYgY29udGVu
dFNpemUpCiAgICAgewogICAgICAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDApOwpAQCAtODgsNiArOTUsMTcgQEAgcHVibGljOgogICAgICAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IGNyZWF0ZVNjcm9sbGFibGVMYXllcihpbnQgaWQsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBsYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoaWQpOworICAgICAg
ICBsYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKKyAgICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICAg
ICAgbGF5ZXItPnNldEJvdW5kcyhzaXplKTsKKyAgICAgICAgbGF5ZXItPnNldE1heFNjcm9sbFBv
c2l0aW9uKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSAqIDIpKTsKKyAg
ICAgICAgcmV0dXJuIGxheWVyOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBtX2Fsd2F5c0ltcGxUaHJlYWQ7CiAgICAgT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGw+IG1faG9zdEltcGw7CkBAIC0xNDAsMTYgKzE1OCwxNiBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbERlbHRhUmVwZWF0ZWRTY3JvbGxzKQogICAgIE93blB0
cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvOwogCiAgICAgc2Nyb2xsSW5mbyA9IG1f
aG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBBU1NFUlRfRVEoc2Nyb2xsSW5m
by0+c2Nyb2xscy5zaXplKCksIDF1KTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xs
cy5zaXplKCksIDB1KTsKICAgICBFWFBFQ1RfRVEocm9vdC0+c2VudFNjcm9sbERlbHRhKCksIHNj
cm9sbERlbHRhKTsKLSAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgcm9vdC0+
aWQoKSwgc2Nyb2xsRGVsdGEpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xs
RGVsdGEsIHNjcm9sbERlbHRhKTsKIAogICAgIEludFNpemUgc2Nyb2xsRGVsdGEyKC01LCAyNyk7
CiAgICAgcm9vdC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEyKTsKICAgICBzY3JvbGxJbmZvID0gbV9o
b3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIEFTU0VSVF9FUShzY3JvbGxJbmZv
LT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3JvbGxz
LnNpemUoKSwgMHUpOwogICAgIEVYUEVDVF9FUShyb290LT5zZW50U2Nyb2xsRGVsdGEoKSwgc2Ny
b2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZv
LmdldCgpLCByb290LT5pZCgpLCBzY3JvbGxEZWx0YSArIHNjcm9sbERlbHRhMik7CisgICAgQVNT
RVJUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgc2Nyb2xsRGVsdGEgKyBzY3JvbGxE
ZWx0YTIpOwogCiAgICAgcm9vdC0+c2Nyb2xsQnkoSW50U2l6ZSgpKTsKICAgICBzY3JvbGxJbmZv
ID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwpAQCAtMTU4LDYgKzE3Niw3IEBA
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFSZXBlYXRlZFNjcm9s
bHMpCiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29t
bWl0QW5kUmVkcmF3KQogeworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyKCk7CiAgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKICAgICByb290
LT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBv
aW50KDAsIDApKTsKQEAgLTE3Miw2ICsxOTEsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHNjcm9sbFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJhdykKIAogVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBwaW5jaEdlc3R1cmUpCiB7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoKTsKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAx
MDApKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1MCwgNTApKTsK
IApAQCAtMjI1LDEyICsyNDUsMTMgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBw
aW5jaEdlc3R1cmUpCiAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0
YSwgbWluUGFnZVNjYWxlKTsKIAogICAgICAgICAvLyBQdXNoZWQgdG8gKDAsMCkgdmlhIGNsYW1w
aW5nIGFnYWluc3QgY29udGVudHMgbGF5ZXIgc2l6ZS4KLSAgICAgICAgZXhwZWN0Q29udGFpbnMo
KnNjcm9sbEluZm8uZ2V0KCksIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKC01MCwgLTUwKSk7
CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIEludFNpemUo
LTUwLCAtNTApKTsKICAgICB9CiB9CiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
cGFnZVNjYWxlQW5pbWF0aW9uKQogeworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyKCk7CiAg
ICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAg
bV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CiAKQEAgLTI1NSw3
ICsyNzYsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1h
dGlvbikKIAogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9
IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKICAgICAgICAgRVhQRUNUX0VRKHNj
cm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCAyKTsKLSAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNj
cm9sbEluZm8uZ2V0KCksIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKC01MCwgLTUwKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5yb290U2Nyb2xsRGVsdGEsIEludFNpemUoLTUw
LCAtNTApKTsKICAgICB9CiAKICAgICAvLyBBbmNob3Igem9vbS1vdXQKQEAgLTI3MiwxMCArMjkz
LDE3MSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlv
bikKICAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hv
c3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CiAgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJ
bmZvLT5wYWdlU2NhbGVEZWx0YSwgbWluUGFnZVNjYWxlKTsKICAgICAgICAgLy8gUHVzaGVkIHRv
ICgwLDApIHZpYSBjbGFtcGluZyBhZ2FpbnN0IGNvbnRlbnRzIGxheWVyIHNpemUuCi0gICAgICAg
IGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBzY3JvbGxMYXllci0+aWQoKSwgSW50
U2l6ZSgtNTAsIC01MCkpOworICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cm9vdFNjcm9s
bERlbHRhLCBJbnRTaXplKC01MCwgLTUwKSk7CiAgICAgfQogfQogCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RJZ25vcmVkKQoreworICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyKCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDAsIDApKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9y
ZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9G
QUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHNjcm9sbE5vbkNvbXBvc2l0ZWRSb290KQoreworICAgIC8vIFRlc3QgdGhlIGNvbmZp
Z3VyYXRpb24gd2hlcmUgYSBub24tY29tcG9zaXRlZCByb290IGxheWVyIGlzIGVtYmVkZGVkIGlu
IGEKKyAgICAvLyBzY3JvbGxhYmxlIG91dGVyIGxheWVyLgorICAgIGluaXRpYWxpemVMYXllclJl
bmRlcmVyKCk7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworCisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBjb250ZW50TGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAg
IGNvbnRlbnRMYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKTsKKyAgICBjb250
ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFBv
c2l0aW9uKEludFBvaW50KDUsIDUpKTsKKyAgICBjb250ZW50TGF5ZXItPnNldEJvdW5kcyhzdXJm
YWNlU2l6ZSk7CisgICAgY29udGVudExheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoc3Vy
ZmFjZVNpemUud2lkdGgoKSAqIDIsIHN1cmZhY2VTaXplLmhlaWdodCgpICogMikpOworCisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7
CisgICAgc2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgc2Nyb2xsTGF5ZXIt
PmFkZENoaWxkKGNvbnRlbnRMYXllcik7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
c2Nyb2xsTGF5ZXIpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6
ZSk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwg
NSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1w
bC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgp
OworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX1RSVUUo
bV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxDaGlsZENhbGxzQ29tbWl0QW5kUmVkcmF3KQoreworICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyKCk7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+
YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIG1faG9z
dEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAx
MCkpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlk
UmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30K
KworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNDaGlsZCkKK3sK
KyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpOworICAgIEludFNpemUgc3VyZmFjZVNpemUo
MTAsIDEwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDApOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9h
dFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXll
cihyb290KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwor
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCA1KSks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
bV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0
KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNr
ZmFjaW5nQ2hpbGQpCit7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKTsKKyAgICBJbnRT
aXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0g
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsK
KyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3QpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4LnJvdGF0ZTNkKDE4
MCwgMCwgMCk7CisgICAgY2hpbGQtPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgIGNoaWxkLT5z
ZXREb3VibGVTaWRlZChmYWxzZSk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3Jl
ZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZB
TFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZSkKK3sKKyAgICBpbml0aWFsaXplTGF5
ZXJSZW5kZXJlcigpOworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3Qt
PnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50
U2l6ZSgxMDAsIDEwMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKyAg
ICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworCisgICAgSW50U2l6
ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgaW50IHBhZ2VTY2FsZSA9IDI7CisgICAgRVhQRUNU
X0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9s
bERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFn
ZVNjYWxlLCAxLCBwYWdlU2NhbGUpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0
byB0aGUgcm9vdCBzY3JvbGwgZGVsdGEuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+
IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgRVhQ
RUNUX0VRKHNjcm9sbEluZm8tPnJvb3RTY3JvbGxEZWx0YSwgSW50U2l6ZShzY3JvbGxEZWx0YS53
aWR0aCgpICogcGFnZVNjYWxlLCBzY3JvbGxEZWx0YS5oZWlnaHQoKSAqIHBhZ2VTY2FsZSkpOwor
fQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQW5kQ2hhbmdl
UGFnZVNjYWxlKQoreworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyKCk7CisgICAgSW50U2l6
ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290U2Nyb2xs
ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXpl
KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVy
KDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICByb290LT5hZGRDaGlsZChy
b290U2Nyb2xsKTsKKyAgICByb290U2Nyb2xsLT5hZGRDaGlsZChjaGlsZCk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6
ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBp
bnQgcGFnZVNjYWxlID0gMjsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7Cisg
ICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNl
dFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhwYWdlU2NhbGUsIDEsIHBhZ2VTY2FsZSk7CisKKyAg
ICAvLyBUaGUgc2NhbGUgc2hvdWxkIG5vdCBhcHBseSB0byB0aGUgY2hpbGQgc2Nyb2xsIGRlbHRh
LgorICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1w
bC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZv
LmdldCgpLCBjaGlsZC0+aWQoKSwgc2Nyb2xsRGVsdGEpOworfQorCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFNjYWxlZExheWVyKQoreworICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyKCk7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3Qp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBF
WFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUsIDE1KSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdl
U2NhbGVGYWN0b3JBbmRMaW1pdHMoMC41LCAwLjUsIDAuNSk7CisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCAxNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c2Nyb2xsU2NhbGVkTm9uQ29tcG9zaXRlZExheWVyKQoreworICAgIGluaXRpYWxpemVMYXllclJl
bmRlcmVyKCk7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUs
IDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgcm9vdC0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0
cnVlKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxl
IHNob3VsZCBub3QgYmUgcmVtb3ZlZCBmcm9tIG5vbi1jb21wb3NpdGVkIGxheWVyIGJvdW5kcy4K
KyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUsIDE1KSks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBtX2hvc3RJbXBsLT5z
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMC41LCAwLjUsIDAuNSk7CisgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCAxNSkpLCBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7Cit9CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29u
dGV4dDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxl
bmRTdGF0ZVRyYWNrZXJDb250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4
IDA0ZmNjNzU2ZTA5ZWUxYjdjOTYxYTVlNTA0ODIxZjAxZjkzN2I0NmEuLjNjZWVkMmJlNzk1OTBi
NWY2ZmMzMjAxY2FlODVjNDhiZGM5MDVjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMTA1OSw2ICsxMDU5LDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikg
eyB9CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OwpAQCAtMTIw
OCw3ICsxMjA5LDggQEAgY2xhc3MgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIDogcHVibGljIENv
bnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBib29sIGRyYXdzQ29udGVudCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0Qs
IGJvb2woKSk7Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChj
b25zdCBJbnRTaXplJikgeyB9CiAgICAgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKSB7IH0KIH07
CiAKQEAgLTE3MjIsNCArMTcyNCwxMjMgQEAgcHVibGljOgogCiBTSU5HTEVfQU5EX01VTFRJX1RI
UkVBRF9URVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdE1hbnlTdXJmYWNlcykKIAorY2xhc3MgQ0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCkpOworICAgICAg
ICBtX3Jvb3RTY3JvbGxMYXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoJm1fbW9j
a0RlbGVnYXRlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDEwLCAxMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVl
KTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwg
MTAwKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZENoaWxkKG1f
cm9vdFNjcm9sbExheWVyKTsKKyAgICAgICAgbV9jaGlsZExheWVyID0gQ29udGVudExheWVyQ2hy
b21pdW06OmNyZWF0ZSgmbV9tb2NrRGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKDUwLCA1MCkpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldElzRHJh
d2FibGUodHJ1ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsK
KyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwg
MTAwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIp
OworICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgZmxvYXQpCisgICAgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fcm9vdFNj
cm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KKworcHJvdGVjdGVkOgorICAg
IE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZSBtX21vY2tEZWxlZ2F0ZTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbV9jaGlsZExheWVyOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jv
b3RTY3JvbGxMYXllcjsKK307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGls
ZExheWVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxCYXNlIHsKK3B1YmxpYzoK
KyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcigpCisgICAgICAgIDogbV9z
Y3JvbGxBbW91bnQoMiwgMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
Q29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAg
ICAgRVhQRUNUX0VRKG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2lu
dCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpCisgICAg
ICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2lu
dCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+
c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSArIG1fc2Nyb2xsQW1vdW50KTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1w
bCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsK
KyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgICAgIGltcGwt
PnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgp
OworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAgICAgICAg
ICAgIGVuZFRlc3QoKTsKKyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IEludFNpemUgbV9zY3Jv
bGxBbW91bnQ7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5
ZXIsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3QodHJ1ZSk7Cit9CisKK2NsYXNzIEND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbEJhc2UgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxDaGlsZExheWVyQmV5b25kTGltaXQoKQorICAgICAgICA6IG1faW5pdGlhbFJv
b3RTY3JvbGxQb3NpdGlvbigzLCA2KQorICAgICAgICAsIG1faW5pdGlhbENoaWxkU2Nyb2xsUG9z
aXRpb24oMjAsIDApCisgICAgICAgICwgbV9zY3JvbGxBbW91bnQoLTI1LCAtNSkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQmFzZTo6YmVnaW5UZXN0KCk7CisgICAgICAgIG1fcm9vdFNj
cm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb24p
OworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1faW5pdGlhbENoaWxk
U2Nyb2xsUG9zaXRpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9u
Q0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmICht
X2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgQ0NMYXll
ckltcGwqIHJvb3QgPSBpbXBsLT5yb290TGF5ZXIoKTsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBs
KiBzY3JvbGxSb290ID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgICAgIEND
TGF5ZXJJbXBsKiBjaGlsZCA9IHNjcm9sbFJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAg
ICAgICAgICBFWFBFQ1RfRVEoY2hpbGQtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbENoaWxk
U2Nyb2xsUG9zaXRpb24pOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoaWxkLT5zY3JvbGxEZWx0
YSgpLCBJbnRTaXplKC0yMCwgMCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNjcm9sbFJvb3Qt
PnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbFJvb3RTY3JvbGxQb3NpdGlvbik7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoc2Nyb2xsUm9vdC0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgwLCAtNSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+
ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoNSwgNSkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRl
ZCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7CisgICAgICAg
ICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51
bWJlcigpID09IDIpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorcHJpdmF0ZToKKyAg
ICBjb25zdCBJbnRQb2ludCBtX2luaXRpYWxSb290U2Nyb2xsUG9zaXRpb247CisgICAgY29uc3Qg
SW50UG9pbnQgbV9pbml0aWFsQ2hpbGRTY3JvbGxQb3NpdGlvbjsKKyAgICBjb25zdCBJbnRTaXpl
IG1fc2Nyb2xsQW1vdW50OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyQmV5b25kTGltaXQsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3QodHJ1
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134303</attachid>
            <date>2012-03-28 08:42:54 -0700</date>
            <delta_ts>2012-03-29 03:51:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120328164252.patch</filename>
            <type>text/plain</type>
            <size>60679</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjkzNDNjNGFjZjZkZDFl
NWY3YTJhNDFhYWNhNTIwOWI1Yjc0MGRmZC4uODMzMDljNWNiYWFlYzUxMDg1Y2ZkNGM2ZjJiZTY4
YzNlOTY3OGUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVu
IGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xs
ZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBBZGRlZCBuZXcgd2Via2l0X3VuaXRf
dGVzdHMgdG8gdmVyaWZ5IHNjcm9sbGluZyBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoQ29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpmaW5kTGF5ZXJJblN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllcklt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJsZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcm9s
bExheWVyRm9yQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0U2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDMt
MjggIExpIFlpbiAgPGxpLnlpbkBpbnRlbC5jb20+CiAKICAgICAgICAgW1dlYlNvY2tldF1UaGUg
U2VjLVdlYlNvY2tldC1Qcm90b2NvbCBtdXN0IG5vdCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4g
YW4gSFRUUCByZXNwb25zZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1ZjBhY2JjOTRh
NWI4NDA5MGJiZDgyNzdlODBjMjY2NWE4YjZlMTA4Li41Mzg4MWIzNzllOGMzZGU4NzMxN2NkMjZh
MjNhZjBmZDU3ZmRkZDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4
IEBACisyMDEyLTAzLTI4ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gQWRkIHRlc3RzIGZvciBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5
ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDoKKyAgICAgICAgKFdl
YkNvbnRlbnRMYXllckltcGwpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdDo6Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKToKKyAgICAg
ICAgKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAgIChXZWJLaXRUZXN0cyk6
CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6
OlRlc3RPcGFjaXR5Q2hhbmdlTGF5ZXJEZWxlZ2F0ZTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdU
Rjo6TW9ja0NvbnRlbnRMYXllckRlbGVnYXRlOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdU
Rjo6TW9ja0NvbnRlbnRMYXllckRlbGVnYXRlOjpkaWRTY3JvbGwpOgorICAgICAgICAoQ0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
cjo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENo
aWxkTGF5ZXI6OmFwcGx5U2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNP
bkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXI6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpURVNUX0Yp
OgorCiAyMDEyLTAzLTI3ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBUcmFuc2ZlciB3aGVlbCBmbGluZyB2aWEgV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckNsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDczYThhNDI0NjE1NzEzZTY5ZDVhMmMxZTc4Y2ZlOTNjYjY4ODAwNWIuLjRjNTUwNWY5YjE5
OTM0YzQ2MmQ0ZjkxMGFmN2VmZGRkYWY0MDhiZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTE0NCw1ICsxNDQsMTIgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6c2V0T3BhcXVlKGJvb2wgb3BhcXVlKQogICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5zZXRP
cGFxdWUob3BhcXVlKTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnko
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Ny
b2xsUG9zaXRpb24oKSArIHNjcm9sbERlbHRhKTsKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAg
ICAgbV9kZWxlZ2F0ZS0+ZGlkU2Nyb2xsKHNjcm9sbERlbHRhKTsKK30KKwogfQogI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5oCmluZGV4IGU2OTk0YTIxYWVmYWMyMTQwODg3ZTViYmQ4YWJiMjAzYzlhYjgxNzkuLjE2ZDY3
OGVkNjRhMDYxZjhmODE1ZDYzYWNlMDU5MmY5MDRlMzUwM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uaApAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBDb250ZW50TGF5ZXJEZWxlZ2F0
ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29udGVudExheWVyRGVsZWdhdGUoKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRS
ZWN0JiBjbGlwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXpl
JikgPSAwOwogfTsKIAogLy8gQSBMYXllciB0aGF0IHJlcXVpcmVzIGEgR3JhcGhpY3NDb250ZXh0
IHRvIHJlbmRlciBpdHMgY29udGVudHMuCkBAIC02Myw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
QnkoY29uc3QgSW50U2l6ZSYpOworCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExh
eWVyQ2hyb21pdW0oQ29udGVudExheWVyRGVsZWdhdGUqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uaAppbmRleCA5MWE0NTVhNTQxZTY2ZjlkODc2YmU2YWNlNjExZmM4YTBmYWM0
N2E1Li5mMjk3MzAzZjI1ODdlOWVlMzZjNmRhZTYzNjNiNDMxZDdiMzI4MGY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtMTEzLDYgKzExMyw3IEBAIHB1YmxpYzoKIAog
ICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXAp
OworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3QgSW50U2l6ZSYpIHsgfQogCiAgICAg
Ly8gQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcAppbmRleCAyYWQwOWI5NDhhNDNiYjNjZTNhNzE5NTFmYzdiNWQ5ZTEzMDBlYTU1
Li5kMGIzYzY5MmZhMzg4NjNlNDA4NTFkYjE3MWEwYWU2MGY5MjNiOTlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcApAQCAtMzgwLDYgKzM4MCwxNCBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldFNj
cm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKICAgICBzZXROZWVk
c0NvbW1pdCgpOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnNldE1heFNjcm9sbFBvc2l0aW9u
KGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKQoreworICAgIGlmIChtX21heFNjcm9s
bFBvc2l0aW9uID09IG1heFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbV9t
YXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOworICAgIHNldE5lZWRzQ29tbWl0
KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFi
bGUpCiB7CiAgICAgaWYgKG1fc2Nyb2xsYWJsZSA9PSBzY3JvbGxhYmxlKQpAQCAtNDkxLDYgKzQ5
OSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCog
bGF5ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOwogICAgIGxheWVyLT5z
ZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9zaXRp
b24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKG1f
bWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1
YmxheWVyVHJhbnNmb3JtKTsKICAgICBpZiAoIXRyYW5zZm9ybUlzQW5pbWF0aW5nKCkpCiAgICAg
ICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IGI5ODAyMmI1MmRhNThiOTE5N2NiZjU0NDhjYjZkNDBhOWEwN2MyNzAuLmIwMWM2ZGFlODBk
NTI5ZDg3NTBlMjc4ODM4NDA1MDQ5NGM4ODlmNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEz
OSwxMiArMTM5LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50Jik7CiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRNYXhTY3JvbGxQb3Np
dGlvbihjb25zdCBJbnRTaXplJik7CisgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX21heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICB2b2lkIHNl
dFNjcm9sbGFibGUoYm9vbCk7CisgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoYm9v
bCk7CiAgICAgdm9pZCBzZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKGJvb2wpOwogICAgIGNvbnN0
IFJlZ2lvbiYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKSB7IHJldHVybiBtX25vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uOyB9CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25z
dCBSZWdpb24mKTsKICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCgp
IHsgbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQgPSB0cnVlOyB9CisgICAgdmlydHVh
bCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKSB7IH0KIAogICAgIEludFNpemUgc2Nyb2xs
RGVsdGEoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KIApAQCAtMjk3LDYgKzMwMiw3IEBA
IHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxh
eWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOworICAgIEludFNpemUgbV9t
YXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJsZTsKICAgICBib29sIG1fc2hv
dWxkU2Nyb2xsT25NYWluVGhyZWFkOwogICAgIGJvb2wgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDJhZmI5ZDhmZjc0MWY5MzM1OTU2NmExNjlm
ZDQzNzI5NzAyYTc5NjkuLjI2ZDZhMzgzYmQ1ZTRjMDExNjZkNWZlNzRiZjdlZjk5MTRlM2M4ZjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTEwNyw2ICsxMDcsMjIgQEAgdm9pZCBDQ0xh
eWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQogICAgICAgICBtX2NoaWxkcmVuWzBdLT5yZW1v
dmVGcm9tUGFyZW50KCk7CiB9CiAKK0NDTGF5ZXJJbXBsKiBDQ0xheWVySW1wbDo6ZmluZExheWVy
SW5TdWJ0cmVlKGludCBsYXllcklkKQoreworICAgIGlmIChpZCgpID09IGxheWVySWQpCisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIGlmIChtX21hc2tMYXllciAmJiBtX21hc2tMYXllci0+aWQo
KSA9PSBsYXllcklkKQorICAgICAgICByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7CisgICAgaWYg
KG1fcmVwbGljYUxheWVyICYmIG1fcmVwbGljYUxheWVyLT5pZCgpID09IGxheWVySWQpCisgICAg
ICAgIHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGZvdW5k
ID0gbV9jaGlsZHJlbltpXS0+ZmluZExheWVySW5TdWJ0cmVlKGxheWVySWQpOworICAgICAgICBp
ZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorICAgIHJldHVybiAw
OworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpjbGVhckNoaWxkTGlzdCgpCiB7CiAgICAgbV9jaGls
ZHJlbi5jbGVhcigpOwpAQCAtMTk3LDYgKzIxMywzNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzY3Jv
bGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCkKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK0NDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMg
Q0NMYXllckltcGw6OnRyeVNjcm9sbChjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSB0eXBlKSBjb25zdAoreworICAgIGlm
ICghc2Nyb2xsYWJsZSgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlTY3JvbGwgSWdub3Jl
ZCBub3Qgc2Nyb2xsYWJsZSIsIHRoaXMsIDApOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNjcm9sbE9u
TWFpblRocmVhZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlTY3JvbGwgRmFpbGVkIHNo
b3VsZFNjcm9sbE9uTWFpblRocmVhZCIsIHRoaXMsIDApOworICAgICAgICByZXR1cm4gQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKyAgICB9CisKKyAgICBpZiAoIXNjcmVlblNw
YWNlVHJhbnNmb3JtKCkuaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoInRy
eVNjcm9sbCBGYWlsZWQgbm9uSW52ZXJ0aWJsZVRyYW5zZm9ybSIsIHRoaXMsIDApOworICAgICAg
ICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisgICAgfQorCisg
ICAgSW50UG9pbnQgY29udGVudFBvaW50KHNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgp
Lm1hcFBvaW50KHZpZXdwb3J0UG9pbnQpKTsKKyAgICBpZiAobm9uRmFzdFNjcm9sbGFibGVSZWdp
b24oKS5jb250YWlucyhjb250ZW50UG9pbnQpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlT
Y3JvbGwgRmFpbGVkIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uIiwgdGhpcywgMCk7CisgICAgICAg
IHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOworICAgIH0KKworICAg
IGlmICh0eXBlID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCAmJiBoYXZlV2hlZWxFdmVu
dEhhbmRsZXJzKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoInRyeVNjcm9sbCBGYWlsZWQgd2hl
ZWxFdmVudEhhbmRsZXJzIiwgdGhpcywgMCk7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsRmFpbGVkOworICAgIH0KKworICAgIHJldHVybiBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsU3RhcnRlZDsKK30KKwogY29uc3QgSW50UmVjdCBDQ0xheWVySW1wbDo6
Z2V0RHJhd1JlY3QoKSBjb25zdAogewogICAgIC8vIEZvcm0gdGhlIG1hdHJpeCB1c2VkIGJ5IHRo
ZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJzIG9mIHRoZSBsYXllcidzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaAppbmRleCAxNTlkNWFjZDgyNjVlNzlhMWQzMDMxYTFhMTQ1ZTc5NTBjOGU3YjQwLi42NGRh
ZWIzYmQ1ZTMzODA5NGUzNzgyMjhlYTUwZWY3NDIzNTU4ZWUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUZXh0
U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJj
Yy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NT
aGFyZWRRdWFkU3RhdGUuaCIKQEAgLTcyLDYgKzczLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
bW92ZUZyb21QYXJlbnQoKTsKICAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CiAKKyAgICAv
LyBSZXR1cm5zIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgaWYgb25lIGV4aXN0cyBpbiB0aGUg
c3VidHJlZSBzdGFydGluZworICAgIC8vIGZyb20gdGhpcyBsYXllciAoaW5jbHVkaW5nIG1hc2sg
YW5kIHJlcGxpY2EgbGF5ZXJzKS4KKyAgICBDQ0xheWVySW1wbCogZmluZExheWVySW5TdWJ0cmVl
KGludCBsYXllcklkKTsKKwogICAgIHZvaWQgc2V0TWFza0xheWVyKFBhc3NPd25QdHI8Q0NMYXll
ckltcGw+KTsKICAgICBDQ0xheWVySW1wbCogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9t
YXNrTGF5ZXIuZ2V0KCk7IH0KIApAQCAtMTk3LDYgKzIwMiw4IEBAIHB1YmxpYzoKICAgICBjb25z
dCBSZWdpb24mIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9ub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbjsgfQogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdp
b24oY29uc3QgUmVnaW9uJiByZWdpb24pIHsgbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IHJl
Z2lvbjsgfQogCisgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyB0cnlTY3Jv
bGwoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJbnB1dFR5cGUpIGNvbnN0OworCiAgICAgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVy
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUxheWVyUmVjdDsgfQogICAgIHZvaWQgc2V0
VmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KSB7IG1fdmlz
aWJsZUxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3Q7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKaW5kZXggNTc2ZmMyYjMxOTBhMmQ2MzA5NTc1OTgxNzVjNDNlZWY0ZTc4OGMy
Ny4uODU0NTU5NjU4YWE5Y2QzY2Q1N2M3ZWY3ZjA5ZmVlZDc4ZjVhMzE5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC02MTEsMTUgKzYxMSw1NiBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6Y2xlYXJQZW5kaW5nVXBkYXRlKCkKICAgICBtX3VwZGF0ZUxpc3QuY2xlYXIoKTsK
IH0KIAorc3RhdGljIExheWVyQ2hyb21pdW0qIGZpbmRMYXllckJ5SWQoTGF5ZXJDaHJvbWl1bSog
bGF5ZXIsIGludCBpZCkKK3sKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChsYXllci0+aWQoKSA9PSBpZCkKKyAgICAgICAgcmV0dXJuIGxheWVyOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewor
ICAgICAgICBMYXllckNocm9taXVtKiBmb3VuZCA9IGZpbmRMYXllckJ5SWQobGF5ZXItPmNoaWxk
cmVuKClbaV0uZ2V0KCksIGlkKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0
dXJuIGZvdW5kOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgTGF5ZXJDaHJv
bWl1bSogZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKQorewor
ICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVyLT5zY3Jv
bGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJv
bWl1bSogZm91bmQgPSBmaW5kRmlyc3RTY3JvbGxhYmxlTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClb
aV0uZ2V0KCkpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBs
eVNjcm9sbEFuZFNjYWxlKGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8pCiB7Ci0gICAg
Ly8gRklYTUU6IHB1c2hpbmcgc2Nyb2xsIG9mZnNldHMgdG8gbm9uLXJvb3QgbGF5ZXJzIG5vdCBp
bXBsZW1lbnRlZAotICAgIGlmICghaW5mby5zY3JvbGxzLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIExheWVyQ2hyb21pdW0qIHJvb3RTY3JvbGxMYXllciA9IGZpbmRGaXJzdFNjcm9sbGFi
bGVMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgSW50U2l6ZSByb290U2Nyb2xsRGVsdGE7
CiAKLSAgICBBU1NFUlQoaW5mby5zY3JvbGxzLnNpemUoKSA9PSAxKTsKLSAgICBJbnRTaXplIHNj
cm9sbERlbHRhID0gaW5mby5zY3JvbGxzWzBdLnNjcm9sbERlbHRhOwotICAgIG1fY2xpZW50LT5h
cHBseVNjcm9sbEFuZFNjYWxlKHNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZm8uc2Nyb2xscy5zaXplKCk7ICsraSkgeworICAg
ICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGZpbmRMYXllckJ5SWQobV9yb290TGF5ZXIuZ2V0
KCksIGluZm8uc2Nyb2xsc1tpXS5sYXllcklkKTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobGF5ZXIgPT0gcm9vdFNjcm9sbExheWVyKQor
ICAgICAgICAgICAgcm9vdFNjcm9sbERlbHRhICs9IGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0
YTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGF5ZXItPnNjcm9sbEJ5KGluZm8uc2Nyb2xs
c1tpXS5zY3JvbGxEZWx0YSk7CisgICAgfQorICAgIGlmICghcm9vdFNjcm9sbERlbHRhLmlzWmVy
bygpIHx8IGluZm8ucGFnZVNjYWxlRGVsdGEgIT0gMSkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5
U2Nyb2xsQW5kU2NhbGUocm9vdFNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIH0K
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4
IDZjNTAyMjU2M2FlZWIyZDI3OWE1NzE5OGQ4Yjk2MTYwMGIzNWNkMzUuLmNkYTU4ZjA5ZDczYzA3
YWIwZjVlZGM0OWFmNTFjNTI5ZDVkNjhmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCkBAIC05Myw3ICs5Myw4IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5
ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlCiAg
ICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAg
ICwgbV9mcmFtZU51bWJlcigwKQotICAgICwgbV9zY3JvbGxMYXllckltcGwoMCkKKyAgICAsIG1f
cm9vdFNjcm9sbExheWVySW1wbCgwKQorICAgICwgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllcklt
cGwoMCkKICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3Zpc2libGUodHJ1ZSkK
ICAgICAsIG1fcGFnZVNjYWxlKDEpCkBAIC0xNTAsMTAgKzE1MSwxMCBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xv
Y2tUaW1lKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0
aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9h
dCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWUsIGRvdWJsZSBkdXJhdGlvbikKIHsKLSAgICBp
ZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNp
emUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRT
aXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fcm9vdFNjcm9s
bExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAgICAgc2Nyb2xsVG90YWwuc2NhbGUobV9wYWdl
U2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVUb3RhbCA9IG1fcGFnZVNjYWxlICogbV9wYWdl
U2NhbGVEZWx0YTsKICAgICBJbnRTaXplIHNjYWxlZENvbnRlbnRTaXplID0gY29udGVudFNpemUo
KTsKQEAgLTM1Miw5ICszNTMsMjYgQEAgSW50U2l6ZSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250
ZW50U2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gVE9ETyhhZWxpYXMpOiBIYXJkY29kaW5nIHRoZSBm
aXJzdCBjaGlsZCBoZXJlIGlzIHdlaXJkLiBUaGluayBvZgogICAgIC8vIGEgY2xlYW5lciB3YXkg
dG8gZ2V0IHRoZSBjb250ZW50Qm91bmRzIG9uIHRoZSBJbXBsIHNpZGUuCi0gICAgaWYgKCFtX3Nj
cm9sbExheWVySW1wbCB8fCBtX3Njcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkp
CisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwgfHwgbV9yb290U2Nyb2xsTGF5ZXJJbXBs
LT5jaGlsZHJlbigpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLSAgICBy
ZXR1cm4gbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsK
KyAgICByZXR1cm4gbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50
Qm91bmRzKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJs
ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEmIGZyYW1lLCBDQ0xheWVyR2Vv
bWV0cnlMaXN0JiB2aXNpYmxlTGF5ZXJzKQoreworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9y
PENDTGF5ZXJJbXBsLCBDQ0xheWVyTGlzdCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVySXRlcmF0
b3JBY3Rpb25zOjpGcm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKyAgICBDQ0xheWVy
SXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmZnJhbWUucmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CisgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NM
YXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJmZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9ICgqaXQp
OworICAgICAgICBpZiAoIWxheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pc0ludmVy
dGlibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzdHJ1Y3QgTGF5ZXJHZW9t
ZXRyeSBsYXllckdlb21ldHJ5ID0geworICAgICAgICAgICAgbGF5ZXJJbXBsLT5pZCgpLAorICAg
ICAgICAgICAgbGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLAorICAgICAgICAgICAg
bGF5ZXJJbXBsLT52aXNpYmxlTGF5ZXJSZWN0KCksCisgICAgICAgIH07CisgICAgICAgIHZpc2li
bGVMYXllcnMuYXBwZW5kKGxheWVyR2VvbWV0cnkpOworICAgIH0KIH0KIAogYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZyYW1lRGF0YSYgZnJhbWUpCkBAIC0zNjMsNiAr
MzgxLDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZyYW1lRGF0
YSYgZnJhbWUpCiAKICAgICBmcmFtZS5yZW5kZXJQYXNzZXMuY2xlYXIoKTsKICAgICBmcmFtZS5y
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CisgICAgbV92aXNpYmxlTGF5ZXJzLmNsZWFy
KCk7CiAKICAgICBpZiAoIXJvb3RMYXllcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
NzAsNiArMzg5LDggQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZy
YW1lRGF0YSYgZnJhbWUpCiAgICAgaWYgKCFjYWxjdWxhdGVSZW5kZXJQYXNzZXMoZnJhbWUucmVu
ZGVyUGFzc2VzLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCisgICAgY2FsY3VsYXRlVmlzaWJsZUxheWVycyhmcmFtZSwgbV92aXNpYmxlTGF5
ZXJzKTsKKwogICAgIC8vIElmIHdlIHJldHVybiB0cnVlLCB0aGVuIHdlIGV4cGVjdCBkcmF3TGF5
ZXJzKCkgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZ2Fpbi4K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQ0NCw3ICs0NjUsNyBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnJlYWRiYWNrKHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAg
ICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CiB9
CiAKLXN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXll
cikKK3N0YXRpYyBDQ0xheWVySW1wbCogZmluZFJvb3RTY3JvbGxMYXllcihDQ0xheWVySW1wbCog
bGF5ZXIpCiB7CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NTMsNyAr
NDc0LDcgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwq
IGxheWVyKQogICAgICAgICByZXR1cm4gbGF5ZXI7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENDTGF5ZXJJbXBs
KiBmb3VuZCA9IGZpbmRTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cisg
ICAgICAgIENDTGF5ZXJJbXBsKiBmb3VuZCA9IGZpbmRSb290U2Nyb2xsTGF5ZXIobGF5ZXItPmNo
aWxkcmVuKClbaV0uZ2V0KCkpOwogICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICByZXR1
cm4gZm91bmQ7CiAgICAgfQpAQCAtNDYxLDEyICs0ODIsMzIgQEAgc3RhdGljIENDTGF5ZXJJbXBs
KiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogICAgIHJldHVybiAwOwogfQog
CisvLyBDb250ZW50IGxheWVycyBjYW4gYmUgZWl0aGVyIGRpcmVjdGx5IHNjcm9sbGFibGUgb3Ig
Y29udGFpbmVkIGluIGFuIG91dGVyCisvLyBzY3JvbGxpbmcgbGF5ZXIgd2hpY2ggYXBwbGllcyB0
aGUgc2Nyb2xsIHRyYW5zZm9ybS4gR2l2ZW4gYSBjb250ZW50IGxheWVyLAorLy8gdGhpcyBmdW5j
dGlvbiByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIHNjcm9sbCBsYXllciBpZiBhbnkuCitzdGF0aWMg
Q0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllckZvckNvbnRlbnRMYXllcihDQ0xheWVySW1wbCog
bGF5ZXJJbXBsKQoreworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVySW1w
bDsKKworICAgIGlmIChsYXllckltcGwtPmRyYXdzQ29udGVudCgpICYmIGxheWVySW1wbC0+cGFy
ZW50KCkgJiYgbGF5ZXJJbXBsLT5wYXJlbnQoKS0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1
cm4gbGF5ZXJJbXBsLT5wYXJlbnQoKTsKKworICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBsYXll
cikKIHsKICAgICBtX3Jvb3RMYXllckltcGwgPSBsYXllcjsKKyAgICBtX3Jvb3RTY3JvbGxMYXll
ckltcGwgPSBmaW5kUm9vdFNjcm9sbExheWVyKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CiAKLSAg
ICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhlIGZpcnN0IHNjcm9sbGFi
bGUgbGF5ZXIuCi0gICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXIobV9yb290
TGF5ZXJJbXBsLmdldCgpKTsKKyAgICBpZiAobV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwp
IHsKKyAgICAgICAgaWYgKCFtX3Jvb3RMYXllckltcGwgfHwgIW1fcm9vdExheWVySW1wbC0+Zmlu
ZExheWVySW5TdWJ0cmVlKG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLT5pZCgpKSkKKyAg
ICAgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKKyAgICB9CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCkBAIC01
MTQsNiArNTU1LDM0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Vmlld3BvcnRTaXpl
KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT52
aWV3cG9ydENoYW5nZWQoKTsKIH0KIAorc3RhdGljIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VT
Y2FsZUNoYW5nZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVDaGFuZ2Up
Cit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXll
ckltcGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbnZlcnQgaW1w
bC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxlIHNwYWNlLgorICAgICAgICBGbG9hdFNp
emUgc2Nyb2xsRGVsdGEgPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgICAgIHNjcm9s
bERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7CisgICAgICAgIGxheWVySW1wbC0+c2V0U2Ny
b2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBhZGp1c3RTY3Jv
bGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFn
ZVNjYWxlQ2hhbmdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Ny
b2xsTGF5ZXJzKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGZsb2F0IHBhZ2VTY2FsZURlbHRhKQor
eworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGF5ZXJJ
bXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIGxheWVySW1wbC0+c2V0UGFnZVNjYWxlRGVsdGEo
cGFnZVNjYWxlRGVsdGEpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwt
PmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Nj
cm9sbExheWVycyhsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCksIHBhZ2VTY2FsZURlbHRh
KTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW5QYWdlU2NhbGUsIGZsb2F0IG1heFBhZ2VT
Y2FsZSkKIHsKICAgICBpZiAoIXBhZ2VTY2FsZSkKQEAgLTUyOCwyNSArNTk3LDEzIEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0IHBh
Z2VTY2FsZSwgZmxvYXQgbWluCiAgICAgZmxvYXQgcGFnZVNjYWxlQ2hhbmdlID0gcGFnZVNjYWxl
IC8gbV9wYWdlU2NhbGU7CiAgICAgbV9wYWdlU2NhbGUgPSBwYWdlU2NhbGU7CiAKLSAgICBhZGp1
c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKHBhZ2VTY2FsZUNoYW5nZSk7CisgICAgaWYgKHBh
Z2VTY2FsZUNoYW5nZSAhPSAxKQorICAgICAgICBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hh
bmdlKG1fcm9vdFNjcm9sbExheWVySW1wbCwgcGFnZVNjYWxlQ2hhbmdlKTsKIAogICAgIC8vIENs
YW1wIGRlbHRhIHRvIGxpbWl0cyBhbmQgcmVmcmVzaCBkaXNwbGF5IG1hdHJpeC4KICAgICBzZXRQ
YWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZURlbHRhIC8gbV9zZW50UGFnZVNjYWxlRGVsdGEpOwog
ICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gMTsKLSAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9T
Y3JvbGxMYXllcigpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFkanVzdFNjcm9s
bHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQgcGFnZVNjYWxlQ2hhbmdlKQotewotICAgIGlmIChw
YWdlU2NhbGVDaGFuZ2UgPT0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgYWxzbyBu
ZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxlIHNwYWNl
LgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBGbG9hdFNpemUgc2Nyb2xs
RGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKLSAgICAgICAgc2Nyb2xs
RGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKLSAgICAgICAgbV9zY3JvbGxMYXllckltcGwt
PnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKLSAgICB9CisgICAgYXBwbHlQYWdlU2NhbGVE
ZWx0YVRvU2Nyb2xsTGF5ZXJzKG1fcm9vdFNjcm9sbExheWVySW1wbCwgbV9wYWdlU2NhbGVEZWx0
YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxv
YXQgZGVsdGEpCkBAIC01NjQsMjIgKzYyMSwxNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldFBhZ2VTY2FsZURlbHRhKGZsb2F0IGRlbHRhKQogICAgIG1fcGFnZVNjYWxlRGVsdGEgPSBk
ZWx0YTsKIAogICAgIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgYXBwbHlQYWdlU2Nh
bGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjph
cHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpCi17Ci0gICAgaWYgKG1fc2Nyb2xsTGF5
ZXJJbXBsKQotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0UGFnZVNjYWxlRGVsdGEobV9w
YWdlU2NhbGVEZWx0YSk7CisgICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXJzKG1f
cm9vdFNjcm9sbExheWVySW1wbCwgbV9wYWdlU2NhbGVEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogewotICAgIGlmICghbV9z
Y3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKSkK
KyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCB8fCAhbV9yb290U2Nyb2xsTGF5ZXJJbXBs
LT5jaGlsZHJlbigpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRTaXplIHZp
ZXdCb3VuZHMgPSBtX3ZpZXdwb3J0U2l6ZTsKLSAgICBpZiAoQ0NMYXllckltcGwqIGNsaXBMYXll
ciA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgIGlmIChDQ0xheWVySW1wbCog
Y2xpcExheWVyID0gbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkgewogICAgICAgICBp
ZiAoY2xpcExheWVyLT5tYXNrc1RvQm91bmRzKCkpCiAgICAgICAgICAgICB2aWV3Qm91bmRzID0g
Y2xpcExheWVyLT5ib3VuZHMoKTsKICAgICB9CkBAIC01OTAsOSArNjQxLDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5n
IGEgdmVydGljYWwgc2Nyb2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1h
eFNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+
c2V0TWF4U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKLQotICAgIC8vIFRPRE8oYWVsaWFzKTog
QWxzbyB1cGRhdGUgc3VibGF5ZXJzLgorICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2V0TWF4
U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzZXROZWVkc1JlZHJhdygpCkBAIC02MDIsNDQgKzY1MSw4NCBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKIAogQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYg
dmlld3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSB0eXBl
KQogewotICAgIC8vIFRPRE86IENoZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBp
ZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgp
KSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBJZ25vcmVkIG5vIHNjcm9sbGFi
bGUiLCB0aGlzLCAwKTsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisK
KworICAgIGlmICghbV9yb290TGF5ZXJJbXBsKQogICAgICAgICByZXR1cm4gU2Nyb2xsSWdub3Jl
ZDsKLSAgICB9CiAKLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwtPnNob3VsZFNjcm9sbE9uTWFp
blRocmVhZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBGYWlsZWQgc2hv
dWxkU2Nyb2xsT25NYWluVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBTY3JvbGxG
YWlsZWQ7CisgICAgLy8gRmlyc3QgZmluZCBvdXQgd2hpY2ggbGF5ZXIgd2FzIGhpdCBieSB3YWxr
aW5nIHRoZSBzYXZlZCBsaXN0IG9mIHZpc2libGUgbGF5ZXJzLgorICAgIENDTGF5ZXJJbXBsKiBs
YXllckltcGwgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92aXNpYmxlTGF5ZXJz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyR2VvbWV0cnkmIGdlb21ldHJ5ID0gbV92aXNp
YmxlTGF5ZXJzW2ldOworICAgICAgICBJbnRQb2ludCBjb250ZW50UG9pbnQoZ2VvbWV0cnkuc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHZpZXdwb3J0UG9pbnQpKTsKKyAg
ICAgICAgaWYgKGdlb21ldHJ5LnZpc2libGVMYXllclJlY3QuY29udGFpbnMoY29udGVudFBvaW50
KSkgeworICAgICAgICAgICAgbGF5ZXJJbXBsID0gbV9yb290TGF5ZXJJbXBsLT5maW5kTGF5ZXJJ
blN1YnRyZWUoZ2VvbWV0cnkubGF5ZXJJZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgIH0KIAotICAgIEludFBvaW50IHNjcm9sbExheWVyQ29udGVudFBvaW50KG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2aWV3
cG9ydFBvaW50KSk7Ci0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsLT5ub25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbigpLmNvbnRhaW5zKHNjcm9sbExheWVyQ29udGVudFBvaW50KSkgewotICAgICAgICBU
UkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uIiwg
dGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7Ci0gICAgfQorICAgIC8vIFdh
bGsgdXAgdGhlIGhpZXJhcmNoeSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIGxheWVyLgorICAg
IENDTGF5ZXJJbXBsKiBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisgICAgZm9y
ICg7IGxheWVySW1wbDsgbGF5ZXJJbXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgICAg
ICAvLyBUaGUgY29udGVudCBsYXllciBjYW4gYWxzbyBibG9jayBhdHRlbXB0cyB0byBzY3JvbGwg
b3V0c2lkZSB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIGlmIChsYXllckltcGwtPnRyeVNjcm9s
bCh2aWV3cG9ydFBvaW50LCB0eXBlKSA9PSBTY3JvbGxGYWlsZWQgJiYgZmFsc2UpCisgICAgICAg
ICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOworCisgICAgICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxM
YXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIobGF5ZXJJbXBsKTsKKyAg
ICAgICAgaWYgKCFzY3JvbGxMYXllckltcGwpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBTY3JvbGxTdGF0dXMgc3RhdHVzID0gc2Nyb2xsTGF5ZXJJbXBsLT50cnlTY3JvbGwodmll
d3BvcnRQb2ludCwgdHlwZSk7CisKKyAgICAgICAgLy8gSWYgYW55IGxheWVyIHdhbnRzIHRvIGRp
dmVydCB0aGUgc2Nyb2xsIGV2ZW50IHRvIHRoZSBtYWluIHRocmVhZCwgYWJvcnQuCisgICAgICAg
IGlmIChzdGF0dXMgPT0gU2Nyb2xsRmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEZh
aWxlZDsKIAotICAgIGlmICh0eXBlID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCAmJiBt
X3Njcm9sbExheWVySW1wbC0+aGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpKSB7Ci0gICAgICAgIFRS
QUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBGYWlsZWQgd2hlZWxFdmVudEhhbmRsZXJzIiwgdGhpcywg
MCk7Ci0gICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7CisgICAgICAgIGlmIChzdGF0dXMgPT0g
U2Nyb2xsU3RhcnRlZCAmJiAhcG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGwpCisgICAgICAg
ICAgICBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCA9IHNjcm9sbExheWVySW1wbDsKICAg
ICB9CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAgICBpZiAocG90ZW50aWFsbHlTY3Jv
bGxpbmdMYXllckltcGwpIHsKKyAgICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwg
PSBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbDsKKyAgICAgICAgcmV0dXJuIFNjcm9sbFN0
YXJ0ZWQ7CisgICAgfQorICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOwogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewog
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMsIDAp
OwotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX2N1cnJlbnRseVNjcm9s
bGluZ0xheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwt
PnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbklt
cGxUaHJlYWQoKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsK
KyAgICBGbG9hdFNpemUgcGVuZGluZ0RlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBwZW5kaW5nRGVs
dGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOworCisgICAgZm9yIChDQ0xheWVySW1wbCog
bGF5ZXJJbXBsID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7IGxheWVySW1wbCAmJiAh
cGVuZGluZ0RlbHRhLmlzWmVybygpOyBsYXllckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpKSB7
CisgICAgICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgRmxvYXRTaXplIHByZXZpb3VzRGVsdGEobGF5ZXJJbXBsLT5zY3JvbGxE
ZWx0YSgpKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShwZW5kaW5nRGVsdGEpOworICAg
ICAgICAvLyBSZXNldCB0aGUgcGVuZGluZyBzY3JvbGwgZGVsdGEgdG8gemVybyBpZiB0aGUgbGF5
ZXIgd2FzIGFibGUgdG8gbW92ZSBhbG9uZyB0aGUgcmVxdWVzdGVkCisgICAgICAgIC8vIGF4aXMu
IFRoaXMgaXMgdG8gZW5zdXJlIGl0IGlzIHBvc3NpYmxlIHRvIHNjcm9sbCBleGFjdGx5IHRvIHRo
ZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEKKyAgICAgICAgLy8gc2Nyb2xsIGFyZWEgcmVnYXJkbGVz
cyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZvciBkaWFnb25hbCBzY3JvbGxzIHRoaXMgYWxzbyBhdm9p
ZHMgYXBwbHlpbmcKKyAgICAgICAgLy8gdGhlIHNjcm9sbCBvbiBvbmUgYXhpcyB0byBtdWx0aXBs
ZSBsYXllcnMuCisgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLndpZHRoKCkgIT0gbGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpLndpZHRoKCkpCisgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lk
dGgoMCk7CisgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLmhlaWdodCgpICE9IGxheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKS5oZWlnaHQoKSkKKyAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRIZWln
aHQoMCk7CisgICAgfQorCisgICAgaWYgKHBlbmRpbmdEZWx0YSAhPSBzY3JvbGxEZWx0YSkgewor
ICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAg
bV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgfQogfQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCgpCiB7CisgICAgbV9jdXJyZW50bHlTY3Jv
bGxpbmdMYXllckltcGwgPSAwOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNo
R2VzdHVyZUJlZ2luKCkKQEAgLTY1Myw3ICs3NDIsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCBtYWduaWZ5RGVsdGEsCiB7CiAgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSIsIHRoaXMsIDAp
OwogCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExh
eWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcHJldmlvdXNQaW5jaEFuY2hv
ciA9PSBJbnRQb2ludDo6emVybygpKQpAQCAtNjY4LDcgKzc1Nyw3IEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0IG1hZ25pZnlEZWx0YSwKIAogICAg
IG1fcHJldmlvdXNQaW5jaEFuY2hvciA9IGFuY2hvcjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JvbGxCeShyb3VuZGVkSW50U2l6ZShtb3ZlKSk7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJ
bXBsLT5zY3JvbGxCeShyb3VuZGVkSW50U2l6ZShtb3ZlKSk7CiAgICAgbV9jbGllbnQtPnNldE5l
ZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25J
bXBsVGhyZWFkKCk7CiB9CkBAIC02OTAsNyArNzc5LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpjb21wdXRlRG91YmxlVGFwWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3Jv
bGwKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKEND
U2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8pCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVy
SW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gT25seSBzZW5kIGZha2Ugc2Nyb2xsL3pvb20gZGVsdGFzIGlmIHdlJ3JlIHBpbmNo
IHpvb21pbmcgb3V0IGJ5IGEKQEAgLTcwMiw3ICs3OTEsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xs
SW5mbwogCiAgICAgLy8gQ29tcHV0ZSB3aGVyZSB0aGUgc2Nyb2xsIG9mZnNldC9wYWdlIHNjYWxl
IHdvdWxkIGJlIGlmIGZ1bGx5IHBpbmNoLXpvb21lZAogICAgIC8vIG91dCBmcm9tIHRoZSBhbmNo
b3IgcG9pbnQuCi0gICAgSW50U2l6ZSBzY3JvbGxCZWdpbiA9IGZsb29yZWRJbnRTaXplKG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9s
bERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsQmVnaW4gPSBmbG9vcmVkSW50U2l6ZShtX3Jv
b3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPnNjcm9sbERlbHRhKCkpOwogICAgIHNjcm9sbEJlZ2luLnNjYWxlKG1fcGFnZVNjYWxlRGVs
dGEpOwogICAgIGZsb2F0IHNjYWxlQmVnaW4gPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVs
dGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGFUb1NlbmQgPSBtX21pblBhZ2VTY2FsZSAvIG1f
cGFnZVNjYWxlOwpAQCAtNzIxLDIxICs4MTAsNDEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojpjb21wdXRlUGluY2hab29tRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8K
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjptYWtlU2Nyb2xsQW5kU2NhbGVTZXQoQ0NTY3Jv
bGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBm
bG9hdCBwYWdlU2NhbGUpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAo
IW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJ
ZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNj
cm9sbE9mZnNldCAtIHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSk7
CisgICAgc2Nyb2xsLmxheWVySWQgPSBtX3Jvb3RTY3JvbGxMYXllckltcGwtPmlkKCk7CisgICAg
c2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsT2Zmc2V0IC0gdG9TaXplKG1fcm9vdFNjcm9sbExh
eWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBl
bmQoc2Nyb2xsKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNj
cm9sbC5zY3JvbGxEZWx0YSk7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Ny
b2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9
IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gcGFnZVNjYWxlIC8gbV9wYWdlU2NhbGU7CiB9
CiAKK3N0YXRpYyB2b2lkIGNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCog
c2Nyb2xsSW5mbywgQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sKKyAgICBpZiAoIWxheWVySW1w
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFsYXllckltcGwtPnNjcm9sbERlbHRhKCku
aXNaZXJvKCkpIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IGZsb29yZWRJbnRTaXpl
KGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7CisgICAgICAgIHNjcm9sbC5sYXllcklkID0gbGF5
ZXJJbXBsLT5pZCgpOworICAgICAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsK
KyAgICAgICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKKyAgICAgICAgbGF5
ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQor
ICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRy
ZW4oKVtpXS5nZXQoKSk7Cit9CisKIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NM
YXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRT
Y2FsZVNldCgpKTsKLSAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVs
dGEgIT0gMS4wZik7CisgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBt
X3Jvb3RMYXllckltcGwuZ2V0KCkpOworCisgICAgYm9vbCBkaWRNb3ZlID0gc2Nyb2xsSW5mby0+
c2Nyb2xscy5zaXplKCkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxOwogICAgIGlmICghZGlkTW92
ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2ZSB8fCBtX3BhZ2VTY2FsZUFuaW1hdGlvbikgewogICAg
ICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0g
MTsKICAgICAgICAgaWYgKG1fcGluY2hHZXN0dXJlQWN0aXZlKQpAQCAtNzQ3LDE0ICs4NTYsNiBA
QCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnBy
b2Nlc3NTY3JvbGxEZWx0YXMoKQogCiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJ
bmZvLT5wYWdlU2NhbGVEZWx0YSA9IG1fcGFnZVNjYWxlRGVsdGE7CiAKLSAgICAvLyBGSVhNRTog
dHJhY2sgc2Nyb2xscyBmcm9tIGxheWVycyBvdGhlciB0aGFuIHRoZSByb290Ci0gICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5
ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9
IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKLSAgICBz
Y3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOwotCi0gICAgbV9zY3JvbGxMYXllcklt
cGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOwotCiAgICAgcmV0dXJu
IHNjcm9sbEluZm8ucmVsZWFzZSgpOwogfQogCkBAIC03NzIsMTIgKzg3MywxMiBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVQYWdlU2NhbGUoZG91YmxlIG1vbm90b25pY1RpbWUp
CiAgICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAg
IEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRh
KCkpOwogCiAgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VT
Y2FsZUF0VGltZShtb25vdG9uaWNUaW1lKSAvIG1fcGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5l
eHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKG1vbm90
b25pY1RpbWUpOwogICAgIG5leHRTY3JvbGwuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOwot
ICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwp
OworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9s
bFRvdGFsKTsKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIAog
ICAgIGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+aXNBbmltYXRpb25Db21wbGV0ZUF0VGltZSht
b25vdG9uaWNUaW1lKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4
IDMzYzllOTE2NzVlZmEwYjUyNTA1ZjJjODQxYWUzODA5MDUzZTkzNDkuLmVkNGZkNDc2ZDRlMDVm
YWM3MGMyNDZhZGI5ZWZmYzc1OWQ1NmE5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSb290TGF5
ZXIoUGFzc093blB0cjxDQ0xheWVySW1wbD4pOwogICAgIFBhc3NPd25QdHI8Q0NMYXllckltcGw+
IHJlbGVhc2VSb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllckltcGwucmVsZWFzZSgpOyB9
CiAKLSAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bExheWVySW1wbDsgfQorICAgIENDTGF5ZXJJbXBsKiByb290U2Nyb2xsTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3Jvb3RTY3JvbGxMYXllckltcGw7IH0KIAogICAgIGJvb2wgdmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlzaWJsZTsgfQogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKQEAg
LTE2Miw4ICsxNjIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgbWFrZVNjcm9sbEFuZFNjYWxlU2V0
KENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIGNvbnN0IEludFNpemUmIHNjcm9sbE9m
ZnNldCwgZmxvYXQgcGFnZVNjYWxlKTsKIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRGVsdGEoZmxv
YXQpOwotICAgIHZvaWQgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLSAgICB2
b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBk
YXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKICAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBmcmFtZSBzaG91
bGQgbm90IGJlIGRpc3BsYXllZC4KQEAgLTE3Miw5ICsxNzAsMTggQEAgcHJpdmF0ZToKICAgICBJ
bnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Q7CiAgICAgdm9pZCBzZW5kRGlkTG9zZUNvbnRleHRS
ZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKIAorICAgIHN0cnVjdCBMYXllckdlb21ldHJ5IHsKKyAg
ICAgICAgaW50IGxheWVySWQ7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNw
YWNlVHJhbnNmb3JtOworICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3Q7CisgICAgfTsK
KyAgICB0eXBlZGVmIFZlY3RvcjxMYXllckdlb21ldHJ5PiBDQ0xheWVyR2VvbWV0cnlMaXN0Owor
ICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVMYXllcnMoQ0NMYXllclRyZWVIb3N0SW1w
bDo6RnJhbWVEYXRhJiwgQ0NMYXllckdlb21ldHJ5TGlzdCYpOworCiAgICAgT3duUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIE93blB0cjxDQ0xheWVySW1w
bD4gbV9yb290TGF5ZXJJbXBsOwotICAgIENDTGF5ZXJJbXBsKiBtX3Njcm9sbExheWVySW1wbDsK
KyAgICBDQ0xheWVySW1wbCogbV9yb290U2Nyb2xsTGF5ZXJJbXBsOworICAgIENDTGF5ZXJJbXBs
KiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKICAgICBDQ1NldHRpbmdzIG1fc2V0dGlu
Z3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBib29sIG1fdmlzaWJsZTsKQEAg
LTE5Nyw2ICsyMDQsMTAgQEAgcHJpdmF0ZToKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNv
cnRlcjsKIAorICAgIC8vIExpc3Qgb2YgdmlzaWJsZSBsYXllcnMgaW4gdGhlIG1vc3QgcmVjZW50
IGZyYW1lIGluIGZyb250LXRvLWJhY2sgb3JkZXIuCisgICAgLy8gVXNlZCBmb3IgaW5wdXQgZXZl
bnQgaGl0IHRlc3RpbmcuCisgICAgQ0NMYXllckdlb21ldHJ5TGlzdCBtX3Zpc2libGVMYXllcnM7
CisKICAgICBGbG9hdFJlY3QgbV9yb290RGFtYWdlUmVjdDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKaW5kZXggNGY2NGQ1
NDcxZTM5NjY1MGY3Y2E3NWU5ZTE2MjVjNjZkNzJmMTFiNi4uOWQ2MTNhM2FjYTk5MWM5OTVkZTM5
NzQ4NzI0YzcxZmNiYTk0MmU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKQEAgLTcyLDQgKzcyLDggQEAgdm9pZCBXZWJDb250
ZW50TGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IElu
dFJlY3QmIGNsaXAKICAgICBtX2NvbnRlbnRDbGllbnQtPnBhaW50Q29udGVudHMoY2FudmFzLCBX
ZWJSZWN0KGNsaXApKTsKIH0KIAordm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpkaWRTY3JvbGwo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCmlu
ZGV4IDUxZjM0NGY3Y2FmMTI3MTEyNmFjN2I0MjY4ZWQ1NDYxMjE0MjE5ZDguLjFiYTg4NGM5YjM1
N2ViZjM4N2VkZmYzNDlmNjU2ZWFmYTY2YWUxZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKQEAgLTQ0LDYgKzQ0LDcgQEAgcHJvdGVj
dGVkOgogCiAgICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCiAgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAKICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1f
Y29udGVudENsaWVudDsKICAgICBib29sIG1fZHJhd3NDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCmluZGV4IDhhOWYzNWRjOGE3
Yjg5YzBjOTRiZDc1MzdjNjg0NjRmYTc4YTZiYjguLmI4YWZiMmU1NTIyYmQwMDliOGIwODA4MmEz
ZTE1MjlmZWRiOGYzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJJbXBsVGVzdC5jcHAKQEAgLTE2Miw0ICsxNjIsMjggQEAgVEVTVChDQ0xheWVySW1wbFRl
c3QsIHZlcmlmeUxheWVyQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfU1VCVFJFRV9ESURfTk9UX0NIQU5HRShyb290LT5zZXRNYXhTY3JvbGxQb3NpdGlv
bihhcmJpdHJhcnlJbnRTaXplKSk7CiB9CiAKK1RFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlT
dWJ0cmVlU2VhcmNoKQoreworICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBvbiB0aGlzIHdpbGwgZmFr
ZSB0aGF0IHdlIGFyZSBvbiB0aGUgY29ycmVjdCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIHNldEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRD
aGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBt
YXNrTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOworICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcmVwbGljYUxheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSg1KTsKKworICAgIGdyYW5kQ2hp
bGQtPnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBjaGlsZC0+
YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIo
bWFza0xheWVyLnJlbGVhc2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgp
KTsKKworICAgIEVYUEVDVF9FUSgxLCByb290LT5maW5kTGF5ZXJJblN1YnRyZWUoMSktPmlkKCkp
OworICAgIEVYUEVDVF9FUSgyLCByb290LT5maW5kTGF5ZXJJblN1YnRyZWUoMiktPmlkKCkpOwor
ICAgIEVYUEVDVF9FUSgzLCByb290LT5maW5kTGF5ZXJJblN1YnRyZWUoMyktPmlkKCkpOworICAg
IEVYUEVDVF9FUSg0LCByb290LT5maW5kTGF5ZXJJblN1YnRyZWUoNCktPmlkKCkpOworICAgIEVY
UEVDVF9FUSg1LCByb290LT5maW5kTGF5ZXJJblN1YnRyZWUoNSktPmlkKCkpOworICAgIEVYUEVD
VF9FUSgwLCByb290LT5maW5kTGF5ZXJJblN1YnRyZWUoNikpOworfQorCiB9IC8vIG5hbWVzcGFj
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNwcAppbmRleCA3MDA5YzhjM2U5M2NhNmNjMDJkNDU1MjU3ZWYxMzA5Y2Vk
ZmY2NWJlLi5hOTE2NGI4ZTQ3YzI2Mzg0ZTJjZGY5Y2YyZGRlYzg3ODkzYzM1MmVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcApAQCAtOTUsNiArOTUsMjUgQEAgcHVibGljOgogICAgICAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoaW50IGlkLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAg
IE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKGlkKTsKKyAg
ICAgICAgbGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7Cisg
ICAgICAgIGxheWVyLT5zZXRCb3VuZHMoc2l6ZSk7CisgICAgICAgIGxheWVyLT5zZXRNYXhTY3Jv
bGxQb3NpdGlvbihJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSk7
CisgICAgICAgIHJldHVybiBsYXllci5yZWxlYXNlKCk7CisgICAgfQorCisgICAgdm9pZCBpbml0
aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpCisgICAgeworICAgICAgICBtX2hvc3RJ
bXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjcmVhdGVDb250ZXh0KCkpOworICAgICAgICBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgICAgIEVYUEVDVF9UUlVF
KG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+
ZHJhd0xheWVycyhmcmFtZSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dCgpCiAgICAgewpAQCAtMTc4LDEwICsxOTcs
MTIgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21t
aXRBbmRSZWRyYXcpCiB7CiAgICAgewogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsYWJs
ZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkp
OwogICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7
CiAgICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAg
ICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgfQogCiAgICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRl
ZCk7CkBAIC0xOTUsMTAgKzIxNiwxMiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHdoZWVsRXZlbnRIYW5kbGVycykKIHsKICAgICB7CiAgICAgICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgICAgIHJvb3QtPnNldFZpc2li
bGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgICAgICByb290LT5zZXRT
Y3JvbGxhYmxlKHRydWUpOwogICAgICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCgwLCAwKSk7CiAgICAgICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAw
LCAxMDApKTsKICAgICAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgp
KTsKKyAgICAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKICAgICB9
CiAgICAgQ0NMYXllckltcGwqIHJvb3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKIApAQCAt
MjEzLDExICsyMzYsMTQgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2
ZW50SGFuZGxlcnMpCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNob3VsZFNjcm9s
bE9uTWFpblRocmVhZCkKIHsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgcm9v
dC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgIHJvb3QtPnNldE1heFNj
cm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKICAgICByb290LT5zZXRTaG91bGRTY3Jv
bGxPbk1haW5UaHJlYWQodHJ1ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3Qu
cmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwor
CiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
RmFpbGVkKTsKICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
MCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbEZhaWxlZCk7CiB9CkBAIC0yMjUsMTEgKzI1MSwxNCBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCkKIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25CYXNpYykKIHsKICAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAg
IHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAg
IHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24o
SW50UG9pbnQoMCwgMCkpOwogICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUo
MTAwLCAxMDApKTsKICAgICByb290LT5zZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihJbnRSZWN0
KDAsIDAsIDUwLCA1MCkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVh
c2UoKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKwogICAg
IC8vIEFsbCBzY3JvbGwgdHlwZXMgaW5zaWRlIHRoZSBub24tZmFzdCBzY3JvbGxhYmxlIHJlZ2lv
biBzaG91bGQgZmFpbC4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CkBAIC0yNDUsMTggKzI3NCwxNSBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
QmFzaWMpCiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFi
bGVSZWdpb25XaXRoT2Zmc2V0KQogewotICAgIG1faG9zdEltcGwtPmluaXRpYWxpemVMYXllclJl
bmRlcmVyKGNyZWF0ZUNvbnRleHQoKSk7Ci0KICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7
CiAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgIHJvb3Qt
PnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKICAgICByb290LT5zZXRO
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOwogICAgIHJvb3Qt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLTI1LCAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9v
dExheWVyKHJvb3QucmVsZWFzZSgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURh
dGEgZnJhbWU7Ci0gICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFt
ZSkpOwotICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOyAvLyBVcGRhdGUgZHJhdyB0
cmFuc2Zvcm1zIHNvIHdlIGNhbiBjb3JyZWN0bHkgbWFwIHBvaW50cyBpbnRvIGxheWVyIHNwYWNl
LgorICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKICAgICAvLyBU
aGlzIHBvaW50IHdvdWxkIGZhbGwgaW50byB0aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdpb24g
ZXhjZXB0IHRoYXQgd2UndmUgbW92ZWQgdGhlIGxheWVyIGRvd24gYnkgMjUgcGl4ZWxzLgogICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg0MCwgMTApLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZCk7CkBAIC0yNzEsOCArMjk3LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBwaW5jaEdlc3R1cmUpCiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRT
aXplKDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUo
NTAsIDUwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAot
ICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnNjcm9sbExheWVyKCk7
CisgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExh
eWVyKCk7CiAgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKIAogICAgIGNvbnN0IGZsb2F0IG1pblBh
Z2VTY2FsZSA9IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKQEAgLTM1MSw4ICszNzgsOSBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikKIHsKICAgICBz
ZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsKICAgICBtX2hv
c3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXpl
TGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogCi0gICAgQ0NMYXllckltcGwqIHNjcm9sbExh
eWVyID0gbV9ob3N0SW1wbC0+c2Nyb2xsTGF5ZXIoKTsKKyAgICBDQ0xheWVySW1wbCogc2Nyb2xs
TGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290U2Nyb2xsTGF5ZXIoKTsKICAgICBBU1NFUlQoc2Nyb2xs
TGF5ZXIpOwogCiAgICAgY29uc3QgZmxvYXQgbWluUGFnZVNjYWxlID0gMC41LCBtYXhQYWdlU2Nh
bGUgPSA0OwpAQCAtNTU5LDYgKzU4NywyNTEgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBwcmVwYXJlVG9EcmF3RmFpbHNXaGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJib2FyZCkKICAg
ICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKK3sKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFi
bGUoZmFsc2UpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7
CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIC8vIFNj
cm9sbCBldmVudCBpcyBpZ25vcmVkIGJlY2F1c2UgbGF5ZXIgaXMgbm90IHNjcm9sbGFibGUuCisg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdu
b3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNU
X0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QpCit7CisgICAgLy8gVGVzdCB0aGUgY29u
ZmlndXJhdGlvbiB3aGVyZSBhIG5vbi1jb21wb3NpdGVkIHJvb3QgbGF5ZXIgaXMgZW1iZWRkZWQg
aW4gYQorICAgIC8vIHNjcm9sbGFibGUgb3V0ZXIgbGF5ZXIuCisgICAgSW50U2l6ZSBzdXJmYWNl
U2l6ZSgxMCwgMTApOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjb250ZW50TGF5ZXIgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIGNvbnRlbnRMYXllci0+c2V0SXNOb25Db21wb3Np
dGVkQ29udGVudCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVl
KTsKKyAgICBjb250ZW50TGF5ZXItPnNldFBvc2l0aW9uKEludFBvaW50KDUsIDUpKTsKKyAgICBj
b250ZW50TGF5ZXItPnNldEJvdW5kcyhzdXJmYWNlU2l6ZSk7CisgICAgY29udGVudExheWVyLT5z
ZXRDb250ZW50Qm91bmRzKEludFNpemUoc3VyZmFjZVNpemUud2lkdGgoKSAqIDIsIHN1cmZhY2VT
aXplLmhlaWdodCgpICogMikpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXll
ciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgc2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFi
bGUodHJ1ZSk7CisgICAgc2Nyb2xsTGF5ZXItPmFkZENoaWxkKGNvbnRlbnRMYXllci5yZWxlYXNl
KCkpOworCisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9sbExheWVyLnJlbGVhc2Uo
KSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgRVhQRUNUX0VRKG1f
aG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9o
b3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOworICAgIG1faG9zdEltcGwtPnNjcm9s
bEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNU
X1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzY3JvbGxDaGlsZENhbGxzQ29tbWl0QW5kUmVkcmF3KQoreworICAgIEludFNpemUg
c3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVM
YXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwt
PnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3Bv
cnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdG
cmFtZSgpOworCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAx
MCkpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlk
UmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30K
KworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNDaGlsZCkKK3sK
KyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5hZGRDaGlsZChjcmVh
dGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIC8vIFNjcm9sbCBldmVudCBpcyBpZ25vcmVkIGJl
Y2F1c2UgdGhlIGlucHV0IGNvb3JkaW5hdGUgaXMgb3V0c2lkZSB0aGUgbGF5ZXIgYm91bmRhcmll
cy4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUsIDUp
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAg
RVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkKQoreworICAgIEludFNp
emUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBj
cmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwor
ICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4LnJvdGF0ZTNkKDE4MCwgMCwgMCk7
CisgICAgY2hpbGQtPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgIGNoaWxkLT5zZXREb3VibGVT
aWRlZChmYWxzZSk7CisKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworICAg
IG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgaW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIC8vIFNjcm9sbCBldmVudCBpcyBp
Z25vcmVkIGJlY2F1c2UgdGhlIGhpdCBsYXllciBpcyBub3QgZmFjaW5nIHRoZSB2aWV3ZXIuCisg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdu
b3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNU
X0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKK3sKKyAg
ICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwg
RmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1
cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwor
CisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBleHBlY3RlZFNj
cm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1f
aG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAg
ICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Ny
b2xsRW5kKCk7CisKKyAgICAvLyBTZXQgbmV3IHBhZ2Ugc2NhbGUgZnJvbSBtYWluIHRocmVhZC4K
KyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCBw
YWdlU2NhbGUsIHBhZ2VTY2FsZSk7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRv
IHRoZSBzY3JvbGwgZGVsdGEuCisgICAgZXhwZWN0ZWRTY3JvbGxEZWx0YS5zY2FsZShwYWdlU2Nh
bGUpOworICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0
SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJ
bmZvLmdldCgpLCAwLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwg
cmFuZ2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9s
bCk7CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBkZWx0YSByZW1haW5zIGNvbnN0YW50IGJlY2F1
c2UgdGhlIGltcGwgdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisgICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnJvb3RMYXllcigpLT5wYWdlU2NhbGVEZWx0YSgpLCAxKTsKK30KKworVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhy
ZWFkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBmbG9hdCBwYWdl
U2NhbGUgPSAyOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFi
bGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3
cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3Rv
ckFuZExpbWl0cygxLCAxLCBwYWdlU2NhbGUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBJ
bnRTaXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIEludFNpemUgZXhw
ZWN0ZWRNYXhTY3JvbGwobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9u
KCkpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAg
ICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgIC8vIFNldCBuZXcgcGFnZSBzY2FsZSBv
biBpbXBsIHRocmVhZCBieSBwaW5jaGluZy4KKyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVC
ZWdpbigpOworICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZVVwZGF0ZShwYWdlU2NhbGUsIElu
dFBvaW50KCkpOworICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZUVuZCgpOworCisgICAgLy8g
VGhlIHNjcm9sbCBkZWx0YSBpcyBub3Qgc2NhbGVkIGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIGRp
ZCBub3Qgc2NhbGUuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8g
PSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMo
KnNjcm9sbEluZm8uZ2V0KCksIDAsIGV4cGVjdGVkU2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhl
IHNjcm9sbCByYW5nZSBzaG91bGQgYWxzbyBoYXZlIGJlZW4gdXBkYXRlZC4KKyAgICBFWFBFQ1Rf
RVEobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVk
TWF4U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxlIGRlbHRhIHNob3VsZCBtYXRjaCB0
aGUgbmV3IHNjYWxlIG9uIHRoZSBpbXBsIHNpZGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnJvb3RMYXllcigpLT5wYWdlU2NhbGVEZWx0YSgpLCBwYWdlU2NhbGUpOworfQorCitURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlT25N
YWluVGhyZWFkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIC8vIEFs
c28gbWFyayB0aGUgcm9vdCBzY3JvbGxhYmxlIHNvIGl0IGJlY29tZXMgdGhlIHJvb3Qgc2Nyb2xs
IGxheWVyLgorICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9vdC0+YWRkQ2hp
bGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXpl
KSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBt
X2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVM
YXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBt
X2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIEludFNp
emUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShz
Y3JvbGxEZWx0YSk7CisgICAgSW50U2l6ZSBleHBlY3RlZE1heFNjcm9sbChjaGlsZC0+bWF4U2Ny
b2xsUG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKElu
dFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xs
RGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworCisgICAgZmxvYXQgcGFnZVNj
YWxlID0gMjsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFn
ZVNjYWxlLCAxLCBwYWdlU2NhbGUpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0
byB0aGUgc2Nyb2xsIGRlbHRhLgorICAgIGV4cGVjdGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNj
YWxlKTsKKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9z
dEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xs
SW5mby5nZXQoKSwgMSwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xs
IHJhbmdlIHNob3VsZCBub3QgaGF2ZSBjaGFuZ2VkLgorICAgIEVYUEVDVF9FUShjaGlsZC0+bWF4
U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ug
c2NhbGUgZGVsdGEgcmVtYWlucyBjb25zdGFudCBiZWNhdXNlIHRoZSBpbXBsIHRocmVhZCBkaWQg
bm90IHNjYWxlLgorICAgIEVYUEVDVF9FUShjaGlsZC0+cGFnZVNjYWxlRGVsdGEoKSwgMSk7Cit9
CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRCZXlvbmRMaW1p
dCkKK3sKKyAgICAvLyBTY3JvbGwgYSBjaGlsZCBsYXllciBiZXlvbmQgaXRzIG1heGltdW0gc2Ny
b2xsIHJhbmdlIGFuZCBtYWtlIHN1cmUgdGhlCisgICAgLy8gcGFyZW50IGxheWVyIGlzIHNjcm9s
bGVkIG9uIHRoZSBheGlzIG9uIHdoaWNoIHRoZSBjaGlsZCB3YXMgdW5hYmxlIHRvCisgICAgLy8g
c2Nyb2xsLgorICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1
KSwgc3VyZmFjZVNpemUpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0g
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsK
KyAgICBncmFuZENoaWxkLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCA1KSk7CisKKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsUG9zaXRp
b24oSW50UG9pbnQoMywgMCkpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVh
c2UoKSk7CisKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworICAgIG1faG9z
dEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0
Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFu
ZERyYXdGcmFtZSgpOworICAgIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgtMywgLTcp
OworICAgICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwg
NSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGFydGVkKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEp
OworICAgICAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgICAgICBPd25QdHI8Q0NT
Y3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxE
ZWx0YXMoKTsKKworICAgICAgICAvLyBUaGUgZ3JhbmQgY2hpbGQgc2hvdWxkIGhhdmUgc2Nyb2xs
ZWQgdXAgdG8gaXRzIGxpbWl0LgorICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJ
bXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgQ0NMYXllcklt
cGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgZXhw
ZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGdyYW5kQ2hpbGQtPmlkKCksIEludFNpemUo
MCwgLTUpKTsKKworICAgICAgICAvLyBUaGUgY2hpbGQgc2hvdWxkIGhhdmUgb25seSBzY3JvbGxl
ZCBvbiB0aGUgb3RoZXIgYXhpcy4KKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8u
Z2V0KCksIGNoaWxkLT5pZCgpLCBJbnRTaXplKC0zLCAwKSk7CisgICAgfQorfQorCitURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJlZm9yZVJlZHJhdykKK3sKKyAgICBJbnRT
aXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNy
ZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOwor
ICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICAvLyBE
cmF3IG9uZSBmcmFtZSBhbmQgdGhlbiBpbW1lZGlhdGVseSByZWJ1aWxkIHRoZSBsYXllciB0cmVl
IHRvIG1pbWljIGEgdHJlZSBzeW5jaHJvbml6YXRpb24uCisgICAgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBtX2hvc3RJbXBsLT5yZWxlYXNlUm9vdExheWVyKCk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBG
bG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworCisgICAgLy8gU2Nyb2xsaW5nIHNob3Vs
ZCBzdGlsbCB3b3JrIGV2ZW4gdGhvdWdoIHdlIGRpZCBub3QgZHJhdyB5ZXQuCisgICAgRVhQRUNU
X0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7Cit9
CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0KCkgOiBt
X2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGE3NGU0Y2E0NTVjNmQ0NjYzNDQ5YzdmYTM4
MjA1Yjc2YjFkY2ZmZTguLjUxYzdjNzE4OTBkZTlmNDM3NTMzYWRmZDZmNTQ1MDY2NmVhZWYyMjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcApAQCAtMTM3OCw2ICsxMzc4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZp
cnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgeyB9CiAKIHByaXZhdGU6CiAgICAgQ0NMYXll
clRyZWVIb3N0VGVzdCogbV90ZXN0OwpAQCAtMTUyNyw3ICsxNTI4LDggQEAgY2xhc3MgTW9ja0Nv
bnRlbnRMYXllckRlbGVnYXRlIDogcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1Ymxp
YzoKICAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBN
T0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJvb2woKSk7Ci0gICAgdm9pZCBwYWludENv
bnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgeyB9CiAgICAgdm9p
ZCBub3RpZnlTeW5jUmVxdWlyZWQoKSB7IH0KIH07CiAKQEAgLTIyOTUsNCArMjI5Nyw3MCBAQCBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdEZyYWN0aW9uYWxTY3JvbGwsIHJ1bk11bHRpVGhyZWFk
KQogICAgIHJ1blRlc3RUaHJlYWRlZCgpOwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllciA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoK
KyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcigpCisgICAgICAgIDogbV9z
Y3JvbGxBbW91bnQoMiwgMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
VGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJ
bnRTaXplKDEwLCAxMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllciA9IENvbnRlbnRMYXll
ckNocm9taXVtOjpjcmVhdGUoJm1fbW9ja0RlbGVnYXRlKTsKKyAgICAgICAgbV9yb290U2Nyb2xs
TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxM
YXllci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNl
dFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRNYXhTY3Jv
bGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
cm9vdExheWVyKCktPmFkZENoaWxkKG1fcm9vdFNjcm9sbExheWVyKTsKKyAgICAgICAgbV9jaGls
ZExheWVyID0gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9tb2NrRGVsZWdhdGUpOwor
ICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUwLCA1MCkpOworICAgICAg
ICBtX2NoaWxkTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisgICAgICAgIG1fY2hpbGRMYXll
ci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3Jv
bGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVy
LT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIpOworICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01h
aW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2Fs
ZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQpCisgICAgeworICAgICAgICBJbnRQ
b2ludCBwb3NpdGlvbiA9IG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAg
ICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3Jv
bGxEZWx0YSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKG1f
cm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAg
aWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBFWFBFQ1Rf
RVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24o
KSwgSW50UG9pbnQoKSArIG1fc2Nyb2xsQW1vdW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7
CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIEVY
UEVDVF9FUShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAg
ICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOworICAgICAgICAgICAgaW1w
bC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9
PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
ZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBt
X3Njcm9sbEFtb3VudDsKKyAgICBNb2NrQ29udGVudExheWVyRGVsZWdhdGUgbV9tb2NrRGVsZWdh
dGU7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gbV9yb290U2Nyb2xsTGF5ZXI7Cit9OworCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRl
c3QodHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134541</attachid>
            <date>2012-03-29 03:52:10 -0700</date>
            <delta_ts>2012-03-29 11:32:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120329115209.patch</filename>
            <type>text/plain</type>
            <size>61451</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTkzZjE5NjQ0Yzc3MTk1
YzMwMDYyMWYyYzYxYzYxYWNiNDM4ZGM3Yy4uMGRlY2ZhYjlmMDk5OWQ3YzUzOGM2MTgzMWMxYTNm
ZGJiZDQxOGE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVu
IGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xs
ZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBBZGRlZCBuZXcgd2Via2l0X3VuaXRf
dGVzdHMgdG8gdmVyaWZ5IHNjcm9sbGluZyBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoQ29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpmaW5kTGF5ZXJJblN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllcklt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJsZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcm9s
bExheWVyRm9yQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0U2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDMt
MjkgIFZpbmVldCBDaGF1ZGhhcnkgIDxyZ2Y3NDhAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFJl
bW92ZSBjdXN0b20gYmluZGluZ3MgZm9ybSBJbnRlcm5hbHMuaWRsIG9mIGF0dHJpYnV0ZSB0eXBl
IEFycmF5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1ODAxZWU4M2Q2MmI3OWU3MzE3
NDdjNmVkYzExY2U1OTYwMGQxMzQ4Li5iZDI0NGEwZmRiODY5MTJmMDRiYTE4MDYyMWUyZGE3ZGNm
YWE3MTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEy
LTAzLTI4ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gQWRkIHRlc3RzIGZvciBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5ZXJzIGluIHRo
ZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzMzNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVySW1wbDo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvbnRlbnRM
YXllckltcGwpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdDo6Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RPcGFj
aXR5Q2hhbmdlTGF5ZXJEZWxlZ2F0ZTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdURjo6TW9ja0Nv
bnRlbnRMYXllckRlbGVnYXRlOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdURjo6TW9ja0Nv
bnRlbnRMYXllckRlbGVnYXRlOjpkaWRTY3JvbGwpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllcjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5U
ZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6
OmFwcGx5U2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFm
dGVyVGVzdCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpURVNUX0YpOgorCiAyMDEy
LTAzLTI5ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkOyByb2xsaW5nIGNocm9taXVtIGRlcHMgdG8gMTI5NTgzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDczYThhNDI0NjE1NzEzZTY5ZDVhMmMxZTc4Y2Zl
OTNjYjY4ODAwNWIuLjRjNTUwNWY5YjE5OTM0YzQ2MmQ0ZjkxMGFmN2VmZGRkYWY0MDhiZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE0NCw1ICsxNDQsMTIgQEAg
dm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0T3BhcXVlKGJvb2wgb3BhcXVlKQogICAgICAg
ICBtX3RleHR1cmVVcGRhdGVyLT5zZXRPcGFxdWUob3BhcXVlKTsKIH0KIAordm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7Cisg
ICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSArIHNjcm9sbERlbHRhKTsKKyAg
ICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlkU2Nyb2xsKHNjcm9sbERl
bHRhKTsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGU2OTk0YTIxYWVmYWMyMTQwODg3ZTVi
YmQ4YWJiMjAzYzlhYjgxNzkuLjE2ZDY3OGVkNjRhMDYxZjhmODE1ZDYzYWNlMDU5MmY5MDRlMzUw
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNDYsNiArNDYsNyBAQCBj
bGFzcyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29udGVu
dExheWVyRGVsZWdhdGUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgPSAwOwogfTsKIAogLy8gQSBMYXllciB0aGF0IHJl
cXVpcmVzIGEgR3JhcGhpY3NDb250ZXh0IHRvIHJlbmRlciBpdHMgY29udGVudHMuCkBAIC02Myw2
ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpOworCiBwcm90ZWN0ZWQ6
CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ29udGVudExheWVyRGVsZWdhdGUq
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCA5MWE0NTVhNTQxZTY2
ZjlkODc2YmU2YWNlNjExZmM4YTBmYWM0N2E1Li5mMjk3MzAzZjI1ODdlOWVlMzZjNmRhZTYzNjNi
NDMxZDdiMzI4MGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtMTEz
LDYgKzExMyw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxl
bWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29u
c3QgSW50U2l6ZSYpIHsgfQogCiAgICAgLy8gQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIGltcGxl
bWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJs
ZSBzdGFydFRpbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCAyYWQwOWI5NDhhNDNiYjNj
ZTNhNzE5NTFmYzdiNWQ5ZTEzMDBlYTU1Li5kMGIzYzY5MmZhMzg4NjNlNDA4NTFkYjE3MWEwYWU2
MGY5MjNiOTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzgwLDYgKzM4MCwxNCBAQCB2
b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIExheWVyQ2hyb21p
dW06OnNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9u
KQoreworICAgIGlmIChtX21heFNjcm9sbFBvc2l0aW9uID09IG1heFNjcm9sbFBvc2l0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgbV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0
aW9uOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpCiB7CiAgICAgaWYgKG1fc2Nyb2xsYWJsZSA9PSBz
Y3JvbGxhYmxlKQpAQCAtNDkxLDYgKzQ5OSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1f
cG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAg
ICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXIt
PnNldE1heFNjcm9sbFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5z
ZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKICAgICBpZiAoIXRyYW5z
Zm9ybUlzQW5pbWF0aW5nKCkpCiAgICAgICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zv
cm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI5ODAyMmI1MmRhNThiOTE5N2NiZjU0NDhjYjZk
NDBhOWEwN2MyNzAuLmIwMWM2ZGFlODBkNTI5ZDg3NTBlMjc4ODM4NDA1MDQ5NGM4ODlmNDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKQEAgLTEzOSwxMiArMTM5LDE3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgY29uc3QgSW50UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQogCisg
ICAgdm9pZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJik7CisgICAgY29uc3Qg
SW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX21heFNjcm9sbFBv
c2l0aW9uOyB9CisKICAgICB2b2lkIHNldFNjcm9sbGFibGUoYm9vbCk7CisgICAgYm9vbCBzY3Jv
bGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTaG91
bGRTY3JvbGxPbk1haW5UaHJlYWQoYm9vbCk7CiAgICAgdm9pZCBzZXRIYXZlV2hlZWxFdmVudEhh
bmRsZXJzKGJvb2wpOwogICAgIGNvbnN0IFJlZ2lvbiYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24o
KSB7IHJldHVybiBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOyB9CiAgICAgdm9pZCBzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKICAgICB2b2lkIHNldE5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCgpIHsgbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5n
ZWQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKSB7
IH0KIAogICAgIEludFNpemUgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7
IH0KIApAQCAtMjk3LDYgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsK
ICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBv
c2l0aW9uOworICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Ny
b2xsYWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwogICAgIGJvb2wg
bV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDJh
ZmI5ZDhmZjc0MWY5MzM1OTU2NmExNjlmZDQzNzI5NzAyYTc5NjkuLjZhMDQ0Y2RkN2M4ODI0N2Q1
ZWYyM2MxZDhiMjdlZTZkY2VkOWFlNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTEw
Nyw2ICsxMDcsMjIgQEAgdm9pZCBDQ0xheWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQogICAg
ICAgICBtX2NoaWxkcmVuWzBdLT5yZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAKK0NDTGF5ZXJJbXBs
KiBDQ0xheWVySW1wbDo6ZmluZExheWVySW5TdWJ0cmVlKGludCBsYXllcklkKQoreworICAgIGlm
IChpZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIGlmIChtX21hc2tM
YXllciAmJiBtX21hc2tMYXllci0+aWQoKSA9PSBsYXllcklkKQorICAgICAgICByZXR1cm4gbV9t
YXNrTGF5ZXIuZ2V0KCk7CisgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIG1fcmVwbGljYUxheWVy
LT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gbV9jaGlsZHJlbltpXS0+ZmluZExheWVySW5TdWJ0
cmVlKGxheWVySWQpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91
bmQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpjbGVhckNo
aWxkTGlzdCgpCiB7CiAgICAgbV9jaGlsZHJlbi5jbGVhcigpOwpAQCAtMTk3LDYgKzIxMywzNyBA
QCB2b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCkKICAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK0NDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllckltcGw6OnRyeVNjcm9sbChjb25zdCBJbnRQ
b2ludCYgdmlld3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlw
ZSB0eXBlKSBjb25zdAoreworICAgIGlmIChzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoKSkgewor
ICAgICAgICBUUkFDRV9FVkVOVCgidHJ5U2Nyb2xsIEZhaWxlZCBzaG91bGRTY3JvbGxPbk1haW5U
aHJlYWQiLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxGYWlsZWQ7CisgICAgfQorCisgICAgaWYgKCFzY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmlz
SW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlTY3JvbGwgRmFpbGVkIG5v
bkludmVydGlibGVUcmFuc2Zvcm0iLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworICAgIH0KKworICAgIEludFBvaW50IGNvbnRl
bnRQb2ludChzY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2aWV3cG9y
dFBvaW50KSk7CisgICAgaWYgKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29udGFpbnMoY29u
dGVudFBvaW50KSkgeworICAgICAgICBUUkFDRV9FVkVOVCgidHJ5U2Nyb2xsIEZhaWxlZCBub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbiIsIHRoaXMsIDApOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwgJiYgaGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpKSB7Cisg
ICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlTY3JvbGwgRmFpbGVkIHdoZWVsRXZlbnRIYW5kbGVycyIs
IHRoaXMsIDApOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZh
aWxlZDsKKyAgICB9CisKKyAgICBpZiAoIXNjcm9sbGFibGUoKSkgeworICAgICAgICBUUkFDRV9F
VkVOVCgidHJ5U2Nyb2xsIElnbm9yZWQgbm90IHNjcm9sbGFibGUiLCB0aGlzLCAwKTsKKyAgICAg
ICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworICAgIH0KKwor
ICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDsKK30KKwogY29u
c3QgSW50UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogewogICAgIC8vIEZv
cm0gdGhlIG1hdHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJzIG9mIHRo
ZSBsYXllcidzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCA2Y2I2ZGYwM2MyOWVhZTYwODdlMGY0
YTllZTk0MWMzMmI5OTUwODkyLi4wNGI1YjA1ZGM4NjNiNGJkZWM1ZDRiMTk2Y2NlNzZjOGNlYTg3
MmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJS
ZWdpb24uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJm
YWNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKQEAgLTcyLDYgKzczLDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKICAgICB2b2lkIHJlbW92
ZUFsbENoaWxkcmVuKCk7CiAKKyAgICAvLyBSZXR1cm5zIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4g
aWQgaWYgb25lIGV4aXN0cyBpbiB0aGUgc3VidHJlZSBzdGFydGluZworICAgIC8vIGZyb20gdGhp
cyBsYXllciAoaW5jbHVkaW5nIG1hc2sgYW5kIHJlcGxpY2EgbGF5ZXJzKS4KKyAgICBDQ0xheWVy
SW1wbCogZmluZExheWVySW5TdWJ0cmVlKGludCBsYXllcklkKTsKKwogICAgIHZvaWQgc2V0TWFz
a0xheWVyKFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKICAgICBDQ0xheWVySW1wbCogbWFza0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIApAQCAtMTk4LDYgKzIw
Myw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZWdpb24mIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsgfQogICAgIHZvaWQg
c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pIHsgbV9ub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IHJlZ2lvbjsgfQogCisgICAgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbFN0YXR1cyB0cnlTY3JvbGwoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQs
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUpIGNvbnN0OworCiAgICAgY29u
c3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUxh
eWVyUmVjdDsgfQogICAgIHZvaWQgc2V0VmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB2
aXNpYmxlTGF5ZXJSZWN0KSB7IG1fdmlzaWJsZUxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3Q7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNTc2ZmMyYjMxOTBhMmQ2
MzA5NTc1OTgxNzVjNDNlZWY0ZTc4OGMyNy4uODU0NTU5NjU4YWE5Y2QzY2Q1N2M3ZWY3ZjA5ZmVl
ZDc4ZjVhMzE5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC02MTEsMTUg
KzYxMSw1NiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y2xlYXJQZW5kaW5nVXBkYXRlKCkKICAg
ICBtX3VwZGF0ZUxpc3QuY2xlYXIoKTsKIH0KIAorc3RhdGljIExheWVyQ2hyb21pdW0qIGZpbmRM
YXllckJ5SWQoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGludCBpZCkKK3sKKyAgICBpZiAoIWxheWVy
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChsYXllci0+aWQoKSA9PSBpZCkKKyAgICAg
ICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hp
bGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBmb3VuZCA9IGZp
bmRMYXllckJ5SWQobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCksIGlkKTsKKyAgICAgICAgaWYg
KGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgTGF5ZXJDaHJvbWl1bSogZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKExh
eWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGxheWVyLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllcjsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5kRmlyc3RTY3JvbGxhYmxl
TGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAgICAgICBpZiAoZm91bmQpCisg
ICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IENDU2Nyb2xsQW5k
U2NhbGVTZXQmIGluZm8pCiB7Ci0gICAgLy8gRklYTUU6IHB1c2hpbmcgc2Nyb2xsIG9mZnNldHMg
dG8gbm9uLXJvb3QgbGF5ZXJzIG5vdCBpbXBsZW1lbnRlZAotICAgIGlmICghaW5mby5zY3JvbGxz
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIExheWVyQ2hyb21pdW0qIHJvb3RTY3JvbGxM
YXllciA9IGZpbmRGaXJzdFNjcm9sbGFibGVMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAg
SW50U2l6ZSByb290U2Nyb2xsRGVsdGE7CiAKLSAgICBBU1NFUlQoaW5mby5zY3JvbGxzLnNpemUo
KSA9PSAxKTsKLSAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gaW5mby5zY3JvbGxzWzBdLnNjcm9s
bERlbHRhOwotICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKHNjcm9sbERlbHRhLCBp
bmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZm8uc2Ny
b2xscy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGZpbmRM
YXllckJ5SWQobV9yb290TGF5ZXIuZ2V0KCksIGluZm8uc2Nyb2xsc1tpXS5sYXllcklkKTsKKyAg
ICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobGF5
ZXIgPT0gcm9vdFNjcm9sbExheWVyKQorICAgICAgICAgICAgcm9vdFNjcm9sbERlbHRhICs9IGlu
Zm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGF5
ZXItPnNjcm9sbEJ5KGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YSk7CisgICAgfQorICAgIGlm
ICghcm9vdFNjcm9sbERlbHRhLmlzWmVybygpIHx8IGluZm8ucGFnZVNjYWxlRGVsdGEgIT0gMSkK
KyAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUocm9vdFNjcm9sbERlbHRhLCBp
bmZvLnBhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0
ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGU3ZDNhODFjNDU3YWQ1OTA3YjkzNTgzYjk3NTkzNDhl
ZGU4NjI1OWQuLmNmNDYzMzNmNDIwYzYxOGE5ODE2NTc0Nzg4YmE4NDY4ZDcxNGJhNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xMDQsNyArMTA0LDggQEAg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdz
JiBzZXR0aW5ncywgQ0NMYXllclRyZWUKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1f
c291cmNlRnJhbWVOdW1iZXIoLTEpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCi0gICAgLCBtX3Nj
cm9sbExheWVySW1wbCgwKQorICAgICwgbV9yb290U2Nyb2xsTGF5ZXJJbXBsKDApCisgICAgLCBt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCgwKQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5n
cykKICAgICAsIG1fdmlzaWJsZSh0cnVlKQogICAgICwgbV9wYWdlU2NhbGUoMSkKQEAgLTE2Miwx
MCArMTYzLDEwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgbW9u
b3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRp
b24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0YXJ0VGltZSwg
ZG91YmxlIGR1cmF0aW9uKQogewotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYg
KCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9z
aXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXpl
IHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKICAg
ICBzY3JvbGxUb3RhbC5zY2FsZShtX3BhZ2VTY2FsZURlbHRhKTsKICAgICBmbG9hdCBzY2FsZVRv
dGFsID0gbV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhOwogICAgIEludFNpemUgc2NhbGVk
Q29udGVudFNpemUgPSBjb250ZW50U2l6ZSgpOwpAQCAtMzY0LDkgKzM2NSwyNiBAQCBJbnRTaXpl
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRTaXplKCkgY29uc3QKIHsKICAgICAvLyBUT0RP
KGFlbGlhcyk6IEhhcmRjb2RpbmcgdGhlIGZpcnN0IGNoaWxkIGhlcmUgaXMgd2VpcmQuIFRoaW5r
IG9mCiAgICAgLy8gYSBjbGVhbmVyIHdheSB0byBnZXQgdGhlIGNvbnRlbnRCb3VuZHMgb24gdGhl
IEltcGwgc2lkZS4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8IG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5jaGlsZHJlbigpLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1w
bCB8fCBtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOwotICAgIHJldHVybiBtX3Njcm9sbExheWVySW1wbC0+Y2hpbGRy
ZW4oKVswXS0+Y29udGVudEJvdW5kcygpOworICAgIHJldHVybiBtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGw6OkZy
YW1lRGF0YSYgZnJhbWUsIENDTGF5ZXJHZW9tZXRyeUxpc3QmIHZpc2libGVMYXllcnMpCit7Cisg
ICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDTGF5ZXJMaXN0LCBDQ1Jl
bmRlclN1cmZhY2UsIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVy
SXRlcmF0b3JUeXBlOworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJh
dG9yVHlwZTo6ZW5kKCZmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBmb3IgKEND
TGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmZnJhbWUu
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDQ0xh
eWVySW1wbCogbGF5ZXJJbXBsID0gKCppdCk7CisgICAgICAgIGlmICghbGF5ZXJJbXBsLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIHN0cnVjdCBMYXllckdlb21ldHJ5IGxheWVyR2VvbWV0cnkgPSB7CisgICAgICAg
ICAgICBsYXllckltcGwtPmlkKCksCisgICAgICAgICAgICBsYXllckltcGwtPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCksCisgICAgICAgICAgICBsYXllckltcGwtPnZpc2libGVMYXllclJlY3QoKSwK
KyAgICAgICAgfTsKKyAgICAgICAgdmlzaWJsZUxheWVycy5hcHBlbmQobGF5ZXJHZW9tZXRyeSk7
CisgICAgfQogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0RyYXcoRnJh
bWVEYXRhJiBmcmFtZSkKQEAgLTM3NSw2ICszOTMsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKIAogICAgIGZyYW1lLnJlbmRlclBh
c3Nlcy5jbGVhcigpOwogICAgIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsK
KyAgICBtX3Zpc2libGVMYXllcnMuY2xlYXIoKTsKIAogICAgIGlmICghcm9vdExheWVyKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM4Miw2ICs0MDEsOCBAQCBib29sIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKICAgICBpZiAoIWNhbGN1
bGF0ZVJlbmRlclBhc3NlcyhmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnJlbmRlclN1cmZhY2VM
YXllckxpc3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBjYWxjdWxhdGVWaXNpYmxl
TGF5ZXJzKGZyYW1lLCBtX3Zpc2libGVMYXllcnMpOworCiAgICAgLy8gSWYgd2UgcmV0dXJuIHRy
dWUsIHRoZW4gd2UgZXhwZWN0IGRyYXdMYXllcnMoKSB0byBiZSBjYWxsZWQgYmVmb3JlIHRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGFnYWluLgogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDU2LDcg
KzQ3Nyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4ZWxz
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZm
ZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Ny
b2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kUm9v
dFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTQ2NSw3ICs0ODYsNyBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZp
bmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJldHVybiBsYXllcjsK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFNjcm9sbExheWVyKGxheWVy
LT5jaGlsZHJlbigpW2ldLmdldCgpKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmlu
ZFJvb3RTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiAgICAgICAgIGlm
IChmb3VuZCkKICAgICAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CkBAIC00NzMsMTIgKzQ5
NCwzMiBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCog
bGF5ZXIpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIENvbnRlbnQgbGF5ZXJzIGNhbiBiZSBlaXRo
ZXIgZGlyZWN0bHkgc2Nyb2xsYWJsZSBvciBjb250YWluZWQgaW4gYW4gb3V0ZXIKKy8vIHNjcm9s
bGluZyBsYXllciB3aGljaCBhcHBsaWVzIHRoZSBzY3JvbGwgdHJhbnNmb3JtLiBHaXZlbiBhIGNv
bnRlbnQgbGF5ZXIsCisvLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgc2Ny
b2xsIGxheWVyIGlmIGFueS4KK3N0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyRm9y
Q29udGVudExheWVyKENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgaWYgKCFsYXllcklt
cGwpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xsYWJsZSgp
KQorICAgICAgICByZXR1cm4gbGF5ZXJJbXBsOworCisgICAgaWYgKGxheWVySW1wbC0+ZHJhd3ND
b250ZW50KCkgJiYgbGF5ZXJJbXBsLT5wYXJlbnQoKSAmJiBsYXllckltcGwtPnBhcmVudCgpLT5z
Y3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllckltcGwtPnBhcmVudCgpOworCisgICAg
cmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKFBh
c3NPd25QdHI8Q0NMYXllckltcGw+IGxheWVyKQogewogICAgIG1fcm9vdExheWVySW1wbCA9IGxh
eWVyOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbCA9IGZpbmRSb290U2Nyb2xsTGF5ZXIobV9y
b290TGF5ZXJJbXBsLmdldCgpKTsKIAotICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHRoaXMgb25s
eSBmaW5kcyB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBsYXllci4KLSAgICBtX3Njcm9sbExheWVySW1w
bCA9IGZpbmRTY3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOworICAgIGlmIChtX2N1
cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkgeworICAgICAgICBpZiAoIW1fcm9vdExheWVySW1w
bCB8fCAhbV9yb290TGF5ZXJJbXBsLT5maW5kTGF5ZXJJblN1YnRyZWUobV9jdXJyZW50bHlTY3Jv
bGxpbmdMYXllckltcGwtPmlkKCkpKQorICAgICAgICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdM
YXllckltcGwgPSAwOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRW
aXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTUyNyw2ICs1NjgsMzQgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQog
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwogfQogCitzdGF0aWMg
dm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKENDTGF5ZXJJbXBsKiBsYXllcklt
cGwsIGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7CisgICAgICAg
IC8vIFdlIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2Nh
bGUgc3BhY2UuCisgICAgICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGxheWVySW1wbC0+c2Ny
b2xsRGVsdGEoKTsKKyAgICAgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsK
KyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgfQor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCisgICAgICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UobGF5ZXJJbXBs
LT5jaGlsZHJlbigpW2ldLmdldCgpLCBwYWdlU2NhbGVDaGFuZ2UpOworfQorCitzdGF0aWMgdm9p
ZCBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMoQ0NMYXllckltcGwqIGxheWVySW1w
bCwgZmxvYXQgcGFnZVNjYWxlRGVsdGEpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgbGF5
ZXJJbXBsLT5zZXRQYWdlU2NhbGVEZWx0YShwYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAg
ICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXJzKGxheWVySW1wbC0+Y2hpbGRyZW4o
KVtpXS5nZXQoKSwgcGFnZVNjYWxlRGVsdGEpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IG1p
blBhZ2VTY2FsZSwgZmxvYXQgbWF4UGFnZVNjYWxlKQogewogICAgIGlmICghcGFnZVNjYWxlKQpA
QCAtNTQxLDI1ICs2MTAsMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2Nh
bGVGYWN0b3JBbmRMaW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KICAgICBmbG9hdCBw
YWdlU2NhbGVDaGFuZ2UgPSBwYWdlU2NhbGUgLyBtX3BhZ2VTY2FsZTsKICAgICBtX3BhZ2VTY2Fs
ZSA9IHBhZ2VTY2FsZTsKIAotICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UocGFn
ZVNjYWxlQ2hhbmdlKTsKKyAgICBpZiAocGFnZVNjYWxlQ2hhbmdlICE9IDEpCisgICAgICAgIGFk
anVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBwYWdl
U2NhbGVDaGFuZ2UpOwogCiAgICAgLy8gQ2xhbXAgZGVsdGEgdG8gbGltaXRzIGFuZCByZWZyZXNo
IGRpc3BsYXkgbWF0cml4LgogICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlRGVsdGEg
LyBtX3NlbnRQYWdlU2NhbGVEZWx0YSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSAxOwot
ICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCk7Ci19Ci0KLXZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdl
U2NhbGVDaGFuZ2UpCi17Ci0gICAgaWYgKHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xs
IGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2UuCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7
Ci0gICAgICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpOwotICAgICAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwot
ICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwot
ICAgIH0KKyAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMobV9yb290U2Nyb2xs
TGF5ZXJJbXBsLCBtX3BhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCBkZWx0YSkKQEAgLTU3NywyMiArNjM0LDE2IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEp
CiAgICAgbV9wYWdlU2NhbGVEZWx0YSA9IGRlbHRhOwogCiAgICAgdXBkYXRlTWF4U2Nyb2xsUG9z
aXRpb24oKTsKLSAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwotfQotCi12
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVy
KCkKLXsKLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZURlbHRhKTsKKyAgICBhcHBseVBhZ2VT
Y2FsZURlbHRhVG9TY3JvbGxMYXllcnMobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2Fs
ZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQ
b3NpdGlvbigpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCAhbV9zY3JvbGxMYXll
ckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBs
IHx8ICFtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBGbG9hdFNpemUgdmlld0JvdW5kcyA9IG1fdmlld3BvcnRTaXplOwotICAg
IGlmIChDQ0xheWVySW1wbCogY2xpcExheWVyID0gbV9zY3JvbGxMYXllckltcGwtPnBhcmVudCgp
KSB7CisgICAgaWYgKENDTGF5ZXJJbXBsKiBjbGlwTGF5ZXIgPSBtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPnBhcmVudCgpKSB7CiAgICAgICAgIGlmIChjbGlwTGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkK
ICAgICAgICAgICAgIHZpZXdCb3VuZHMgPSBjbGlwTGF5ZXItPmJvdW5kcygpOwogICAgIH0KQEAg
LTYwMyw5ICs2NTQsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9s
bFBvc2l0aW9uKCkKICAgICAvLyBoYXZpbmcgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgYnV0IG5vIGhv
cml6b250YWwgb3ZlcmZsb3cuCiAgICAgbWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsK
IAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwp
OwotCi0gICAgLy8gVE9ETyhhZWxpYXMpOiBBbHNvIHVwZGF0ZSBzdWJsYXllcnMuCisgICAgbV9y
b290U2Nyb2xsTGF5ZXJJbXBsLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwogfQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKQEAgLTYxNSw0NCAr
NjY0LDg0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQogCiBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNj
cm9sbEJlZ2luKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsSW5wdXRUeXBlIHR5cGUpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHNj
cm9sbGFibGUgc3VibGF5ZXJzLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9s
bEJlZ2luIElnbm9yZWQgbm8gc2Nyb2xsYWJsZSIsIHRoaXMsIDApOworICAgIG1fY3VycmVudGx5
U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKKworCisgICAgaWYgKCFtX3Jvb3RMYXllckltcGwpCiAg
ICAgICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOwotICAgIH0KIAotICAgIGlmIChtX3Njcm9sbExh
eWVySW1wbC0+c2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZF
TlQoInNjcm9sbEJlZ2luIEZhaWxlZCBzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQiLCB0aGlzLCAw
KTsKLSAgICAgICAgcmV0dXJuIFNjcm9sbEZhaWxlZDsKKyAgICAvLyBGaXJzdCBmaW5kIG91dCB3
aGljaCBsYXllciB3YXMgaGl0IGJ5IHdhbGtpbmcgdGhlIHNhdmVkIGxpc3Qgb2YgdmlzaWJsZSBs
YXllcnMuCisgICAgQ0NMYXllckltcGwqIGxheWVySW1wbCA9IDA7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3Zpc2libGVMYXllcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnkgPSBtX3Zpc2libGVMYXllcnNbaV07CisgICAgICAgIEludFBvaW50
IGNvbnRlbnRQb2ludChnZW9tZXRyeS5zY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNlKCkubWFw
UG9pbnQodmlld3BvcnRQb2ludCkpOworICAgICAgICBpZiAoZ2VvbWV0cnkudmlzaWJsZUxheWVy
UmVjdC5jb250YWlucyhjb250ZW50UG9pbnQpKSB7CisgICAgICAgICAgICBsYXllckltcGwgPSBt
X3Jvb3RMYXllckltcGwtPmZpbmRMYXllckluU3VidHJlZShnZW9tZXRyeS5sYXllcklkKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCi0gICAgSW50UG9pbnQgc2Nyb2xs
TGF5ZXJDb250ZW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkuaW52ZXJzZSgpLm1hcFBvaW50KHZpZXdwb3J0UG9pbnQpKTsKLSAgICBpZiAobV9zY3JvbGxM
YXllckltcGwtPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29udGFpbnMoc2Nyb2xsTGF5ZXJD
b250ZW50UG9pbnQpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBGYWlsZWQg
bm9uRmFzdFNjcm9sbGFibGVSZWdpb24iLCB0aGlzLCAwKTsKLSAgICAgICAgcmV0dXJuIFNjcm9s
bEZhaWxlZDsKLSAgICB9CisgICAgLy8gV2FsayB1cCB0aGUgaGllcmFyY2h5IGFuZCBsb29rIGZv
ciBhIHNjcm9sbGFibGUgbGF5ZXIuCisgICAgQ0NMYXllckltcGwqIHBvdGVudGlhbGx5U2Nyb2xs
aW5nTGF5ZXJJbXBsID0gMDsKKyAgICBmb3IgKDsgbGF5ZXJJbXBsOyBsYXllckltcGwgPSBsYXll
ckltcGwtPnBhcmVudCgpKSB7CisgICAgICAgIC8vIFRoZSBjb250ZW50IGxheWVyIGNhbiBhbHNv
IGJsb2NrIGF0dGVtcHRzIHRvIHNjcm9sbCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKyAgICAg
ICAgaWYgKGxheWVySW1wbC0+dHJ5U2Nyb2xsKHZpZXdwb3J0UG9pbnQsIHR5cGUpID09IFNjcm9s
bEZhaWxlZCkKKyAgICAgICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7CisKKyAgICAgICAgQ0NM
YXllckltcGwqIHNjcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllckZvckNvbnRlbnRMYXll
cihsYXllckltcGwpOworICAgICAgICBpZiAoIXNjcm9sbExheWVySW1wbCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIFNjcm9sbFN0YXR1cyBzdGF0dXMgPSBzY3JvbGxMYXllcklt
cGwtPnRyeVNjcm9sbCh2aWV3cG9ydFBvaW50LCB0eXBlKTsKKworICAgICAgICAvLyBJZiBhbnkg
bGF5ZXIgd2FudHMgdG8gZGl2ZXJ0IHRoZSBzY3JvbGwgZXZlbnQgdG8gdGhlIG1haW4gdGhyZWFk
LCBhYm9ydC4KKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTY3JvbGxGYWlsZWQpCisgICAgICAgICAg
ICByZXR1cm4gU2Nyb2xsRmFpbGVkOwogCi0gICAgaWYgKHR5cGUgPT0gQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OldoZWVsICYmIG1fc2Nyb2xsTGF5ZXJJbXBsLT5oYXZlV2hlZWxFdmVudEhhbmRsZXJz
KCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJlZ2luIEZhaWxlZCB3aGVlbEV2ZW50
SGFuZGxlcnMiLCB0aGlzLCAwKTsKLSAgICAgICAgcmV0dXJuIFNjcm9sbEZhaWxlZDsKKyAgICAg
ICAgaWYgKHN0YXR1cyA9PSBTY3JvbGxTdGFydGVkICYmICFwb3RlbnRpYWxseVNjcm9sbGluZ0xh
eWVySW1wbCkKKyAgICAgICAgICAgIHBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gc2Ny
b2xsTGF5ZXJJbXBsOwogICAgIH0KIAotICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIGlm
IChwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCkgeworICAgICAgICBtX2N1cnJlbnRseVNj
cm9sbGluZ0xheWVySW1wbCA9IHBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsOworICAgICAg
ICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAgICB9CisgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7
CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdGEpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNj
cm9sbEJ5IiwgdGhpcywgMCk7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAo
IW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwotICAgIG1fY2xpZW50LT5z
ZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJh
d09uSW1wbFRocmVhZCgpOworICAgIEZsb2F0U2l6ZSBwZW5kaW5nRGVsdGEoc2Nyb2xsRGVsdGEp
OworICAgIHBlbmRpbmdEZWx0YS5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisKKyAgICBm
b3IgKENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1w
bDsgbGF5ZXJJbXBsICYmICFwZW5kaW5nRGVsdGEuaXNaZXJvKCk7IGxheWVySW1wbCA9IGxheWVy
SW1wbC0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKCFsYXllckltcGwtPnNjcm9sbGFibGUoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBGbG9hdFNpemUgcHJldmlvdXNEZWx0YShs
YXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHBl
bmRpbmdEZWx0YSk7CisgICAgICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIHNjcm9sbCBkZWx0YSB0
byB6ZXJvIGlmIHRoZSBsYXllciB3YXMgYWJsZSB0byBtb3ZlIGFsb25nIHRoZSByZXF1ZXN0ZWQK
KyAgICAgICAgLy8gYXhpcy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Ny
b2xsIGV4YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAgICAgICAvLyBzY3Jv
bGwgYXJlYSByZWdhcmRsZXNzIG9mIHRoZSBzY3JvbGwgc3RlcC4gRm9yIGRpYWdvbmFsIHNjcm9s
bHMgdGhpcyBhbHNvIGF2b2lkcyBhcHBseWluZworICAgICAgICAvLyB0aGUgc2Nyb2xsIG9uIG9u
ZSBheGlzIHRvIG11bHRpcGxlIGxheWVycy4KKyAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEud2lk
dGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAgICAgICAgIHBl
bmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEuaGVpZ2h0
KCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmhlaWdodCgpKQorICAgICAgICAgICAgcGVu
ZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICB9CisKKyAgICBpZiAocGVuZGluZ0RlbHRhICE9
IHNjcm9sbERlbHRhKSB7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRo
cmVhZCgpOworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsK
KyAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKCkKIHsKKyAg
ICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlQmVnaW4oKQpAQCAtNjY2LDcgKzc1NSw3IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0IG1hZ25pZnlEZWx0
YSwKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJl
VXBkYXRlIiwgdGhpcywgMCk7CiAKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlm
ICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9w
cmV2aW91c1BpbmNoQW5jaG9yID09IEludFBvaW50Ojp6ZXJvKCkpCkBAIC02ODEsNyArNzcwLDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQgbWFn
bmlmeURlbHRhLAogCiAgICAgbV9wcmV2aW91c1BpbmNoQW5jaG9yID0gYW5jaG9yOwogCi0gICAg
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHJvdW5kZWRJbnRTaXplKG1vdmUpKTsKKyAgICBt
X3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHJvdW5kZWRJbnRTaXplKG1vdmUpKTsKICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKICAgICBtX2NsaWVudC0+
c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KQEAgLTcwMyw3ICs3OTIsNyBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVEb3VibGVUYXBab29tRGVsdGFzKENDU2Nyb2xs
QW5kU2NhbGVTZXQqIHNjcm9sbAogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQ
aW5jaFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbykKIHsKLSAgICBp
ZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBPbmx5IHNlbmQgZmFrZSBzY3JvbGwvem9vbSBkZWx0
YXMgaWYgd2UncmUgcGluY2ggem9vbWluZyBvdXQgYnkgYQpAQCAtNzE1LDcgKzgwNCw3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFu
ZFNjYWxlU2V0KiBzY3JvbGxJbmZvCiAKICAgICAvLyBDb21wdXRlIHdoZXJlIHRoZSBzY3JvbGwg
b2Zmc2V0L3BhZ2Ugc2NhbGUgd291bGQgYmUgaWYgZnVsbHkgcGluY2gtem9vbWVkCiAgICAgLy8g
b3V0IGZyb20gdGhlIGFuY2hvciBwb2ludC4KLSAgICBJbnRTaXplIHNjcm9sbEJlZ2luID0gZmxv
b3JlZEludFNpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxCZWdpbiA9IGZs
b29yZWRJbnRTaXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1f
cm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAgICAgc2Nyb2xsQmVnaW4uc2Nh
bGUobV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVCZWdpbiA9IG1fcGFnZVNjYWxl
ICogbV9wYWdlU2NhbGVEZWx0YTsKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0YVRvU2VuZCA9IG1f
bWluUGFnZVNjYWxlIC8gbV9wYWdlU2NhbGU7CkBAIC03MzQsMjEgKzgyMyw0MSBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2Fs
ZVNldCogc2Nyb2xsSW5mbwogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxB
bmRTY2FsZVNldChDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBjb25zdCBJbnRTaXpl
JiBzY3JvbGxPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSkKIHsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5
ZXJJbXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47
CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwot
ICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xs
LnNjcm9sbERlbHRhID0gc2Nyb2xsT2Zmc2V0IC0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxQb3NpdGlvbigpKTsKKyAgICBzY3JvbGwubGF5ZXJJZCA9IG1fcm9vdFNjcm9sbExheWVy
SW1wbC0+aWQoKTsKKyAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxPZmZzZXQgLSB0b1Np
emUobV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICBzY3JvbGxJ
bmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRT
ZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKKyAgICBtX3Jvb3RTY3JvbGxMYXll
ckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOwogICAgIG1fc2Vu
dFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSBwYWdlU2NhbGUg
LyBtX3BhZ2VTY2FsZTsKIH0KIAorc3RhdGljIHZvaWQgY29sbGVjdFNjcm9sbERlbHRhcyhDQ1Nj
cm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQorewor
ICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxheWVySW1w
bC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRh
ID0gZmxvb3JlZEludFNpemUobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgc2Ny
b2xsLmxheWVySWQgPSBsYXllckltcGwtPmlkKCk7CisgICAgICAgIHNjcm9sbC5zY3JvbGxEZWx0
YSA9IHNjcm9sbERlbHRhOworICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3Jv
bGwpOworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mbywg
bGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKK30KKwogUGFzc093blB0cjxDQ1Njcm9s
bEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkK
IHsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0UHRy
KG5ldyBDQ1Njcm9sbEFuZFNjYWxlU2V0KCkpOwotICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Nyb2xs
TGF5ZXJJbXBsICYmICghbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkg
fHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAxLjBmKTsKKyAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNj
cm9sbEluZm8uZ2V0KCksIG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisKKyAgICBib29sIGRpZE1v
dmUgPSBzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDE7
CiAgICAgaWYgKCFkaWRNb3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxl
QW5pbWF0aW9uKSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+
cGFnZVNjYWxlRGVsdGEgPSAxOwogICAgICAgICBpZiAobV9waW5jaEdlc3R1cmVBY3RpdmUpCkBA
IC03NjAsMTQgKzg2OSw2IEBAIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXll
clRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiAKICAgICBtX3NlbnRQYWdlU2Nh
bGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gbV9wYWdlU2NhbGVEZWx0YTsK
IAotICAgIC8vIEZJWE1FOiB0cmFjayBzY3JvbGxzIGZyb20gbGF5ZXJzIG90aGVyIHRoYW4gdGhl
IHJvb3QKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xs
OwotICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Ny
b2xsLnNjcm9sbERlbHRhID0gZmxvb3JlZEludFNpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9s
bERlbHRhKCkpOwotICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7Ci0KLSAg
ICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0
YSk7Ci0KICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiB9CiAKQEAgLTc4NSwxMiAr
ODg2LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZShkb3Vi
bGUgbW9ub3RvbmljVGltZSkKICAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Ny
b2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1f
cm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fcm9vdFNjcm9sbExheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAKICAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2Fs
ZUFuaW1hdGlvbi0+cGFnZVNjYWxlQXRUaW1lKG1vbm90b25pY1RpbWUpIC8gbV9wYWdlU2NhbGUp
OwogICAgIEludFNpemUgbmV4dFNjcm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxP
ZmZzZXRBdFRpbWUobW9ub3RvbmljVGltZSk7CiAgICAgbmV4dFNjcm9sbC5zY2FsZSgxIC8gbV9w
YWdlU2NhbGVEZWx0YSk7Ci0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3Jv
bGwgLSBzY3JvbGxUb3RhbCk7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShu
ZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOwogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09u
SW1wbFRocmVhZCgpOwogCiAgICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlv
bkNvbXBsZXRlQXRUaW1lKG1vbm90b25pY1RpbWUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKaW5kZXggYTg1OWZlYzVjMjAzZGJkMmI0NmIzY2VjY2YyMjFmZDY5MWNiM2Q2
Ni4uZTIxYzIxNTgwZjJkZjhiYmRjMjRlZGJjNjBiY2MxYzQ1ZWQ4Y2UzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFJvb3RMYXllcihQYXNzT3duUHRyPENDTGF5ZXJJbXBsPik7CiAgICAgUGFzc093
blB0cjxDQ0xheWVySW1wbD4gcmVsZWFzZVJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVy
SW1wbC5yZWxlYXNlKCk7IH0KIAotICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJbXBsOyB9CisgICAgQ0NMYXllckltcGwqIHJvb3RTY3Jv
bGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdFNjcm9sbExheWVySW1wbDsgfQogCiAgICAg
Ym9vbCB2aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpOwpAQCAtMTYyLDggKzE2Miw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYWtl
U2Nyb2xsQW5kU2NhbGVTZXQoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUpOwogCiAgICAgdm9pZCBzZXRQ
YWdlU2NhbGVEZWx0YShmbG9hdCk7Ci0gICAgdm9pZCBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3Jv
bGxMYXllcigpOwotICAgIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9h
dCk7CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwogICAgIHZvaWQgdHJhY2tE
YW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIC8vIFJldHVybnMgZmFsc2Ug
aWYgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgZGlzcGxheWVkLgpAQCAtMTcyLDkgKzE3MCwxOCBA
QCBwcml2YXRlOgogICAgIEludFNpemUgY29udGVudFNpemUoKSBjb25zdDsKICAgICB2b2lkIHNl
bmREaWRMb3NlQ29udGV4dFJlY3Vyc2l2ZShDQ0xheWVySW1wbCopOwogCisgICAgc3RydWN0IExh
eWVyR2VvbWV0cnkgeworICAgICAgICBpbnQgbGF5ZXJJZDsKKyAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm07CisgICAgICAgIEludFJlY3QgdmlzaWJsZUxh
eWVyUmVjdDsKKyAgICB9OworICAgIHR5cGVkZWYgVmVjdG9yPExheWVyR2VvbWV0cnk+IENDTGF5
ZXJHZW9tZXRyeUxpc3Q7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJsZUxheWVycyhD
Q0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEmLCBDQ0xheWVyR2VvbWV0cnlMaXN0Jik7CisK
ICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7Ci0gICAgQ0NMYXllckltcGwqIG1f
c2Nyb2xsTGF5ZXJJbXBsOworICAgIENDTGF5ZXJJbXBsKiBtX3Jvb3RTY3JvbGxMYXllckltcGw7
CisgICAgQ0NMYXllckltcGwqIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsOwogICAgIEND
U2V0dGluZ3MgbV9zZXR0aW5nczsKICAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwogICAgIGJv
b2wgbV92aXNpYmxlOwpAQCAtMTk3LDYgKzIwNCwxMCBAQCBwcml2YXRlOgogCiAgICAgQ0NMYXll
clNvcnRlciBtX2xheWVyU29ydGVyOwogCisgICAgLy8gTGlzdCBvZiB2aXNpYmxlIGxheWVycyBp
biB0aGUgbW9zdCByZWNlbnQgZnJhbWUgaW4gZnJvbnQtdG8tYmFjayBvcmRlci4KKyAgICAvLyBV
c2VkIGZvciBpbnB1dCBldmVudCBoaXQgdGVzdGluZy4KKyAgICBDQ0xheWVyR2VvbWV0cnlMaXN0
IG1fdmlzaWJsZUxheWVyczsKKwogICAgIEZsb2F0UmVjdCBtX3Jvb3REYW1hZ2VSZWN0OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBs
LmNwcAppbmRleCA0ZjY0ZDU0NzFlMzk2NjUwZjdjYTc1ZTllMTYyNWM2NmQ3MmYxMWI2Li45ZDYx
M2EzYWNhOTkxYzk5NWRlMzk3NDg3MjRjNzFmY2JhOTQyZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcApAQCAtNzIsNCArNzIs
OCBAQCB2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250
ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcAogICAgIG1fY29udGVudENsaWVudC0+cGFpbnRD
b250ZW50cyhjYW52YXMsIFdlYlJlY3QoY2xpcCkpOwogfQogCit2b2lkIFdlYkNvbnRlbnRMYXll
ckltcGw6OmRpZFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikKK3sKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb250ZW50TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmgKaW5kZXggNTFmMzQ0ZjdjYWYxMjcxMTI2YWM3YjQyNjhlZDU0NjEyMTQy
MTlkOC4uMWJhODg0YzliMzU3ZWJmMzg3ZWRmZjM0OWY2NTZlYWZhNjZhZTFlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaApAQCAtNDQs
NiArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSBpbXBs
ZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKIAogICAgIFdlYkNvbnRl
bnRMYXllckNsaWVudCogbV9jb250ZW50Q2xpZW50OwogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAK
aW5kZXggOGE5ZjM1ZGM4YTdiODljMGM5NGJkNzUzN2M2ODQ2NGZhNzhhNmJiOC4uYjhhZmIyZTU1
MjJiZDAwOWI4YjA4MDgyYTNlMTUyOWZlZGI4ZjMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcApAQCAtMTYyLDQgKzE2MiwyOCBAQCBU
RVNUKENDTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5TGF5ZXJDaGFuZ2VzQXJlVHJhY2tlZFByb3Blcmx5
KQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVUJUUkVFX0RJRF9OT1RfQ0hBTkdFKHJvb3QtPnNl
dE1heFNjcm9sbFBvc2l0aW9uKGFyYml0cmFyeUludFNpemUpKTsKIH0KIAorVEVTVChDQ0xheWVy
SW1wbFRlc3QsIHZlcmlmeVN1YnRyZWVTZWFyY2gpCit7CisgICAgLy8gVGhlIGNvbnN0cnVjdG9y
IG9uIHRoaXMgd2lsbCBmYWtlIHRoYXQgd2UgYXJlIG9uIHRoZSBjb3JyZWN0IHRocmVhZC4KKyAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2V0SW1wbFRocmVhZDsKKworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBPd25Q
dHI8Q0NMYXllckltcGw+IG1hc2tMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByZXBsaWNhTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDUp
OworCisgICAgZ3JhbmRDaGlsZC0+c2V0UmVwbGljYUxheWVyKHJlcGxpY2FMYXllci5yZWxlYXNl
KCkpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAgY2hp
bGQtPnNldE1hc2tMYXllcihtYXNrTGF5ZXIucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGls
ZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgRVhQRUNUX0VRKDEsIHJvb3QtPmZpbmRMYXllcklu
U3VidHJlZSgxKS0+aWQoKSk7CisgICAgRVhQRUNUX0VRKDIsIHJvb3QtPmZpbmRMYXllckluU3Vi
dHJlZSgyKS0+aWQoKSk7CisgICAgRVhQRUNUX0VRKDMsIHJvb3QtPmZpbmRMYXllckluU3VidHJl
ZSgzKS0+aWQoKSk7CisgICAgRVhQRUNUX0VRKDQsIHJvb3QtPmZpbmRMYXllckluU3VidHJlZSg0
KS0+aWQoKSk7CisgICAgRVhQRUNUX0VRKDUsIHJvb3QtPmZpbmRMYXllckluU3VidHJlZSg1KS0+
aWQoKSk7CisgICAgRVhQRUNUX0VRKDAsIHJvb3QtPmZpbmRMYXllckluU3VidHJlZSg2KSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDcwMDljOGMzZTkzY2E2Y2Mw
MmQ0NTUyNTdlZjEzMDljZWRmZjY1YmUuLjBjYmMyZjNiNTg3ZDk5ODU1NmEwNmEzMjAxMDczYjhk
NDdmOWU2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC05NSw2ICs5NSwyNSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CiAgICAgfQog
CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllckltcGw+IGNyZWF0ZVNjcm9sbGFibGVMYXll
cihpbnQgaWQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBzaXpl
KQorICAgIHsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBsYXllciA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoaWQpOworICAgICAgICBsYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAg
ICAgbGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgbGF5ZXItPnNldFBvc2l0
aW9uKHBvc2l0aW9uKTsKKyAgICAgICAgbGF5ZXItPnNldEJvdW5kcyhzaXplKTsKKyAgICAgICAg
bGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6
ZS5oZWlnaHQoKSAqIDIpKTsKKyAgICAgICAgcmV0dXJuIGxheWVyLnJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICB2b2lkIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCkKKyAgICB7
CisgICAgICAgIG1faG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNyZWF0ZUNvbnRl
eHQoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAg
ICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICB9CisKIHByb3RlY3RlZDoK
ICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVDb250ZXh0KCkKICAgICB7
CkBAIC0xNzgsMTAgKzE5NywxMiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNj
cm9sbFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJhdykKIHsKICAgICB7CiAgICAgICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgICAgIHJvb3Qt
PnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgICAgICBy
b290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlv
bihJbnRQb2ludCgwLCAwKSk7CiAgICAgICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKElu
dFNpemUoMTAwLCAxMDApKTsKICAgICAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3Qu
cmVsZWFzZSgpKTsKKyAgICAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUo
KTsKICAgICB9CiAKICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGFydGVkKTsKQEAgLTE5NSwxMCArMjE2LDEyIEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgd2hlZWxFdmVudEhhbmRsZXJzKQogewogICAgIHsKICAgICAgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICAg
ICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAg
ICAgICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgICAgIHJvb3QtPnNldFNjcm9s
bFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsKICAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9z
aXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5
ZXIocm9vdC5yZWxlYXNlKCkpOworICAgICAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERy
YXdGcmFtZSgpOwogICAgIH0KICAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJv
b3RMYXllcigpOwogCkBAIC0yMTMsMTEgKzIzNiwxNCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHdoZWVsRXZlbnRIYW5kbGVycykKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKQogewogICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxh
eWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsYWJs
ZSh0cnVlKTsKICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAg
ICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIHJv
b3QtPnNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZCh0cnVlKTsKICAgICBtX2hvc3RJbXBsLT5z
ZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CisKICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOwogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKIH0KQEAgLTIyNSwxMSArMjUxLDE0
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2hvdWxkU2Nyb2xsT25NYWluVGhy
ZWFkKQogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbkJhc2ljKQogewogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAs
IDEwMCwgMTAwKSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICByb290LT5z
ZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAgICAgcm9vdC0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNldE5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uKEludFJlY3QoMCwgMCwgNTAsIDUwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9v
dExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERy
YXdGcmFtZSgpOworCiAgICAgLy8gQWxsIHNjcm9sbCB0eXBlcyBpbnNpZGUgdGhlIG5vbi1mYXN0
IHNjcm9sbGFibGUgcmVnaW9uIHNob3VsZCBmYWlsLgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBs
LT5zY3JvbGxCZWdpbihJbnRQb2ludCgyNSwgMjUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hl
ZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKICAgICBFWFBFQ1RfRVEo
bV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKQEAg
LTI0NSwxOCArMjc0LDE1IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFz
dFNjcm9sbGFibGVSZWdpb25CYXNpYykKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbldpdGhPZmZzZXQpCiB7Ci0gICAgbV9ob3N0SW1wbC0+
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY3JlYXRlQ29udGV4dCgpKTsKLQogICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0
VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgcm9vdC0+c2V0
U2Nyb2xsYWJsZSh0cnVlKTsKICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgw
LCAwKSk7CiAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkp
OwogICAgIHJvb3QtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKEludFJlY3QoMCwgMCwgNTAs
IDUwKSk7CiAgICAgcm9vdC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgtMjUsIDApKTsKICAgICBt
X2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwotICAgIENDTGF5ZXJUcmVl
SG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKLSAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5w
cmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7
IC8vIFVwZGF0ZSBkcmF3IHRyYW5zZm9ybXMgc28gd2UgY2FuIGNvcnJlY3RseSBtYXAgcG9pbnRz
IGludG8gbGF5ZXIgc3BhY2UuCisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJh
bWUoKTsKIAogICAgIC8vIFRoaXMgcG9pbnQgd291bGQgZmFsbCBpbnRvIHRoZSBub24tZmFzdCBz
Y3JvbGxhYmxlIHJlZ2lvbiBleGNlcHQgdGhhdCB3ZSd2ZSBtb3ZlZCB0aGUgbGF5ZXIgZG93biBi
eSAyNSBwaXhlbHMuCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDQwLCAxMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGFydGVkKTsKQEAgLTI3MSw4ICsyOTcsOSBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHBpbmNoR2VzdHVyZSkKIHsKICAgICBzZXR1cFNjcm9sbEFuZENv
bnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3
cG9ydFNpemUoSW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFu
ZERyYXdGcmFtZSgpOwogCi0gICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1w
bC0+c2Nyb2xsTGF5ZXIoKTsKKyAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJ
bXBsLT5yb290U2Nyb2xsTGF5ZXIoKTsKICAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOwogCiAgICAg
Y29uc3QgZmxvYXQgbWluUGFnZVNjYWxlID0gMC41LCBtYXhQYWdlU2NhbGUgPSA0OwpAQCAtMzUx
LDggKzM3OCw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFnZVNjYWxlQW5p
bWF0aW9uKQogewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAs
IDEwMCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkp
OworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKLSAgICBDQ0xh
eWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5zY3JvbGxMYXllcigpOworICAgIEND
TGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnJvb3RTY3JvbGxMYXllcigpOwog
ICAgIEFTU0VSVChzY3JvbGxMYXllcik7CiAKICAgICBjb25zdCBmbG9hdCBtaW5QYWdlU2NhbGUg
PSAwLjUsIG1heFBhZ2VTY2FsZSA9IDQ7CkBAIC01NTksNiArNTg3LDI2OSBAQCBURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1doZW5BbmltYXRpb25Vc2Vz
Q2hlY2tlcmJvYXJkKQogICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogfQogCitU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RJZ25vcmVkKQoreworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAg
cm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpOworCisgICAgLy8gU2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSBsYXllciBpcyBu
b3Qgc2Nyb2xsYWJsZS4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVk
cmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxOb25Db21wb3NpdGVkUm9vdCkKK3sKKyAg
ICAvLyBUZXN0IHRoZSBjb25maWd1cmF0aW9uIHdoZXJlIGEgbm9uLWNvbXBvc2l0ZWQgcm9vdCBs
YXllciBpcyBlbWJlZGRlZCBpbiBhCisgICAgLy8gc2Nyb2xsYWJsZSBvdXRlciBsYXllci4KKyAg
ICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IGNvbnRlbnRMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgY29udGVudExheWVy
LT5zZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oSW50UG9p
bnQoNSwgNSkpOworICAgIGNvbnRlbnRMYXllci0+c2V0Qm91bmRzKHN1cmZhY2VTaXplKTsKKyAg
ICBjb250ZW50TGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZShzdXJmYWNlU2l6ZS53aWR0
aCgpICogMiwgc3VyZmFjZVNpemUuaGVpZ2h0KCkgKiAyKSk7CisKKyAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHNjcm9sbExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBzY3JvbGxM
YXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBzY3JvbGxMYXllci0+YWRkQ2hpbGQoY29u
dGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoc2Ny
b2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3Vy
ZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisK
KyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxT
dGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CisgICAg
bV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0UmVk
cmF3KTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRBbmRSZWRyYXcp
Cit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3Jv
bGxCeShJbnRTaXplKDAsIDEwKSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAg
RVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJl
cXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9s
bE1pc3Nlc0NoaWxkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJv
b3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2Uo
KSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8gU2Nyb2xsIGV2
ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgaW5wdXQgY29vcmRpbmF0ZSBpcyBvdXRzaWRlIHRo
ZSBsYXllciBib3VuZGFyaWVzLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdp
bihJbnRQb2ludCgxNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1
ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKwor
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNrZmFjaW5nQ2hp
bGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUp
LCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VT
aXplKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICBtYXRyaXgucm90
YXRlM2QoMTgwLCAwLCAwKTsKKyAgICBjaGlsZC0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAg
Y2hpbGQtPnNldERvdWJsZVNpZGVkKGZhbHNlKTsKKworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxk
LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgp
KTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8g
U2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgaGl0IGxheWVyIGlzIG5vdCBmYWNp
bmcgdGhlIHZpZXdlci4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVk
cmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCbG9ja2VkQnlDb250ZW50TGF5ZXIpCit7
CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1w
bD4gY29udGVudExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwg
NSksIHN1cmZhY2VTaXplKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFNob3VsZFNjcm9sbE9uTWFp
blRocmVhZCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOwor
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IGNyZWF0ZVNjcm9sbGFibGVM
YXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgc2Nyb2xsTGF5ZXIt
PmFkZENoaWxkKGNvbnRlbnRMYXllci5yZWxlYXNlKCkpOworCisgICAgbV9ob3N0SW1wbC0+c2V0
Um9vdExheWVyKHNjcm9sbExheWVyLnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmll
d3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERy
YXdGcmFtZSgpOworCisgICAgLy8gU2Nyb2xsaW5nIGZhaWxzIGJlY2F1c2UgdGhlIGNvbnRlbnQg
bGF5ZXIgaXMgYXNraW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBF
WFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQp
OworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RBbmRDaGFu
Z2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwg
MTApOworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VT
aXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAg
IG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEo
MCwgMTApOworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Cisg
ICAgSW50U2l6ZSBleHBlY3RlZE1heFNjcm9sbChtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4
U2Nyb2xsUG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2lu
KEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Ny
b2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworCisgICAgLy8gU2V0IG5l
dyBwYWdlIHNjYWxlIGZyb20gbWFpbiB0aHJlYWQuCisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNj
YWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwgcGFnZVNjYWxlLCBwYWdlU2NhbGUpOworCisg
ICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgorICAgIGV4
cGVjdGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAgICBPd25QdHI8Q0NTY3JvbGxB
bmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMo
KTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMCwgZXhwZWN0ZWRTY3Jv
bGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBhbHNvIGhhdmUgYmVl
biB1cGRhdGVkLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4U2Ny
b2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ugc2Nh
bGUgZGVsdGEgcmVtYWlucyBjb25zdGFudCBiZWNhdXNlIHRoZSBpbXBsIHRocmVhZCBkaWQgbm90
IHNjYWxlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+cGFnZVNjYWxl
RGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
Um9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1cmZh
Y2VTaXplKDEwLCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1
KSwgc3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVh
c2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAg
ICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMSwgMSwgcGFnZVNjYWxl
KTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBleHBlY3RlZFNjcm9sbERlbHRh
KHNjcm9sbERlbHRhKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9zdEltcGwt
PnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpX
aGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJ
bXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7
CisKKyAgICAvLyBTZXQgbmV3IHBhZ2Ugc2NhbGUgb24gaW1wbCB0aHJlYWQgYnkgcGluY2hpbmcu
CisgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlQmVnaW4oKTsKKyAgICBtX2hvc3RJbXBsLT5w
aW5jaEdlc3R1cmVVcGRhdGUocGFnZVNjYWxlLCBJbnRQb2ludCgpKTsKKyAgICBtX2hvc3RJbXBs
LT5waW5jaEdlc3R1cmVFbmQoKTsKKworICAgIC8vIFRoZSBzY3JvbGwgZGVsdGEgaXMgbm90IHNj
YWxlZCBiZWNhdXNlIHRoZSBtYWluIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIE93blB0cjxD
Q1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9s
bERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAwLCBleHBl
Y3RlZFNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIGFsc28g
aGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigp
LT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9sbCk7CisKKyAgICAvLyBUaGUg
cGFnZSBzY2FsZSBkZWx0YSBzaG91bGQgbWF0Y2ggdGhlIG5ldyBzY2FsZSBvbiB0aGUgaW1wbCBz
aWRlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+cGFnZVNjYWxlRGVs
dGEoKSwgcGFnZVNjYWxlKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKK3sKKyAgICBJbnRTaXpl
IHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICAvLyBBbHNvIG1hcmsgdGhlIHJvb3Qgc2Nyb2xsYWJs
ZSBzbyBpdCBiZWNvbWVzIHRoZSByb290IHNjcm9sbCBsYXllci4KKyAgICByb290LT5zZXRTY3Jv
bGxhYmxlKHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigx
LCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJv
b3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXpl
KHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgp
OworCisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCktPmNo
aWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAg
ICBJbnRTaXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIEludFNpemUg
ZXhwZWN0ZWRNYXhTY3JvbGwoY2hpbGQtPm1heFNjcm9sbFBvc2l0aW9uKCkpOworICAgIEVYUEVD
VF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwor
ICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5z
Y3JvbGxFbmQoKTsKKworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7CisgICAgbV9ob3N0SW1wbC0+
c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwgMSwgcGFnZVNjYWxlKTsKKwor
ICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHNjcm9sbCBkZWx0YS4KKyAgICBl
eHBlY3RlZFNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZSk7CisgICAgT3duUHRyPENDU2Nyb2xs
QW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFz
KCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDEsIGV4cGVjdGVkU2Ny
b2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgbm90IGhhdmUgY2hh
bmdlZC4KKyAgICBFWFBFQ1RfRVEoY2hpbGQtPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVk
TWF4U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxlIGRlbHRhIHJlbWFpbnMgY29uc3Rh
bnQgYmVjYXVzZSB0aGUgaW1wbCB0aHJlYWQgZGlkIG5vdCBzY2FsZS4KKyAgICBFWFBFQ1RfRVEo
Y2hpbGQtPnBhZ2VTY2FsZURlbHRhKCksIDEpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHNjcm9sbENoaWxkQmV5b25kTGltaXQpCit7CisgICAgLy8gU2Nyb2xsIGEgY2hp
bGQgbGF5ZXIgYmV5b25kIGl0cyBtYXhpbXVtIHNjcm9sbCByYW5nZSBhbmQgbWFrZSBzdXJlIHRo
ZQorICAgIC8vIHBhcmVudCBsYXllciBpcyBzY3JvbGxlZCBvbiB0aGUgYXhpcyBvbiB3aGljaCB0
aGUgY2hpbGQgd2FzIHVuYWJsZSB0bworICAgIC8vIHNjcm9sbC4KKyAgICBJbnRTaXplIHN1cmZh
Y2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Ny
b2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBG
bG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0U2Nyb2xs
UG9zaXRpb24oSW50UG9pbnQoMCwgNSkpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGls
ZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6
ZSk7CisgICAgY2hpbGQtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDMsIDApKTsKKyAgICBj
aGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworCisgICAgcm9vdC0+YWRkQ2hp
bGQoY2hpbGQucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5y
ZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7
CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICB7CisgICAg
ICAgIEludFNpemUgc2Nyb2xsRGVsdGEoLTMsIC03KTsKKyAgICAgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgIG1f
aG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2Ny
b2xsRW5kKCk7CisKKyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbElu
Zm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisKKyAgICAgICAgLy8gVGhl
IGdyYW5kIGNoaWxkIHNob3VsZCBoYXZlIHNjcm9sbGVkIHVwIHRvIGl0cyBsaW1pdC4KKyAgICAg
ICAgQ0NMYXllckltcGwqIGNoaWxkID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCktPmNoaWxkcmVu
KClbMF0uZ2V0KCk7CisgICAgICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNo
aWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdl
dCgpLCBncmFuZENoaWxkLT5pZCgpLCBJbnRTaXplKDAsIC01KSk7CisKKyAgICAgICAgLy8gVGhl
IGNoaWxkIHNob3VsZCBoYXZlIG9ubHkgc2Nyb2xsZWQgb24gdGhlIG90aGVyIGF4aXMuCisgICAg
ICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBjaGlsZC0+aWQoKSwgSW50U2l6
ZSgtMywgMCkpOworICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxCZWZvcmVSZWRyYXcpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwor
ICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoc3VyZmFjZVNpemUpOworCisgICAgLy8gRHJhdyBvbmUgZnJhbWUgYW5kIHRoZW4gaW1t
ZWRpYXRlbHkgcmVidWlsZCB0aGUgbGF5ZXIgdHJlZSB0byBtaW1pYyBhIHRyZWUgc3luY2hyb25p
emF0aW9uLgorICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAg
bV9ob3N0SW1wbC0+cmVsZWFzZVJvb3RMYXllcigpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNp
emUpKTsKKworICAgIC8vIFNjcm9sbGluZyBzaG91bGQgc3RpbGwgd29yayBldmVuIHRob3VnaCB3
ZSBkaWQgbm90IGRyYXcgeWV0LgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdp
bihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworfQorCiBjbGFzcyBCbGVuZFN0YXRlVHJhY2tl
ckNvbnRleHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAg
IEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dCgpIDogbV9ibGVuZChmYWxzZSkgeyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApp
bmRleCBhNzRlNGNhNDU1YzZkNDY2MzQ0OWM3ZmEzODIwNWI3NmIxZGNmZmU4Li41MWM3YzcxODkw
ZGU5ZjQzNzUzM2FkZmQ2ZjU0NTA2NjZlYWVmMjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTEzNzgsNiArMTM3
OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzM0QoKSB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3QgSW50U2l6
ZSYpIHsgfQogCiBwcml2YXRlOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKQEAg
LTE1MjcsNyArMTUyOCw4IEBAIGNsYXNzIE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZSA6IHB1Ymxp
YyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBkcmF3c0NvbnRlbnQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgTU9DS19DT05TVF9NRVRIT0QwKHByZXNlcnZl
czNELCBib29sKCkpOwotICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTY3Jv
bGwoY29uc3QgSW50U2l6ZSYpIHsgfQogICAgIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKCkgeyB9
CiB9OwogCkBAIC0yMjk1LDQgKzIyOTcsNzAgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RG
cmFjdGlvbmFsU2Nyb2xsLCBydW5NdWx0aVRocmVhZCkKICAgICBydW5UZXN0VGhyZWFkZWQoKTsK
IH0KIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbENoaWxkTGF5ZXIoKQorICAgICAgICA6IG1fc2Nyb2xsQW1vdW50KDIsIDEpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAg
bV9yb290U2Nyb2xsTGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tE
ZWxlZ2F0ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgx
MCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7
CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAg
ICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jv
b3RTY3JvbGxMYXllcik7CisgICAgICAgIG1fY2hpbGRMYXllciA9IENvbnRlbnRMYXllckNocm9t
aXVtOjpjcmVhdGUoJm1fbW9ja0RlbGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRC
b3VuZHMoSW50U2l6ZSg1MCwgNTApKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRJc0RyYXdh
YmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7Cisg
ICAgICAgIG1fY2hpbGRMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+YWRkQ2hpbGQobV9jaGlsZExheWVyKTsK
KyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVs
dGEsIGZsb2F0KQorICAgIHsKKyAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBtX3Jvb3RTY3Jv
bGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNl
dFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1w
bCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUShtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xsUG9z
aXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5mcmFt
ZU51bWJlcigpKQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9z
aXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9F
UShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkgKyBtX3Njcm9sbEFt
b3VudCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKEND
TGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJhbWVO
dW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJ5KG1f
c2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgpOworICAgICAgICB9
IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAgICAgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQor
Citwcml2YXRlOgorICAgIGNvbnN0IEludFNpemUgbV9zY3JvbGxBbW91bnQ7CisgICAgTW9ja0Nv
bnRlbnRMYXllckRlbGVnYXRlIG1fbW9ja0RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBtX2NoaWxkTGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9s
bExheWVyOworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVy
LCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0KHRydWUpOworfQorCiB9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134627</attachid>
            <date>2012-03-29 11:33:02 -0700</date>
            <delta_ts>2012-04-11 10:19:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120329193300.patch</filename>
            <type>text/plain</type>
            <size>61918</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTkzZjE5NjQ0Yzc3MTk1
YzMwMDYyMWYyYzYxYzYxYWNiNDM4ZGM3Yy4uMGRlY2ZhYjlmMDk5OWQ3YzUzOGM2MTgzMWMxYTNm
ZGJiZDQxOGE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVu
IGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xs
ZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBBZGRlZCBuZXcgd2Via2l0X3VuaXRf
dGVzdHMgdG8gdmVyaWZ5IHNjcm9sbGluZyBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoQ29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpmaW5kTGF5ZXJJblN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllcklt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJsZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcm9s
bExheWVyRm9yQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0U2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDMt
MjkgIFZpbmVldCBDaGF1ZGhhcnkgIDxyZ2Y3NDhAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFJl
bW92ZSBjdXN0b20gYmluZGluZ3MgZm9ybSBJbnRlcm5hbHMuaWRsIG9mIGF0dHJpYnV0ZSB0eXBl
IEFycmF5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1ODAxZWU4M2Q2MmI3OWU3MzE3
NDdjNmVkYzExY2U1OTYwMGQxMzQ4Li5iZDI0NGEwZmRiODY5MTJmMDRiYTE4MDYyMWUyZGE3ZGNm
YWE3MTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEy
LTAzLTI4ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gQWRkIHRlc3RzIGZvciBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5ZXJzIGluIHRo
ZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzMzNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVySW1wbDo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvbnRlbnRM
YXllckltcGwpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdDo6Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RPcGFj
aXR5Q2hhbmdlTGF5ZXJEZWxlZ2F0ZTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdURjo6TW9ja0Nv
bnRlbnRMYXllckRlbGVnYXRlOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdURjo6TW9ja0Nv
bnRlbnRMYXllckRlbGVnYXRlOjpkaWRTY3JvbGwpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0
VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllcjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5U
ZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6
OmFwcGx5U2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFm
dGVyVGVzdCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpURVNUX0YpOgorCiAyMDEy
LTAzLTI5ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkOyByb2xsaW5nIGNocm9taXVtIGRlcHMgdG8gMTI5NTgzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDczYThhNDI0NjE1NzEzZTY5ZDVhMmMxZTc4Y2Zl
OTNjYjY4ODAwNWIuLjRjNTUwNWY5YjE5OTM0YzQ2MmQ0ZjkxMGFmN2VmZGRkYWY0MDhiZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE0NCw1ICsxNDQsMTIgQEAg
dm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0T3BhcXVlKGJvb2wgb3BhcXVlKQogICAgICAg
ICBtX3RleHR1cmVVcGRhdGVyLT5zZXRPcGFxdWUob3BhcXVlKTsKIH0KIAordm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7Cisg
ICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSArIHNjcm9sbERlbHRhKTsKKyAg
ICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlkU2Nyb2xsKHNjcm9sbERl
bHRhKTsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGU2OTk0YTIxYWVmYWMyMTQwODg3ZTVi
YmQ4YWJiMjAzYzlhYjgxNzkuLjE2ZDY3OGVkNjRhMDYxZjhmODE1ZDYzYWNlMDU5MmY5MDRlMzUw
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNDYsNiArNDYsNyBAQCBj
bGFzcyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29udGVu
dExheWVyRGVsZWdhdGUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgPSAwOwogfTsKIAogLy8gQSBMYXllciB0aGF0IHJl
cXVpcmVzIGEgR3JhcGhpY3NDb250ZXh0IHRvIHJlbmRlciBpdHMgY29udGVudHMuCkBAIC02Myw2
ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpOworCiBwcm90ZWN0ZWQ6
CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ29udGVudExheWVyRGVsZWdhdGUq
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCA5MWE0NTVhNTQxZTY2
ZjlkODc2YmU2YWNlNjExZmM4YTBmYWM0N2E1Li5mMjk3MzAzZjI1ODdlOWVlMzZjNmRhZTYzNjNi
NDMxZDdiMzI4MGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtMTEz
LDYgKzExMyw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxl
bWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29u
c3QgSW50U2l6ZSYpIHsgfQogCiAgICAgLy8gQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIGltcGxl
bWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJs
ZSBzdGFydFRpbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCAyYWQwOWI5NDhhNDNiYjNj
ZTNhNzE5NTFmYzdiNWQ5ZTEzMDBlYTU1Li5kMGIzYzY5MmZhMzg4NjNlNDA4NTFkYjE3MWEwYWU2
MGY5MjNiOTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzgwLDYgKzM4MCwxNCBAQCB2
b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIExheWVyQ2hyb21p
dW06OnNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9u
KQoreworICAgIGlmIChtX21heFNjcm9sbFBvc2l0aW9uID09IG1heFNjcm9sbFBvc2l0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgbV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0
aW9uOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpCiB7CiAgICAgaWYgKG1fc2Nyb2xsYWJsZSA9PSBz
Y3JvbGxhYmxlKQpAQCAtNDkxLDYgKzQ5OSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1f
cG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAg
ICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXIt
PnNldE1heFNjcm9sbFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5z
ZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKICAgICBpZiAoIXRyYW5z
Zm9ybUlzQW5pbWF0aW5nKCkpCiAgICAgICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zv
cm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI5ODAyMmI1MmRhNThiOTE5N2NiZjU0NDhjYjZk
NDBhOWEwN2MyNzAuLmIwMWM2ZGFlODBkNTI5ZDg3NTBlMjc4ODM4NDA1MDQ5NGM4ODlmNDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKQEAgLTEzOSwxMiArMTM5LDE3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgY29uc3QgSW50UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQogCisg
ICAgdm9pZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJik7CisgICAgY29uc3Qg
SW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX21heFNjcm9sbFBv
c2l0aW9uOyB9CisKICAgICB2b2lkIHNldFNjcm9sbGFibGUoYm9vbCk7CisgICAgYm9vbCBzY3Jv
bGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTaG91
bGRTY3JvbGxPbk1haW5UaHJlYWQoYm9vbCk7CiAgICAgdm9pZCBzZXRIYXZlV2hlZWxFdmVudEhh
bmRsZXJzKGJvb2wpOwogICAgIGNvbnN0IFJlZ2lvbiYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24o
KSB7IHJldHVybiBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOyB9CiAgICAgdm9pZCBzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKICAgICB2b2lkIHNldE5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCgpIHsgbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5n
ZWQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKSB7
IH0KIAogICAgIEludFNpemUgc2Nyb2xsRGVsdGEoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7
IH0KIApAQCAtMjk3LDYgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5kczsK
ICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBv
c2l0aW9uOworICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Ny
b2xsYWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwogICAgIGJvb2wg
bV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDJh
ZmI5ZDhmZjc0MWY5MzM1OTU2NmExNjlmZDQzNzI5NzAyYTc5NjkuLjQyZDk4MzcyMzRhOTkxYzcy
YWY5N2EyN2MyMGNjNTU1ZGEzMzViNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTEw
Nyw2ICsxMDcsMjIgQEAgdm9pZCBDQ0xheWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQogICAg
ICAgICBtX2NoaWxkcmVuWzBdLT5yZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAKK0NDTGF5ZXJJbXBs
KiBDQ0xheWVySW1wbDo6ZmluZExheWVySW5TdWJ0cmVlKGludCBsYXllcklkKQoreworICAgIGlm
IChpZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIGlmIChtX21hc2tM
YXllciAmJiBtX21hc2tMYXllci0+aWQoKSA9PSBsYXllcklkKQorICAgICAgICByZXR1cm4gbV9t
YXNrTGF5ZXIuZ2V0KCk7CisgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIG1fcmVwbGljYUxheWVy
LT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gbV9jaGlsZHJlbltpXS0+ZmluZExheWVySW5TdWJ0
cmVlKGxheWVySWQpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91
bmQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpjbGVhckNo
aWxkTGlzdCgpCiB7CiAgICAgbV9jaGlsZHJlbi5jbGVhcigpOwpAQCAtMTk3LDYgKzIxMyw0MiBA
QCB2b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCkKICAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK0NDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllckltcGw6OnRyeVNjcm9sbChjb25zdCBJbnRQ
b2ludCYgdmlld3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlw
ZSB0eXBlKSBjb25zdAoreworICAgIC8vIEhlcmUgd2UgcHJpb3JpdGl6ZSBjb25kaXRpb25zIHRo
YXQgd291bGQgY2F1c2Ugc2Nyb2xsaW5nIHRvIGJlIGRlZmVycmVkIHRvIHRoZSBtYWluIHRocmVh
ZCB0bworICAgIC8vIG1ha2Ugc3VyZSB0aGUgY29tcG9zaXRvciBuZXZlciBpbmFkdmVydGVkbHkg
ZWF0cyBpbnB1dCBldmVudHMgZGVzdGluZWQgZm9yIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLyBO
b3RlIHRoYXQgZHVlIHRvIHRoaXMgZXZlbiBhIG5vbi1zY3JvbGxhYmxlIGxheWVyIGNhbiBpbnRl
cnJ1cHQgc2Nyb2xsaW5nLiBUaGlzIGNvdWxkIGhhcHBlbiwKKyAgICAvLyBlLmcuLCBpZiB3ZSBo
aXQgYSBub24tZmFzdC1zY3JvbGxhYmxlIHJlZ2lvbiBvbiB0aGUgcm9vdCBjb250ZW50IGxheWVy
LCB3aGljaCBpcyBub3QKKyAgICAvLyBzY3JvbGxhYmxlIGJ1dCBpbnN0ZWFkIGlzIGNvbnRhaW5l
ZCBpbiBhbiBvdXRlciBzY3JvbGwgbGF5ZXIuCisgICAgaWYgKHNob3VsZFNjcm9sbE9uTWFpblRo
cmVhZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlTY3JvbGwgRmFpbGVkIHNob3VsZFNj
cm9sbE9uTWFpblRocmVhZCIsIHRoaXMsIDApOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKyAgICB9CisKKyAgICBpZiAoIXNjcmVlblNwYWNlVHJh
bnNmb3JtKCkuaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoInRyeVNjcm9s
bCBGYWlsZWQgbm9uSW52ZXJ0aWJsZVRyYW5zZm9ybSIsIHRoaXMsIDApOworICAgICAgICByZXR1
cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisgICAgfQorCisgICAgSW50
UG9pbnQgY29udGVudFBvaW50KHNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBv
aW50KHZpZXdwb3J0UG9pbnQpKTsKKyAgICBpZiAobm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKS5j
b250YWlucyhjb250ZW50UG9pbnQpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlTY3JvbGwg
RmFpbGVkIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uIiwgdGhpcywgMCk7CisgICAgICAgIHJldHVy
biBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOworICAgIH0KKworICAgIGlmICh0
eXBlID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCAmJiBoYXZlV2hlZWxFdmVudEhhbmRs
ZXJzKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoInRyeVNjcm9sbCBGYWlsZWQgd2hlZWxFdmVu
dEhhbmRsZXJzIiwgdGhpcywgMCk7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsRmFpbGVkOworICAgIH0KKworICAgIGlmICghc2Nyb2xsYWJsZSgpKSB7CisgICAg
ICAgIFRSQUNFX0VWRU5UKCJ0cnlTY3JvbGwgSWdub3JlZCBub3Qgc2Nyb2xsYWJsZSIsIHRoaXMs
IDApOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7
CisgICAgfQorCisgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVk
OworfQorCiBjb25zdCBJbnRSZWN0IENDTGF5ZXJJbXBsOjpnZXREcmF3UmVjdCgpIGNvbnN0CiB7
CiAgICAgLy8gRm9ybSB0aGUgbWF0cml4IHVzZWQgYnkgdGhlIHNoYWRlciB0byBtYXAgdGhlIGNv
cm5lcnMgb2YgdGhlIGxheWVyJ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDZjYjZkZjAzYzI5
ZWFlNjA4N2UwZjRhOWVlOTQxYzMyYjk5NTA4OTIuLjA0YjViMDVkYzg2M2I0YmRlYzVkNGIxOTZj
Y2U3NmM4Y2VhODcyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9D
Q1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgpAQCAt
NzIsNiArNzMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOwogICAg
IHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oKTsKIAorICAgIC8vIFJldHVybnMgYSBsYXllciB3aXRo
IHRoZSBnaXZlbiBpZCBpZiBvbmUgZXhpc3RzIGluIHRoZSBzdWJ0cmVlIHN0YXJ0aW5nCisgICAg
Ly8gZnJvbSB0aGlzIGxheWVyIChpbmNsdWRpbmcgbWFzayBhbmQgcmVwbGljYSBsYXllcnMpLgor
ICAgIENDTGF5ZXJJbXBsKiBmaW5kTGF5ZXJJblN1YnRyZWUoaW50IGxheWVySWQpOworCiAgICAg
dm9pZCBzZXRNYXNrTGF5ZXIoUGFzc093blB0cjxDQ0xheWVySW1wbD4pOwogICAgIENDTGF5ZXJJ
bXBsKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllci5nZXQoKTsgfQogCkBA
IC0xOTgsNiArMjAzLDggQEAgcHVibGljOgogICAgIGNvbnN0IFJlZ2lvbiYgbm9uRmFzdFNjcm9s
bGFibGVSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOyB9
CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mIHJlZ2lv
bikgeyBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gcmVnaW9uOyB9CiAKKyAgICBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHRyeVNjcm9sbChjb25zdCBJbnRQb2ludCYgdmll
d3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSkgY29uc3Q7
CisKICAgICBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV92aXNpYmxlTGF5ZXJSZWN0OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0
IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJs
ZUxheWVyUmVjdDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA1NzZm
YzJiMzE5MGEyZDYzMDk1NzU5ODE3NWM0M2VlZjRlNzg4YzI3Li44NTQ1NTk2NThhYTljZDNjZDU3
YzdlZjdmMDlmZWVkNzhmNWEzMTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
QEAgLTYxMSwxNSArNjExLDU2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpjbGVhclBlbmRpbmdV
cGRhdGUoKQogICAgIG1fdXBkYXRlTGlzdC5jbGVhcigpOwogfQogCitzdGF0aWMgTGF5ZXJDaHJv
bWl1bSogZmluZExheWVyQnlJZChMYXllckNocm9taXVtKiBsYXllciwgaW50IGlkKQoreworICAg
IGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVyLT5pZCgpID09
IGlkKQorICAgICAgICByZXR1cm4gbGF5ZXI7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0q
IGZvdW5kID0gZmluZExheWVyQnlJZChsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgaWQpOwor
ICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBMYXllckNocm9taXVtKiBmaW5kRmlyc3RTY3JvbGxh
YmxlTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0
dXJuIGxheWVyOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4o
KS5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBmb3VuZCA9IGZpbmRGaXJz
dFNjcm9sbGFibGVMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisgICAgICAgIGlm
IChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3Qg
Q0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVzaGluZyBzY3Jv
bGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0gICAgaWYgKCFp
bmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgTGF5ZXJDaHJvbWl1bSog
cm9vdFNjcm9sbExheWVyID0gZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKG1fcm9vdExheWVyLmdl
dCgpKTsKKyAgICBJbnRTaXplIHJvb3RTY3JvbGxEZWx0YTsKIAotICAgIEFTU0VSVChpbmZvLnNj
cm9sbHMuc2l6ZSgpID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9s
bHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Ny
b2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5mby5zY3JvbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGxh
eWVyID0gZmluZExheWVyQnlJZChtX3Jvb3RMYXllci5nZXQoKSwgaW5mby5zY3JvbGxzW2ldLmxh
eWVySWQpOworICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChsYXllciA9PSByb290U2Nyb2xsTGF5ZXIpCisgICAgICAgICAgICByb290U2Nyb2xs
RGVsdGEgKz0gaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRhOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBsYXllci0+c2Nyb2xsQnkoaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRhKTsKKyAg
ICB9CisgICAgaWYgKCFyb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkgfHwgaW5mby5wYWdlU2NhbGVE
ZWx0YSAhPSAxKQorICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShyb290U2Ny
b2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6c3RhcnRSYXRlTGltaXRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZTdkM2E4MWM0NTdhZDU5MDdiOTM1
ODNiOTc1OTM0OGVkZTg2MjU5ZC4uY2Y0NjMzM2Y0MjBjNjE4YTk4MTY1NzQ3ODhiYTg0NjhkNzE0
YmE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTEwNCw3
ICsxMDQsOCBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0
IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgIDogbV9jbGllbnQoY2xpZW50
KQogICAgICwgbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkK
LSAgICAsIG1fc2Nyb2xsTGF5ZXJJbXBsKDApCisgICAgLCBtX3Jvb3RTY3JvbGxMYXllckltcGwo
MCkKKyAgICAsIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKDApCiAgICAgLCBtX3NldHRp
bmdzKHNldHRpbmdzKQogICAgICwgbV92aXNpYmxlKHRydWUpCiAgICAgLCBtX3BhZ2VTY2FsZSgx
KQpAQCAtMTYyLDEwICsxNjMsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRl
KGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSkKIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0
YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUg
c3RhcnRUaW1lLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1w
bCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwor
ICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXll
ckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERl
bHRhKCkpOwogICAgIHNjcm9sbFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZs
b2F0IHNjYWxlVG90YWwgPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50
U2l6ZSBzY2FsZWRDb250ZW50U2l6ZSA9IGNvbnRlbnRTaXplKCk7CkBAIC0zNjQsOSArMzY1LDI2
IEBAIEludFNpemUgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVudFNpemUoKSBjb25zdAogewog
ICAgIC8vIFRPRE8oYWVsaWFzKTogSGFyZGNvZGluZyB0aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3
ZWlyZC4gVGhpbmsgb2YKICAgICAvLyBhIGNsZWFuZXIgd2F5IHRvIGdldCB0aGUgY29udGVudEJv
dW5kcyBvbiB0aGUgSW1wbCBzaWRlLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgbV9z
Y3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKQorICAgIGlmICghbV9yb290U2Ny
b2xsTGF5ZXJJbXBsIHx8IG1fcm9vdFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7CisgICAgcmV0dXJuIG1fcm9vdFNj
cm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKVswXS0+Y29udGVudEJvdW5kcygpOworfQorCit2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVZpc2libGVMYXllcnMoQ0NMYXllclRyZWVI
b3N0SW1wbDo6RnJhbWVEYXRhJiBmcmFtZSwgQ0NMYXllckdlb21ldHJ5TGlzdCYgdmlzaWJsZUxh
eWVycykKK3sKKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NMYXll
ckxpc3QsIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBD
Q0xheWVySXRlcmF0b3JUeXBlOjplbmQoJmZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJl
Z2luKCZmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSAoKml0KTsKKyAgICAgICAgaWYgKCFsYXll
ckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaXNJbnZlcnRpYmxlKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgc3RydWN0IExheWVyR2VvbWV0cnkgbGF5ZXJHZW9tZXRyeSA9
IHsKKyAgICAgICAgICAgIGxheWVySW1wbC0+aWQoKSwKKyAgICAgICAgICAgIGxheWVySW1wbC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgIGxheWVySW1wbC0+dmlzaWJsZUxh
eWVyUmVjdCgpLAorICAgICAgICB9OworICAgICAgICB2aXNpYmxlTGF5ZXJzLmFwcGVuZChsYXll
ckdlb21ldHJ5KTsKKyAgICB9CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFy
ZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQpAQCAtMzc1LDYgKzM5Myw3IEBAIGJvb2wgQ0NMYXll
clRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQogCiAgICAgZnJh
bWUucmVuZGVyUGFzc2VzLmNsZWFyKCk7CiAgICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5jbGVhcigpOworICAgIG1fdmlzaWJsZUxheWVycy5jbGVhcigpOwogCiAgICAgaWYgKCFyb290
TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzgyLDYgKzQwMSw4IEBAIGJvb2wg
Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQogICAg
IGlmICghY2FsY3VsYXRlUmVuZGVyUGFzc2VzKGZyYW1lLnJlbmRlclBhc3NlcywgZnJhbWUucmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhbGN1
bGF0ZVZpc2libGVMYXllcnMoZnJhbWUsIG1fdmlzaWJsZUxheWVycyk7CisKICAgICAvLyBJZiB3
ZSByZXR1cm4gdHJ1ZSwgdGhlbiB3ZSBleHBlY3QgZHJhd0xheWVycygpIHRvIGJlIGNhbGxlZCBi
ZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4uCiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC00NTYsNyArNDc3LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZWFkYmFjayh2
b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgbV9sYXllclJlbmRlcmVyLT5n
ZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOwogfQogCi1zdGF0aWMgQ0NMYXllcklt
cGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCitzdGF0aWMgQ0NMYXllcklt
cGwqIGZpbmRSb290U2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogewogICAgIGlmICgh
bGF5ZXIpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDY1LDcgKzQ4Niw3IEBAIHN0YXRpYyBDQ0xh
eWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAgcmV0
dXJuIGxheWVyOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4o
KS5zaXplKCk7ICsraSkgewotICAgICAgICBDQ0xheWVySW1wbCogZm91bmQgPSBmaW5kU2Nyb2xs
TGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAgICAgICBDQ0xheWVySW1wbCog
Zm91bmQgPSBmaW5kUm9vdFNjcm9sbExheWVyKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsK
ICAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgIH0KQEAg
LTQ3MywxMiArNDk0LDMyIEBAIHN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKEND
TGF5ZXJJbXBsKiBsYXllcikKICAgICByZXR1cm4gMDsKIH0KIAorLy8gQ29udGVudCBsYXllcnMg
Y2FuIGJlIGVpdGhlciBkaXJlY3RseSBzY3JvbGxhYmxlIG9yIGNvbnRhaW5lZCBpbiBhbiBvdXRl
cgorLy8gc2Nyb2xsaW5nIGxheWVyIHdoaWNoIGFwcGxpZXMgdGhlIHNjcm9sbCB0cmFuc2Zvcm0u
IEdpdmVuIGEgY29udGVudCBsYXllciwKKy8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYXNz
b2NpYXRlZCBzY3JvbGwgbGF5ZXIgaWYgYW55Lgorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Ny
b2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sKKyAgICBp
ZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXJJbXBsLT5z
Y3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllckltcGw7CisKKyAgICBpZiAobGF5ZXJJ
bXBsLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllckltcGwtPnBhcmVudCgpICYmIGxheWVySW1wbC0+
cGFyZW50KCktPnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVySW1wbC0+cGFyZW50
KCk7CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRS
b290TGF5ZXIoUGFzc093blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5
ZXJJbXBsID0gbGF5ZXI7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsID0gZmluZFJvb3RTY3Jv
bGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogCi0gICAgLy8gRklYTUU6IEN1cnJlbnRs
eSwgdGhpcyBvbmx5IGZpbmRzIHRoZSBmaXJzdCBzY3JvbGxhYmxlIGxheWVyLgotICAgIG1fc2Ny
b2xsTGF5ZXJJbXBsID0gZmluZFNjcm9sbExheWVyKG1fcm9vdExheWVySW1wbC5nZXQoKSk7Cisg
ICAgaWYgKG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKSB7CisgICAgICAgIGlmICghbV9y
b290TGF5ZXJJbXBsIHx8ICFtX3Jvb3RMYXllckltcGwtPmZpbmRMYXllckluU3VidHJlZShtX2N1
cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC0+aWQoKSkpCisgICAgICAgICAgICBtX2N1cnJlbnRs
eVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAtNTI3LDYgKzU2OCwzNCBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJiB2aWV3
cG9ydFNpemUpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRDaGFuZ2VkKCk7CiB9
CiAKK3N0YXRpYyB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoQ0NMYXllcklt
cGwqIGxheWVySW1wbCwgZmxvYXQgcGFnZVNjYWxlQ2hhbmdlKQoreworICAgIGlmICghbGF5ZXJJ
bXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkp
IHsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGFz
IHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAgICAgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbGF5
ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOworICAgICAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2Nh
bGVDaGFuZ2UpOworICAgICAgICBsYXllckltcGwtPnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRh
KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRy
ZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5n
ZShsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCksIHBhZ2VTY2FsZUNoYW5nZSk7Cit9CisK
K3N0YXRpYyB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyhDQ0xheWVySW1w
bCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVEZWx0YSkKK3sKKyAgICBpZiAoIWxheWVySW1w
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQor
ICAgICAgICBsYXllckltcGwtPnNldFBhZ2VTY2FsZURlbHRhKHBhZ2VTY2FsZURlbHRhKTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsg
KytpKQorICAgICAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMobGF5ZXJJbXBs
LT5jaGlsZHJlbigpW2ldLmdldCgpLCBwYWdlU2NhbGVEZWx0YSk7Cit9CisKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0IHBhZ2VTY2Fs
ZSwgZmxvYXQgbWluUGFnZVNjYWxlLCBmbG9hdCBtYXhQYWdlU2NhbGUpCiB7CiAgICAgaWYgKCFw
YWdlU2NhbGUpCkBAIC01NDEsMjUgKzYxMCwxMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IG1pbgog
ICAgIGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSA9IHBhZ2VTY2FsZSAvIG1fcGFnZVNjYWxlOwogICAg
IG1fcGFnZVNjYWxlID0gcGFnZVNjYWxlOwogCi0gICAgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2Fs
ZUNoYW5nZShwYWdlU2NhbGVDaGFuZ2UpOworICAgIGlmIChwYWdlU2NhbGVDaGFuZ2UgIT0gMSkK
KyAgICAgICAgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShtX3Jvb3RTY3JvbGxMYXll
ckltcGwsIHBhZ2VTY2FsZUNoYW5nZSk7CiAKICAgICAvLyBDbGFtcCBkZWx0YSB0byBsaW1pdHMg
YW5kIHJlZnJlc2ggZGlzcGxheSBtYXRyaXguCiAgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdl
U2NhbGVEZWx0YSAvIG1fc2VudFBhZ2VTY2FsZURlbHRhKTsKICAgICBtX3NlbnRQYWdlU2NhbGVE
ZWx0YSA9IDE7Ci0gICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLX0KLQot
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdl
KGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKLXsKLSAgICBpZiAocGFnZVNjYWxlQ2hhbmdlID09IDEp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb252ZXJ0IGltcGwt
c2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBzcGFjZS4KLSAgICBpZiAobV9zY3JvbGxM
YXllckltcGwpIHsKLSAgICAgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgICAgIHNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2Fs
ZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3Jv
bGxEZWx0YSk7Ci0gICAgfQorICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyht
X3Jvb3RTY3JvbGxMYXllckltcGwsIG1fcGFnZVNjYWxlRGVsdGEpOwogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZURlbHRhKGZsb2F0IGRlbHRhKQpAQCAtNTc3LDIy
ICs2MzQsMTYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVEZWx0YShm
bG9hdCBkZWx0YSkKICAgICBtX3BhZ2VTY2FsZURlbHRhID0gZGVsdGE7CiAKICAgICB1cGRhdGVN
YXhTY3JvbGxQb3NpdGlvbigpOwotICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVy
KCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YXBwbHlQYWdlU2NhbGVEZWx0YVRv
U2Nyb2xsTGF5ZXIoKQotewotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkKLSAgICAgICAgbV9z
Y3JvbGxMYXllckltcGwtPnNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlRGVsdGEpOworICAg
IGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyhtX3Jvb3RTY3JvbGxMYXllckltcGws
IG1fcGFnZVNjYWxlRGVsdGEpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0
ZU1heFNjcm9sbFBvc2l0aW9uKCkKIHsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8ICFt
X3Njcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCkpCisgICAgaWYgKCFtX3Jvb3RTY3Jv
bGxMYXllckltcGwgfHwgIW1fcm9vdFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0U2l6ZSB2aWV3Qm91bmRzID0gbV92aWV3cG9y
dFNpemU7Ci0gICAgaWYgKENDTGF5ZXJJbXBsKiBjbGlwTGF5ZXIgPSBtX3Njcm9sbExheWVySW1w
bC0+cGFyZW50KCkpIHsKKyAgICBpZiAoQ0NMYXllckltcGwqIGNsaXBMYXllciA9IG1fcm9vdFNj
cm9sbExheWVySW1wbC0+cGFyZW50KCkpIHsKICAgICAgICAgaWYgKGNsaXBMYXllci0+bWFza3NU
b0JvdW5kcygpKQogICAgICAgICAgICAgdmlld0JvdW5kcyA9IGNsaXBMYXllci0+Ym91bmRzKCk7
CiAgICAgfQpAQCAtNjAzLDkgKzY1NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6dXBk
YXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogICAgIC8vIGhhdmluZyBhIHZlcnRpY2FsIHNjcm9sbGJh
ciBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdy4KICAgICBtYXhTY3JvbGwuY2xhbXBOZWdhdGl2
ZVRvWmVybygpOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldE1heFNjcm9sbFBvc2l0aW9u
KG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6IEFsc28gdXBkYXRlIHN1YmxheWVy
cy4KKyAgICBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNldE1heFNjcm9sbFBvc2l0aW9uKG1heFNj
cm9sbCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQpA
QCAtNjE1LDQ0ICs2NjQsODQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1Jl
ZHJhdygpCiAKIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQmVnaW4oY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUgdHlwZSkKIHsKLSAgICAvLyBUT0RPOiBD
aGVjayBmb3Igc2Nyb2xsYWJsZSBzdWJsYXllcnMuCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1w
bCB8fCAhbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbGFibGUoKSkgewotICAgICAgICBUUkFDRV9F
VkVOVCgic2Nyb2xsQmVnaW4gSWdub3JlZCBubyBzY3JvbGxhYmxlIiwgdGhpcywgMCk7CisgICAg
bV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSAwOworCisKKyAgICBpZiAoIW1fcm9vdExh
eWVySW1wbCkKICAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7Ci0gICAgfQogCi0gICAgaWYg
KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoKSkgewotICAgICAg
ICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIHNob3VsZFNjcm9sbE9uTWFpblRocmVh
ZCIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOworICAgIC8vIEZpcnN0
IGZpbmQgb3V0IHdoaWNoIGxheWVyIHdhcyBoaXQgYnkgd2Fsa2luZyB0aGUgc2F2ZWQgbGlzdCBv
ZiB2aXNpYmxlIGxheWVycy4KKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmlzaWJsZUxheWVycy5zaXplKCk7ICsraSkgeworICAg
ICAgICBMYXllckdlb21ldHJ5JiBnZW9tZXRyeSA9IG1fdmlzaWJsZUxheWVyc1tpXTsKKyAgICAg
ICAgSW50UG9pbnQgY29udGVudFBvaW50KGdlb21ldHJ5LnNjcmVlblNwYWNlVHJhbnNmb3JtLmlu
dmVyc2UoKS5tYXBQb2ludCh2aWV3cG9ydFBvaW50KSk7CisgICAgICAgIGlmIChnZW9tZXRyeS52
aXNpYmxlTGF5ZXJSZWN0LmNvbnRhaW5zKGNvbnRlbnRQb2ludCkpIHsKKyAgICAgICAgICAgIGxh
eWVySW1wbCA9IG1fcm9vdExheWVySW1wbC0+ZmluZExheWVySW5TdWJ0cmVlKGdlb21ldHJ5Lmxh
eWVySWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBJbnRQ
b2ludCBzY3JvbGxMYXllckNvbnRlbnRQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOwotICAgIGlm
IChtX3Njcm9sbExheWVySW1wbC0+bm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKS5jb250YWlucyhz
Y3JvbGxMYXllckNvbnRlbnRQb2ludCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJl
Z2luIEZhaWxlZCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiIsIHRoaXMsIDApOwotICAgICAgICBy
ZXR1cm4gU2Nyb2xsRmFpbGVkOwotICAgIH0KKyAgICAvLyBXYWxrIHVwIHRoZSBoaWVyYXJjaHkg
YW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBsYXllci4KKyAgICBDQ0xheWVySW1wbCogcG90ZW50
aWFsbHlTY3JvbGxpbmdMYXllckltcGwgPSAwOworICAgIGZvciAoOyBsYXllckltcGw7IGxheWVy
SW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCkpIHsKKyAgICAgICAgLy8gVGhlIGNvbnRlbnQgbGF5
ZXIgY2FuIGFsc28gYmxvY2sgYXR0ZW1wdHMgdG8gc2Nyb2xsIG91dHNpZGUgdGhlIG1haW4gdGhy
ZWFkLgorICAgICAgICBpZiAobGF5ZXJJbXBsLT50cnlTY3JvbGwodmlld3BvcnRQb2ludCwgdHlw
ZSkgPT0gU2Nyb2xsRmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEZhaWxlZDsKKwor
ICAgICAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNjcm9sbExheWVyRm9y
Q29udGVudExheWVyKGxheWVySW1wbCk7CisgICAgICAgIGlmICghc2Nyb2xsTGF5ZXJJbXBsKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU2Nyb2xsU3RhdHVzIHN0YXR1cyA9IHNj
cm9sbExheWVySW1wbC0+dHJ5U2Nyb2xsKHZpZXdwb3J0UG9pbnQsIHR5cGUpOworCisgICAgICAg
IC8vIElmIGFueSBsYXllciB3YW50cyB0byBkaXZlcnQgdGhlIHNjcm9sbCBldmVudCB0byB0aGUg
bWFpbiB0aHJlYWQsIGFib3J0LgorICAgICAgICBpZiAoc3RhdHVzID09IFNjcm9sbEZhaWxlZCkK
KyAgICAgICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7CiAKLSAgICBpZiAodHlwZSA9PSBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwgJiYgbV9zY3JvbGxMYXllckltcGwtPmhhdmVXaGVlbEV2
ZW50SGFuZGxlcnMoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVk
IHdoZWVsRXZlbnRIYW5kbGVycyIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFp
bGVkOworICAgICAgICBpZiAoc3RhdHVzID09IFNjcm9sbFN0YXJ0ZWQgJiYgIXBvdGVudGlhbGx5
U2Nyb2xsaW5nTGF5ZXJJbXBsKQorICAgICAgICAgICAgcG90ZW50aWFsbHlTY3JvbGxpbmdMYXll
ckltcGwgPSBzY3JvbGxMYXllckltcGw7CiAgICAgfQogCi0gICAgcmV0dXJuIFNjcm9sbFN0YXJ0
ZWQ7CisgICAgaWYgKHBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKSB7CisgICAgICAgIG1f
Y3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gcG90ZW50aWFsbHlTY3JvbGxpbmdMYXllcklt
cGw7CisgICAgICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIH0KKyAgICByZXR1cm4gU2Ny
b2xsSWdub3JlZDsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeShjb25z
dCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBs
KQorICAgIGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Ci0gICAg
bV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0gICAgbV9jbGllbnQtPnNl
dE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgRmxvYXRTaXplIHBlbmRpbmdEZWx0YShz
Y3JvbGxEZWx0YSk7CisgICAgcGVuZGluZ0RlbHRhLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRh
KTsKKworICAgIGZvciAoQ0NMYXllckltcGwqIGxheWVySW1wbCA9IG1fY3VycmVudGx5U2Nyb2xs
aW5nTGF5ZXJJbXBsOyBsYXllckltcGwgJiYgIXBlbmRpbmdEZWx0YS5pc1plcm8oKTsgbGF5ZXJJ
bXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoIWxheWVySW1wbC0+c2Ny
b2xsYWJsZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEZsb2F0U2l6ZSBwcmV2
aW91c0RlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgICAgIGxheWVySW1wbC0+
c2Nyb2xsQnkocGVuZGluZ0RlbHRhKTsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHBlbmRpbmcgc2Ny
b2xsIGRlbHRhIHRvIHplcm8gaWYgdGhlIGxheWVyIHdhcyBhYmxlIHRvIG1vdmUgYWxvbmcgdGhl
IHJlcXVlc3RlZAorICAgICAgICAvLyBheGlzLiBUaGlzIGlzIHRvIGVuc3VyZSBpdCBpcyBwb3Nz
aWJsZSB0byBzY3JvbGwgZXhhY3RseSB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBhCisgICAg
ICAgIC8vIHNjcm9sbCBhcmVhIHJlZ2FyZGxlc3Mgb2YgdGhlIHNjcm9sbCBzdGVwLiBGb3IgZGlh
Z29uYWwgc2Nyb2xscyB0aGlzIGFsc28gYXZvaWRzIGFwcGx5aW5nCisgICAgICAgIC8vIHRoZSBz
Y3JvbGwgb24gb25lIGF4aXMgdG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICBpZiAocHJldmlv
dXNEZWx0YS53aWR0aCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgpKQorICAg
ICAgICAgICAgcGVuZGluZ0RlbHRhLnNldFdpZHRoKDApOworICAgICAgICBpZiAocHJldmlvdXNE
ZWx0YS5oZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkpCisgICAg
ICAgICAgICBwZW5kaW5nRGVsdGEuc2V0SGVpZ2h0KDApOworICAgIH0KKworICAgIGlmIChwZW5k
aW5nRGVsdGEgIT0gc2Nyb2xsRGVsdGEpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29t
bWl0T25JbXBsVGhyZWFkKCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1w
bFRocmVhZCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxF
bmQoKQogeworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVCZWdpbigpCkBAIC02NjYsNyArNzU1
LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQg
bWFnbmlmeURlbHRhLAogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpw
aW5jaEdlc3R1cmVVcGRhdGUiLCB0aGlzLCAwKTsKIAotICAgIGlmICghbV9zY3JvbGxMYXllcklt
cGwpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChtX3ByZXZpb3VzUGluY2hBbmNob3IgPT0gSW50UG9pbnQ6Onplcm8oKSkKQEAgLTY4
MSw3ICs3NzAsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0
ZShmbG9hdCBtYWduaWZ5RGVsdGEsCiAKICAgICBtX3ByZXZpb3VzUGluY2hBbmNob3IgPSBhbmNo
b3I7CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkocm91bmRlZEludFNpemUobW92
ZSkpOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsQnkocm91bmRlZEludFNpemUo
bW92ZSkpOwogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogICAg
IG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQpAQCAtNzAzLDcgKzc5
Miw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZURvdWJsZVRhcFpvb21EZWx0
YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZv
KQogewotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxM
YXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE9ubHkgc2VuZCBmYWtlIHNjcm9s
bC96b29tIGRlbHRhcyBpZiB3ZSdyZSBwaW5jaCB6b29taW5nIG91dCBieSBhCkBAIC03MTUsNyAr
ODA0LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFz
KENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8KIAogICAgIC8vIENvbXB1dGUgd2hlcmUg
dGhlIHNjcm9sbCBvZmZzZXQvcGFnZSBzY2FsZSB3b3VsZCBiZSBpZiBmdWxseSBwaW5jaC16b29t
ZWQKICAgICAvLyBvdXQgZnJvbSB0aGUgYW5jaG9yIHBvaW50LgotICAgIEludFNpemUgc2Nyb2xs
QmVnaW4gPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24o
KSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9s
bEJlZ2luID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3Np
dGlvbigpICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKICAgICBzY3Jv
bGxCZWdpbi5zY2FsZShtX3BhZ2VTY2FsZURlbHRhKTsKICAgICBmbG9hdCBzY2FsZUJlZ2luID0g
bV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhOwogICAgIGZsb2F0IHBhZ2VTY2FsZURlbHRh
VG9TZW5kID0gbV9taW5QYWdlU2NhbGUgLyBtX3BhZ2VTY2FsZTsKQEAgLTczNCwyMSArODIzLDQx
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Nj
cm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
bWFrZVNjcm9sbEFuZFNjYWxlU2V0KENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIGNv
bnN0IEludFNpemUmIHNjcm9sbE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlKQogewotICAgIGlmICgh
bV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5m
byBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9sbExheWVySW1wbC0+aWQoKTsK
LSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxPZmZzZXQgLSB0b1NpemUobV9zY3JvbGxM
YXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNjcm9sbC5sYXllcklkID0gbV9yb290
U2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOworICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNjcm9sbE9m
ZnNldCAtIHRvU2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkpOwog
ICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7Ci0gICAgbV9zY3JvbGxMYXll
ckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOworICAgIG1fcm9v
dFNjcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7
CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9
IHBhZ2VTY2FsZSAvIG1fcGFnZVNjYWxlOwogfQogCitzdGF0aWMgdm9pZCBjb2xsZWN0U2Nyb2xs
RGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIENDTGF5ZXJJbXBsKiBsYXll
ckltcGwpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAgIEludFNpemUg
c2Nyb2xsRGVsdGEgPSBmbG9vcmVkSW50U2l6ZShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwor
ICAgICAgICBzY3JvbGwubGF5ZXJJZCA9IGxheWVySW1wbC0+aWQoKTsKKyAgICAgICAgc2Nyb2xs
LnNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAgIHNjcm9sbEluZm8tPnNjcm9sbHMu
YXBwZW5kKHNjcm9sbCk7CisgICAgICAgIGxheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNj
cm9sbERlbHRhKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1w
bC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY29sbGVjdFNjcm9sbERlbHRhcyhz
Y3JvbGxJbmZvLCBsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworfQorCiBQYXNzT3du
UHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByb2Nlc3NTY3Jv
bGxEZWx0YXMoKQogewogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZv
ID0gYWRvcHRQdHIobmV3IENDU2Nyb2xsQW5kU2NhbGVTZXQoKSk7Ci0gICAgYm9vbCBkaWRNb3Zl
ID0gbV9zY3JvbGxMYXllckltcGwgJiYgKCFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEo
KS5pc1plcm8oKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDEuMGYpOworICAgIGNvbGxlY3RTY3Jv
bGxEZWx0YXMoc2Nyb2xsSW5mby5nZXQoKSwgbV9yb290TGF5ZXJJbXBsLmdldCgpKTsKKworICAg
IGJvb2wgZGlkTW92ZSA9IHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpIHx8IG1fcGFnZVNjYWxl
RGVsdGEgIT0gMTsKICAgICBpZiAoIWRpZE1vdmUgfHwgbV9waW5jaEdlc3R1cmVBY3RpdmUgfHwg
bV9wYWdlU2NhbGVBbmltYXRpb24pIHsKICAgICAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBz
Y3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IDE7CiAgICAgICAgIGlmIChtX3BpbmNoR2VzdHVy
ZUFjdGl2ZSkKQEAgLTc2MCwxNCArODY5LDYgQEAgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxl
U2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKIAogICAgIG1f
c2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSBtX3BhZ2VT
Y2FsZURlbHRhOwogCi0gICAgLy8gRklYTUU6IHRyYWNrIHNjcm9sbHMgZnJvbSBsYXllcnMgb3Ro
ZXIgdGhhbiB0aGUgcm9vdAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRl
SW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9sbExheWVySW1wbC0+aWQo
KTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKSk7Ci0gICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Ny
b2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xs
LnNjcm9sbERlbHRhKTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0KIApA
QCAtNzg1LDEyICs4ODYsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlUGFn
ZVNjYWxlKGRvdWJsZSBtb25vdG9uaWNUaW1lKQogICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRp
b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVk
SW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gZmxvb3Jl
ZEludFNpemUobV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9yb290
U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKIAogICAgIHNldFBhZ2VTY2FsZURlbHRh
KG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUobW9ub3RvbmljVGltZSkgLyBt
X3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmltYXRp
b24tPnNjcm9sbE9mZnNldEF0VGltZShtb25vdG9uaWNUaW1lKTsKICAgICBuZXh0U2Nyb2xsLnNj
YWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xs
QnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKKyAgICBtX3Jvb3RTY3JvbGxMYXllckltcGwt
PnNjcm9sbEJ5KG5leHRTY3JvbGwgLSBzY3JvbGxUb3RhbCk7CiAgICAgbV9jbGllbnQtPnNldE5l
ZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiAKICAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24t
PmlzQW5pbWF0aW9uQ29tcGxldGVBdFRpbWUobW9ub3RvbmljVGltZSkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBhODU5ZmVjNWMyMDNkYmQyYjQ2YjNjZWNjZjIy
MWZkNjkxY2IzZDY2Li5lMjFjMjE1ODBmMmRmOGJiZGMyNGVkYmM2MGJjYzFjNDVlZDhjZTMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xMjEsNyArMTIxLDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsK
ICAgICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZWxlYXNlUm9vdExheWVyKCkgeyByZXR1cm4g
bV9yb290TGF5ZXJJbXBsLnJlbGVhc2UoKTsgfQogCi0gICAgQ0NMYXllckltcGwqIHNjcm9sbExh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllckltcGw7IH0KKyAgICBDQ0xheWVySW1w
bCogcm9vdFNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290U2Nyb2xsTGF5ZXJJbXBs
OyB9CiAKICAgICBib29sIHZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAg
ICB2b2lkIHNldFZpc2libGUoYm9vbCk7CkBAIC0xNjIsOCArMTYyLDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIG1ha2VTY3JvbGxBbmRTY2FsZVNldChDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJ
bmZvLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSk7CiAKICAg
ICB2b2lkIHNldFBhZ2VTY2FsZURlbHRhKGZsb2F0KTsKLSAgICB2b2lkIGFwcGx5UGFnZVNjYWxl
RGVsdGFUb1Njcm9sbExheWVyKCk7Ci0gICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxl
Q2hhbmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAg
dm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVy
LCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgLy8gUmV0
dXJucyBmYWxzZSBpZiB0aGUgZnJhbWUgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQuCkBAIC0xNzIs
OSArMTcwLDE4IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0Owog
ICAgIHZvaWQgc2VuZERpZExvc2VDb250ZXh0UmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7CiAKKyAg
ICBzdHJ1Y3QgTGF5ZXJHZW9tZXRyeSB7CisgICAgICAgIGludCBsYXllcklkOworICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybTsKKyAgICAgICAgSW50UmVj
dCB2aXNpYmxlTGF5ZXJSZWN0OworICAgIH07CisgICAgdHlwZWRlZiBWZWN0b3I8TGF5ZXJHZW9t
ZXRyeT4gQ0NMYXllckdlb21ldHJ5TGlzdDsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNp
YmxlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSYsIENDTGF5ZXJHZW9tZXRy
eUxpc3QmKTsKKwogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5k
ZXJlcjsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKLSAgICBDQ0xh
eWVySW1wbCogbV9zY3JvbGxMYXllckltcGw7CisgICAgQ0NMYXllckltcGwqIG1fcm9vdFNjcm9s
bExheWVySW1wbDsKKyAgICBDQ0xheWVySW1wbCogbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllcklt
cGw7CiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogICAgIEludFNpemUgbV92aWV3cG9ydFNp
emU7CiAgICAgYm9vbCBtX3Zpc2libGU7CkBAIC0xOTcsNiArMjA0LDEwIEBAIHByaXZhdGU6CiAK
ICAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0ZXI7CiAKKyAgICAvLyBMaXN0IG9mIHZpc2li
bGUgbGF5ZXJzIGluIHRoZSBtb3N0IHJlY2VudCBmcmFtZSBpbiBmcm9udC10by1iYWNrIG9yZGVy
LgorICAgIC8vIFVzZWQgZm9yIGlucHV0IGV2ZW50IGhpdCB0ZXN0aW5nLgorICAgIENDTGF5ZXJH
ZW9tZXRyeUxpc3QgbV92aXNpYmxlTGF5ZXJzOworCiAgICAgRmxvYXRSZWN0IG1fcm9vdERhbWFn
ZVJlY3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuY3BwCmluZGV4IDRmNjRkNTQ3MWUzOTY2NTBmN2NhNzVlOWUxNjI1YzY2ZDcy
ZjExYjYuLjlkNjEzYTNhY2E5OTFjOTk1ZGUzOTc0ODcyNGM3MWZjYmE5NDJlOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBA
IC03Miw0ICs3Miw4IEBAIHZvaWQgV2ViQ29udGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyhH
cmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJbnRSZWN0JiBjbGlwCiAgICAgbV9jb250ZW50Q2xp
ZW50LT5wYWludENvbnRlbnRzKGNhbnZhcywgV2ViUmVjdChjbGlwKSk7CiB9CiAKK3ZvaWQgV2Vi
Q29udGVudExheWVySW1wbDo6ZGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQorewor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCA1MWYzNDRmN2NhZjEyNzExMjZhYzdiNDI2
OGVkNTQ2MTIxNDIxOWQ4Li4xYmE4ODRjOWIzNTdlYmYzODdlZGZmMzQ5ZjY1NmVhZmE2NmFlMWVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1w
bC5oCkBAIC00NCw2ICs0NCw3IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIENvbnRlbnRMYXllckRl
bGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCiAg
ICAgV2ViQ29udGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRDbGllbnQ7CiAgICAgYm9vbCBtX2Ry
YXdzQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllcklt
cGxUZXN0LmNwcAppbmRleCA4YTlmMzVkYzhhN2I4OWMwYzk0YmQ3NTM3YzY4NDY0ZmE3OGE2YmI4
Li5iOGFmYjJlNTUyMmJkMDA5YjhiMDgwODJhM2UxNTI5ZmVkYjhmMzFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCkBAIC0xNjIsNCAr
MTYyLDI4IEBAIFRFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlMYXllckNoYW5nZXNBcmVUcmFj
a2VkUHJvcGVybHkpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVQlRSRUVfRElEX05PVF9DSEFO
R0Uocm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oYXJiaXRyYXJ5SW50U2l6ZSkpOwogfQogCitU
RVNUKENDTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5U3VidHJlZVNlYXJjaCkKK3sKKyAgICAvLyBUaGUg
Y29uc3RydWN0b3Igb24gdGhpcyB3aWxsIGZha2UgdGhhdCB3ZSBhcmUgb24gdGhlIGNvcnJlY3Qg
dGhyZWFkLgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzZXRJbXBsVGhyZWFkOworCisg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMp
OworICAgIE93blB0cjxDQ0xheWVySW1wbD4gbWFza0xheWVyID0gQ0NMYXllckltcGw6OmNyZWF0
ZSg0KTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJlcGxpY2FMYXllciA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoNSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxh
eWVyLnJlbGVhc2UoKSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgp
KTsKKyAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1hc2tMYXllci5yZWxlYXNlKCkpOworICAgIHJv
b3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBFWFBFQ1RfRVEoMSwgcm9vdC0+
ZmluZExheWVySW5TdWJ0cmVlKDEpLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgcm9vdC0+Zmlu
ZExheWVySW5TdWJ0cmVlKDIpLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoMywgcm9vdC0+ZmluZExh
eWVySW5TdWJ0cmVlKDMpLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoNCwgcm9vdC0+ZmluZExheWVy
SW5TdWJ0cmVlKDQpLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoNSwgcm9vdC0+ZmluZExheWVySW5T
dWJ0cmVlKDUpLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcm9vdC0+ZmluZExheWVySW5TdWJ0
cmVlKDYpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggNzAwOWM4
YzNlOTNjYTZjYzAyZDQ1NTI1N2VmMTMwOWNlZGZmNjViZS4uMGNiYzJmM2I1ODdkOTk4NTU2YTA2
YTMyMDEwNzNiOGQ0N2Y5ZTY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTk1LDYgKzk1LDI1IEBA
IHB1YmxpYzoKICAgICAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgp
KTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlU2Ny
b2xsYWJsZUxheWVyKGludCBpZCwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IElu
dFNpemUmIHNpemUpCisgICAgeworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGxheWVyID0g
Q0NMYXllckltcGw6OmNyZWF0ZShpZCk7CisgICAgICAgIGxheWVyLT5zZXRTY3JvbGxhYmxlKHRy
dWUpOworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICBsYXll
ci0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBsYXllci0+c2V0Qm91bmRzKHNpemUp
OworICAgICAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZShzaXplLndpZHRo
KCkgKiAyLCBzaXplLmhlaWdodCgpICogMikpOworICAgICAgICByZXR1cm4gbGF5ZXIucmVsZWFz
ZSgpOworICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJh
bWUoKQorICAgIHsKKyAgICAgICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIo
Y3JlYXRlQ29udGV4dCgpKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRh
IGZyYW1lOworICAgICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZy
YW1lKSk7CisgICAgICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIH0KKwog
cHJvdGVjdGVkOgogICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbnRl
eHQoKQogICAgIHsKQEAgLTE3OCwxMCArMTk3LDEyIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0QW5kUmVkcmF3KQogewogICAgIHsKICAgICAg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAg
ICAgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7
CiAgICAgICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgICAgIHJvb3QtPnNldFNj
cm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsKICAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgICAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFu
ZERyYXdGcmFtZSgpOwogICAgIH0KIAogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxC
ZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMTk1LDEwICsyMTYsMTIgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiB7CiAgICAg
ewogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDApOworICAgICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAw
LCAxMDApKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9v
dC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgICAgICByb290LT5zZXRN
YXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgICAgIG1faG9zdEltcGwt
PnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgICAgIGluaXRpYWxpemVMYXllclJl
bmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgfQogICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9o
b3N0SW1wbC0+cm9vdExheWVyKCk7CiAKQEAgLTIxMywxMSArMjM2LDE0IEBAIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgd2hlZWxFdmVudEhhbmRsZXJzKQogVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQpCiB7CiAgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5z
ZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICByb290LT5z
ZXRTY3JvbGxhYmxlKHRydWUpOwogICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50
KDAsIDApKTsKICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAw
KSk7CiAgICAgcm9vdC0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHRydWUpOwogICAgIG1f
aG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgaW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKwogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5z
Y3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CiAgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
R2VzdHVyZSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOwogfQpAQCAtMjI1
LDExICsyNTEsMTQgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzaG91bGRTY3Jv
bGxPbk1haW5UaHJlYWQpCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIG5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uQmFzaWMpCiB7CiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KElu
dFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwog
ICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsKICAgICByb290LT5z
ZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgcm9vdC0+c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb24oSW50UmVjdCgwLCAwLCA1MCwgNTApKTsKICAgICBtX2hvc3RJ
bXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJl
bmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKICAgICAvLyBBbGwgc2Nyb2xsIHR5cGVzIGluc2lkZSB0
aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdpb24gc2hvdWxkIGZhaWwuCiAgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOwogICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgyNSwgMjUpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6R2VzdHVyZSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxG
YWlsZWQpOwpAQCAtMjQ1LDE4ICsyNzQsMTUgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkJhc2ljKQogCiBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uV2l0aE9mZnNldCkKIHsKLSAgICBt
X2hvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjcmVhdGVDb250ZXh0KCkpOwotCiAg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAg
ICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAg
ICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9u
KEludFBvaW50KDAsIDApKTsKICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXpl
KDEwMCwgMTAwKSk7CiAgICAgcm9vdC0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oSW50UmVj
dCgwLCAwLCA1MCwgNTApKTsKICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC0yNSwg
MCkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0gICAg
Q0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOwotICAgIEVYUEVDVF9UUlVFKG1f
aG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5
ZXJzKGZyYW1lKTsgLy8gVXBkYXRlIGRyYXcgdHJhbnNmb3JtcyBzbyB3ZSBjYW4gY29ycmVjdGx5
IG1hcCBwb2ludHMgaW50byBsYXllciBzcGFjZS4KKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJl
ckFuZERyYXdGcmFtZSgpOwogCiAgICAgLy8gVGhpcyBwb2ludCB3b3VsZCBmYWxsIGludG8gdGhl
IG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uIGV4Y2VwdCB0aGF0IHdlJ3ZlIG1vdmVkIHRoZSBs
YXllciBkb3duIGJ5IDI1IHBpeGVscy4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoNDAsIDEwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMjcxLDggKzI5Nyw5IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGluY2hHZXN0dXJlKQogewogICAgIHNldHVw
U2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKLSAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIg
PSBtX2hvc3RJbXBsLT5zY3JvbGxMYXllcigpOworICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXll
ciA9IG1faG9zdEltcGwtPnJvb3RTY3JvbGxMYXllcigpOwogICAgIEFTU0VSVChzY3JvbGxMYXll
cik7CiAKICAgICBjb25zdCBmbG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUsIG1heFBhZ2VTY2FsZSA9
IDQ7CkBAIC0zNTEsOCArMzc4LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBw
YWdlU2NhbGVBbmltYXRpb24pCiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJ
bnRTaXplKDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNp
emUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsK
IAotICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnNjcm9sbExheWVy
KCk7CisgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9s
bExheWVyKCk7CiAgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKIAogICAgIGNvbnN0IGZsb2F0IG1p
blBhZ2VTY2FsZSA9IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKQEAgLTU1OSw2ICs1ODcsMjY5IEBA
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hlbkFu
aW1hdGlvblVzZXNDaGVja2VyYm9hcmQpCiAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFt
ZSk7CiB9CiAKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdElnbm9y
ZWQpCit7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgwKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBtX2hvc3RJbXBsLT5z
ZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNl
IGxheWVyIGlzIG5vdCBzY3JvbGxhYmxlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2Rp
ZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOwor
fQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE5vbkNvbXBvc2l0ZWRS
b290KQoreworICAgIC8vIFRlc3QgdGhlIGNvbmZpZ3VyYXRpb24gd2hlcmUgYSBub24tY29tcG9z
aXRlZCByb290IGxheWVyIGlzIGVtYmVkZGVkIGluIGEKKyAgICAvLyBzY3JvbGxhYmxlIG91dGVy
IGxheWVyLgorICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gY29udGVudExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBj
b250ZW50TGF5ZXItPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQodHJ1ZSk7CisgICAgY29udGVu
dExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY29udGVudExheWVyLT5zZXRQb3Np
dGlvbihJbnRQb2ludCg1LCA1KSk7CisgICAgY29udGVudExheWVyLT5zZXRCb3VuZHMoc3VyZmFj
ZVNpemUpOworICAgIGNvbnRlbnRMYXllci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKHN1cmZh
Y2VTaXplLndpZHRoKCkgKiAyLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSAqIDIpKTsKKworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwor
ICAgIHNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIHNjcm9sbExheWVyLT5h
ZGRDaGlsZChjb250ZW50TGF5ZXIucmVsZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNldFJv
b3RMYXllcihzY3JvbGxMYXllci5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdw
b3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3
RnJhbWUoKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2lu
dCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwg
MTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2Rp
ZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9
CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1p
dEFuZFJlZHJhdykKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290
LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEVYUEVDVF9FUShtX2hv
c3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9z
dEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxF
bmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9U
UlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsTWlzc2VzQ2hpbGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwg
MTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
MCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9p
bnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJv
b3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNp
emUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAv
LyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBpbnB1dCBjb29yZGluYXRlIGlz
IG91dHNpZGUgdGhlIGxheWVyIGJvdW5kYXJpZXMuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVs
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxT
RShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21t
aXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0Jh
Y2tmYWNpbmdDaGlsZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0
UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNp
emUoc3VyZmFjZVNpemUpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAg
IG1hdHJpeC5yb3RhdGUzZCgxODAsIDAsIDApOworICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0obWF0
cml4KTsKKyAgICBjaGlsZC0+c2V0RG91YmxlU2lkZWQoZmFsc2UpOworCisgICAgcm9vdC0+YWRk
Q2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dC5yZWxlYXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7
CisKKyAgICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBoaXQgbGF5ZXIg
aXMgbm90IGZhY2luZyB0aGUgdmlld2VyLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2Rp
ZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOwor
fQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJsb2NrZWRCeUNvbnRl
bnRMYXllcikKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBjb250ZW50TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2hvdWxk
U2Nyb2xsT25NYWluVGhyZWFkKHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2Nyb2xsYWJs
ZShmYWxzZSk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0gY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBz
Y3JvbGxMYXllci0+YWRkQ2hpbGQoY29udGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJl
bmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGxpbmcgZmFpbHMgYmVjYXVzZSB0
aGUgY29udGVudCBsYXllciBpcyBhc2tpbmcgdG8gYmUgc2Nyb2xsZWQgb24gdGhlIG1haW4gdGhy
ZWFkLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbEZhaWxlZCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
Um9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1cmZh
Y2VTaXplKDEwLCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1
KSwgc3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVh
c2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAg
ICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgSW50U2l6ZSBz
Y3JvbGxEZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBleHBlY3RlZFNjcm9sbERlbHRhKHNjcm9s
bERlbHRhKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9zdEltcGwtPnJvb3RM
YXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5z
Y3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAg
ICAvLyBTZXQgbmV3IHBhZ2Ugc2NhbGUgZnJvbSBtYWluIHRocmVhZC4KKyAgICBtX2hvc3RJbXBs
LT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCBwYWdlU2NhbGUsIHBhZ2VT
Y2FsZSk7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSBzY3JvbGwgZGVs
dGEuCisgICAgZXhwZWN0ZWRTY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGUpOworICAgIE93blB0
cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Nj
cm9sbERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAwLCBl
eHBlY3RlZFNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIGFs
c28gaGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXll
cigpLT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9sbCk7CisKKyAgICAvLyBU
aGUgcGFnZSBzY2FsZSBkZWx0YSByZW1haW5zIGNvbnN0YW50IGJlY2F1c2UgdGhlIGltcGwgdGhy
ZWFkIGRpZCBub3Qgc2NhbGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigp
LT5wYWdlU2NhbGVEZWx0YSgpLCAxKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFkKQoreworICAgIElu
dFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9h
dFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFj
ZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCAx
LCBwYWdlU2NhbGUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7
CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBJbnRTaXplIGV4cGVjdGVk
U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIEludFNpemUgZXhwZWN0ZWRNYXhTY3JvbGwo
bV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCkpOworICAgIEVYUEVD
VF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwor
ICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5z
Y3JvbGxFbmQoKTsKKworICAgIC8vIFNldCBuZXcgcGFnZSBzY2FsZSBvbiBpbXBsIHRocmVhZCBi
eSBwaW5jaGluZy4KKyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVCZWdpbigpOworICAgIG1f
aG9zdEltcGwtPnBpbmNoR2VzdHVyZVVwZGF0ZShwYWdlU2NhbGUsIEludFBvaW50KCkpOworICAg
IG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZUVuZCgpOworCisgICAgLy8gVGhlIHNjcm9sbCBkZWx0
YSBpcyBub3Qgc2NhbGVkIGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisg
ICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5w
cm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0
KCksIDAsIGV4cGVjdGVkU2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBz
aG91bGQgYWxzbyBoYXZlIGJlZW4gdXBkYXRlZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
cm9vdExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKKwor
ICAgIC8vIFRoZSBwYWdlIHNjYWxlIGRlbHRhIHNob3VsZCBtYXRjaCB0aGUgbmV3IHNjYWxlIG9u
IHRoZSBpbXBsIHNpZGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5w
YWdlU2NhbGVEZWx0YSgpLCBwYWdlU2NhbGUpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHNjcm9sbENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQorewor
ICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIC8vIEFsc28gbWFyayB0aGUgcm9v
dCBzY3JvbGxhYmxlIHNvIGl0IGJlY29tZXMgdGhlIHJvb3Qgc2Nyb2xsIGxheWVyLgorICAgIHJv
b3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xs
YWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRW
aWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5k
RHJhd0ZyYW1lKCk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290
TGF5ZXIoKS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEo
MCwgMTApOworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Cisg
ICAgSW50U2l6ZSBleHBlY3RlZE1heFNjcm9sbChjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSk7
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1f
aG9zdEltcGwtPnNjcm9sbEVuZCgpOworCisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBt
X2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCAxLCBwYWdl
U2NhbGUpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRl
bHRhLgorICAgIGV4cGVjdGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAgICBPd25Q
dHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NT
Y3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMSwg
ZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBu
b3QgaGF2ZSBjaGFuZ2VkLgorICAgIEVYUEVDVF9FUShjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24o
KSwgZXhwZWN0ZWRNYXhTY3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZGVsdGEgcmVt
YWlucyBjb25zdGFudCBiZWNhdXNlIHRoZSBpbXBsIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAg
IEVYUEVDVF9FUShjaGlsZC0+cGFnZVNjYWxlRGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdCkKK3sKKyAgICAvLyBT
Y3JvbGwgYSBjaGlsZCBsYXllciBiZXlvbmQgaXRzIG1heGltdW0gc2Nyb2xsIHJhbmdlIGFuZCBt
YWtlIHN1cmUgdGhlCisgICAgLy8gcGFyZW50IGxheWVyIGlzIHNjcm9sbGVkIG9uIHRoZSBheGlz
IG9uIHdoaWNoIHRoZSBjaGlsZCB3YXMgdW5hYmxlIHRvCisgICAgLy8gc2Nyb2xsLgorICAgIElu
dFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUp
OworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gY3JlYXRlU2Nyb2xsYWJs
ZUxheWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBncmFuZENoaWxk
LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCA1KSk7CisKKyAgICBPd25QdHI8Q0NMYXll
ckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSks
IHN1cmZhY2VTaXplKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMywg
MCkpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBy
b290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1
cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwor
ICAgIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgtMywgLTcpOworICAgICAgICBFWFBF
Q1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsK
KyAgICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgICAgICBtX2hv
c3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNl
dD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKworICAg
ICAgICAvLyBUaGUgZ3JhbmQgY2hpbGQgc2hvdWxkIGhhdmUgc2Nyb2xsZWQgdXAgdG8gaXRzIGxp
bWl0LgorICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIo
KS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQg
PSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNj
cm9sbEluZm8uZ2V0KCksIGdyYW5kQ2hpbGQtPmlkKCksIEludFNpemUoMCwgLTUpKTsKKworICAg
ICAgICAvLyBUaGUgY2hpbGQgc2hvdWxkIGhhdmUgb25seSBzY3JvbGxlZCBvbiB0aGUgb3RoZXIg
YXhpcy4KKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5p
ZCgpLCBJbnRTaXplKC0zLCAwKSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHNjcm9sbEJlZm9yZVJlZHJhdykKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXpl
KDEwLCAxMCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVM
YXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwt
PnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICAvLyBEcmF3IG9uZSBmcmFtZSBh
bmQgdGhlbiBpbW1lZGlhdGVseSByZWJ1aWxkIHRoZSBsYXllciB0cmVlIHRvIG1pbWljIGEgdHJl
ZSBzeW5jaHJvbml6YXRpb24uCisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJh
bWUoKTsKKyAgICBtX2hvc3RJbXBsLT5yZWxlYXNlUm9vdExheWVyKCk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUp
LCBzdXJmYWNlU2l6ZSkpOworCisgICAgLy8gU2Nyb2xsaW5nIHNob3VsZCBzdGlsbCB3b3JrIGV2
ZW4gdGhvdWdoIHdlIGRpZCBub3QgZHJhdyB5ZXQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwp
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7Cit9CisKIGNsYXNzIEJsZW5k
U3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBw
dWJsaWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCmluZGV4IGE3NGU0Y2E0NTVjNmQ0NjYzNDQ5YzdmYTM4MjA1Yjc2YjFkY2ZmZTgu
LjUxYzdjNzE4OTBkZTlmNDM3NTMzYWRmZDZmNTQ1MDY2NmVhZWYyMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAt
MTM3OCw2ICsxMzc4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBwcmVz
ZXJ2ZXMzRCgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChj
b25zdCBJbnRTaXplJikgeyB9CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCog
bV90ZXN0OwpAQCAtMTUyNyw3ICsxNTI4LDggQEAgY2xhc3MgTW9ja0NvbnRlbnRMYXllckRlbGVn
YXRlIDogcHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBib29sIGRy
YXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBNT0NLX0NPTlNUX01FVEhP
RDAocHJlc2VydmVzM0QsIGJvb2woKSk7Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgeyB9CiAgICAgdm9pZCBub3RpZnlTeW5jUmVx
dWlyZWQoKSB7IH0KIH07CiAKQEAgLTIyOTUsNCArMjI5Nyw3MCBAQCBURVNUX0YoQ0NMYXllclRy
ZWVIb3N0VGVzdEZyYWN0aW9uYWxTY3JvbGwsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3RU
aHJlYWRlZCgpOwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
ciA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcigpCisgICAgICAgIDogbV9zY3JvbGxBbW91bnQoMiwg
MSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgewor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCkp
OworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVh
dGUoJm1fbW9ja0RlbGVnYXRlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5k
cyhJbnRTaXplKDEwLCAxMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0SXNEcmF3
YWJsZSh0cnVlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1
ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRT
aXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFk
ZENoaWxkKG1fcm9vdFNjcm9sbExheWVyKTsKKyAgICAgICAgbV9jaGlsZExheWVyID0gQ29udGVu
dExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9tb2NrRGVsZWdhdGUpOworICAgICAgICBtX2NoaWxk
TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUwLCA1MCkpOworICAgICAgICBtX2NoaWxkTGF5ZXIt
PnNldElzRHJhd2FibGUodHJ1ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJs
ZSh0cnVlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRT
aXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2No
aWxkTGF5ZXIpOworICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXpl
JiBzY3JvbGxEZWx0YSwgZmxvYXQpCisgICAgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9
IG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Jvb3RTY3Jv
bGxMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhv
c3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKG1fcm9vdFNjcm9sbExheWVy
LT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJl
ZUhvc3QtPmZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVy
LT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSAr
IG1fc2Nyb2xsQW1vdW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09u
Q0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChp
bXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5z
Y3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+
c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7
CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAg
ICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAg
IHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsK
KyAgICBNb2NrQ29udGVudExheWVyRGVsZWdhdGUgbV9tb2NrRGVsZWdhdGU7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bV9yb290U2Nyb2xsTGF5ZXI7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9s
bENoaWxkTGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3QodHJ1ZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136690</attachid>
            <date>2012-04-11 10:19:27 -0700</date>
            <delta_ts>2012-04-19 03:22:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120411181925.patch</filename>
            <type>text/plain</type>
            <size>62083</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNzAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjAzYzQ2ZDI3YzEzZWMx
YmYxNzEwNzY0ZjYyMjgwNDc5MjFlYTJkNS4uYWU3OGM2NmFkNTRiOTM4MjVmNjMzZDQ1YWUxYjVh
YTViYmIzNTNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVu
IGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xs
ZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBBZGRlZCBuZXcgd2Via2l0X3VuaXRf
dGVzdHMgdG8gdmVyaWZ5IHNjcm9sbGluZyBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoQ29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpmaW5kTGF5ZXJJblN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllcklt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJsZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcm9s
bExheWVyRm9yQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0U2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDQt
MDkgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2Vi
IEluc3BlY3Rvcjogc2VhcmNoaW5nIGRvY3VtZW50IHdpdGggbm8gZG9jdW1lbnRFbGVtZW50IHJl
c3VsdHMgaW4gMHgwIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTAxNTc3
ZGNmZjI0NTJjZjFkOTBkOWQ3OGMwMGViMzI5MTVjNmRjZC4uYzZjOTNmYWQzNmY4MDFmYjIzNmU5
Mjk2YmMwZTMzM2JhYjYzYjNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzOCBAQAorMjAxMi0wMy0yOCAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCB0ZXN0cyBmb3Igc2Nyb2xsaW5nIG5vbi1yb290
IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvV2ViQ29udGVudExheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6OmRpZFNjcm9sbCk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmg6CisgICAgICAg
IChXZWJDb250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVySW1wbFRlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6OmNyZWF0ZVNjcm9sbGFibGVMYXllcik6Cisg
ICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6OmluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUX0YpOgorICAgICAgICAoV2ViS2l0VGVz
dHMpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAo
V1RGOjpUZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGU6OmRpZFNjcm9sbCk6CisgICAgICAg
IChXVEY6Ok1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50cyk6CisgICAgICAg
IChXVEY6Ok1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXI6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3Jv
bGxDaGlsZExheWVyOjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6VEVT
VF9GKToKKwogMjAxMi0wNC0wOSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLCBXZWJWaWV3SW1wbDo6
bV9sYXN0TW91c2VQb3NpdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApp
bmRleCA3NTFiYzY1ZjZlZTNlNzRmNTE3MjEwOWYxNThmMDU1YTAwYWVkMDNkLi4xMTkzMzBmOTBj
ZTEyYTJiZTMyMzkzMmFhNTY4NmMzOTE1ZTliNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCkBAIC0xNDUsNSArMTQ1LDEyIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OnNldE9wYXF1ZShib29sIG9wYXF1ZSkKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+c2V0
T3BhcXVlKG9wYXF1ZSk7CiB9CiAKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNjcm9sbEJ5
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIHNldFNjcm9sbFBvc2l0aW9uKHNj
cm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAg
ICAgIG1fZGVsZWdhdGUtPmRpZFNjcm9sbChzY3JvbGxEZWx0YSk7Cit9CisKIH0KICNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uaAppbmRleCBlNjk5NGEyMWFlZmFjMjE0MDg4N2U1YmJkOGFiYjIwM2M5YWI4MTc5Li4xNmQ2
NzhlZDY0YTA2MWY4ZjgxNWQ2M2FjZTA1OTJmOTA0ZTM1MDNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgQ29udGVudExheWVyRGVsZWdh
dGUgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRlbnRMYXllckRlbGVnYXRlKCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50
UmVjdCYgY2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3QgSW50U2l6
ZSYpID0gMDsKIH07CiAKIC8vIEEgTGF5ZXIgdGhhdCByZXF1aXJlcyBhIEdyYXBoaWNzQ29udGV4
dCB0byByZW5kZXIgaXRzIGNvbnRlbnRzLgpAQCAtNjMsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlKGJvb2wpOwogCisgICAgdmlydHVhbCB2b2lkIHNjcm9s
bEJ5KGNvbnN0IEludFNpemUmKTsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRM
YXllckNocm9taXVtKENvbnRlbnRMYXllckRlbGVnYXRlKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmgKaW5kZXggZTllM2I4NTIwMDE0NzMyZDRlMTE2MDBhYzAzODIyM2VjZWUw
YWJjMi4uMmU2YWNiOTExOTMyNjI3MGVkZmRjZWQ3ZjBhYzJiMWU1NjE5MDgxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTExMyw2ICsxMTMsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlw
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKSB7IH0KIAogICAg
IC8vIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggMTNiYTA2ZGFkNzQ4ZDRmY2YxNDcwMjVmZTM4MWY5YTA1ZWNiYWIw
Yi4uMWIzZWY3MWJmNmM3YmZkYjIzYjkxNTAwNjEwMGM2M2FiODJmNGZjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTM3Miw2ICszNzIsMTQgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgc2V0TmVl
ZHNDb21taXQoKTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikKK3sKKyAgICBpZiAobV9tYXhTY3Jv
bGxQb3NpdGlvbiA9PSBtYXhTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG1f
bWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsKKyAgICBzZXROZWVkc0NvbW1p
dCgpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxh
YmxlKQogewogICAgIGlmIChtX3Njcm9sbGFibGUgPT0gc2Nyb2xsYWJsZSkKQEAgLTQ4Miw2ICs0
OTAsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwq
IGxheWVyKQogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+
c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0
aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbiht
X21heFNjcm9sbFBvc2l0aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9z
dWJsYXllclRyYW5zZm9ybSk7CiAgICAgaWYgKCF0cmFuc2Zvcm1Jc0FuaW1hdGluZygpKQogICAg
ICAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApp
bmRleCA1MjRlMTVkZjk1YTkxNGJiMjBmYmViMDI0NWNlM2JmMDFiYzc2ZjZlLi4yNzliMTk0Y2Uz
ZTIyMDRiYzYwZjA4NWEyNDFmMGQzODUzMmIwN2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0x
MzYsMTIgKzEzNiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYpOwogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9z
aXRpb24oY29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorCiAgICAgdm9pZCBz
ZXRTY3JvbGxhYmxlKGJvb2wpOworICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsYWJsZTsgfQogICAgIHZvaWQgc2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKGJv
b2wpOwogICAgIHZvaWQgc2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyhib29sKTsKICAgICBjb25z
dCBSZWdpb24mIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkgeyByZXR1cm4gbV9ub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbjsgfQogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29u
c3QgUmVnaW9uJik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQo
KSB7IG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb25DaGFuZ2VkID0gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJikgeyB9CiAKICAgICBJbnRTaXplIHNjcm9s
bERlbHRhKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgpOyB9CiAKQEAgLTI5Nyw2ICszMDIsNyBA
QCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50UmVjdCBtX3Zpc2libGVM
YXllclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1f
bWF4U2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAgICAgYm9vbCBtX3No
b3VsZFNjcm9sbE9uTWFpblRocmVhZDsKICAgICBib29sIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVy
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBhMmE0MTg1MzI5YjhkOWFmZDkyZDZjYzRh
MDUyZmRiNzE4YThjYjM4Li42YWJhMDM0ZWZmYjBmNTA2NjMwMWE3ODJkZDcyMmQ2ZWZhYzRkNjZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xMDYsNiArMTA2LDIyIEBAIHZvaWQgQ0NM
YXllckltcGw6OnJlbW92ZUFsbENoaWxkcmVuKCkKICAgICAgICAgbV9jaGlsZHJlblswXS0+cmVt
b3ZlRnJvbVBhcmVudCgpOwogfQogCitDQ0xheWVySW1wbCogQ0NMYXllckltcGw6OmZpbmRMYXll
ckluU3VidHJlZShpbnQgbGF5ZXJJZCkKK3sKKyAgICBpZiAoaWQoKSA9PSBsYXllcklkKQorICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICBpZiAobV9tYXNrTGF5ZXIgJiYgbV9tYXNrTGF5ZXItPmlk
KCkgPT0gbGF5ZXJJZCkKKyAgICAgICAgcmV0dXJuIG1fbWFza0xheWVyLmdldCgpOworICAgIGlm
IChtX3JlcGxpY2FMYXllciAmJiBtX3JlcGxpY2FMYXllci0+aWQoKSA9PSBsYXllcklkKQorICAg
ICAgICByZXR1cm4gbV9yZXBsaWNhTGF5ZXIuZ2V0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBmb3Vu
ZCA9IG1fY2hpbGRyZW5baV0tPmZpbmRMYXllckluU3VidHJlZShsYXllcklkKTsKKyAgICAgICAg
aWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6Y2xlYXJDaGlsZExpc3QoKQogewogICAgIG1fY2hp
bGRyZW4uY2xlYXIoKTsKQEAgLTE1OSw2ICsxNzUsMzcgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2Ny
b2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkRm9yU3VidHJlZSgpOwogfQogCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVz
IENDTGF5ZXJJbXBsOjp0cnlTY3JvbGwoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBp
ZiAoc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoInRy
eVNjcm9sbCBGYWlsZWQgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkIiwgdGhpcywgMCk7CisgICAg
ICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOworICAgIH0KKwor
ICAgIGlmICghc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pc0ludmVydGlibGUoKSkgeworICAgICAg
ICBUUkFDRV9FVkVOVCgidHJ5U2Nyb2xsIEZhaWxlZCBub25JbnZlcnRpYmxlVHJhbnNmb3JtIiwg
dGhpcywgMCk7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdu
b3JlZDsKKyAgICB9CisKKyAgICBJbnRQb2ludCBjb250ZW50UG9pbnQoc2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworICAgIGlmIChub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbigpLmNvbnRhaW5zKGNvbnRlbnRQb2ludCkpIHsKKyAgICAgICAg
VFJBQ0VfRVZFTlQoInRyeVNjcm9sbCBGYWlsZWQgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24iLCB0
aGlzLCAwKTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWls
ZWQ7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVs
ICYmIGhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgidHJ5
U2Nyb2xsIEZhaWxlZCB3aGVlbEV2ZW50SGFuZGxlcnMiLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0
dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisgICAgfQorCisgICAgaWYg
KCFzY3JvbGxhYmxlKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoInRyeVNjcm9sbCBJZ25vcmVk
IG5vdCBzY3JvbGxhYmxlIiwgdGhpcywgMCk7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKKyAgICB9CisKKyAgICByZXR1cm4gQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ7Cit9CisKIGNvbnN0IEludFJlY3QgQ0NMYXllckltcGw6
OmdldERyYXdSZWN0KCkgY29uc3QKIHsKICAgICAvLyBGb3JtIHRoZSBtYXRyaXggdXNlZCBieSB0
aGUgc2hhZGVyIHRvIG1hcCB0aGUgY29ybmVycyBvZiB0aGUgbGF5ZXIncwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmgKaW5kZXggN2I3NTk4NDM1MTA1OGJkNzcxMTAzYzNkOTZhOWQ0ZDZiNDgwZDdlMi4uN2Ji
MGY4ZmU1NjVmMjgzMzhjZThkNTNmMTU0Njg0YzA4ZTM1N2IwMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVGV4
dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAi
Y2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgImNjL0ND
U2hhcmVkUXVhZFN0YXRlLmgiCkBAIC03Miw2ICs3MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgdm9pZCByZW1vdmVBbGxDaGlsZHJlbigpOwogCisgICAg
Ly8gUmV0dXJucyBhIGxheWVyIHdpdGggdGhlIGdpdmVuIGlkIGlmIG9uZSBleGlzdHMgaW4gdGhl
IHN1YnRyZWUgc3RhcnRpbmcKKyAgICAvLyBmcm9tIHRoaXMgbGF5ZXIgKGluY2x1ZGluZyBtYXNr
IGFuZCByZXBsaWNhIGxheWVycykuCisgICAgQ0NMYXllckltcGwqIGZpbmRMYXllckluU3VidHJl
ZShpbnQgbGF5ZXJJZCk7CisKICAgICB2b2lkIHNldE1hc2tMYXllcihQYXNzT3duUHRyPENDTGF5
ZXJJbXBsPik7CiAgICAgQ0NMYXllckltcGwqIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1f
bWFza0xheWVyLmdldCgpOyB9CiAKQEAgLTE5NSw2ICsyMDAsOCBAQCBwdWJsaWM6CiAgICAgY29u
c3QgUmVnaW9uJiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9u
RmFzdFNjcm9sbGFibGVSZWdpb247IH0KICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKSB7IG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBy
ZWdpb247IH0KIAorICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgdHJ5U2Ny
b2xsKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsSW5wdXRUeXBlKSBjb25zdDsKKwogICAgIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXll
clJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVMYXllclJlY3Q7IH0KICAgICB2b2lkIHNl
dFZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCkgeyBtX3Zp
c2libGVMYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCmluZGV4IDA4NmE2NzhiN2UxYjI3OGUyOTIwMzc3NmRkYjM4MzkyYjY1Mzli
ZjQuLjQxZTQzMmNlM2MxYTY3NmM2ZGM1ZGE0ZDExNDUyOGQ5OGQzODgyYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTk2LDE1ICs1OTYsNjIgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7
CiB9CiAKK3N0YXRpYyBMYXllckNocm9taXVtKiBmaW5kTGF5ZXJCeUlkKExheWVyQ2hyb21pdW0q
IGxheWVyLCBpbnQgaWQpCit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAobGF5ZXItPmlkKCkgPT0gaWQpCisgICAgICAgIHJldHVybiBsYXllcjsKKworICAg
IGlmIChsYXllci0+bWFza0xheWVyKCkgJiYgbGF5ZXItPm1hc2tMYXllcigpLT5pZCgpID09IGlk
KQorICAgICAgICByZXR1cm4gbGF5ZXItPm1hc2tMYXllcigpOworCisgICAgaWYgKGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPmlkKCkgPT0gaWQpCisgICAg
ICAgIHJldHVybiBsYXllci0+cmVwbGljYUxheWVyKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hy
b21pdW0qIGZvdW5kID0gZmluZExheWVyQnlJZChsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwg
aWQpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBMYXllckNocm9taXVtKiBmaW5kRmlyc3RT
Y3JvbGxhYmxlTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgaWYgKCFsYXllcikK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPnNjcm9sbGFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hp
bGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBmb3VuZCA9IGZp
bmRGaXJzdFNjcm9sbGFibGVMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisgICAg
ICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2NhbGUo
Y29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVzaGlu
ZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0gICAg
aWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgTGF5ZXJDaHJv
bWl1bSogcm9vdFNjcm9sbExheWVyID0gZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKG1fcm9vdExh
eWVyLmdldCgpKTsKKyAgICBJbnRTaXplIHJvb3RTY3JvbGxEZWx0YTsKIAotICAgIEFTU0VSVChp
bmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZv
LnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2Nh
bGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW5mby5zY3JvbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21p
dW0qIGxheWVyID0gZmluZExheWVyQnlJZChtX3Jvb3RMYXllci5nZXQoKSwgaW5mby5zY3JvbGxz
W2ldLmxheWVySWQpOworICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChsYXllciA9PSByb290U2Nyb2xsTGF5ZXIpCisgICAgICAgICAgICByb290
U2Nyb2xsRGVsdGEgKz0gaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRhOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBsYXllci0+c2Nyb2xsQnkoaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRh
KTsKKyAgICB9CisgICAgaWYgKCFyb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkgfHwgaW5mby5wYWdl
U2NhbGVEZWx0YSAhPSAxKQorICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShy
b290U2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggMjAxYmI1MTRkZTgzMDM3
Mzc5M2U1NDE5NjJmZGYzMDg1MDMzNTRkNC4uM2ZhYTEyNjQwZDNiYWJhYjk0ZDc2MjViNTk5Mjdm
MzI1ZDcyMDU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAg
LTEwNCw3ICsxMDQsOCBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBs
KGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgIDogbV9jbGllbnQo
Y2xpZW50KQogICAgICwgbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKICAgICAsIG1fZnJhbWVOdW1i
ZXIoMCkKLSAgICAsIG1fc2Nyb2xsTGF5ZXJJbXBsKDApCisgICAgLCBtX3Jvb3RTY3JvbGxMYXll
ckltcGwoMCkKKyAgICAsIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKDApCiAgICAgLCBt
X3NldHRpbmdzKHNldHRpbmdzKQogICAgICwgbV92aXNpYmxlKHRydWUpCiAgICAgLCBtX3BhZ2VT
Y2FsZSgxKQpAQCAtMTYzLDEwICsxNjQsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjph
bmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSkKIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRT
aXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBk
b3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExh
eWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRh
KCkpOworICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3Jv
bGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNj
cm9sbERlbHRhKCkpOwogICAgIHNjcm9sbFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwog
ICAgIGZsb2F0IHNjYWxlVG90YWwgPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAg
ICAgSW50U2l6ZSBzY2FsZWRDb250ZW50U2l6ZSA9IGNvbnRlbnRTaXplKCk7CkBAIC0zNjQsOSAr
MzY1LDkgQEAgSW50U2l6ZSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0
CiB7CiAgICAgLy8gVE9ETyhhZWxpYXMpOiBIYXJkY29kaW5nIHRoZSBmaXJzdCBjaGlsZCBoZXJl
IGlzIHdlaXJkLiBUaGluayBvZgogICAgIC8vIGEgY2xlYW5lciB3YXkgdG8gZ2V0IHRoZSBjb250
ZW50Qm91bmRzIG9uIHRoZSBJbXBsIHNpZGUuCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8
fCBtX3Njcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3Jv
b3RTY3JvbGxMYXllckltcGwgfHwgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLSAgICByZXR1cm4gbV9zY3JvbGxM
YXllckltcGwtPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsKKyAgICByZXR1cm4gbV9y
b290U2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7CiB9CiAK
IGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1l
KQpAQCAtMzc1LDYgKzM3Niw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRv
RHJhdyhGcmFtZURhdGEmIGZyYW1lKQogCiAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmNsZWFyKCk7
CiAgICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOworICAgIG1fbW9zdFJl
Y2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKIAogICAgIGlmICghcm9vdExheWVy
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM4Miw2ICszODQsOCBAQCBib29sIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKICAgICBpZiAo
IWNhbGN1bGF0ZVJlbmRlclBhc3NlcyhmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnJlbmRlclN1
cmZhY2VMYXllckxpc3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBtX21vc3RSZWNl
bnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdDsK
KwogICAgIC8vIElmIHdlIHJldHVybiB0cnVlLCB0aGVuIHdlIGV4cGVjdCBkcmF3TGF5ZXJzKCkg
dG8gYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZ2Fpbi4KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTQ1Niw3ICs0NjAsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnJlYWRiYWNrKHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBtX2xh
eWVyUmVuZGVyZXItPmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CiB9CiAKLXN0
YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKK3N0
YXRpYyBDQ0xheWVySW1wbCogZmluZFJvb3RTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIp
CiB7CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NjUsNyArNDY5LDcg
QEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVy
KQogICAgICAgICByZXR1cm4gbGF5ZXI7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
eWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiBmb3Vu
ZCA9IGZpbmRTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisgICAgICAg
IENDTGF5ZXJJbXBsKiBmb3VuZCA9IGZpbmRSb290U2Nyb2xsTGF5ZXIobGF5ZXItPmNoaWxkcmVu
KClbaV0uZ2V0KCkpOwogICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICByZXR1cm4gZm91
bmQ7CiAgICAgfQpAQCAtNDczLDEyICs0NzcsNDEgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5k
U2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogICAgIHJldHVybiAwOwogfQogCisvLyBD
b250ZW50IGxheWVycyBjYW4gYmUgZWl0aGVyIGRpcmVjdGx5IHNjcm9sbGFibGUgb3IgY29udGFp
bmVkIGluIGFuIG91dGVyCisvLyBzY3JvbGxpbmcgbGF5ZXIgd2hpY2ggYXBwbGllcyB0aGUgc2Ny
b2xsIHRyYW5zZm9ybS4gR2l2ZW4gYSBjb250ZW50IGxheWVyLAorLy8gdGhpcyBmdW5jdGlvbiBy
ZXR1cm5zIHRoZSBhc3NvY2lhdGVkIHNjcm9sbCBsYXllciBpZiBhbnkuCitzdGF0aWMgQ0NMYXll
ckltcGwqIGZpbmRTY3JvbGxMYXllckZvckNvbnRlbnRMYXllcihDQ0xheWVySW1wbCogbGF5ZXJJ
bXBsKQoreworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
IChsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVySW1wbDsKKwor
ICAgIGlmIChsYXllckltcGwtPmRyYXdzQ29udGVudCgpICYmIGxheWVySW1wbC0+cGFyZW50KCkg
JiYgbGF5ZXJJbXBsLT5wYXJlbnQoKS0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1cm4gbGF5
ZXJJbXBsLT5wYXJlbnQoKTsKKworICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsK
ICAgICBtX3Jvb3RMYXllckltcGwgPSBsYXllcjsKKyAgICBtX3Jvb3RTY3JvbGxMYXllckltcGwg
PSBmaW5kUm9vdFNjcm9sbExheWVyKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisKKyAgICBpZiAo
IW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9yb290TGF5ZXJJbXBsICYmIG1fcm9vdExheWVySW1wbC0+ZmluZExheWVySW5TdWJ0cmVl
KG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLT5pZCgpKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSAwOworfQogCi0gICAgLy8gRklY
TUU6IEN1cnJlbnRseSwgdGhpcyBvbmx5IGZpbmRzIHRoZSBmaXJzdCBzY3JvbGxhYmxlIGxheWVy
LgotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNjcm9sbExheWVyKG1fcm9vdExheWVySW1w
bC5nZXQoKSk7CitQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpy
ZWxlYXNlUm9vdExheWVyKCkKK3sKKyAgICBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmNsZWFyKCk7CisgICAgcmV0dXJuIG1fcm9vdExheWVySW1wbC5yZWxlYXNlKCk7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCkBAIC01
MjksNiArNTYyLDM0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Vmlld3BvcnRTaXpl
KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT52
aWV3cG9ydENoYW5nZWQoKTsKIH0KIAorc3RhdGljIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VT
Y2FsZUNoYW5nZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVDaGFuZ2Up
Cit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXll
ckltcGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbnZlcnQgaW1w
bC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxlIHNwYWNlLgorICAgICAgICBGbG9hdFNp
emUgc2Nyb2xsRGVsdGEgPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgICAgIHNjcm9s
bERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7CisgICAgICAgIGxheWVySW1wbC0+c2V0U2Ny
b2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBhZGp1c3RTY3Jv
bGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFn
ZVNjYWxlQ2hhbmdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Ny
b2xsTGF5ZXJzKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGZsb2F0IHBhZ2VTY2FsZURlbHRhKQor
eworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGF5ZXJJ
bXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIGxheWVySW1wbC0+c2V0UGFnZVNjYWxlRGVsdGEo
cGFnZVNjYWxlRGVsdGEpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwt
PmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Nj
cm9sbExheWVycyhsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCksIHBhZ2VTY2FsZURlbHRh
KTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW5QYWdlU2NhbGUsIGZsb2F0IG1heFBhZ2VT
Y2FsZSkKIHsKICAgICBpZiAoIXBhZ2VTY2FsZSkKQEAgLTU0MywyNSArNjA0LDEzIEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0IHBh
Z2VTY2FsZSwgZmxvYXQgbWluCiAgICAgZmxvYXQgcGFnZVNjYWxlQ2hhbmdlID0gcGFnZVNjYWxl
IC8gbV9wYWdlU2NhbGU7CiAgICAgbV9wYWdlU2NhbGUgPSBwYWdlU2NhbGU7CiAKLSAgICBhZGp1
c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKHBhZ2VTY2FsZUNoYW5nZSk7CisgICAgaWYgKHBh
Z2VTY2FsZUNoYW5nZSAhPSAxKQorICAgICAgICBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hh
bmdlKG1fcm9vdFNjcm9sbExheWVySW1wbCwgcGFnZVNjYWxlQ2hhbmdlKTsKIAogICAgIC8vIENs
YW1wIGRlbHRhIHRvIGxpbWl0cyBhbmQgcmVmcmVzaCBkaXNwbGF5IG1hdHJpeC4KICAgICBzZXRQ
YWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZURlbHRhIC8gbV9zZW50UGFnZVNjYWxlRGVsdGEpOwog
ICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gMTsKLSAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9T
Y3JvbGxMYXllcigpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFkanVzdFNjcm9s
bHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQgcGFnZVNjYWxlQ2hhbmdlKQotewotICAgIGlmIChw
YWdlU2NhbGVDaGFuZ2UgPT0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgYWxzbyBu
ZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxlIHNwYWNl
LgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBGbG9hdFNpemUgc2Nyb2xs
RGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKLSAgICAgICAgc2Nyb2xs
RGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKLSAgICAgICAgbV9zY3JvbGxMYXllckltcGwt
PnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKLSAgICB9CisgICAgYXBwbHlQYWdlU2NhbGVE
ZWx0YVRvU2Nyb2xsTGF5ZXJzKG1fcm9vdFNjcm9sbExheWVySW1wbCwgbV9wYWdlU2NhbGVEZWx0
YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxv
YXQgZGVsdGEpCkBAIC01NzksMjIgKzYyOCwxNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldFBhZ2VTY2FsZURlbHRhKGZsb2F0IGRlbHRhKQogICAgIG1fcGFnZVNjYWxlRGVsdGEgPSBk
ZWx0YTsKIAogICAgIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgYXBwbHlQYWdlU2Nh
bGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjph
cHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpCi17Ci0gICAgaWYgKG1fc2Nyb2xsTGF5
ZXJJbXBsKQotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0UGFnZVNjYWxlRGVsdGEobV9w
YWdlU2NhbGVEZWx0YSk7CisgICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXJzKG1f
cm9vdFNjcm9sbExheWVySW1wbCwgbV9wYWdlU2NhbGVEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogewotICAgIGlmICghbV9z
Y3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKSkK
KyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCB8fCAhbV9yb290U2Nyb2xsTGF5ZXJJbXBs
LT5jaGlsZHJlbigpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRTaXplIHZp
ZXdCb3VuZHMgPSBtX3ZpZXdwb3J0U2l6ZTsKLSAgICBpZiAoQ0NMYXllckltcGwqIGNsaXBMYXll
ciA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgIGlmIChDQ0xheWVySW1wbCog
Y2xpcExheWVyID0gbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkgewogICAgICAgICBp
ZiAoY2xpcExheWVyLT5tYXNrc1RvQm91bmRzKCkpCiAgICAgICAgICAgICB2aWV3Qm91bmRzID0g
Y2xpcExheWVyLT5ib3VuZHMoKTsKICAgICB9CkBAIC02MDUsOSArNjQ4LDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8gaGF2aW5n
IGEgdmVydGljYWwgc2Nyb2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93LgogICAgIG1h
eFNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+
c2V0TWF4U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKLQotICAgIC8vIFRPRE8oYWVsaWFzKTog
QWxzbyB1cGRhdGUgc3VibGF5ZXJzLgorICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2V0TWF4
U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzZXROZWVkc1JlZHJhdygpCkBAIC02MTUsNDYgKzY1NiwxMDQgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3
T25JbXBsVGhyZWFkKCk7CiB9CiAKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZW5zdXJlTW9z
dFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QoKQoreworICAgIGlmIChtX21vc3RSZWNlbnRS
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGFmdGVyIHNldFJvb3RMYXllcigpIGJ1dCBiZWZvcmUgcHJl
cGFyZVRvRHJhdygpLCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlCisgICAgLy8gdGhlIHZpc2libGUg
bGF5ZXJzLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQgYmVjYXVzZSB3ZSBkb24ndCBjYXJl
IGFib3V0IGNoZWNrZXJib2FyZGluZy4KKyAgICBDQ1JlbmRlclBhc3NMaXN0IHBhc3NlczsKKyAg
ICBjYWxjdWxhdGVSZW5kZXJQYXNzZXMocGFzc2VzLCBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKKworICAgIHJldHVybiBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LnNpemUoKTsKK30KKwogQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2lu
dCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSB0eXBlKQogewotICAgIC8v
IFRPRE86IENoZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xs
TGF5ZXJJbXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7Ci0gICAgICAg
IFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBJZ25vcmVkIG5vIHNjcm9sbGFibGUiLCB0aGlzLCAw
KTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4iLCB0
aGlzLCAwKTsKKworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKKworICAg
IGlmICghZW5zdXJlTW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QoKSkKICAgICAgICAg
cmV0dXJuIFNjcm9sbElnbm9yZWQ7Ci0gICAgfQogCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Ny
b2xsQmVnaW4gRmFpbGVkIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCIsIHRoaXMsIDApOwotICAg
ICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOworICAgIC8vIEZpcnN0IGZpbmQgb3V0IHdoaWNoIGxh
eWVyIHdhcyBoaXQgYnkgd2Fsa2luZyB0aGUgc2F2ZWQgbGlzdCBvZiB2aXNpYmxlIGxheWVycyBm
cm9tIHRoZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0g
MDsKKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NMYXllckxpc3Qs
IENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IEND
TGF5ZXJJdGVyYXRvclR5cGU7CisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVy
SXRlcmF0b3JUeXBlOjplbmQoJm1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJl
Z2luKCZtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXJJbXBsID0gKCppdCk7
CisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZUxheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBJbnRQ
b2ludCBjb250ZW50UG9pbnQocmVuZGVyU3VyZmFjZUxheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworICAgICAgICBpZiAo
IXJlbmRlclN1cmZhY2VMYXllckltcGwtPnZpc2libGVMYXllclJlY3QoKS5jb250YWlucyhjb250
ZW50UG9pbnQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxheWVySW1wbCA9IHJl
bmRlclN1cmZhY2VMYXllckltcGw7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIEludFBv
aW50IHNjcm9sbExheWVyQ29udGVudFBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2aWV3cG9ydFBvaW50KSk7Ci0gICAgaWYg
KG1fc2Nyb2xsTGF5ZXJJbXBsLT5ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpLmNvbnRhaW5zKHNj
cm9sbExheWVyQ29udGVudFBvaW50KSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVn
aW4gRmFpbGVkIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uIiwgdGhpcywgMCk7Ci0gICAgICAgIHJl
dHVybiBTY3JvbGxGYWlsZWQ7Ci0gICAgfQorICAgIC8vIFdhbGsgdXAgdGhlIGhpZXJhcmNoeSBh
bmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIGxheWVyLgorICAgIENDTGF5ZXJJbXBsKiBwb3RlbnRp
YWxseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisgICAgZm9yICg7IGxheWVySW1wbDsgbGF5ZXJJ
bXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgICAgICAvLyBUaGUgY29udGVudCBsYXll
ciBjYW4gYWxzbyBibG9jayBhdHRlbXB0cyB0byBzY3JvbGwgb3V0c2lkZSB0aGUgbWFpbiB0aHJl
YWQuCisgICAgICAgIGlmIChsYXllckltcGwtPnRyeVNjcm9sbCh2aWV3cG9ydFBvaW50LCB0eXBl
KSA9PSBTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOworCisg
ICAgICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXJGb3JD
b250ZW50TGF5ZXIobGF5ZXJJbXBsKTsKKyAgICAgICAgaWYgKCFzY3JvbGxMYXllckltcGwpCisg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgIGlmICh0eXBlID09IENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpXaGVlbCAmJiBtX3Njcm9sbExheWVySW1wbC0+aGF2ZVdoZWVsRXZlbnRIYW5kbGVycygp
KSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBGYWlsZWQgd2hlZWxFdmVudEhh
bmRsZXJzIiwgdGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7CisgICAgICAg
IFNjcm9sbFN0YXR1cyBzdGF0dXMgPSBzY3JvbGxMYXllckltcGwtPnRyeVNjcm9sbCh2aWV3cG9y
dFBvaW50LCB0eXBlKTsKKworICAgICAgICAvLyBJZiBhbnkgbGF5ZXIgd2FudHMgdG8gZGl2ZXJ0
IHRoZSBzY3JvbGwgZXZlbnQgdG8gdGhlIG1haW4gdGhyZWFkLCBhYm9ydC4KKyAgICAgICAgaWYg
KHN0YXR1cyA9PSBTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVk
OworCisgICAgICAgIGlmIChzdGF0dXMgPT0gU2Nyb2xsU3RhcnRlZCAmJiAhcG90ZW50aWFsbHlT
Y3JvbGxpbmdMYXllckltcGwpCisgICAgICAgICAgICBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVy
SW1wbCA9IHNjcm9sbExheWVySW1wbDsKICAgICB9CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRl
ZDsKKyAgICBpZiAocG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGwpIHsKKyAgICAgICAgbV9j
dXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1w
bDsKKyAgICAgICAgcmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgfQorICAgIHJldHVybiBTY3Jv
bGxJZ25vcmVkOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwp
CisgICAgaWYgKCFtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKLSAgICBt
X2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICBtX2NsaWVudC0+c2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBGbG9hdFNpemUgcGVuZGluZ0RlbHRhKHNj
cm9sbERlbHRhKTsKKyAgICBwZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEp
OworCisgICAgZm9yIChDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gbV9jdXJyZW50bHlTY3JvbGxp
bmdMYXllckltcGw7IGxheWVySW1wbCAmJiAhcGVuZGluZ0RlbHRhLmlzWmVybygpOyBsYXllcklt
cGwgPSBsYXllckltcGwtPnBhcmVudCgpKSB7CisgICAgICAgIGlmICghbGF5ZXJJbXBsLT5zY3Jv
bGxhYmxlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgRmxvYXRTaXplIHByZXZp
b3VzRGVsdGEobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5z
Y3JvbGxCeShwZW5kaW5nRGVsdGEpOworICAgICAgICAvLyBSZXNldCB0aGUgcGVuZGluZyBzY3Jv
bGwgZGVsdGEgdG8gemVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8gbW92ZSBhbG9uZyB0aGUg
cmVxdWVzdGVkCisgICAgICAgIC8vIGF4aXMuIFRoaXMgaXMgdG8gZW5zdXJlIGl0IGlzIHBvc3Np
YmxlIHRvIHNjcm9sbCBleGFjdGx5IHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEKKyAgICAg
ICAgLy8gc2Nyb2xsIGFyZWEgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZvciBkaWFn
b25hbCBzY3JvbGxzIHRoaXMgYWxzbyBhdm9pZHMgYXBwbHlpbmcKKyAgICAgICAgLy8gdGhlIHNj
cm9sbCBvbiBvbmUgYXhpcyB0byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgIGlmIChwcmV2aW91
c0RlbHRhLndpZHRoKCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLndpZHRoKCkpCisgICAg
ICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAgICAgIGlmIChwcmV2aW91c0Rl
bHRhLmhlaWdodCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5oZWlnaHQoKSkKKyAgICAg
ICAgICAgIHBlbmRpbmdEZWx0YS5zZXRIZWlnaHQoMCk7CisgICAgfQorCisgICAgaWYgKHBlbmRp
bmdEZWx0YSAhPSBzY3JvbGxEZWx0YSkgeworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21t
aXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKCk7CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVu
ZCgpCiB7CisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSAwOwogfQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUJlZ2luKCkKQEAgLTY2OCw3ICs3Njcs
NyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCBt
YWduaWZ5RGVsdGEsCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnBp
bmNoR2VzdHVyZVVwZGF0ZSIsIHRoaXMsIDApOwogCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1w
bCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1fcHJldmlvdXNQaW5jaEFuY2hvciA9PSBJbnRQb2ludDo6emVybygpKQpAQCAtNjgz
LDcgKzc4Miw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRl
KGZsb2F0IG1hZ25pZnlEZWx0YSwKIAogICAgIG1fcHJldmlvdXNQaW5jaEFuY2hvciA9IGFuY2hv
cjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShyb3VuZGVkSW50U2l6ZShtb3Zl
KSk7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShyb3VuZGVkSW50U2l6ZSht
b3ZlKSk7CiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiAgICAg
bV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CkBAIC03MDUsNyArODA0
LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlRG91YmxlVGFwWm9vbURlbHRh
cyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGwKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojpjb21wdXRlUGluY2hab29tRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8p
CiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExh
eWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT25seSBzZW5kIGZha2Ugc2Nyb2xs
L3pvb20gZGVsdGFzIGlmIHdlJ3JlIHBpbmNoIHpvb21pbmcgb3V0IGJ5IGEKQEAgLTcxNyw3ICs4
MTYsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMo
Q0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbwogCiAgICAgLy8gQ29tcHV0ZSB3aGVyZSB0
aGUgc2Nyb2xsIG9mZnNldC9wYWdlIHNjYWxlIHdvdWxkIGJlIGlmIGZ1bGx5IHBpbmNoLXpvb21l
ZAogICAgIC8vIG91dCBmcm9tIHRoZSBhbmNob3IgcG9pbnQuCi0gICAgSW50U2l6ZSBzY3JvbGxC
ZWdpbiA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigp
ICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xs
QmVnaW4gPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0
aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwogICAgIHNjcm9s
bEJlZ2luLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlQmVnaW4gPSBt
X3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGFU
b1NlbmQgPSBtX21pblBhZ2VTY2FsZSAvIG1fcGFnZVNjYWxlOwpAQCAtNzM2LDIxICs4MzUsNDEg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKENDU2Ny
b2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpt
YWtlU2Nyb2xsQW5kU2NhbGVTZXQoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgY29u
c3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUpCiB7Ci0gICAgaWYgKCFt
X3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZv
IHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwot
ICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNjcm9sbE9mZnNldCAtIHRvU2l6ZShtX3Njcm9sbExh
eWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgc2Nyb2xsLmxheWVySWQgPSBtX3Jvb3RT
Y3JvbGxMYXllckltcGwtPmlkKCk7CisgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsT2Zm
c2V0IC0gdG9TaXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSk7CiAg
ICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLSAgICBtX3Njcm9sbExheWVy
SW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7CisgICAgbV9yb290
U2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsK
ICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0g
cGFnZVNjYWxlIC8gbV9wYWdlU2NhbGU7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbGxlY3RTY3JvbGxE
ZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwqIGxheWVy
SW1wbCkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkpIHsKKyAgICAgICAgSW50U2l6ZSBz
Y3JvbGxEZWx0YSA9IGZsb29yZWRJbnRTaXplKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7Cisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7Cisg
ICAgICAgIHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgpOworICAgICAgICBzY3JvbGwu
c2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5h
cHBlbmQoc2Nyb2xsKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Ny
b2xsRGVsdGEpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBs
LT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNj
cm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisKIFBhc3NPd25Q
dHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9s
bERlbHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8g
PSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBib29sIGRpZE1vdmUg
PSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgp
LmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7CisgICAgY29sbGVjdFNjcm9s
bERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBtX3Jvb3RMYXllckltcGwuZ2V0KCkpOworCisgICAg
Ym9vbCBkaWRNb3ZlID0gc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCkgfHwgbV9wYWdlU2NhbGVE
ZWx0YSAhPSAxOwogICAgIGlmICghZGlkTW92ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2ZSB8fCBt
X3BhZ2VTY2FsZUFuaW1hdGlvbikgewogICAgICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNj
cm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gMTsKICAgICAgICAgaWYgKG1fcGluY2hHZXN0dXJl
QWN0aXZlKQpAQCAtNzYyLDE0ICs4ODEsNiBAQCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVT
ZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogCiAgICAgbV9z
ZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IG1fcGFnZVNj
YWxlRGVsdGE7CiAKLSAgICAvLyBGSVhNRTogdHJhY2sgc2Nyb2xscyBmcm9tIGxheWVycyBvdGhl
ciB0aGFuIHRoZSByb290Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJ
bmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgp
OwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zY3JvbGxEZWx0YSgpKTsKLSAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3Jv
bGwpOwotCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwu
c2Nyb2xsRGVsdGEpOwotCiAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgpOwogfQogCkBA
IC03ODcsMTIgKzg5OCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVQYWdl
U2NhbGUoZG91YmxlIG1vbm90b25pY1RpbWUpCiAgICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlv
bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJ
bnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVk
SW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RT
Y3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwogCiAgICAgc2V0UGFnZVNjYWxlRGVsdGEo
bV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShtb25vdG9uaWNUaW1lKSAvIG1f
cGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlv
bi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKG1vbm90b25pY1RpbWUpOwogICAgIG5leHRTY3JvbGwuc2Nh
bGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxC
eShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+
c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKICAgICBtX2NsaWVudC0+c2V0TmVl
ZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIAogICAgIGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+
aXNBbmltYXRpb25Db21wbGV0ZUF0VGltZShtb25vdG9uaWNUaW1lKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGRjNmExNDgzM2MwZDU1OTllZDk4NWFiODNjMmYy
YjA4NGY0ZWU3ZGYuLjRkOTJmY2JiN2MyZGQzYTYwNmM0MTIxMmY0NzBmZTUxMzEzZTRlOTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEyMCw5ICsxMjAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsK
IAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKLSAgICBQ
YXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZWxlYXNlUm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290
TGF5ZXJJbXBsLnJlbGVhc2UoKTsgfQorICAgIFBhc3NPd25QdHI8Q0NMYXllckltcGw+IHJlbGVh
c2VSb290TGF5ZXIoKTsKIAotICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fc2Nyb2xsTGF5ZXJJbXBsOyB9CisgICAgQ0NMYXllckltcGwqIHJvb3RTY3JvbGxM
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdFNjcm9sbExheWVySW1wbDsgfQogCiAgICAgYm9v
bCB2aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgdm9pZCBzZXRWaXNp
YmxlKGJvb2wpOwpAQCAtMTY2LDggKzE2Niw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYWtlU2Ny
b2xsQW5kU2NhbGVTZXQoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgY29uc3QgSW50
U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUpOwogCiAgICAgdm9pZCBzZXRQYWdl
U2NhbGVEZWx0YShmbG9hdCk7Ci0gICAgdm9pZCBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxM
YXllcigpOwotICAgIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCk7
CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwogICAgIHZvaWQgdHJhY2tEYW1h
Z2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIC8vIFJldHVybnMgZmFsc2UgaWYg
dGhlIGZyYW1lIHNob3VsZCBub3QgYmUgZGlzcGxheWVkLgpAQCAtMTc2LDEwICsxNzQsMTIgQEAg
cHJpdmF0ZToKICAgICBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Q7CiAgICAgdm9pZCBzZW5k
RGlkTG9zZUNvbnRleHRSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKICAgICB2b2lkIGNsZWFyUmVu
ZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7CisgICAgYm9v
bCBlbnN1cmVNb3N0UmVjZW50UmVuZGVyU3VyZmFjZUxheWVyTGlzdCgpOwogCiAgICAgT3duUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOwotICAgIENDTGF5ZXJJbXBsKiBtX3Njcm9sbExheWVy
SW1wbDsKKyAgICBDQ0xheWVySW1wbCogbV9yb290U2Nyb2xsTGF5ZXJJbXBsOworICAgIENDTGF5
ZXJJbXBsKiBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKICAgICBDQ1NldHRpbmdzIG1f
c2V0dGluZ3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBib29sIG1fdmlzaWJs
ZTsKQEAgLTIwNCw2ICsyMDQsOSBAQCBwcml2YXRlOgogCiAgICAgQ0NMYXllclNvcnRlciBtX2xh
eWVyU29ydGVyOwogCisgICAgLy8gTGlzdCBvZiB2aXNpYmxlIGxheWVycyBpbiB0aGUgbW9zdCBy
ZWNlbnQgZnJhbWUuIFVzZWQgZm9yIGlucHV0IGV2ZW50IGhpdCB0ZXN0aW5nLgorICAgIENDTGF5
ZXJMaXN0IG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICBGbG9hdFJl
Y3QgbV9yb290RGFtYWdlUmVjdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKaW5kZXggNGY2NGQ1NDcxZTM5NjY1MGY3Y2E3
NWU5ZTE2MjVjNjZkNzJmMTFiNi4uOWQ2MTNhM2FjYTk5MWM5OTVkZTM5NzQ4NzI0YzcxZmNiYTk0
MmU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExh
eWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExh
eWVySW1wbC5jcHAKQEAgLTcyLDQgKzcyLDggQEAgdm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXAKICAg
ICBtX2NvbnRlbnRDbGllbnQtPnBhaW50Q29udGVudHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsK
IH0KIAordm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpkaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCmluZGV4IDUxZjM0NGY3Y2Fm
MTI3MTEyNmFjN2I0MjY4ZWQ1NDYxMjE0MjE5ZDguLjFiYTg4NGM5YjM1N2ViZjM4N2VkZmYzNDlm
NjU2ZWFmYTY2YWUxZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b250ZW50TGF5ZXJJbXBsLmgKQEAgLTQ0LDYgKzQ0LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8g
Q29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7CiAKICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsK
ICAgICBib29sIG1fZHJhd3NDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCmluZGV4IGJiNjVjYzU4MGFjMTU4YmYwNWNiM2M5N2Qy
MTdmMjk4NGM4ZWFjZDIuLjdjYjkzMTlkOWE3YTcyMThkYzhiNGRlMzRkNzEyMjBlMGM1MzBhMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5j
cHAKQEAgLTE2MSw0ICsxNjEsMjggQEAgVEVTVChDQ0xheWVySW1wbFRlc3QsIHZlcmlmeUxheWVy
Q2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJF
RV9ESURfTk9UX0NIQU5HRShyb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihhcmJpdHJhcnlJbnRT
aXplKSk7CiB9CiAKK1RFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlTdWJ0cmVlU2VhcmNoKQor
eworICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBvbiB0aGlzIHdpbGwgZmFrZSB0aGF0IHdlIGFyZSBv
biB0aGUgY29ycmVjdCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldElt
cGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMyk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBtYXNrTGF5ZXIgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDQpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcmVwbGljYUxheWVy
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSg1KTsKKworICAgIGdyYW5kQ2hpbGQtPnNldFJlcGxpY2FM
YXllcihyZXBsaWNhTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRD
aGlsZC5yZWxlYXNlKCkpOworICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIobWFza0xheWVyLnJlbGVh
c2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIEVYUEVD
VF9FUSgxLCByb290LT5maW5kTGF5ZXJJblN1YnRyZWUoMSktPmlkKCkpOworICAgIEVYUEVDVF9F
USgyLCByb290LT5maW5kTGF5ZXJJblN1YnRyZWUoMiktPmlkKCkpOworICAgIEVYUEVDVF9FUSgz
LCByb290LT5maW5kTGF5ZXJJblN1YnRyZWUoMyktPmlkKCkpOworICAgIEVYUEVDVF9FUSg0LCBy
b290LT5maW5kTGF5ZXJJblN1YnRyZWUoNCktPmlkKCkpOworICAgIEVYUEVDVF9FUSg1LCByb290
LT5maW5kTGF5ZXJJblN1YnRyZWUoNSktPmlkKCkpOworICAgIEVYUEVDVF9FUSgwLCByb290LT5m
aW5kTGF5ZXJJblN1YnRyZWUoNikpOworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cAppbmRleCBjOWYzOGEwMWZkZTFlNzk1MjJhODc4NWY5YzBkZTkyMDdkOTkyNzgwLi5mNDBiYTA3
YzI0NzNkNzYxZmIyNzE4ZWZjMDM3MGZhYWJlYzIxN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAt
OTcsNiArOTcsMjUgQEAgcHVibGljOgogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
cm9vdC5yZWxlYXNlKCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJ
bXBsPiBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoaW50IGlkLCBjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gbGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKGlkKTsKKyAgICAgICAgbGF5ZXItPnNl
dFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisgICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGxheWVyLT5z
ZXRCb3VuZHMoc2l6ZSk7CisgICAgICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRT
aXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSk7CisgICAgICAgIHJldHVy
biBsYXllci5yZWxlYXNlKCk7CisgICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlckFuZERyYXdGcmFtZSgpCisgICAgeworICAgICAgICBtX2hvc3RJbXBsLT5pbml0aWFsaXpl
TGF5ZXJSZW5kZXJlcihjcmVhdGVDb250ZXh0KCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnBy
ZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFt
ZSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY3JlYXRlQ29udGV4dCgpCiAgICAgewpAQCAtMTgwLDEwICsxOTksMTIgQEAgVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiB7
CiAgICAgewogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDApOworICAgICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwg
MCwgMTAwLCAxMDApKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAg
ICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgICAgICByb290
LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgICAgIG1faG9z
dEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgICAgIGluaXRpYWxpemVM
YXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgfQogCiAgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0xOTcsMTAg
KzIxOCwxMiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHdoZWVsRXZlbnRIYW5k
bGVycykKIHsKICAgICB7CiAgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50
UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUp
OwogICAgICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAgICAg
ICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKICAgICAg
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICAgICAgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKICAgICB9CiAgICAgQ0NMYXllcklt
cGwqIHJvb3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKIApAQCAtMjE1LDExICsyMzgsMTQg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCkK
IHsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDAp
OworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkp
OwogICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsUG9z
aXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKElu
dFNpemUoMTAwLCAxMDApKTsKICAgICByb290LT5zZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQo
dHJ1ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAg
ICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCiAgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKICAgICBF
WFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxl
ZCk7CiB9CkBAIC0yMjcsMTEgKzI1MywxNCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25CYXNpYykKIHsKICAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFZpc2li
bGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNldFNjcm9s
bGFibGUodHJ1ZSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkp
OwogICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKICAg
ICByb290LT5zZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihJbnRSZWN0KDAsIDAsIDUwLCA1MCkp
OwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKwogICAgIC8vIEFsbCBzY3JvbGwg
dHlwZXMgaW5zaWRlIHRoZSBub24tZmFzdCBzY3JvbGxhYmxlIHJlZ2lvbiBzaG91bGQgZmFpbC4K
ICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bEZhaWxlZCk7CiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbEZhaWxlZCk7CkBAIC0yNDcsMTggKzI3NiwxNiBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQmFzaWMpCiAKIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25XaXRoT2Zm
c2V0KQogewotICAgIG1faG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNyZWF0ZUNv
bnRleHQoKSk7Ci0KICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDApOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDEsIDEpKTsKKyAgICByb290
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICByb290
LT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBv
aW50KDAsIDApKTsKICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwg
MTAwKSk7CiAgICAgcm9vdC0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oSW50UmVjdCgwLCAw
LCA1MCwgNTApKTsKICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC0yNSwgMCkpOwog
ICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0gICAgQ0NMYXll
clRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOwotICAgIEVYUEVDVF9UUlVFKG1faG9zdElt
cGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZy
YW1lKTsgLy8gVXBkYXRlIGRyYXcgdHJhbnNmb3JtcyBzbyB3ZSBjYW4gY29ycmVjdGx5IG1hcCBw
b2ludHMgaW50byBsYXllciBzcGFjZS4KKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERy
YXdGcmFtZSgpOwogCiAgICAgLy8gVGhpcyBwb2ludCB3b3VsZCBmYWxsIGludG8gdGhlIG5vbi1m
YXN0IHNjcm9sbGFibGUgcmVnaW9uIGV4Y2VwdCB0aGF0IHdlJ3ZlIG1vdmVkIHRoZSBsYXllciBk
b3duIGJ5IDI1IHBpeGVscy4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoNDAsIDEwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMjczLDggKzMwMCw5IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGluY2hHZXN0dXJlKQogewogICAgIHNldHVwU2Nyb2xs
QW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIG1faG9zdEltcGwtPnNl
dFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRl
cmVyQW5kRHJhd0ZyYW1lKCk7CiAKLSAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hv
c3RJbXBsLT5zY3JvbGxMYXllcigpOworICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1f
aG9zdEltcGwtPnJvb3RTY3JvbGxMYXllcigpOwogICAgIEFTU0VSVChzY3JvbGxMYXllcik7CiAK
ICAgICBjb25zdCBmbG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUsIG1heFBhZ2VTY2FsZSA9IDQ7CkBA
IC0zNTMsOCArMzgxLDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYWdlU2Nh
bGVBbmltYXRpb24pCiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXpl
KDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAs
IDUwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAotICAg
IENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnNjcm9sbExheWVyKCk7Cisg
ICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVy
KCk7CiAgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKIAogICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VT
Y2FsZSA9IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKQEAgLTU2MSw2ICs1OTAsMjY5IEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hlbkFuaW1hdGlv
blVzZXNDaGVja2VyYm9hcmQpCiAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiB9
CiAKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdElnbm9yZWQpCit7
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsK
KyAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJh
d0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIGxheWVy
IGlzIG5vdCBzY3JvbGxhYmxlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdp
bihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVl
c3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE5vbkNvbXBvc2l0ZWRSb290KQor
eworICAgIC8vIFRlc3QgdGhlIGNvbmZpZ3VyYXRpb24gd2hlcmUgYSBub24tY29tcG9zaXRlZCBy
b290IGxheWVyIGlzIGVtYmVkZGVkIGluIGEKKyAgICAvLyBzY3JvbGxhYmxlIG91dGVyIGxheWVy
LgorICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gY29udGVudExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBjb250ZW50
TGF5ZXItPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQodHJ1ZSk7CisgICAgY29udGVudExheWVy
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgY29udGVudExheWVyLT5zZXRQb3NpdGlvbihJ
bnRQb2ludCg1LCA1KSk7CisgICAgY29udGVudExheWVyLT5zZXRCb3VuZHMoc3VyZmFjZVNpemUp
OworICAgIGNvbnRlbnRMYXllci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKHN1cmZhY2VTaXpl
LndpZHRoKCkgKiAyLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSAqIDIpKTsKKworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHNj
cm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIHNjcm9sbExheWVyLT5hZGRDaGls
ZChjb250ZW50TGF5ZXIucmVsZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXll
cihzY3JvbGxMYXllci5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6
ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUo
KTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsK
KyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVl
c3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJl
ZHJhdykKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5hZGRD
aGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNp
emUpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAg
IG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBs
LT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVs
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwt
PnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsK
KyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1f
ZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c2Nyb2xsTWlzc2VzQ2hpbGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwor
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Cisg
ICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwg
NSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVs
ZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwor
ICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3Jv
bGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBpbnB1dCBjb29yZGluYXRlIGlzIG91dHNp
ZGUgdGhlIGxheWVyIGJvdW5kYXJpZXMuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDE1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2Rp
ZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOwor
fQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0JhY2tmYWNp
bmdDaGlsZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3Vy
ZmFjZVNpemUpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJp
eC5yb3RhdGUzZCgxODAsIDAsIDApOworICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsK
KyAgICBjaGlsZC0+c2V0RG91YmxlU2lkZWQoZmFsc2UpOworCisgICAgcm9vdC0+YWRkQ2hpbGQo
Y2hpbGQucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxl
YXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAg
ICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBoaXQgbGF5ZXIgaXMgbm90
IGZhY2luZyB0aGUgdmlld2VyLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdp
bihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVl
c3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJsb2NrZWRCeUNvbnRlbnRMYXll
cikKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiBjb250ZW50TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2lu
dCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2hvdWxkU2Nyb2xs
T25NYWluVGhyZWFkKHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2Nyb2xsYWJsZShmYWxz
ZSk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0gY3JlYXRlU2Nyb2xs
YWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxM
YXllci0+YWRkQ2hpbGQoY29udGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5z
ZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGxpbmcgZmFpbHMgYmVjYXVzZSB0aGUgY29u
dGVudCBsYXllciBpcyBhc2tpbmcgdG8gYmUgc2Nyb2xsZWQgb24gdGhlIG1haW4gdGhyZWFkLgor
ICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZh
aWxlZCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFu
ZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXpl
KDEwLCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0
aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgSW50U2l6ZSBzY3JvbGxE
ZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBleHBlY3RlZFNjcm9sbERlbHRhKHNjcm9sbERlbHRh
KTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9zdEltcGwtPnJvb3RMYXllcigp
LT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxC
eShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAvLyBT
ZXQgbmV3IHBhZ2Ugc2NhbGUgZnJvbSBtYWluIHRocmVhZC4KKyAgICBtX2hvc3RJbXBsLT5zZXRQ
YWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCBwYWdlU2NhbGUsIHBhZ2VTY2FsZSk7
CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSBzY3JvbGwgZGVsdGEuCisg
ICAgZXhwZWN0ZWRTY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGUpOworICAgIE93blB0cjxDQ1Nj
cm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERl
bHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAwLCBleHBlY3Rl
ZFNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIGFsc28gaGF2
ZSBiZWVuIHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5t
YXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9sbCk7CisKKyAgICAvLyBUaGUgcGFn
ZSBzY2FsZSBkZWx0YSByZW1haW5zIGNvbnN0YW50IGJlY2F1c2UgdGhlIGltcGwgdGhyZWFkIGRp
ZCBub3Qgc2NhbGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5wYWdl
U2NhbGVEZWx0YSgpLCAxKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFkKQoreworICAgIEludFNpemUg
c3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3Qu
cmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUp
OworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCAxLCBwYWdl
U2NhbGUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAg
ICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkU2Nyb2xs
RGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIEludFNpemUgZXhwZWN0ZWRNYXhTY3JvbGwobV9ob3N0
SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCkpOworICAgIEVYUEVDVF9FUSht
X2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1f
aG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxF
bmQoKTsKKworICAgIC8vIFNldCBuZXcgcGFnZSBzY2FsZSBvbiBpbXBsIHRocmVhZCBieSBwaW5j
aGluZy4KKyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVCZWdpbigpOworICAgIG1faG9zdElt
cGwtPnBpbmNoR2VzdHVyZVVwZGF0ZShwYWdlU2NhbGUsIEludFBvaW50KCkpOworICAgIG1faG9z
dEltcGwtPnBpbmNoR2VzdHVyZUVuZCgpOworCisgICAgLy8gVGhlIHNjcm9sbCBkZWx0YSBpcyBu
b3Qgc2NhbGVkIGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisgICAgT3du
UHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNz
U2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDAs
IGV4cGVjdGVkU2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQg
YWxzbyBoYXZlIGJlZW4gdXBkYXRlZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExh
eWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKKworICAgIC8v
IFRoZSBwYWdlIHNjYWxlIGRlbHRhIHNob3VsZCBtYXRjaCB0aGUgbmV3IHNjYWxlIG9uIHRoZSBp
bXBsIHNpZGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5wYWdlU2Nh
bGVEZWx0YSgpLCBwYWdlU2NhbGUpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQoreworICAgIElu
dFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIC8vIEFsc28gbWFyayB0aGUgcm9vdCBzY3Jv
bGxhYmxlIHNvIGl0IGJlY29tZXMgdGhlIHJvb3Qgc2Nyb2xsIGxheWVyLgorICAgIHJvb3QtPnNl
dFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxh
eWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+
c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIo
KS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTAp
OworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgSW50
U2l6ZSBleHBlY3RlZE1heFNjcm9sbChjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSk7CisgICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRl
ZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdElt
cGwtPnNjcm9sbEVuZCgpOworCisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCAxLCBwYWdlU2NhbGUp
OworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgor
ICAgIGV4cGVjdGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAgICBPd25QdHI8Q0NT
Y3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxE
ZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMSwgZXhwZWN0
ZWRTY3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBub3QgaGF2
ZSBjaGFuZ2VkLgorICAgIEVYUEVDVF9FUShjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSwgZXhw
ZWN0ZWRNYXhTY3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZGVsdGEgcmVtYWlucyBj
b25zdGFudCBiZWNhdXNlIHRoZSBpbXBsIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIEVYUEVD
VF9FUShjaGlsZC0+cGFnZVNjYWxlRGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdCkKK3sKKyAgICAvLyBTY3JvbGwg
YSBjaGlsZCBsYXllciBiZXlvbmQgaXRzIG1heGltdW0gc2Nyb2xsIHJhbmdlIGFuZCBtYWtlIHN1
cmUgdGhlCisgICAgLy8gcGFyZW50IGxheWVyIGlzIHNjcm9sbGVkIG9uIHRoZSBheGlzIG9uIHdo
aWNoIHRoZSBjaGlsZCB3YXMgdW5hYmxlIHRvCisgICAgLy8gc2Nyb2xsLgorICAgIEludFNpemUg
c3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworCisg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVy
KDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBncmFuZENoaWxkLT5zZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCA1KSk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMywgMCkpOwor
ICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5h
ZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihy
b290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VT
aXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIHsK
KyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgtMywgLTcpOworICAgICAgICBFWFBFQ1RfRVEo
bV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAg
ICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgICAgICBtX2hvc3RJbXBs
LT5zY3JvbGxFbmQoKTsKKworICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Ny
b2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKworICAgICAgICAv
LyBUaGUgZ3JhbmQgY2hpbGQgc2hvdWxkIGhhdmUgc2Nyb2xsZWQgdXAgdG8gaXRzIGxpbWl0Lgor
ICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hp
bGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGls
ZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbElu
Zm8uZ2V0KCksIGdyYW5kQ2hpbGQtPmlkKCksIEludFNpemUoMCwgLTUpKTsKKworICAgICAgICAv
LyBUaGUgY2hpbGQgc2hvdWxkIGhhdmUgb25seSBzY3JvbGxlZCBvbiB0aGUgb3RoZXIgYXhpcy4K
KyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBJ
bnRTaXplKC0zLCAwKSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbEJlZm9yZVJlZHJhdykKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAx
MCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigw
LCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFZp
ZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICAvLyBEcmF3IG9uZSBmcmFtZSBhbmQgdGhl
biBpbW1lZGlhdGVseSByZWJ1aWxkIHRoZSBsYXllciB0cmVlIHRvIG1pbWljIGEgdHJlZSBzeW5j
aHJvbml6YXRpb24uCisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsK
KyAgICBtX2hvc3RJbXBsLT5yZWxlYXNlUm9vdExheWVyKCk7CisgICAgbV9ob3N0SW1wbC0+c2V0
Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJm
YWNlU2l6ZSkpOworCisgICAgLy8gU2Nyb2xsaW5nIHNob3VsZCBzdGlsbCB3b3JrIGV2ZW4gdGhv
dWdoIHdlIGRpZCBub3QgZHJhdyB5ZXQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7Cit9CisKIGNsYXNzIEJsZW5kU3RhdGVU
cmFja2VyQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6
CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3Qu
Y3BwCmluZGV4IDRhMTRkY2I1NjM0MzYzNDNkZjlmNzRlNzdjZmQwYTIyNzBlNmJlZjUuLmMyNmIw
YTQ5ZDgxZDZhOWZhZDJkMGZiOTBlNzFhZDYwZmY4MzIxNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMTQxNiw2
ICsxNDE2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMz
RCgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJ
bnRTaXplJikgeyB9CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0
OwpAQCAtMTU2NSw3ICsxNTY2LDggQEAgY2xhc3MgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIDog
cHVibGljIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBib29sIGRyYXdzQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJl
c2VydmVzM0QsIGJvb2woKSk7Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRp
ZFNjcm9sbChjb25zdCBJbnRTaXplJikgeyB9CiAgICAgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQo
KSB7IH0KIH07CiAKQEAgLTIyOTEsNCArMjI5Myw3MCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
VGVzdEZyYWN0aW9uYWxTY3JvbGwsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3RUaHJlYWRl
ZCgpOwogfQogCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciA6IHB1
YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0U2Nyb2xsQ2hpbGRMYXllcigpCisgICAgICAgIDogbV9zY3JvbGxBbW91bnQoMiwgMSkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCkpOworICAg
ICAgICBtX3Jvb3RTY3JvbGxMYXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoJm1f
bW9ja0RlbGVnYXRlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5kcyhJbnRT
aXplKDEwLCAxMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0SXNEcmF3YWJsZSh0
cnVlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7Cisg
ICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEw
MCwgMTAwKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZENoaWxk
KG1fcm9vdFNjcm9sbExheWVyKTsKKyAgICAgICAgbV9jaGlsZExheWVyID0gQ29udGVudExheWVy
Q2hyb21pdW06OmNyZWF0ZSgmbV9tb2NrRGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkTGF5ZXIt
PnNldEJvdW5kcyhJbnRTaXplKDUwLCA1MCkpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldElz
RHJhd2FibGUodHJ1ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEw
MCwgMTAwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5
ZXIpOworICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3Jv
bGxEZWx0YSwgZmxvYXQpCisgICAgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fcm9v
dFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXll
ci0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBs
KiBpbXBsKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKG1fcm9vdFNjcm9sbExheWVyLT5zY3Jv
bGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3Qt
PmZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3Jv
bGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQ
RUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSArIG1fc2Ny
b2xsQW1vdW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJl
YWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5m
cmFtZU51bWJlcigpID09IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxC
ZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xs
QnkobV9zY3JvbGxBbW91bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5k
VGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKKyAgICBN
b2NrQ29udGVudExheWVyRGVsZWdhdGUgbV9tb2NrRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290
U2Nyb2xsTGF5ZXI7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxk
TGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3QodHJ1ZSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137869</attachid>
            <date>2012-04-19 03:22:46 -0700</date>
            <delta_ts>2012-04-19 10:17:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120419112244.patch</filename>
            <type>text/plain</type>
            <size>62527</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjVjODU0ZjgyMzhkYTNh
YTVmOWIwMDdhMzIwNzA4MDg1OWNjYzkyMy4uM2QzNTA1ZTgwNjBjZTdkMzFkOGEyNGQ0ZDZjMWRj
ZDZhZDAyZDFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVu
IGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xs
ZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBBZGRlZCBuZXcgd2Via2l0X3VuaXRf
dGVzdHMgdG8gdmVyaWZ5IHNjcm9sbGluZyBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoQ29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpmaW5kTGF5ZXJJblN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllcklt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJsZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcm9s
bExheWVyRm9yQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0U2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDQt
MTkgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgZm9yIERBUldJTiBpbiBEaXJlY3RDb252b2x2ZXI6OnByb2Nlc3MoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAwNDQwOWVhMjhlZGM0NjdhOTk2MDdkODgzMTg4MjVhMjVjMTQ2
ZjNlLi5iOThmMDY5YzU2NmI0ZmRlYTJiYjc2NmVjZjQ2MzMxMzBkMzgxNDY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAzLTI4ICBTYW1pIEt5b3N0
aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIHRl
c3RzIGZvciBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNTAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9X
ZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVy
SW1wbDo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkNv
bnRlbnRMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvbnRlbnRMYXllckltcGwpOgorICAgICAg
ICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdDo6
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdDo6aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRF
U1RfRik6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RPcGFjaXR5Q2hhbmdlTGF5ZXJEZWxl
Z2F0ZTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdURjo6TW9ja0NvbnRlbnRMYXllckRlbGVnYXRl
OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdURjo6TW9ja0NvbnRlbnRMYXllckRlbGVnYXRl
OjpkaWRTY3JvbGwpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5
ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFwcGx5U2Nyb2xsQW5kU2Nh
bGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6
YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFmdGVyVGVzdCk6CisgICAgICAg
IChXVEYpOgorICAgICAgICAoV1RGOjpURVNUX0YpOgorCiAyMDEyLTA0LTE4ICBOaWNvIFdlYmVy
ICA8dGhha2lzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW0vbWFjXSBGaXggYnVp
bGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYWU4ZDMyMDhiZmJh
YjhkN2FkZTk4MmE3ZDhhOTNhMmQ4M2VkN2RhZi4uYTEwZjM1NDIxNmRjZjU4N2ZkZWFmMzgzNWIz
ZDFjMjZlYjI0YjdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAt
MTQ1LDUgKzE0NSwxMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRPcGFxdWUoYm9v
bCBvcGFxdWUpCiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnNldE9wYXF1ZShvcGFxdWUpOwog
fQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBz
Y3JvbGxEZWx0YSkKK3sKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsg
c2Nyb2xsRGVsdGEpOworICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5k
aWRTY3JvbGwoc2Nyb2xsRGVsdGEpOworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggMGNkMWQ3
OGQ4NTM5YTZmODY3NDBlZGMwMzQyZGFkMjJmMzRjMDA1MS4uMTgzY2UzZWRiZTQ2MzNhMzk0YzQw
MjM1ZmE4OWQ4NjUxMjlhNWE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBA
IC00Niw2ICs0Niw3IEBAIGNsYXNzIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJEZWxlZ2F0ZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKSA9IDA7CiB9OwogCiAv
LyBBIExheWVyIHRoYXQgcmVxdWlyZXMgYSBHcmFwaGljc0NvbnRleHQgdG8gcmVuZGVyIGl0cyBj
b250ZW50cy4KQEAgLTYzLDYgKzY0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNl
dE9wYXF1ZShib29sKSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25z
dCBJbnRTaXplJik7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJv
bWl1bShDb250ZW50TGF5ZXJEZWxlZ2F0ZSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IGU5ZTNiODUyMDAxNDczMmQ0ZTExNjAwYWMwMzgyMjNlY2VlMGFiYzIuLjJl
NmFjYjkxMTkzMjYyNzBlZGZkY2VkN2YwYWMyYjFlNTYxOTA4MTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMTMsNiArMTEzLDcgQEAgcHVibGljOgogCiAgICAgLy8g
Q29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CisgICAg
dmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgeyB9CiAKICAgICAvLyBDQ0xh
eWVyQW5pbWF0aW9uRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlIHN0YXJ0VGltZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IDExMmIwM2FiZjBjMjk5NjEwZDE5MjdhMjIzNjU4OTRjNzc4ZDc2YTUuLmY3NDkx
NzY1MDEyZDMxZjUzMDFlM2NhMWI0Y2I3OWIzYzQ2Y2U3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC0zODEsNiArMzgxLDE0IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0U2Nyb2xsUG9z
aXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogICAgIHNldE5lZWRzQ29tbWl0
KCk7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pCit7CisgICAgaWYgKG1fbWF4U2Nyb2xsUG9zaXRp
b24gPT0gbWF4U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBtX21heFNjcm9s
bFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30K
Kwogdm9pZCBMYXllckNocm9taXVtOjpzZXRTY3JvbGxhYmxlKGJvb2wgc2Nyb2xsYWJsZSkKIHsK
ICAgICBpZiAobV9zY3JvbGxhYmxlID09IHNjcm9sbGFibGUpCkBAIC01MDEsNiArNTA5LDcgQEAg
dm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikK
ICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFByZXNl
cnZlczNEKHByZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Nj
cm9sbFBvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obV9tYXhTY3Jv
bGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fc3VibGF5ZXJU
cmFuc2Zvcm0pOwogICAgIGlmICghdHJhbnNmb3JtSXNBbmltYXRpbmcoKSkKICAgICAgICAgbGF5
ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNmU2
MjI2MTc5NTBkNzhkZWZlZDY4NDQzMDhiYjZkMTk2MzM3OGJmNy4uNGQ5MzAwNzBhZWQ1YjMyZTVk
ZDg4YWNkNDJmYmU5NDY1OTg0M2E3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTQxLDEyICsx
NDEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNv
bnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKwogICAgIHZvaWQgc2V0U2Nyb2xs
YWJsZShib29sKTsKKyAgICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGU7IH0KICAgICB2b2lkIHNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZChib29sKTsKICAg
ICB2b2lkIHNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoYm9vbCk7CiAgICAgY29uc3QgUmVnaW9u
JiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpIHsgcmV0dXJuIG1fbm9uRmFzdFNjcm9sbGFibGVS
ZWdpb247IH0KICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lv
biYpOwogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25DaGFuZ2VkKCkgeyBtX25v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpIHsgfQogCiAgICAgdm9pZCBzZXREcmF3Q2hlY2tlcmJv
YXJkRm9yTWlzc2luZ1RpbGVzKGJvb2wpOwogICAgIGJvb2wgZHJhd0NoZWNrZXJib2FyZEZvck1p
c3NpbmdUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdU
aWxlczsgfQpAQCAtMzAzLDYgKzMwOCw3IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2JvdW5k
czsKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9s
bFBvc2l0aW9uOworICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1f
c2Nyb2xsYWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwogICAgIGJv
b2wgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4
IDc4Mjk0YmFhMjEwYzE3NTFiZWE4OTZlMGE1MDNjNGQyZDk1Njc0YWEuLmU1MWVjY2NmYWExNjdk
YjE5ZTcyMTk0YjNkY2M2ZTUwM2QyZmQ2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAg
LTEwNyw2ICsxMDcsMjIgQEAgdm9pZCBDQ0xheWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQog
ICAgICAgICBtX2NoaWxkcmVuWzBdLT5yZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAKK0NDTGF5ZXJJ
bXBsKiBDQ0xheWVySW1wbDo6ZmluZExheWVySW5TdWJ0cmVlKGludCBsYXllcklkKQoreworICAg
IGlmIChpZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIGlmIChtX21h
c2tMYXllciAmJiBtX21hc2tMYXllci0+aWQoKSA9PSBsYXllcklkKQorICAgICAgICByZXR1cm4g
bV9tYXNrTGF5ZXIuZ2V0KCk7CisgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIG1fcmVwbGljYUxh
eWVyLT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gbV9jaGlsZHJlbltpXS0+ZmluZExheWVySW5T
dWJ0cmVlKGxheWVySWQpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4g
Zm91bmQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpjbGVh
ckNoaWxkTGlzdCgpCiB7CiAgICAgbV9jaGlsZHJlbi5jbGVhcigpOwpAQCAtMTYwLDYgKzE3Niwz
NyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCkK
ICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK0NDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllckltcGw6OnRyeVNjcm9sbChjb25zdCBJ
bnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0
VHlwZSB0eXBlKSBjb25zdAoreworICAgIGlmIChzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoKSkg
eworICAgICAgICBUUkFDRV9FVkVOVCgidHJ5U2Nyb2xsIEZhaWxlZCBzaG91bGRTY3JvbGxPbk1h
aW5UaHJlYWQiLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxGYWlsZWQ7CisgICAgfQorCisgICAgaWYgKCFzY3JlZW5TcGFjZVRyYW5zZm9ybSgp
LmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlTY3JvbGwgRmFpbGVk
IG5vbkludmVydGlibGVUcmFuc2Zvcm0iLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0dXJuIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworICAgIH0KKworICAgIEludFBvaW50IGNv
bnRlbnRQb2ludChzY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2aWV3
cG9ydFBvaW50KSk7CisgICAgaWYgKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29udGFpbnMo
Y29udGVudFBvaW50KSkgeworICAgICAgICBUUkFDRV9FVkVOVCgidHJ5U2Nyb2xsIEZhaWxlZCBu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiIsIHRoaXMsIDApOworICAgICAgICByZXR1cm4gQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBD
Q0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwgJiYgaGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpKSB7
CisgICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlTY3JvbGwgRmFpbGVkIHdoZWVsRXZlbnRIYW5kbGVy
cyIsIHRoaXMsIDApOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bEZhaWxlZDsKKyAgICB9CisKKyAgICBpZiAoIXNjcm9sbGFibGUoKSkgeworICAgICAgICBUUkFD
RV9FVkVOVCgidHJ5U2Nyb2xsIElnbm9yZWQgbm90IHNjcm9sbGFibGUiLCB0aGlzLCAwKTsKKyAg
ICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworICAgIH0K
KworICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDsKK30KKwog
Y29uc3QgSW50UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogewogICAgIC8v
IEZvcm0gdGhlIG1hdHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJzIG9m
IHRoZSBsYXllcidzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBlOTI5MzkzMmJkYmZlZWMxNjQy
ZWJkODAzMWNiNDdlZGUyZGVlZGJkLi4xZjBlODkwYmU5OTRmM2I0N2VlNGM0M2RhZTI5OTBjMzE2
NDFkZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJSZWdpb24uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJT
dXJmYWNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKQEAgLTcyLDYgKzcz
LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKICAgICB2b2lkIHJl
bW92ZUFsbENoaWxkcmVuKCk7CiAKKyAgICAvLyBSZXR1cm5zIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2
ZW4gaWQgaWYgb25lIGV4aXN0cyBpbiB0aGUgc3VidHJlZSBzdGFydGluZworICAgIC8vIGZyb20g
dGhpcyBsYXllciAoaW5jbHVkaW5nIG1hc2sgYW5kIHJlcGxpY2EgbGF5ZXJzKS4KKyAgICBDQ0xh
eWVySW1wbCogZmluZExheWVySW5TdWJ0cmVlKGludCBsYXllcklkKTsKKwogICAgIHZvaWQgc2V0
TWFza0xheWVyKFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKICAgICBDQ0xheWVySW1wbCogbWFz
a0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIApAQCAtMjAwLDYg
KzIwNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5n
VGlsZXMoYm9vbCBjaGVja2VyYm9hcmQpIHsgbV9kcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1Rp
bGVzID0gY2hlY2tlcmJvYXJkOyB9CiAgICAgYm9vbCBkcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2lu
Z1RpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVz
OyB9CiAKKyAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHRyeVNjcm9sbChj
b25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bElucHV0VHlwZSkgY29uc3Q7CisKICAgICBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0OyB9CiAgICAgdm9pZCBzZXRWaXNp
YmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpIHsgbV92aXNpYmxl
TGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAppbmRleCBjOWJhODRkNGEyMmI4YjYwNmE0OWMwZTU0ZGJlYTczNDg0MjA4MmY4Li5i
NGQwOGFmMGNlN2E2ODhiNzI4YjRjN2I5ZjMzMGJlNWU4MGJhYThlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTU3MSwxNSArNTcxLDYyIEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0CiAgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKS5yZWNvcmRNZXRy
aWNzKHRoaXMpOwogfQogCitzdGF0aWMgTGF5ZXJDaHJvbWl1bSogZmluZExheWVyQnlJZChMYXll
ckNocm9taXVtKiBsYXllciwgaW50IGlkKQoreworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKGxheWVyLT5pZCgpID09IGlkKQorICAgICAgICByZXR1cm4gbGF5
ZXI7CisKKyAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpICYmIGxheWVyLT5tYXNrTGF5ZXIoKS0+
aWQoKSA9PSBpZCkKKyAgICAgICAgcmV0dXJuIGxheWVyLT5tYXNrTGF5ZXIoKTsKKworICAgIGlm
IChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5pZCgpID09
IGlkKQorICAgICAgICByZXR1cm4gbGF5ZXItPnJlcGxpY2FMYXllcigpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAg
ICBMYXllckNocm9taXVtKiBmb3VuZCA9IGZpbmRMYXllckJ5SWQobGF5ZXItPmNoaWxkcmVuKClb
aV0uZ2V0KCksIGlkKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZv
dW5kOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgTGF5ZXJDaHJvbWl1bSog
ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIGlm
ICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVyLT5zY3JvbGxhYmxl
KCkpCisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSog
Zm91bmQgPSBmaW5kRmlyc3RTY3JvbGxhYmxlTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0
KCkpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9s
bEFuZFNjYWxlKGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8pCiB7Ci0gICAgLy8gRklY
TUU6IHB1c2hpbmcgc2Nyb2xsIG9mZnNldHMgdG8gbm9uLXJvb3QgbGF5ZXJzIG5vdCBpbXBsZW1l
bnRlZAotICAgIGlmICghaW5mby5zY3JvbGxzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IExheWVyQ2hyb21pdW0qIHJvb3RTY3JvbGxMYXllciA9IGZpbmRGaXJzdFNjcm9sbGFibGVMYXll
cihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgSW50U2l6ZSByb290U2Nyb2xsRGVsdGE7CiAKLSAg
ICBBU1NFUlQoaW5mby5zY3JvbGxzLnNpemUoKSA9PSAxKTsKLSAgICBJbnRTaXplIHNjcm9sbERl
bHRhID0gaW5mby5zY3JvbGxzWzBdLnNjcm9sbERlbHRhOwotICAgIG1fY2xpZW50LT5hcHBseVNj
cm9sbEFuZFNjYWxlKHNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGluZm8uc2Nyb2xscy5zaXplKCk7ICsraSkgeworICAgICAgICBM
YXllckNocm9taXVtKiBsYXllciA9IGZpbmRMYXllckJ5SWQobV9yb290TGF5ZXIuZ2V0KCksIGlu
Zm8uc2Nyb2xsc1tpXS5sYXllcklkKTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZiAobGF5ZXIgPT0gcm9vdFNjcm9sbExheWVyKQorICAgICAg
ICAgICAgcm9vdFNjcm9sbERlbHRhICs9IGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbGF5ZXItPnNjcm9sbEJ5KGluZm8uc2Nyb2xsc1tpXS5z
Y3JvbGxEZWx0YSk7CisgICAgfQorICAgIGlmICghcm9vdFNjcm9sbERlbHRhLmlzWmVybygpIHx8
IGluZm8ucGFnZVNjYWxlRGVsdGEgIT0gMSkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xs
QW5kU2NhbGUocm9vdFNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGZiN2Fi
ZTViMzNhZThlZTI4MTljODcxMzk2NjI1MmRkNTIxMWNlODEuLmVjNGJjN2ZkOWUyMmNjMmM5ZTY2
NjI0NTAzNTZiOTc5NThhNDNkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCkBAIC0xMDQsNyArMTA0LDggQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRy
ZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRyZWUKICAgICA6
IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fc291cmNlRnJhbWVOdW1iZXIoLTEpCiAgICAgLCBt
X2ZyYW1lTnVtYmVyKDApCi0gICAgLCBtX3Njcm9sbExheWVySW1wbCgwKQorICAgICwgbV9yb290
U2Nyb2xsTGF5ZXJJbXBsKDApCisgICAgLCBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCgw
KQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKICAgICAsIG1fdmlzaWJsZSh0cnVlKQogICAg
ICwgbV9oZWFkc1VwRGlzcGxheShDQ0hlYWRzVXBEaXNwbGF5OjpjcmVhdGUoKSkKQEAgLTE2NCwx
MCArMTY1LDEwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgbW9u
b3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRp
b24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0YXJ0VGltZSwg
ZG91YmxlIGR1cmF0aW9uKQogewotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYg
KCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9z
aXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXpl
IHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKICAg
ICBzY3JvbGxUb3RhbC5zY2FsZShtX3BhZ2VTY2FsZURlbHRhKTsKICAgICBmbG9hdCBzY2FsZVRv
dGFsID0gbV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhOwogICAgIEludFNpemUgc2NhbGVk
Q29udGVudFNpemUgPSBjb250ZW50U2l6ZSgpOwpAQCAtMzU3LDkgKzM1OCw5IEBAIEludFNpemUg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVudFNpemUoKSBjb25zdAogewogICAgIC8vIFRPRE8o
YWVsaWFzKTogSGFyZGNvZGluZyB0aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4gVGhpbmsg
b2YKICAgICAvLyBhIGNsZWFuZXIgd2F5IHRvIGdldCB0aGUgY29udGVudEJvdW5kcyBvbiB0aGUg
SW1wbCBzaWRlLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgbV9zY3JvbGxMYXllcklt
cGwtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBs
IHx8IG1fcm9vdFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBJbnRTaXplKCk7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJl
bigpWzBdLT5jb250ZW50Qm91bmRzKCk7CisgICAgcmV0dXJuIG1fcm9vdFNjcm9sbExheWVySW1w
bC0+Y2hpbGRyZW4oKVswXS0+Y29udGVudEJvdW5kcygpOwogfQogCiBib29sIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKQEAgLTM2OCw2ICszNjks
NyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBm
cmFtZSkKIAogICAgIGZyYW1lLnJlbmRlclBhc3Nlcy5jbGVhcigpOwogICAgIGZyYW1lLnJlbmRl
clN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKKyAgICBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmNsZWFyKCk7CiAKICAgICBpZiAoIW1fcm9vdExheWVySW1wbCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzc1LDYgKzM3Nyw4IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1w
bDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQogICAgIGlmICghY2FsY3VsYXRlUmVu
ZGVyUGFzc2VzKGZyYW1lLnJlbmRlclBhc3NlcywgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlz
dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIG1fbW9zdFJlY2VudFJlbmRlclN1cmZh
Y2VMYXllckxpc3QgPSBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCiAgICAgLy8gSWYg
d2UgcmV0dXJuIHRydWUsIHRoZW4gd2UgZXhwZWN0IGRyYXdMYXllcnMoKSB0byBiZSBjYWxsZWQg
YmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFnYWluLgogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtNDU5LDcgKzQ2Myw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2so
dm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIG1fbGF5ZXJSZW5kZXJlci0+
Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotc3RhdGljIENDTGF5ZXJJ
bXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQorc3RhdGljIENDTGF5ZXJJ
bXBsKiBmaW5kUm9vdFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBpZiAo
IWxheWVyKQogICAgICAgICByZXR1cm4gMDsKQEAgLTQ2OCw3ICs0NzIsNyBAQCBzdGF0aWMgQ0NM
YXllckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJl
dHVybiBsYXllcjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFNjcm9s
bExheWVyKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKKyAgICAgICAgQ0NMYXllckltcGwq
IGZvdW5kID0gZmluZFJvb3RTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7
CiAgICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CkBA
IC00NzYsMTIgKzQ4MCw0MSBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllcihD
Q0xheWVySW1wbCogbGF5ZXIpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIENvbnRlbnQgbGF5ZXJz
IGNhbiBiZSBlaXRoZXIgZGlyZWN0bHkgc2Nyb2xsYWJsZSBvciBjb250YWluZWQgaW4gYW4gb3V0
ZXIKKy8vIHNjcm9sbGluZyBsYXllciB3aGljaCBhcHBsaWVzIHRoZSBzY3JvbGwgdHJhbnNmb3Jt
LiBHaXZlbiBhIGNvbnRlbnQgbGF5ZXIsCisvLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFz
c29jaWF0ZWQgc2Nyb2xsIGxheWVyIGlmIGFueS4KK3N0YXRpYyBDQ0xheWVySW1wbCogZmluZFNj
cm9sbExheWVyRm9yQ29udGVudExheWVyKENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAg
aWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVySW1wbC0+
c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1cm4gbGF5ZXJJbXBsOworCisgICAgaWYgKGxheWVy
SW1wbC0+ZHJhd3NDb250ZW50KCkgJiYgbGF5ZXJJbXBsLT5wYXJlbnQoKSAmJiBsYXllckltcGwt
PnBhcmVudCgpLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllckltcGwtPnBhcmVu
dCgpOworCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0
Um9vdExheWVyKFBhc3NPd25QdHI8Q0NMYXllckltcGw+IGxheWVyKQogewogICAgIG1fcm9vdExh
eWVySW1wbCA9IGxheWVyOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbCA9IGZpbmRSb290U2Ny
b2xsTGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKIAotICAgIC8vIEZJWE1FOiBDdXJyZW50
bHksIHRoaXMgb25seSBmaW5kcyB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBsYXllci4KLSAgICBtX3Nj
cm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwor
ICAgIGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX3Jvb3RMYXllckltcGwgJiYgbV9yb290TGF5ZXJJbXBsLT5maW5kTGF5ZXJJ
blN1YnRyZWUobV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwtPmlkKCkpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7Cit9CisKK1Bh
c3NPd25QdHI8Q0NMYXllckltcGw+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbGVhc2VSb290TGF5
ZXIoKQoreworICAgIG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsK
KyAgICByZXR1cm4gbV9yb290TGF5ZXJJbXBsLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTUzMiw2ICs1NjUsMzQg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6
ZSYgdmlld3BvcnRTaXplKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdl
ZCgpOwogfQogCitzdGF0aWMgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKEND
TGF5ZXJJbXBsKiBsYXllckltcGwsIGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKK3sKKyAgICBpZiAo
IWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xs
YWJsZSgpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xs
IGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2UuCisgICAgICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0
YSA9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICAgICAgc2Nyb2xsRGVsdGEuc2NhbGUo
cGFnZVNjYWxlQ2hhbmdlKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3Jv
bGxEZWx0YSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwt
PmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2Nh
bGVDaGFuZ2UobGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpLCBwYWdlU2NhbGVDaGFuZ2Up
OworfQorCitzdGF0aWMgdm9pZCBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMoQ0NM
YXllckltcGwqIGxheWVySW1wbCwgZmxvYXQgcGFnZVNjYWxlRGVsdGEpCit7CisgICAgaWYgKCFs
YXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFi
bGUoKSkKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRQYWdlU2NhbGVEZWx0YShwYWdlU2NhbGVEZWx0
YSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5z
aXplKCk7ICsraSkKKyAgICAgICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXJzKGxh
eWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFnZVNjYWxlRGVsdGEpOworfQorCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhmbG9hdCBw
YWdlU2NhbGUsIGZsb2F0IG1pblBhZ2VTY2FsZSwgZmxvYXQgbWF4UGFnZVNjYWxlKQogewogICAg
IGlmICghcGFnZVNjYWxlKQpAQCAtNTQ2LDI1ICs2MDcsMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9h
dCBtaW4KICAgICBmbG9hdCBwYWdlU2NhbGVDaGFuZ2UgPSBwYWdlU2NhbGUgLyBtX3BhZ2VTY2Fs
ZTsKICAgICBtX3BhZ2VTY2FsZSA9IHBhZ2VTY2FsZTsKIAotICAgIGFkanVzdFNjcm9sbHNGb3JQ
YWdlU2NhbGVDaGFuZ2UocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICBpZiAocGFnZVNjYWxlQ2hhbmdl
ICE9IDEpCisgICAgICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UobV9yb290U2Ny
b2xsTGF5ZXJJbXBsLCBwYWdlU2NhbGVDaGFuZ2UpOwogCiAgICAgLy8gQ2xhbXAgZGVsdGEgdG8g
bGltaXRzIGFuZCByZWZyZXNoIGRpc3BsYXkgbWF0cml4LgogICAgIHNldFBhZ2VTY2FsZURlbHRh
KG1fcGFnZVNjYWxlRGVsdGEgLyBtX3NlbnRQYWdlU2NhbGVEZWx0YSk7CiAgICAgbV9zZW50UGFn
ZVNjYWxlRGVsdGEgPSAxOwotICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCk7
Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2Fs
ZUNoYW5nZShmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCi17Ci0gICAgaWYgKHBhZ2VTY2FsZUNoYW5n
ZSA9PSAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29udmVy
dCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2UuCi0gICAgaWYgKG1f
c2Nyb2xsTGF5ZXJJbXBsKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgICAgICBzY3JvbGxEZWx0YS5zY2FsZShw
YWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVs
dGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxM
YXllcnMobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCBkZWx0YSkKQEAg
LTU4MiwyMiArNjMxLDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxl
RGVsdGEoZmxvYXQgZGVsdGEpCiAgICAgbV9wYWdlU2NhbGVEZWx0YSA9IGRlbHRhOwogCiAgICAg
dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKLSAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3Jv
bGxMYXllcigpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFwcGx5UGFnZVNjYWxl
RGVsdGFUb1Njcm9sbExheWVyKCkKLXsKLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwpCi0gICAg
ICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZURlbHRh
KTsKKyAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMobV9yb290U2Nyb2xsTGF5
ZXJJbXBsLCBtX3BhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1w
bCB8fCAhbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpKQorICAgIGlmICghbV9y
b290U2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCku
c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFNpemUgdmlld0JvdW5kcyA9IG1f
dmlld3BvcnRTaXplOwotICAgIGlmIChDQ0xheWVySW1wbCogY2xpcExheWVyID0gbV9zY3JvbGxM
YXllckltcGwtPnBhcmVudCgpKSB7CisgICAgaWYgKENDTGF5ZXJJbXBsKiBjbGlwTGF5ZXIgPSBt
X3Jvb3RTY3JvbGxMYXllckltcGwtPnBhcmVudCgpKSB7CiAgICAgICAgIGlmIChjbGlwTGF5ZXIt
Pm1hc2tzVG9Cb3VuZHMoKSkKICAgICAgICAgICAgIHZpZXdCb3VuZHMgPSBjbGlwTGF5ZXItPmJv
dW5kcygpOwogICAgIH0KQEAgLTYwOCw5ICs2NTEsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAgICAvLyBoYXZpbmcgYSB2ZXJ0aWNhbCBz
Y3JvbGxiYXIgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cuCiAgICAgbWF4U2Nyb2xsLmNsYW1w
TmVnYXRpdmVUb1plcm8oKTsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRNYXhTY3JvbGxQ
b3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9ETyhhZWxpYXMpOiBBbHNvIHVwZGF0ZSBz
dWJsYXllcnMuCisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zZXRNYXhTY3JvbGxQb3NpdGlv
bihtYXhTY3JvbGwpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVk
cmF3KCkKQEAgLTYxOCw0NiArNjU5LDEwNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNl
dE5lZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQo
KTsKIH0KIAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjplbnN1cmVNb3N0UmVjZW50UmVuZGVy
U3VyZmFjZUxheWVyTGlzdCgpCit7CisgICAgaWYgKG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VM
YXllckxpc3Quc2l6ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIHdlIGFy
ZSBjYWxsZWQgYWZ0ZXIgc2V0Um9vdExheWVyKCkgYnV0IGJlZm9yZSBwcmVwYXJlVG9EcmF3KCks
IHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUKKyAgICAvLyB0aGUgdmlzaWJsZSBsYXllcnMuIFRoZSBy
ZXR1cm4gdmFsdWUgaXMgaWdub3JlZCBiZWNhdXNlIHdlIGRvbid0IGNhcmUgYWJvdXQgY2hlY2tl
cmJvYXJkaW5nLgorICAgIENDUmVuZGVyUGFzc0xpc3QgcGFzc2VzOworICAgIGNhbGN1bGF0ZVJl
bmRlclBhc3NlcyhwYXNzZXMsIG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
CisgICAgcmV0dXJuIG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpOwor
fQorCiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnNjcm9sbEJlZ2luKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlIHR5cGUpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sg
Zm9yIHNjcm9sbGFibGUgc3VibGF5ZXJzLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwg
IW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQo
InNjcm9sbEJlZ2luIElnbm9yZWQgbm8gc2Nyb2xsYWJsZSIsIHRoaXMsIDApOworICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbiIsIHRoaXMsIDApOworCisg
ICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSAwOworCisgICAgaWYgKCFlbnN1cmVN
b3N0UmVjZW50UmVuZGVyU3VyZmFjZUxheWVyTGlzdCgpKQogICAgICAgICByZXR1cm4gU2Nyb2xs
SWdub3JlZDsKLSAgICB9CiAKLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwtPnNob3VsZFNjcm9s
bE9uTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBGYWls
ZWQgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBT
Y3JvbGxGYWlsZWQ7CisgICAgLy8gRmlyc3QgZmluZCBvdXQgd2hpY2ggbGF5ZXIgd2FzIGhpdCBi
eSB3YWxraW5nIHRoZSBzYXZlZCBsaXN0IG9mIHZpc2libGUgbGF5ZXJzIGZyb20gdGhlIG1vc3Qg
cmVjZW50IGZyYW1lLgorICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSAwOworICAgIHR5cGVk
ZWYgQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBDQ0xheWVyTGlzdCwgQ0NSZW5kZXJTdXJm
YWNlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9y
VHlwZTsKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6
OmVuZCgmbV9tb3N0UmVjZW50UmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZm9yIChDQ0xh
eWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJm1fbW9zdFJl
Y2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
Q0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllckltcGwgPSAoKml0KTsKKyAgICAgICAgaWYg
KCFyZW5kZXJTdXJmYWNlTGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmlzSW52ZXJ0
aWJsZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEludFBvaW50IGNvbnRlbnRQ
b2ludChyZW5kZXJTdXJmYWNlTGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVy
c2UoKS5tYXBQb2ludCh2aWV3cG9ydFBvaW50KSk7CisgICAgICAgIGlmICghcmVuZGVyU3VyZmFj
ZUxheWVySW1wbC0+dmlzaWJsZUxheWVyUmVjdCgpLmNvbnRhaW5zKGNvbnRlbnRQb2ludCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGF5ZXJJbXBsID0gcmVuZGVyU3VyZmFjZUxh
eWVySW1wbDsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgSW50UG9pbnQgc2Nyb2xsTGF5
ZXJDb250ZW50UG9pbnQobV9zY3JvbGxMYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCku
aW52ZXJzZSgpLm1hcFBvaW50KHZpZXdwb3J0UG9pbnQpKTsKLSAgICBpZiAobV9zY3JvbGxMYXll
ckltcGwtPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29udGFpbnMoc2Nyb2xsTGF5ZXJDb250
ZW50UG9pbnQpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBGYWlsZWQgbm9u
RmFzdFNjcm9sbGFibGVSZWdpb24iLCB0aGlzLCAwKTsKLSAgICAgICAgcmV0dXJuIFNjcm9sbEZh
aWxlZDsKLSAgICB9CisgICAgLy8gV2FsayB1cCB0aGUgaGllcmFyY2h5IGFuZCBsb29rIGZvciBh
IHNjcm9sbGFibGUgbGF5ZXIuCisgICAgQ0NMYXllckltcGwqIHBvdGVudGlhbGx5U2Nyb2xsaW5n
TGF5ZXJJbXBsID0gMDsKKyAgICBmb3IgKDsgbGF5ZXJJbXBsOyBsYXllckltcGwgPSBsYXllcklt
cGwtPnBhcmVudCgpKSB7CisgICAgICAgIC8vIFRoZSBjb250ZW50IGxheWVyIGNhbiBhbHNvIGJs
b2NrIGF0dGVtcHRzIHRvIHNjcm9sbCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAg
aWYgKGxheWVySW1wbC0+dHJ5U2Nyb2xsKHZpZXdwb3J0UG9pbnQsIHR5cGUpID09IFNjcm9sbEZh
aWxlZCkKKyAgICAgICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7CisKKyAgICAgICAgQ0NMYXll
ckltcGwqIHNjcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllckZvckNvbnRlbnRMYXllcihs
YXllckltcGwpOworICAgICAgICBpZiAoIXNjcm9sbExheWVySW1wbCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgaWYgKHR5cGUgPT0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsICYm
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5oYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkpIHsKLSAgICAgICAg
VFJBQ0VfRVZFTlQoInNjcm9sbEJlZ2luIEZhaWxlZCB3aGVlbEV2ZW50SGFuZGxlcnMiLCB0aGlz
LCAwKTsKLSAgICAgICAgcmV0dXJuIFNjcm9sbEZhaWxlZDsKKyAgICAgICAgU2Nyb2xsU3RhdHVz
IHN0YXR1cyA9IHNjcm9sbExheWVySW1wbC0+dHJ5U2Nyb2xsKHZpZXdwb3J0UG9pbnQsIHR5cGUp
OworCisgICAgICAgIC8vIElmIGFueSBsYXllciB3YW50cyB0byBkaXZlcnQgdGhlIHNjcm9sbCBl
dmVudCB0byB0aGUgbWFpbiB0aHJlYWQsIGFib3J0LgorICAgICAgICBpZiAoc3RhdHVzID09IFNj
cm9sbEZhaWxlZCkKKyAgICAgICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7CisKKyAgICAgICAg
aWYgKHN0YXR1cyA9PSBTY3JvbGxTdGFydGVkICYmICFwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVy
SW1wbCkKKyAgICAgICAgICAgIHBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gc2Nyb2xs
TGF5ZXJJbXBsOwogICAgIH0KIAotICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIGlmIChw
b3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCkgeworICAgICAgICBtX2N1cnJlbnRseVNjcm9s
bGluZ0xheWVySW1wbCA9IHBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsOworICAgICAgICBy
ZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAgICB9CisgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGVsdGEpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9s
bEJ5IiwgdGhpcywgMCk7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1f
Y3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwotICAgIG1fY2xpZW50LT5zZXRO
ZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09u
SW1wbFRocmVhZCgpOworICAgIEZsb2F0U2l6ZSBwZW5kaW5nRGVsdGEoc2Nyb2xsRGVsdGEpOwor
ICAgIHBlbmRpbmdEZWx0YS5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3Ig
KENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsg
bGF5ZXJJbXBsICYmICFwZW5kaW5nRGVsdGEuaXNaZXJvKCk7IGxheWVySW1wbCA9IGxheWVySW1w
bC0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKCFsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBGbG9hdFNpemUgcHJldmlvdXNEZWx0YShsYXll
ckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHBlbmRp
bmdEZWx0YSk7CisgICAgICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIHNjcm9sbCBkZWx0YSB0byB6
ZXJvIGlmIHRoZSBsYXllciB3YXMgYWJsZSB0byBtb3ZlIGFsb25nIHRoZSByZXF1ZXN0ZWQKKyAg
ICAgICAgLy8gYXhpcy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xs
IGV4YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAgICAgICAvLyBzY3JvbGwg
YXJlYSByZWdhcmRsZXNzIG9mIHRoZSBzY3JvbGwgc3RlcC4gRm9yIGRpYWdvbmFsIHNjcm9sbHMg
dGhpcyBhbHNvIGF2b2lkcyBhcHBseWluZworICAgICAgICAvLyB0aGUgc2Nyb2xsIG9uIG9uZSBh
eGlzIHRvIG11bHRpcGxlIGxheWVycy4KKyAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEud2lkdGgo
KSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAgICAgICAgIHBlbmRp
bmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEuaGVpZ2h0KCkg
IT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmhlaWdodCgpKQorICAgICAgICAgICAgcGVuZGlu
Z0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICB9CisKKyAgICBpZiAocGVuZGluZ0RlbHRhICE9IHNj
cm9sbERlbHRhKSB7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVh
ZCgpOworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKCkKIHsKKyAgICBt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6cGluY2hHZXN0dXJlQmVnaW4oKQpAQCAtNjcxLDcgKzc3MCw3IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0IG1hZ25pZnlEZWx0YSwK
IHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBk
YXRlIiwgdGhpcywgMCk7CiAKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICgh
bV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wcmV2
aW91c1BpbmNoQW5jaG9yID09IEludFBvaW50Ojp6ZXJvKCkpCkBAIC02ODYsNyArNzg1LDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQgbWFnbmlm
eURlbHRhLAogCiAgICAgbV9wcmV2aW91c1BpbmNoQW5jaG9yID0gYW5jaG9yOwogCi0gICAgbV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHJvdW5kZWRJbnRTaXplKG1vdmUpKTsKKyAgICBtX3Jv
b3RTY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHJvdW5kZWRJbnRTaXplKG1vdmUpKTsKICAgICBt
X2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKICAgICBtX2NsaWVudC0+c2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KQEAgLTcwOCw3ICs4MDcsNyBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVEb3VibGVUYXBab29tRGVsdGFzKENDU2Nyb2xsQW5k
U2NhbGVTZXQqIHNjcm9sbAogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5j
aFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbykKIHsKLSAgICBpZiAo
IW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBPbmx5IHNlbmQgZmFrZSBzY3JvbGwvem9vbSBkZWx0YXMg
aWYgd2UncmUgcGluY2ggem9vbWluZyBvdXQgYnkgYQpAQCAtNzIwLDcgKzgxOSw3IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNj
YWxlU2V0KiBzY3JvbGxJbmZvCiAKICAgICAvLyBDb21wdXRlIHdoZXJlIHRoZSBzY3JvbGwgb2Zm
c2V0L3BhZ2Ugc2NhbGUgd291bGQgYmUgaWYgZnVsbHkgcGluY2gtem9vbWVkCiAgICAgLy8gb3V0
IGZyb20gdGhlIGFuY2hvciBwb2ludC4KLSAgICBJbnRTaXplIHNjcm9sbEJlZ2luID0gZmxvb3Jl
ZEludFNpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxCZWdpbiA9IGZsb29y
ZWRJbnRTaXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fcm9v
dFNjcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAgICAgc2Nyb2xsQmVnaW4uc2NhbGUo
bV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVCZWdpbiA9IG1fcGFnZVNjYWxlICog
bV9wYWdlU2NhbGVEZWx0YTsKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0YVRvU2VuZCA9IG1fbWlu
UGFnZVNjYWxlIC8gbV9wYWdlU2NhbGU7CkBAIC03MzksMjEgKzgzOCw0MSBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNl
dCogc2Nyb2xsSW5mbwogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRT
Y2FsZVNldChDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBjb25zdCBJbnRTaXplJiBz
Y3JvbGxPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSkKIHsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJ
bXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAK
ICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAg
IHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNj
cm9sbERlbHRhID0gc2Nyb2xsT2Zmc2V0IC0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpKTsKKyAgICBzY3JvbGwubGF5ZXJJZCA9IG1fcm9vdFNjcm9sbExheWVySW1w
bC0+aWQoKTsKKyAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxPZmZzZXQgLSB0b1NpemUo
bV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICBzY3JvbGxJbmZv
LT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50
U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKKyAgICBtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOwogICAgIG1fc2VudFBh
Z2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSBwYWdlU2NhbGUgLyBt
X3BhZ2VTY2FsZTsKIH0KIAorc3RhdGljIHZvaWQgY29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9s
bEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQoreworICAg
IGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0g
Zmxvb3JlZEludFNpemUobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgc2Nyb2xs
LmxheWVySWQgPSBsYXllckltcGwtPmlkKCk7CisgICAgICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9
IHNjcm9sbERlbHRhOworICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwp
OworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Cisg
ICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpCisgICAgICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mbywgbGF5
ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKK30KKwogUGFzc093blB0cjxDQ1Njcm9sbEFu
ZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKIHsK
ICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0UHRyKG5l
dyBDQ1Njcm9sbEFuZFNjYWxlU2V0KCkpOwotICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Nyb2xsTGF5
ZXJJbXBsICYmICghbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkgfHwg
bV9wYWdlU2NhbGVEZWx0YSAhPSAxLjBmKTsKKyAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9s
bEluZm8uZ2V0KCksIG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisKKyAgICBib29sIGRpZE1vdmUg
PSBzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDE7CiAg
ICAgaWYgKCFkaWRNb3ZlIHx8IG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5p
bWF0aW9uKSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFn
ZVNjYWxlRGVsdGEgPSAxOwogICAgICAgICBpZiAobV9waW5jaEdlc3R1cmVBY3RpdmUpCkBAIC03
NjUsMTQgKzg4NCw2IEBAIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRy
ZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygpCiAKICAgICBtX3NlbnRQYWdlU2NhbGVE
ZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gbV9wYWdlU2NhbGVEZWx0YTsKIAot
ICAgIC8vIEZJWE1FOiB0cmFjayBzY3JvbGxzIGZyb20gbGF5ZXJzIG90aGVyIHRoYW4gdGhlIHJv
b3QKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwot
ICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xs
LnNjcm9sbERlbHRhID0gZmxvb3JlZEludFNpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERl
bHRhKCkpOwotICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7Ci0KLSAgICBt
X3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7
Ci0KICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiB9CiAKQEAgLTc4NywxNSArODk4
LDE1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0RnVsbFJvb3RMYXllckRhbWFnZSgp
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZShkb3VibGUgbW9u
b3RvbmljVGltZSkKIHsKLSAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uIHx8ICFtX3Njcm9s
bExheWVySW1wbCkKKyAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uIHx8ICFtX3Jvb3RTY3Jv
bGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90YWwg
PSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFs
ID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigp
ICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKIAogICAgIHNldFBhZ2VT
Y2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUobW9ub3Rvbmlj
VGltZSkgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2Nh
bGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShtb25vdG9uaWNUaW1lKTsKICAgICBuZXh0
U2Nyb2xsLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKLSAgICBtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKKyAgICBtX3Jvb3RTY3JvbGxM
YXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwgLSBzY3JvbGxUb3RhbCk7CiAgICAgbV9jbGll
bnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiAKICAgICBpZiAobV9wYWdlU2NhbGVB
bmltYXRpb24tPmlzQW5pbWF0aW9uQ29tcGxldGVBdFRpbWUobW9ub3RvbmljVGltZSkpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA1N2IyOWJjNWZjMTg3ZWU4ZjM0
YTEwNDg0ZDYzNjM1MTIyMDU3N2QzLi40NWFiMWYwNTIwYWNjODUxNmZhMzZhNzUxMjA1ZTMyNjg2
ZGQ4NmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xMjIsMTAg
KzEyMiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NPd25QdHI8Q0NMYXllcklt
cGw+KTsKLSAgICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZWxlYXNlUm9vdExheWVyKCkgeyBy
ZXR1cm4gbV9yb290TGF5ZXJJbXBsLnJlbGVhc2UoKTsgfQorICAgIFBhc3NPd25QdHI8Q0NMYXll
ckltcGw+IHJlbGVhc2VSb290TGF5ZXIoKTsKICAgICBDQ0xheWVySW1wbCogcm9vdExheWVyKCkg
eyByZXR1cm4gbV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CiAKLSAgICBDQ0xheWVySW1wbCogc2Ny
b2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExheWVySW1wbDsgfQorICAgIENDTGF5
ZXJJbXBsKiByb290U2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RTY3JvbGxMYXll
ckltcGw7IH0KIAogICAgIGJvb2wgdmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZTsg
fQogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKQEAgLTE2OSw4ICsxNjksNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgbWFrZVNjcm9sbEFuZFNjYWxlU2V0KENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNj
cm9sbEluZm8sIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlKTsK
IAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwotICAgIHZvaWQgYXBwbHlQYWdl
U2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLSAgICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdl
U2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsK
ICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3
TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICAv
LyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBmcmFtZSBzaG91bGQgbm90IGJlIGRpc3BsYXllZC4KQEAg
LTE3OSwxMiArMTc3LDE0IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNv
bnN0OwogICAgIHZvaWQgc2VuZERpZExvc2VDb250ZXh0UmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7
CiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xh
eWVySW1wbCopOworICAgIGJvb2wgZW5zdXJlTW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxp
c3QoKTsKIAogICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5k
ZW50LCBjb25zdCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIE93blB0cjxDQ0xheWVySW1wbD4gbV9y
b290TGF5ZXJJbXBsOwotICAgIENDTGF5ZXJJbXBsKiBtX3Njcm9sbExheWVySW1wbDsKKyAgICBD
Q0xheWVySW1wbCogbV9yb290U2Nyb2xsTGF5ZXJJbXBsOworICAgIENDTGF5ZXJJbXBsKiBtX2N1
cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsKICAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAg
ICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBib29sIG1fdmlzaWJsZTsKQEAgLTIxMSw2
ICsyMTEsOSBAQCBwcml2YXRlOgogCiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwog
CisgICAgLy8gTGlzdCBvZiB2aXNpYmxlIGxheWVycyBpbiB0aGUgbW9zdCByZWNlbnQgZnJhbWUu
IFVzZWQgZm9yIGlucHV0IGV2ZW50IGhpdCB0ZXN0aW5nLgorICAgIENDTGF5ZXJMaXN0IG1fbW9z
dFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICBGbG9hdFJlY3QgbV9yb290RGFt
YWdlUmVjdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29u
dGVudExheWVySW1wbC5jcHAKaW5kZXggNGY2NGQ1NDcxZTM5NjY1MGY3Y2E3NWU5ZTE2MjVjNjZk
NzJmMTFiNi4uOWQ2MTNhM2FjYTk5MWM5OTVkZTM5NzQ4NzI0YzcxZmNiYTk0MmU5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAK
QEAgLTcyLDQgKzcyLDggQEAgdm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpwYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXAKICAgICBtX2NvbnRlbnRD
bGllbnQtPnBhaW50Q29udGVudHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsKIH0KIAordm9pZCBX
ZWJDb250ZW50TGF5ZXJJbXBsOjpkaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpCit7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCmluZGV4IDUxZjM0NGY3Y2FmMTI3MTEyNmFjN2I0
MjY4ZWQ1NDYxMjE0MjE5ZDguLjFiYTg4NGM5YjM1N2ViZjM4N2VkZmYzNDlmNjU2ZWFmYTY2YWUx
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmgKQEAgLTQ0LDYgKzQ0LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gQ29udGVudExheWVy
RGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7
CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAK
ICAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsKICAgICBib29sIG1f
ZHJhd3NDb250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
SW1wbFRlc3QuY3BwCmluZGV4IDM2YzEwODJiNzU4MzdkN2Y5OGUyMDdjYmQ5NzM4ZWRlN2ZjODYx
NmUuLjkyNmFiOTljNGY4YThhNDgzNTczMTIwOGM2YzBjZTMwNmIxOGM4YTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKQEAgLTE2Miw0
ICsxNjIsMjggQEAgVEVTVChDQ0xheWVySW1wbFRlc3QsIHZlcmlmeUxheWVyQ2hhbmdlc0FyZVRy
YWNrZWRQcm9wZXJseSkKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VCVFJFRV9ESURfTk9UX0NI
QU5HRShyb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihhcmJpdHJhcnlJbnRTaXplKSk7CiB9CiAK
K1RFU1QoQ0NMYXllckltcGxUZXN0LCB2ZXJpZnlTdWJ0cmVlU2VhcmNoKQoreworICAgIC8vIFRo
ZSBjb25zdHJ1Y3RvciBvbiB0aGlzIHdpbGwgZmFrZSB0aGF0IHdlIGFyZSBvbiB0aGUgY29ycmVj
dCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxUaHJlYWQ7CisK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwor
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOwor
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
Myk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBtYXNrTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDQpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcmVwbGljYUxheWVyID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSg1KTsKKworICAgIGdyYW5kQ2hpbGQtPnNldFJlcGxpY2FMYXllcihyZXBsaWNh
TGF5ZXIucmVsZWFzZSgpKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNl
KCkpOworICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIobWFza0xheWVyLnJlbGVhc2UoKSk7CisgICAg
cm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIEVYUEVDVF9FUSgxLCByb290
LT5maW5kTGF5ZXJJblN1YnRyZWUoMSktPmlkKCkpOworICAgIEVYUEVDVF9FUSgyLCByb290LT5m
aW5kTGF5ZXJJblN1YnRyZWUoMiktPmlkKCkpOworICAgIEVYUEVDVF9FUSgzLCByb290LT5maW5k
TGF5ZXJJblN1YnRyZWUoMyktPmlkKCkpOworICAgIEVYUEVDVF9FUSg0LCByb290LT5maW5kTGF5
ZXJJblN1YnRyZWUoNCktPmlkKCkpOworICAgIEVYUEVDVF9FUSg1LCByb290LT5maW5kTGF5ZXJJ
blN1YnRyZWUoNSktPmlkKCkpOworICAgIEVYUEVDVF9FUSgwLCByb290LT5maW5kTGF5ZXJJblN1
YnRyZWUoNikpOworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCAwNzdl
NGMyMzliZDM1Mzc4OWE5NzIxNWYxMmFlOTgwOTMwNzgwODk5Li4wMTVlMTczZDNjM2IwMWRhZjBl
M2Q4NWJkNzM3NTNhODRhYWMwNGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtOTcsNiArOTcsMjUg
QEAgcHVibGljOgogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNl
KCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVT
Y3JvbGxhYmxlTGF5ZXIoaW50IGlkLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKGlkKTsKKyAgICAgICAgbGF5ZXItPnNldFNjcm9sbGFibGUo
dHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGxh
eWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGxheWVyLT5zZXRCb3VuZHMoc2l6
ZSk7CisgICAgICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKHNpemUud2lk
dGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSk7CisgICAgICAgIHJldHVybiBsYXllci5yZWxl
YXNlKCk7CisgICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdG
cmFtZSgpCisgICAgeworICAgICAgICBtX2hvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJl
cihjcmVhdGVDb250ZXh0KCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURh
dGEgZnJhbWU7CisgICAgICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXco
ZnJhbWUpKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgfQor
CiBwcm90ZWN0ZWQ6CiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29u
dGV4dCgpCiAgICAgewpAQCAtMTgwLDEwICsxOTksMTIgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiB7CiAgICAgewogICAg
ICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwor
ICAgICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDAp
KTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0
U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgICAgICByb290LT5zZXRNYXhTY3Jv
bGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgICAgIG1faG9zdEltcGwtPnNldFJv
b3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CiAgICAgfQogCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0xOTcsMTAgKzIxOCwxMiBAQCBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHdoZWVsRXZlbnRIYW5kbGVycykKIHsKICAg
ICB7CiAgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVh
dGUoMCk7CisgICAgICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAx
MDAsIDEwMCkpOwogICAgICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgICAgICBy
b290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAgICAgICAgIHJvb3QtPnNl
dE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKICAgICAgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICAgICAgaW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKICAgICB9CiAgICAgQ0NMYXllckltcGwqIHJvb3QgPSBt
X2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKIApAQCAtMjE1LDExICsyMzgsMTQgQEAgVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCkKIHsKICAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3Qt
PnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIHJvb3Qt
PnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9p
bnQoMCwgMCkpOwogICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAx
MDApKTsKICAgICByb290LT5zZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQodHJ1ZSk7CiAgICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXpl
TGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwp
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKICAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CiB9CkBAIC0y
MjcsMTEgKzI1MywxNCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNob3VsZFNj
cm9sbE9uTWFpblRocmVhZCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFz
dFNjcm9sbGFibGVSZWdpb25CYXNpYykKIHsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7
CiAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgIHJvb3Qt
PnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKICAgICByb290LT5zZXRO
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOwogICAgIG1faG9z
dEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgaW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKwogICAgIC8vIEFsbCBzY3JvbGwgdHlwZXMgaW5zaWRl
IHRoZSBub24tZmFzdCBzY3JvbGxhYmxlIHJlZ2lvbiBzaG91bGQgZmFpbC4KICAgICBFWFBFQ1Rf
RVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CiAg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bEZhaWxlZCk7CkBAIC0yNDcsMTggKzI3NiwxNiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQmFzaWMpCiAKIFRFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQogewotICAg
IG1faG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNyZWF0ZUNvbnRleHQoKSk7Ci0K
ICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwor
ICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDEsIDEpKTsKKyAgICByb290LT5zZXRWaXNpYmxl
TGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICByb290LT5zZXRTY3JvbGxh
YmxlKHRydWUpOwogICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsK
ICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAg
cm9vdC0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oSW50UmVjdCgwLCAwLCA1MCwgNTApKTsK
ICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC0yNSwgMCkpOwogICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1w
bDo6RnJhbWVEYXRhIGZyYW1lOwotICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVU
b0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsgLy8gVXBk
YXRlIGRyYXcgdHJhbnNmb3JtcyBzbyB3ZSBjYW4gY29ycmVjdGx5IG1hcCBwb2ludHMgaW50byBs
YXllciBzcGFjZS4KKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwog
CiAgICAgLy8gVGhpcyBwb2ludCB3b3VsZCBmYWxsIGludG8gdGhlIG5vbi1mYXN0IHNjcm9sbGFi
bGUgcmVnaW9uIGV4Y2VwdCB0aGF0IHdlJ3ZlIG1vdmVkIHRoZSBsYXllciBkb3duIGJ5IDI1IHBp
eGVscy4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNDAs
IDEwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMjczLDggKzMwMCw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgcGluY2hHZXN0dXJlKQogewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNM
YXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6
ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CiAKLSAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5zY3Jv
bGxMYXllcigpOworICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnJv
b3RTY3JvbGxMYXllcigpOwogICAgIEFTU0VSVChzY3JvbGxMYXllcik7CiAKICAgICBjb25zdCBm
bG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUsIG1heFBhZ2VTY2FsZSA9IDQ7CkBAIC0zNTMsOCArMzgx
LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYWdlU2NhbGVBbmltYXRpb24p
CiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7
CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAotICAgIENDTGF5ZXJJbXBs
KiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnNjcm9sbExheWVyKCk7CisgICAgQ0NMYXllcklt
cGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7CiAgICAgQVNT
RVJUKHNjcm9sbExheWVyKTsKIAogICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VTY2FsZSA9IDAuNSwg
bWF4UGFnZVNjYWxlID0gNDsKQEAgLTU2MSw2ICs1OTAsMjY5IEBAIFRFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hlbkFuaW1hdGlvblVzZXNDaGVja2Vy
Ym9hcmQpCiAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiB9CiAKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdElnbm9yZWQpCit7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5z
ZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5y
ZWxlYXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisK
KyAgICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIGxheWVyIGlzIG5vdCBzY3Jv
bGxhYmxlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgw
LCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOwor
ICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE5vbkNvbXBvc2l0ZWRSb290KQoreworICAgIC8vIFRl
c3QgdGhlIGNvbmZpZ3VyYXRpb24gd2hlcmUgYSBub24tY29tcG9zaXRlZCByb290IGxheWVyIGlz
IGVtYmVkZGVkIGluIGEKKyAgICAvLyBzY3JvbGxhYmxlIG91dGVyIGxheWVyLgorICAgIEludFNp
emUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVu
dExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBjb250ZW50TGF5ZXItPnNldElz
Tm9uQ29tcG9zaXRlZENvbnRlbnQodHJ1ZSk7CisgICAgY29udGVudExheWVyLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisgICAgY29udGVudExheWVyLT5zZXRQb3NpdGlvbihJbnRQb2ludCg1LCA1
KSk7CisgICAgY29udGVudExheWVyLT5zZXRCb3VuZHMoc3VyZmFjZVNpemUpOworICAgIGNvbnRl
bnRMYXllci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKHN1cmZhY2VTaXplLndpZHRoKCkgKiAy
LCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSAqIDIpKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4g
c2Nyb2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHNjcm9sbExheWVyLT5z
ZXRTY3JvbGxhYmxlKHRydWUpOworICAgIHNjcm9sbExheWVyLT5hZGRDaGlsZChjb250ZW50TGF5
ZXIucmVsZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxMYXll
ci5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6
ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEVY
UEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQp
OworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJ
bXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOwor
ICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykKK3sKKyAg
ICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5hZGRDaGlsZChjcmVhdGVT
Y3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAgICBt
X2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwt
PnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdp
bihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KElu
dFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1Rf
VFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENv
bW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2Vz
Q2hpbGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+YWRk
Q2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VT
aXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAg
ICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxp
emVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGwgZXZlbnQgaXMg
aWdub3JlZCBiZWNhdXNlIHRoZSBpbnB1dCBjb29yZGluYXRlIGlzIG91dHNpZGUgdGhlIGxheWVy
IGJvdW5kYXJpZXMuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDE1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRy
YXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0JhY2tmYWNpbmdDaGlsZCkKK3sK
KyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwor
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC5yb3RhdGUzZCgx
ODAsIDAsIDApOworICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICBjaGlsZC0+
c2V0RG91YmxlU2lkZWQoZmFsc2UpOworCisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFz
ZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGwg
ZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBoaXQgbGF5ZXIgaXMgbm90IGZhY2luZyB0aGUg
dmlld2VyLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1
LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOwor
ICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJsb2NrZWRCeUNvbnRlbnRMYXllcikKK3sKKyAgICBJ
bnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjb250
ZW50TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFk
KHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEs
IEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+YWRkQ2hp
bGQoY29udGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5
ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNp
emUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1l
KCk7CisKKyAgICAvLyBTY3JvbGxpbmcgZmFpbHMgYmVjYXVzZSB0aGUgY29udGVudCBsYXllciBp
cyBhc2tpbmcgdG8gYmUgc2Nyb2xsZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIEVYUEVDVF9F
UShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7Cit9CisK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VT
Y2FsZU9uTWFpblRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7Cisg
ICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBj
cmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwor
ICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7
CisgICAgSW50U2l6ZSBleHBlY3RlZFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBJbnRT
aXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0
YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAvLyBTZXQgbmV3IHBhZ2Ug
c2NhbGUgZnJvbSBtYWluIHRocmVhZC4KKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0
b3JBbmRMaW1pdHMocGFnZVNjYWxlLCBwYWdlU2NhbGUsIHBhZ2VTY2FsZSk7CisKKyAgICAvLyBU
aGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSBzY3JvbGwgZGVsdGEuCisgICAgZXhwZWN0ZWRT
Y3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGUpOworICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxl
U2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAg
IGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAwLCBleHBlY3RlZFNjcm9sbERlbHRh
KTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVuIHVwZGF0
ZWQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3Np
dGlvbigpLCBleHBlY3RlZE1heFNjcm9sbCk7CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBkZWx0
YSByZW1haW5zIGNvbnN0YW50IGJlY2F1c2UgdGhlIGltcGwgdGhyZWFkIGRpZCBub3Qgc2NhbGUu
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5wYWdlU2NhbGVEZWx0YSgp
LCAxKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5k
Q2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUo
MTAsIDEwKTsKKyAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOworICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJm
YWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsK
KyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIG1faG9z
dEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCAxLCBwYWdlU2NhbGUpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBJbnRTaXplIHNj
cm9sbERlbHRhKDAsIDEwKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xs
RGVsdGEpOworICAgIEludFNpemUgZXhwZWN0ZWRNYXhTY3JvbGwobV9ob3N0SW1wbC0+cm9vdExh
eWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCkpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5z
Y3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNj
cm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAg
IC8vIFNldCBuZXcgcGFnZSBzY2FsZSBvbiBpbXBsIHRocmVhZCBieSBwaW5jaGluZy4KKyAgICBt
X2hvc3RJbXBsLT5waW5jaEdlc3R1cmVCZWdpbigpOworICAgIG1faG9zdEltcGwtPnBpbmNoR2Vz
dHVyZVVwZGF0ZShwYWdlU2NhbGUsIEludFBvaW50KCkpOworICAgIG1faG9zdEltcGwtPnBpbmNo
R2VzdHVyZUVuZCgpOworCisgICAgLy8gVGhlIHNjcm9sbCBkZWx0YSBpcyBub3Qgc2NhbGVkIGJl
Y2F1c2UgdGhlIG1haW4gdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisgICAgT3duUHRyPENDU2Nyb2xs
QW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFz
KCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDAsIGV4cGVjdGVkU2Ny
b2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgYWxzbyBoYXZlIGJl
ZW4gdXBkYXRlZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNj
cm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdlIHNj
YWxlIGRlbHRhIHNob3VsZCBtYXRjaCB0aGUgbmV3IHNjYWxlIG9uIHRoZSBpbXBsIHNpZGUuCisg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5wYWdlU2NhbGVEZWx0YSgpLCBw
YWdlU2NhbGUpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENo
aWxkQW5kQ2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQoreworICAgIEludFNpemUgc3VyZmFj
ZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDApOworICAgIC8vIEFsc28gbWFyayB0aGUgcm9vdCBzY3JvbGxhYmxlIHNvIGl0
IGJlY29tZXMgdGhlIHJvb3Qgc2Nyb2xsIGxheWVyLgorICAgIHJvb3QtPnNldFNjcm9sbGFibGUo
dHJ1ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0
UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFj
ZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAg
ICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4o
KVswXS5nZXQoKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEludFNp
emUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgSW50U2l6ZSBleHBlY3Rl
ZE1heFNjcm9sbChjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1f
aG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9o
b3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVu
ZCgpOworCisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdl
U2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCAxLCBwYWdlU2NhbGUpOworCisgICAgLy8g
VGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgorICAgIGV4cGVjdGVk
U2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2Fs
ZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAg
ICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMSwgZXhwZWN0ZWRTY3JvbGxEZWx0
YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBub3QgaGF2ZSBjaGFuZ2VkLgor
ICAgIEVYUEVDVF9FUShjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3Jv
bGwpOworCisgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZGVsdGEgcmVtYWlucyBjb25zdGFudCBiZWNh
dXNlIHRoZSBpbXBsIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIEVYUEVDVF9FUShjaGlsZC0+
cGFnZVNjYWxlRGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdCkKK3sKKyAgICAvLyBTY3JvbGwgYSBjaGlsZCBsYXll
ciBiZXlvbmQgaXRzIG1heGltdW0gc2Nyb2xsIHJhbmdlIGFuZCBtYWtlIHN1cmUgdGhlCisgICAg
Ly8gcGFyZW50IGxheWVyIGlzIHNjcm9sbGVkIG9uIHRoZSBheGlzIG9uIHdoaWNoIHRoZSBjaGls
ZCB3YXMgdW5hYmxlIHRvCisgICAgLy8gc2Nyb2xsLgorICAgIEludFNpemUgc3VyZmFjZVNpemUo
MTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxl
TGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworCisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiBncmFuZENoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDIsIEZsb2F0UG9p
bnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBncmFuZENoaWxkLT5zZXRTY3JvbGxQb3NpdGlv
bihJbnRQb2ludCgwLCA1KSk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3Jl
YXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAg
ICBjaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMywgMCkpOworICAgIGNoaWxkLT5h
ZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5hZGRDaGlsZChjaGls
ZC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2Uo
KSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIHsKKyAgICAgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YSgtMywgLTcpOworICAgICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgbV9ob3N0SW1w
bC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgICAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQo
KTsKKworICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1f
aG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKworICAgICAgICAvLyBUaGUgZ3JhbmQg
Y2hpbGQgc2hvdWxkIGhhdmUgc2Nyb2xsZWQgdXAgdG8gaXRzIGxpbWl0LgorICAgICAgICBDQ0xh
eWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4oKVswXS5n
ZXQoKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4o
KVswXS5nZXQoKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGdy
YW5kQ2hpbGQtPmlkKCksIEludFNpemUoMCwgLTUpKTsKKworICAgICAgICAvLyBUaGUgY2hpbGQg
c2hvdWxkIGhhdmUgb25seSBzY3JvbGxlZCBvbiB0aGUgb3RoZXIgYXhpcy4KKyAgICAgICAgZXhw
ZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBJbnRTaXplKC0zLCAw
KSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJl
Zm9yZVJlZHJhdykKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgbV9o
b3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShz
dXJmYWNlU2l6ZSk7CisKKyAgICAvLyBEcmF3IG9uZSBmcmFtZSBhbmQgdGhlbiBpbW1lZGlhdGVs
eSByZWJ1aWxkIHRoZSBsYXllciB0cmVlIHRvIG1pbWljIGEgdHJlZSBzeW5jaHJvbml6YXRpb24u
CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBtX2hvc3RJ
bXBsLT5yZWxlYXNlUm9vdExheWVyKCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNy
ZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOwor
CisgICAgLy8gU2Nyb2xsaW5nIHNob3VsZCBzdGlsbCB3b3JrIGV2ZW4gdGhvdWdoIHdlIGRpZCBu
b3QgZHJhdyB5ZXQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsU3RhcnRlZCk7Cit9CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4
dDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRT
dGF0ZVRyYWNrZXJDb250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDg5
YjNkZTI3MTllMTcxMTU5ZTAxZjA5ZGJlYmU0Y2Q5MmEyMmUyNGMuLmY3Mzk4Zjc5NWMwOGE0YTBm
ZDdjZTYxYjZiZmE2NjhhMjhkOWFjOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMTQxNyw2ICsxNDE3LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgeyB9
CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OwpAQCAtMTU1MSw3
ICsxNTUyLDggQEAgY2xhc3MgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIDogcHVibGljIENvbnRl
bnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KICAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJv
b2woKSk7Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25z
dCBJbnRTaXplJikgeyB9CiAgICAgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKSB7IH0KIH07CiAK
QEAgLTIzMTMsNCArMjMxNSw3MCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdEZyYWN0aW9u
YWxTY3JvbGwsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3RUaHJlYWRlZCgpOwogfQogCitj
bGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciA6IHB1YmxpYyBDQ0xheWVy
VHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hp
bGRMYXllcigpCisgICAgICAgIDogbV9zY3JvbGxBbW91bnQoMiwgMSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCkpOworICAgICAgICBtX3Jvb3RT
Y3JvbGxMYXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoJm1fbW9ja0RlbGVnYXRl
KTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkp
OworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKKyAgICAg
ICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIG1fcm9v
dFNjcm9sbExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZENoaWxkKG1fcm9vdFNjcm9s
bExheWVyKTsKKyAgICAgICAgbV9jaGlsZExheWVyID0gQ29udGVudExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmbV9tb2NrRGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEJvdW5kcyhJ
bnRTaXplKDUwLCA1MCkpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldElzRHJhd2FibGUodHJ1
ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAg
bV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7Cisg
ICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIpOworICAgICAg
ICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxv
YXQpCisgICAgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fcm9vdFNjcm9sbExheWVy
LT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xs
UG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAg
IHsKKyAgICAgICAgRVhQRUNUX0VRKG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigp
LCBJbnRQb2ludCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVy
KCkpCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigp
LCBJbnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hp
bGRMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSArIG1fc2Nyb2xsQW1vdW50KTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRy
ZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigp
ID09IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2lu
dCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxB
bW91bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKKyAgICBNb2NrQ29udGVudExh
eWVyRGVsZWdhdGUgbV9tb2NrRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1f
Y2hpbGRMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290U2Nyb2xsTGF5ZXI7
Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIsIHJ1bk11
bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3QodHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137917</attachid>
            <date>2012-04-19 10:18:02 -0700</date>
            <delta_ts>2012-06-08 13:35:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120419181800.patch</filename>
            <type>text/plain</type>
            <size>63094</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjVjODU0ZjgyMzhkYTNh
YTVmOWIwMDdhMzIwNzA4MDg1OWNjYzkyMy4uM2QzNTA1ZTgwNjBjZTdkMzFkOGEyNGQ0ZDZjMWRj
ZDZhZDAyZDFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVu
IGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xs
ZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBBZGRlZCBuZXcgd2Via2l0X3VuaXRf
dGVzdHMgdG8gdmVyaWZ5IHNjcm9sbGluZyBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoQ29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpmaW5kTGF5ZXJJblN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllcklt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJsZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcm9s
bExheWVyRm9yQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0U2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDQt
MTkgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgZm9yIERBUldJTiBpbiBEaXJlY3RDb252b2x2ZXI6OnByb2Nlc3MoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAwNDQwOWVhMjhlZGM0NjdhOTk2MDdkODgzMTg4MjVhMjVjMTQ2
ZjNlLi5iOThmMDY5YzU2NmI0ZmRlYTJiYjc2NmVjZjQ2MzMxMzBkMzgxNDY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAzLTI4ICBTYW1pIEt5b3N0
aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIHRl
c3RzIGZvciBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNTAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9X
ZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVy
SW1wbDo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkNv
bnRlbnRMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvbnRlbnRMYXllckltcGwpOgorICAgICAg
ICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdDo6
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdDo6aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRF
U1RfRik6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RPcGFjaXR5Q2hhbmdlTGF5ZXJEZWxl
Z2F0ZTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdURjo6TW9ja0NvbnRlbnRMYXllckRlbGVnYXRl
OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdURjo6TW9ja0NvbnRlbnRMYXllckRlbGVnYXRl
OjpkaWRTY3JvbGwpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5
ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFwcGx5U2Nyb2xsQW5kU2Nh
bGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6
YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFmdGVyVGVzdCk6CisgICAgICAg
IChXVEYpOgorICAgICAgICAoV1RGOjpURVNUX0YpOgorCiAyMDEyLTA0LTE4ICBOaWNvIFdlYmVy
ICA8dGhha2lzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW0vbWFjXSBGaXggYnVp
bGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYWU4ZDMyMDhiZmJh
YjhkN2FkZTk4MmE3ZDhhOTNhMmQ4M2VkN2RhZi4uYTEwZjM1NDIxNmRjZjU4N2ZkZWFmMzgzNWIz
ZDFjMjZlYjI0YjdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAt
MTQ1LDUgKzE0NSwxMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRPcGFxdWUoYm9v
bCBvcGFxdWUpCiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnNldE9wYXF1ZShvcGFxdWUpOwog
fQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBz
Y3JvbGxEZWx0YSkKK3sKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsg
c2Nyb2xsRGVsdGEpOworICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5k
aWRTY3JvbGwoc2Nyb2xsRGVsdGEpOworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggMGNkMWQ3
OGQ4NTM5YTZmODY3NDBlZGMwMzQyZGFkMjJmMzRjMDA1MS4uYTUxYzgxMmI1Yzg4N2FhZTNhOWEy
M2I1NjQ4ZWNjMGFhZTM5MjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBA
IC00Niw2ICs0Niw3IEBAIGNsYXNzIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJEZWxlZ2F0ZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKSA9IDA7CiB9OwogCiAv
LyBBIExheWVyIHRoYXQgcmVxdWlyZXMgYSBHcmFwaGljc0NvbnRleHQgdG8gcmVuZGVyIGl0cyBj
b250ZW50cy4KQEAgLTYzLDYgKzY0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNl
dE9wYXF1ZShib29sKSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25z
dCBJbnRTaXplJikgT1ZFUlJJREU7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50
TGF5ZXJDaHJvbWl1bShDb250ZW50TGF5ZXJEZWxlZ2F0ZSopOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGU5ZTNiODUyMDAxNDczMmQ0ZTExNjAwYWMwMzgyMjNlY2Vl
MGFiYzIuLjIxODE4MzQ2MjA1ZTY4MzQ3YTEzMjQzNmI4ZWRhY2QxY2Y3ZTFiMjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMTMsNiArMTEzLDcgQEAgcHVibGljOgog
CiAgICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xp
cCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgT1ZFUlJJREUg
eyB9CiAKICAgICAvLyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCiAg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlIHN0YXJ0VGltZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDExMmIwM2FiZjBjMjk5NjEwZDE5MjdhMjIzNjU4
OTRjNzc4ZDc2YTUuLmY3NDkxNzY1MDEyZDMxZjUzMDFlM2NhMWI0Y2I3OWIzYzQ2Y2U3MjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zODEsNiArMzgxLDE0IEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TWF4U2Ny
b2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pCit7CisgICAgaWYg
KG1fbWF4U2Nyb2xsUG9zaXRpb24gPT0gbWF4U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247CisgICAgc2V0
TmVlZHNDb21taXQoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRTY3JvbGxhYmxlKGJv
b2wgc2Nyb2xsYWJsZSkKIHsKICAgICBpZiAobV9zY3JvbGxhYmxlID09IHNjcm9sbGFibGUpCkBA
IC01MDEsNiArNTA5LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKEND
TGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlvbik7CiAg
ICAgbGF5ZXItPnNldFByZXNlcnZlczNEKHByZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRT
Y3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24obV9tYXhTY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJh
bnNmb3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwogICAgIGlmICghdHJhbnNmb3JtSXNBbmltYXRp
bmcoKSkKICAgICAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKaW5kZXggNmU2MjI2MTc5NTBkNzhkZWZlZDY4NDQzMDhiYjZkMTk2MzM3OGJmNy4u
NGQ5MzAwNzBhZWQ1YjMyZTVkZDg4YWNkNDJmYmU5NDY1OTg0M2E3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaApAQCAtMTQxLDEyICsxNDEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsUG9z
aXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldE1h
eFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBtYXhT
Y3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKwog
ICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sKTsKKyAgICBib29sIHNjcm9sbGFibGUoKSBjb25z
dCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KICAgICB2b2lkIHNldFNob3VsZFNjcm9sbE9uTWFp
blRocmVhZChib29sKTsKICAgICB2b2lkIHNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoYm9vbCk7
CiAgICAgY29uc3QgUmVnaW9uJiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpIHsgcmV0dXJuIG1f
bm9uRmFzdFNjcm9sbGFibGVSZWdpb247IH0KICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKGNvbnN0IFJlZ2lvbiYpOwogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdp
b25DaGFuZ2VkKCkgeyBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCA9IHRydWU7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpIHsgfQogCiAgICAgdm9p
ZCBzZXREcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzKGJvb2wpOwogICAgIGJvb2wgZHJh
d0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0NoZWNr
ZXJib2FyZEZvck1pc3NpbmdUaWxlczsgfQpAQCAtMzAzLDYgKzMwOCw3IEBAIHByaXZhdGU6CiAg
ICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKICAg
ICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOworICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3Np
dGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25N
YWluVGhyZWFkOwogICAgIGJvb2wgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCmluZGV4IDc4Mjk0YmFhMjEwYzE3NTFiZWE4OTZlMGE1MDNjNGQyZDk1Njc0
YWEuLmZlZmNlYzVlYjk3MWQ4NjkwZmRhYTU4MjI4OWU5ZWQ5ZWNkZjgzODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKQEAgLTE2MCw2ICsxNjAsMzcgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2Ny
b2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkRm9yU3VidHJlZSgpOwogfQogCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVz
IENDTGF5ZXJJbXBsOjp0cnlTY3JvbGwoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBp
ZiAoc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoInRy
eVNjcm9sbCBGYWlsZWQgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkIiwgdGhpcywgMCk7CisgICAg
ICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOworICAgIH0KKwor
ICAgIGlmICghc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pc0ludmVydGlibGUoKSkgeworICAgICAg
ICBUUkFDRV9FVkVOVCgidHJ5U2Nyb2xsIEZhaWxlZCBub25JbnZlcnRpYmxlVHJhbnNmb3JtIiwg
dGhpcywgMCk7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdu
b3JlZDsKKyAgICB9CisKKyAgICBJbnRQb2ludCBjb250ZW50UG9pbnQoc2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworICAgIGlmIChub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbigpLmNvbnRhaW5zKGNvbnRlbnRQb2ludCkpIHsKKyAgICAgICAg
VFJBQ0VfRVZFTlQoInRyeVNjcm9sbCBGYWlsZWQgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24iLCB0
aGlzLCAwKTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWls
ZWQ7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVs
ICYmIGhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgidHJ5
U2Nyb2xsIEZhaWxlZCB3aGVlbEV2ZW50SGFuZGxlcnMiLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0
dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ7CisgICAgfQorCisgICAgaWYg
KCFzY3JvbGxhYmxlKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoInRyeVNjcm9sbCBJZ25vcmVk
IG5vdCBzY3JvbGxhYmxlIiwgdGhpcywgMCk7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKKyAgICB9CisKKyAgICByZXR1cm4gQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ7Cit9CisKIGNvbnN0IEludFJlY3QgQ0NMYXllckltcGw6
OmdldERyYXdSZWN0KCkgY29uc3QKIHsKICAgICAvLyBGb3JtIHRoZSBtYXRyaXggdXNlZCBieSB0
aGUgc2hhZGVyIHRvIG1hcCB0aGUgY29ybmVycyBvZiB0aGUgbGF5ZXIncwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmgKaW5kZXggZTkyOTM5MzJiZGJmZWVjMTY0MmViZDgwMzFjYjQ3ZWRlMmRlZWRiZC4uZDNi
YmExNzI3YjA3ZjdiN2IxYzc2ZWE0MzFkMjNiZDRmMTU1YzQyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVGV4
dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAi
Y2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgImNjL0ND
U2hhcmVkUXVhZFN0YXRlLmgiCkBAIC0yMDAsNiArMjAxLDggQEAgcHVibGljOgogICAgIHZvaWQg
c2V0RHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyhib29sIGNoZWNrZXJib2FyZCkgeyBt
X2RyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMgPSBjaGVja2VyYm9hcmQ7IH0KICAgICBi
b29sIGRyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXM7IH0KIAorICAgIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGF0dXMgdHJ5U2Nyb2xsKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlKSBjb25zdDsKKwogICAgIGNv
bnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVM
YXllclJlY3Q7IH0KICAgICB2b2lkIHNldFZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYg
dmlzaWJsZUxheWVyUmVjdCkgeyBtX3Zpc2libGVMYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0
OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGM5YmE4NGQ0YTIyYjhi
NjA2YTQ5YzBlNTRkYmVhNzM0ODQyMDgyZjguLmM5YWUxMzZkNTMzNGM3YzMzMGY0MjExZTY3Yzg0
NmMwNzExZTcwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTcxLDE1
ICs1NzEsNDIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25z
dCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICBvY2NsdXNpb25UcmFja2Vy
Lm92ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhpcyk7CiB9CiAKK3N0YXRpYyBMYXll
ckNocm9taXVtKiBmaW5kRmlyc3RTY3JvbGxhYmxlTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIp
Cit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXIt
PnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBMYXll
ckNocm9taXVtKiBmb3VuZCA9IGZpbmRGaXJzdFNjcm9sbGFibGVMYXllcihsYXllci0+Y2hpbGRy
ZW4oKVtpXS5nZXQoKSk7CisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBm
b3VuZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsK
LSAgICAvLyBGSVhNRTogcHVzaGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMg
bm90IGltcGxlbWVudGVkCi0gICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQorICAgIGlmICgh
bV9yb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMu
c2l6ZSgpID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0u
c2Nyb2xsRGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVs
dGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOworICAgIExheWVyQ2hyb21pdW0qIHJvb3RTY3JvbGxM
YXllciA9IGZpbmRGaXJzdFNjcm9sbGFibGVMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAg
SW50U2l6ZSByb290U2Nyb2xsRGVsdGE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
Zm8uc2Nyb2xscy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKG1fcm9vdExheWVyLmdl
dCgpLCBpbmZvLnNjcm9sbHNbaV0ubGF5ZXJJZCk7CisgICAgICAgIGlmICghbGF5ZXIpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGxheWVyID09IHJvb3RTY3JvbGxMYXllcikK
KyAgICAgICAgICAgIHJvb3RTY3JvbGxEZWx0YSArPSBpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVs
dGE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyLT5zY3JvbGxCeShpbmZvLnNjcm9s
bHNbaV0uc2Nyb2xsRGVsdGEpOworICAgIH0KKyAgICBpZiAoIXJvb3RTY3JvbGxEZWx0YS5pc1pl
cm8oKSB8fCBpbmZvLnBhZ2VTY2FsZURlbHRhICE9IDEpCisgICAgICAgIG1fY2xpZW50LT5hcHBs
eVNjcm9sbEFuZFNjYWxlKHJvb3RTY3JvbGxEZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVMaW1pdGVyKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRl
eCAzNzYyZjY0YjE5YjMxMzQ5OThlNDBiNDQ3NjM4YTI0NmYxMjQ4YmJiLi5lMzIzZDljNDM1ZDhm
NWQ3NmFiZmE5NzdmNjMzY2MwYzVlY2RiNWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaApAQCAtNDYsNiArNDYsMTAgQEAgcHVibGljOgogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9vbCByZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNU
b1RhcmdldChMYXllclR5cGUqLCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpOwogCisgICAgLy8g
UmV0dXJucyBhIGxheWVyIHdpdGggdGhlIGdpdmVuIGlkIGlmIG9uZSBleGlzdHMgaW4gdGhlIHN1
YnRyZWUgc3RhcnRpbmcKKyAgICAvLyBmcm9tIHRoZSBnaXZlbiByb290IGxheWVyIChpbmNsdWRp
bmcgbWFzayBhbmQgcmVwbGljYSBsYXllcnMpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVy
VHlwZT4gc3RhdGljIExheWVyVHlwZSogZmluZExheWVySW5TdWJ0cmVlKExheWVyVHlwZSogcm9v
dExheWVyLCBpbnQgbGF5ZXJJZCk7CisKICAgICBzdHJ1Y3QgU2Nyb2xsVXBkYXRlSW5mbyB7CiAg
ICAgICAgIGludCBsYXllcklkOwogICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhOwpAQCAtNzEs
NiArNzUsMjUgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250
cmlidXRlc1RvVGFyZ2V0KExheWVyVHlwZSogbGF5ZXIsIGkKICAgICByZXR1cm4gbGF5ZXItPnJl
bmRlclN1cmZhY2UoKSAmJiBsYXllci0+aWQoKSAhPSB0YXJnZXRTdXJmYWNlTGF5ZXJJRDsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorTGF5ZXJUeXBlKiBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShMYXllclR5cGUqIHJvb3RMYXllciwgaW50IGxh
eWVySWQpCit7CisgICAgaWYgKHJvb3RMYXllci0+aWQoKSA9PSBsYXllcklkKQorICAgICAgICBy
ZXR1cm4gcm9vdExheWVyOworCisgICAgaWYgKHJvb3RMYXllci0+bWFza0xheWVyKCkgJiYgcm9v
dExheWVyLT5tYXNrTGF5ZXIoKS0+aWQoKSA9PSBsYXllcklkKQorICAgICAgICByZXR1cm4gcm9v
dExheWVyLT5tYXNrTGF5ZXIoKTsKKworICAgIGlmIChyb290TGF5ZXItPnJlcGxpY2FMYXllcigp
ICYmIHJvb3RMYXllci0+cmVwbGljYUxheWVyKCktPmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAgICAg
cmV0dXJuIHJvb3RMYXllci0+cmVwbGljYUxheWVyKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJvb3RMYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
TGF5ZXJUeXBlKiBmb3VuZCA9IGZpbmRMYXllckluU3VidHJlZShyb290TGF5ZXItPmNoaWxkcmVu
KClbaV0uZ2V0KCksIGxheWVySWQpKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZmI3YWJlNWIzM2FlOGVl
MjgxOWM4NzEzOTY2MjUyZGQ1MjExY2U4MS4uZmE1MzU2MzA5MDRhZTJhMmE0OWFkZDc2ZTk5M2Jk
NGU4NzNiZGRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAg
LTEwNCw3ICsxMDQsOCBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBs
KGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgIDogbV9jbGllbnQo
Y2xpZW50KQogICAgICwgbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKICAgICAsIG1fZnJhbWVOdW1i
ZXIoMCkKLSAgICAsIG1fc2Nyb2xsTGF5ZXJJbXBsKDApCisgICAgLCBtX3Jvb3RTY3JvbGxMYXll
ckltcGwoMCkKKyAgICAsIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKDApCiAgICAgLCBt
X3NldHRpbmdzKHNldHRpbmdzKQogICAgICwgbV92aXNpYmxlKHRydWUpCiAgICAgLCBtX2hlYWRz
VXBEaXNwbGF5KENDSGVhZHNVcERpc3BsYXk6OmNyZWF0ZSgpKQpAQCAtMTY0LDEwICsxNjUsMTAg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1l
LCBkb3VibGUgd2FsbENsb2NrVGltZSkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFy
dFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBh
bmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZHVy
YXRpb24pCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNj
cm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3Rh
bCA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsg
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsVG90
YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9u
KCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwogICAgIHNjcm9sbFRv
dGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlVG90YWwgPSBtX3Bh
Z2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBzY2FsZWRDb250ZW50U2l6
ZSA9IGNvbnRlbnRTaXplKCk7CkBAIC0zNTcsOSArMzU4LDkgQEAgSW50U2l6ZSBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gVE9ETyhhZWxpYXMpOiBI
YXJkY29kaW5nIHRoZSBmaXJzdCBjaGlsZCBoZXJlIGlzIHdlaXJkLiBUaGluayBvZgogICAgIC8v
IGEgY2xlYW5lciB3YXkgdG8gZ2V0IHRoZSBjb250ZW50Qm91bmRzIG9uIHRoZSBJbXBsIHNpZGUu
Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCBtX3Njcm9sbExheWVySW1wbC0+Y2hpbGRy
ZW4oKS5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwgfHwgbV9yb290
U2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIElu
dFNpemUoKTsKLSAgICByZXR1cm4gbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClbMF0tPmNv
bnRlbnRCb3VuZHMoKTsKKyAgICByZXR1cm4gbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJl
bigpWzBdLT5jb250ZW50Qm91bmRzKCk7CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6
cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQpAQCAtMzY4LDYgKzM2OSw3IEBAIGJvb2wg
Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQogCiAg
ICAgZnJhbWUucmVuZGVyUGFzc2VzLmNsZWFyKCk7CiAgICAgZnJhbWUucmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5jbGVhcigpOworICAgIG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3Qu
Y2xlYXIoKTsKIAogICAgIGlmICghbV9yb290TGF5ZXJJbXBsKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zNzUsNiArMzc3LDggQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJl
VG9EcmF3KEZyYW1lRGF0YSYgZnJhbWUpCiAgICAgaWYgKCFjYWxjdWxhdGVSZW5kZXJQYXNzZXMo
ZnJhbWUucmVuZGVyUGFzc2VzLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgbV9tb3N0UmVjZW50UmVuZGVyU3VyZmFjZUxheWVyTGlz
dCA9IGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICAvLyBJZiB3ZSByZXR1cm4g
dHJ1ZSwgdGhlbiB3ZSBleHBlY3QgZHJhd0xheWVycygpIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4uCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00NTks
NyArNDYzLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZWFkYmFjayh2b2lkKiBwaXhl
bHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1
ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOwogfQogCi1zdGF0aWMgQ0NMYXllckltcGwqIGZpbmRT
Y3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCitzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRS
b290U2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogewogICAgIGlmICghbGF5ZXIpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtNDY4LDcgKzQ3Miw3IEBAIHN0YXRpYyBDQ0xheWVySW1wbCog
ZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAgcmV0dXJuIGxheWVy
OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7
ICsraSkgewotICAgICAgICBDQ0xheWVySW1wbCogZm91bmQgPSBmaW5kU2Nyb2xsTGF5ZXIobGF5
ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAgICAgICBDQ0xheWVySW1wbCogZm91bmQgPSBm
aW5kUm9vdFNjcm9sbExheWVyKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKICAgICAgICAg
aWYgKGZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgIH0KQEAgLTQ3NiwxMiAr
NDgwLDQxIEBAIHN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBs
KiBsYXllcikKICAgICByZXR1cm4gMDsKIH0KIAorLy8gQ29udGVudCBsYXllcnMgY2FuIGJlIGVp
dGhlciBkaXJlY3RseSBzY3JvbGxhYmxlIG9yIGNvbnRhaW5lZCBpbiBhbiBvdXRlcgorLy8gc2Ny
b2xsaW5nIGxheWVyIHdoaWNoIGFwcGxpZXMgdGhlIHNjcm9sbCB0cmFuc2Zvcm0uIEdpdmVuIGEg
Y29udGVudCBsYXllciwKKy8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBz
Y3JvbGwgbGF5ZXIgaWYgYW55Lgorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXJG
b3JDb250ZW50TGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sKKyAgICBpZiAoIWxheWVy
SW1wbCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXJJbXBsLT5zY3JvbGxhYmxl
KCkpCisgICAgICAgIHJldHVybiBsYXllckltcGw7CisKKyAgICBpZiAobGF5ZXJJbXBsLT5kcmF3
c0NvbnRlbnQoKSAmJiBsYXllckltcGwtPnBhcmVudCgpICYmIGxheWVySW1wbC0+cGFyZW50KCkt
PnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVySW1wbC0+cGFyZW50KCk7CisKKyAg
ICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIo
UGFzc093blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290TGF5ZXJJbXBsID0g
bGF5ZXI7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsID0gZmluZFJvb3RTY3JvbGxMYXllciht
X3Jvb3RMYXllckltcGwuZ2V0KCkpOwogCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgdGhpcyBv
bmx5IGZpbmRzIHRoZSBmaXJzdCBzY3JvbGxhYmxlIGxheWVyLgotICAgIG1fc2Nyb2xsTGF5ZXJJ
bXBsID0gZmluZFNjcm9sbExheWVyKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisgICAgaWYgKCFt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fcm9vdExheWVySW1wbCAmJiBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3Vi
dHJlZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBs
LT5pZCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXll
ckltcGwgPSAwOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpyZWxlYXNlUm9vdExheWVyKCkKK3sKKyAgICBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmNsZWFyKCk7CisgICAgcmV0dXJuIG1fcm9vdExheWVySW1wbC5yZWxlYXNlKCk7
CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUp
CkBAIC01MzIsNiArNTY1LDM0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Vmlld3Bv
cnRTaXplKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKICAgICAgICAgbV9sYXllclJlbmRl
cmVyLT52aWV3cG9ydENoYW5nZWQoKTsKIH0KIAorc3RhdGljIHZvaWQgYWRqdXN0U2Nyb2xsc0Zv
clBhZ2VTY2FsZUNoYW5nZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVD
aGFuZ2UpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChsYXllckltcGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbnZl
cnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxlIHNwYWNlLgorICAgICAgICBG
bG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCk7CisgICAgICAg
IHNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7CisgICAgICAgIGxheWVySW1wbC0+
c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBhZGp1
c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQo
KSwgcGFnZVNjYWxlQ2hhbmdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwbHlQYWdlU2NhbGVEZWx0
YVRvU2Nyb2xsTGF5ZXJzKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGZsb2F0IHBhZ2VTY2FsZURl
bHRhKQoreworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIGxheWVySW1wbC0+c2V0UGFnZVNjYWxl
RGVsdGEocGFnZVNjYWxlRGVsdGEpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXll
ckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFwcGx5UGFnZVNjYWxlRGVs
dGFUb1Njcm9sbExheWVycyhsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCksIHBhZ2VTY2Fs
ZURlbHRhKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0
b3JBbmRMaW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW5QYWdlU2NhbGUsIGZsb2F0IG1h
eFBhZ2VTY2FsZSkKIHsKICAgICBpZiAoIXBhZ2VTY2FsZSkKQEAgLTU0NiwyNSArNjA3LDEzIEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZs
b2F0IHBhZ2VTY2FsZSwgZmxvYXQgbWluCiAgICAgZmxvYXQgcGFnZVNjYWxlQ2hhbmdlID0gcGFn
ZVNjYWxlIC8gbV9wYWdlU2NhbGU7CiAgICAgbV9wYWdlU2NhbGUgPSBwYWdlU2NhbGU7CiAKLSAg
ICBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKHBhZ2VTY2FsZUNoYW5nZSk7CisgICAg
aWYgKHBhZ2VTY2FsZUNoYW5nZSAhPSAxKQorICAgICAgICBhZGp1c3RTY3JvbGxzRm9yUGFnZVNj
YWxlQ2hhbmdlKG1fcm9vdFNjcm9sbExheWVySW1wbCwgcGFnZVNjYWxlQ2hhbmdlKTsKIAogICAg
IC8vIENsYW1wIGRlbHRhIHRvIGxpbWl0cyBhbmQgcmVmcmVzaCBkaXNwbGF5IG1hdHJpeC4KICAg
ICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZURlbHRhIC8gbV9zZW50UGFnZVNjYWxlRGVs
dGEpOwogICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gMTsKLSAgICBhcHBseVBhZ2VTY2FsZURl
bHRhVG9TY3JvbGxMYXllcigpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFkanVz
dFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQgcGFnZVNjYWxlQ2hhbmdlKQotewotICAg
IGlmIChwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2Ug
YWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxl
IHNwYWNlLgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBGbG9hdFNpemUg
c2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKLSAgICAgICAg
c2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKLSAgICAgICAgbV9zY3JvbGxMYXll
ckltcGwtPnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKLSAgICB9CisgICAgYXBwbHlQYWdl
U2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXJzKG1fcm9vdFNjcm9sbExheWVySW1wbCwgbV9wYWdlU2Nh
bGVEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVs
dGEoZmxvYXQgZGVsdGEpCkBAIC01ODIsMjIgKzYzMSwxNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFBhZ2VTY2FsZURlbHRhKGZsb2F0IGRlbHRhKQogICAgIG1fcGFnZVNjYWxlRGVs
dGEgPSBkZWx0YTsKIAogICAgIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgYXBwbHlQ
YWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjphcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpCi17Ci0gICAgaWYgKG1fc2Ny
b2xsTGF5ZXJJbXBsKQotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0UGFnZVNjYWxlRGVs
dGEobV9wYWdlU2NhbGVEZWx0YSk7CisgICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5
ZXJzKG1fcm9vdFNjcm9sbExheWVySW1wbCwgbV9wYWdlU2NhbGVEZWx0YSk7CiB9CiAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogewotICAgIGlm
ICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNp
emUoKSkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCB8fCAhbV9yb290U2Nyb2xsTGF5
ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRT
aXplIHZpZXdCb3VuZHMgPSBtX3ZpZXdwb3J0U2l6ZTsKLSAgICBpZiAoQ0NMYXllckltcGwqIGNs
aXBMYXllciA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgIGlmIChDQ0xheWVy
SW1wbCogY2xpcExheWVyID0gbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkgewogICAg
ICAgICBpZiAoY2xpcExheWVyLT5tYXNrc1RvQm91bmRzKCkpCiAgICAgICAgICAgICB2aWV3Qm91
bmRzID0gY2xpcExheWVyLT5ib3VuZHMoKTsKICAgICB9CkBAIC02MDgsOSArNjUxLDcgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAgICAgLy8g
aGF2aW5nIGEgdmVydGljYWwgc2Nyb2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93Lgog
ICAgIG1heFNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKLSAgICBtX3Njcm9sbExheWVy
SW1wbC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKLQotICAgIC8vIFRPRE8oYWVs
aWFzKTogQWxzbyB1cGRhdGUgc3VibGF5ZXJzLgorICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+
c2V0TWF4U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCkBAIC02MTgsNDYgKzY1OSwxMDQgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCiAgICAgbV9jbGllbnQtPnNldE5lZWRz
UmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CiAKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZW5z
dXJlTW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QoKQoreworICAgIGlmIChtX21vc3RS
ZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGFmdGVyIHNldFJvb3RMYXllcigpIGJ1dCBiZWZv
cmUgcHJlcGFyZVRvRHJhdygpLCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlCisgICAgLy8gdGhlIHZp
c2libGUgbGF5ZXJzLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQgYmVjYXVzZSB3ZSBkb24n
dCBjYXJlIGFib3V0IGNoZWNrZXJib2FyZGluZy4KKyAgICBDQ1JlbmRlclBhc3NMaXN0IHBhc3Nl
czsKKyAgICBjYWxjdWxhdGVSZW5kZXJQYXNzZXMocGFzc2VzLCBtX21vc3RSZWNlbnRSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIHJldHVybiBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKTsKK30KKwogQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1
cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3Bv
cnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSB0eXBlKQogewot
ICAgIC8vIFRPRE86IENoZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7Ci0g
ICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBJZ25vcmVkIG5vIHNjcm9sbGFibGUiLCB0
aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVn
aW4iLCB0aGlzLCAwKTsKKworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsK
KworICAgIGlmICghZW5zdXJlTW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QoKSkKICAg
ICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7Ci0gICAgfQogCi0gICAgaWYgKG1fc2Nyb2xsTGF5
ZXJJbXBsLT5zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoKSkgewotICAgICAgICBUUkFDRV9FVkVO
VCgic2Nyb2xsQmVnaW4gRmFpbGVkIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCIsIHRoaXMsIDAp
OwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOworICAgIC8vIEZpcnN0IGZpbmQgb3V0IHdo
aWNoIGxheWVyIHdhcyBoaXQgYnkgd2Fsa2luZyB0aGUgc2F2ZWQgbGlzdCBvZiB2aXNpYmxlIGxh
eWVycyBmcm9tIHRoZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJ
bXBsID0gMDsKKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NMYXll
ckxpc3QsIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBD
Q0xheWVySXRlcmF0b3JUeXBlOjplbmQoJm1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5
cGU6OmJlZ2luKCZtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXJJbXBsID0g
KCppdCk7CisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZUxheWVySW1wbC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBJbnRQb2ludCBjb250ZW50UG9pbnQocmVuZGVyU3VyZmFjZUxheWVySW1wbC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworICAgICAg
ICBpZiAoIXJlbmRlclN1cmZhY2VMYXllckltcGwtPnZpc2libGVMYXllclJlY3QoKS5jb250YWlu
cyhjb250ZW50UG9pbnQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxheWVySW1w
bCA9IHJlbmRlclN1cmZhY2VMYXllckltcGw7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IEludFBvaW50IHNjcm9sbExheWVyQ29udGVudFBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2aWV3cG9ydFBvaW50KSk7Ci0g
ICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsLT5ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpLmNvbnRh
aW5zKHNjcm9sbExheWVyQ29udGVudFBvaW50KSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Ny
b2xsQmVnaW4gRmFpbGVkIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uIiwgdGhpcywgMCk7Ci0gICAg
ICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7Ci0gICAgfQorICAgIC8vIFdhbGsgdXAgdGhlIGhpZXJh
cmNoeSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIGxheWVyLgorICAgIENDTGF5ZXJJbXBsKiBw
b3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisgICAgZm9yICg7IGxheWVySW1wbDsg
bGF5ZXJJbXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgICAgICAvLyBUaGUgY29udGVu
dCBsYXllciBjYW4gYWxzbyBibG9jayBhdHRlbXB0cyB0byBzY3JvbGwgb3V0c2lkZSB0aGUgbWFp
biB0aHJlYWQuCisgICAgICAgIGlmIChsYXllckltcGwtPnRyeVNjcm9sbCh2aWV3cG9ydFBvaW50
LCB0eXBlKSA9PSBTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVk
OworCisgICAgICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5
ZXJGb3JDb250ZW50TGF5ZXIobGF5ZXJJbXBsKTsKKyAgICAgICAgaWYgKCFzY3JvbGxMYXllcklt
cGwpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgIGlmICh0eXBlID09IENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpXaGVlbCAmJiBtX3Njcm9sbExheWVySW1wbC0+aGF2ZVdoZWVsRXZlbnRIYW5k
bGVycygpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBGYWlsZWQgd2hlZWxF
dmVudEhhbmRsZXJzIiwgdGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7Cisg
ICAgICAgIFNjcm9sbFN0YXR1cyBzdGF0dXMgPSBzY3JvbGxMYXllckltcGwtPnRyeVNjcm9sbCh2
aWV3cG9ydFBvaW50LCB0eXBlKTsKKworICAgICAgICAvLyBJZiBhbnkgbGF5ZXIgd2FudHMgdG8g
ZGl2ZXJ0IHRoZSBzY3JvbGwgZXZlbnQgdG8gdGhlIG1haW4gdGhyZWFkLCBhYm9ydC4KKyAgICAg
ICAgaWYgKHN0YXR1cyA9PSBTY3JvbGxGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gU2Nyb2xs
RmFpbGVkOworCisgICAgICAgIGlmIChzdGF0dXMgPT0gU2Nyb2xsU3RhcnRlZCAmJiAhcG90ZW50
aWFsbHlTY3JvbGxpbmdMYXllckltcGwpCisgICAgICAgICAgICBwb3RlbnRpYWxseVNjcm9sbGlu
Z0xheWVySW1wbCA9IHNjcm9sbExheWVySW1wbDsKICAgICB9CiAKLSAgICByZXR1cm4gU2Nyb2xs
U3RhcnRlZDsKKyAgICBpZiAocG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGwpIHsKKyAgICAg
ICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSBwb3RlbnRpYWxseVNjcm9sbGluZ0xh
eWVySW1wbDsKKyAgICAgICAgcmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgfQorICAgIHJldHVy
biBTY3JvbGxJZ25vcmVkOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXll
ckltcGwpCisgICAgaWYgKCFtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsK
LSAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICBtX2NsaWVu
dC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBGbG9hdFNpemUgcGVuZGluZ0Rl
bHRhKHNjcm9sbERlbHRhKTsKKyAgICBwZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxl
RGVsdGEpOworCisgICAgZm9yIChDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gbV9jdXJyZW50bHlT
Y3JvbGxpbmdMYXllckltcGw7IGxheWVySW1wbCAmJiAhcGVuZGluZ0RlbHRhLmlzWmVybygpOyBs
YXllckltcGwgPSBsYXllckltcGwtPnBhcmVudCgpKSB7CisgICAgICAgIGlmICghbGF5ZXJJbXBs
LT5zY3JvbGxhYmxlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgRmxvYXRTaXpl
IHByZXZpb3VzRGVsdGEobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgbGF5ZXJJ
bXBsLT5zY3JvbGxCeShwZW5kaW5nRGVsdGEpOworICAgICAgICAvLyBSZXNldCB0aGUgcGVuZGlu
ZyBzY3JvbGwgZGVsdGEgdG8gemVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8gbW92ZSBhbG9u
ZyB0aGUgcmVxdWVzdGVkCisgICAgICAgIC8vIGF4aXMuIFRoaXMgaXMgdG8gZW5zdXJlIGl0IGlz
IHBvc3NpYmxlIHRvIHNjcm9sbCBleGFjdGx5IHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEK
KyAgICAgICAgLy8gc2Nyb2xsIGFyZWEgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZv
ciBkaWFnb25hbCBzY3JvbGxzIHRoaXMgYWxzbyBhdm9pZHMgYXBwbHlpbmcKKyAgICAgICAgLy8g
dGhlIHNjcm9sbCBvbiBvbmUgYXhpcyB0byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgIGlmIChw
cmV2aW91c0RlbHRhLndpZHRoKCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLndpZHRoKCkp
CisgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAgICAgIGlmIChwcmV2
aW91c0RlbHRhLmhlaWdodCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5oZWlnaHQoKSkK
KyAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRIZWlnaHQoMCk7CisgICAgfQorCisgICAgaWYg
KHBlbmRpbmdEZWx0YSAhPSBzY3JvbGxEZWx0YSkgeworICAgICAgICBtX2NsaWVudC0+c2V0TmVl
ZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3
T25JbXBsVGhyZWFkKCk7CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNj
cm9sbEVuZCgpCiB7CisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSAwOwogfQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUJlZ2luKCkKQEAgLTY3MSw3
ICs3NzAsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZShm
bG9hdCBtYWduaWZ5RGVsdGEsCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSIsIHRoaXMsIDApOwogCi0gICAgaWYgKCFtX3Njcm9sbExh
eWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKG1fcHJldmlvdXNQaW5jaEFuY2hvciA9PSBJbnRQb2ludDo6emVybygpKQpA
QCAtNjg2LDcgKzc4NSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJl
VXBkYXRlKGZsb2F0IG1hZ25pZnlEZWx0YSwKIAogICAgIG1fcHJldmlvdXNQaW5jaEFuY2hvciA9
IGFuY2hvcjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShyb3VuZGVkSW50U2l6
ZShtb3ZlKSk7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShyb3VuZGVkSW50
U2l6ZShtb3ZlKSk7CiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7
CiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CkBAIC03MDgs
NyArODA3LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlRG91YmxlVGFwWm9v
bURlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGwKIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9s
bEluZm8pCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNj
cm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT25seSBzZW5kIGZha2Ug
c2Nyb2xsL3pvb20gZGVsdGFzIGlmIHdlJ3JlIHBpbmNoIHpvb21pbmcgb3V0IGJ5IGEKQEAgLTcy
MCw3ICs4MTksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5jaFpvb21E
ZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbwogCiAgICAgLy8gQ29tcHV0ZSB3
aGVyZSB0aGUgc2Nyb2xsIG9mZnNldC9wYWdlIHNjYWxlIHdvdWxkIGJlIGlmIGZ1bGx5IHBpbmNo
LXpvb21lZAogICAgIC8vIG91dCBmcm9tIHRoZSBhbmNob3IgcG9pbnQuCi0gICAgSW50U2l6ZSBz
Y3JvbGxCZWdpbiA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3Np
dGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUg
c2Nyb2xsQmVnaW4gPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9s
bFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwogICAg
IHNjcm9sbEJlZ2luLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlQmVn
aW4gPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgcGFnZVNjYWxl
RGVsdGFUb1NlbmQgPSBtX21pblBhZ2VTY2FsZSAvIG1fcGFnZVNjYWxlOwpAQCAtNzM5LDIxICs4
MzgsNDEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFz
KENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjptYWtlU2Nyb2xsQW5kU2NhbGVTZXQoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5m
bywgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUpCiB7Ci0gICAg
aWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRh
dGVJbmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5p
ZCgpOwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNjcm9sbE9mZnNldCAtIHRvU2l6ZShtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgc2Nyb2xsLmxheWVySWQgPSBt
X3Jvb3RTY3JvbGxMYXllckltcGwtPmlkKCk7CisgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Ny
b2xsT2Zmc2V0IC0gdG9TaXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24o
KSk7CiAgICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLSAgICBtX3Njcm9s
bExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7CisgICAg
bV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERl
bHRhKTsKICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURl
bHRhID0gcGFnZVNjYWxlIC8gbV9wYWdlU2NhbGU7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbGxlY3RT
Y3JvbGxEZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwq
IGxheWVySW1wbCkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkpIHsKKyAgICAgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YSA9IGZsb29yZWRJbnRTaXplKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEo
KSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3Jv
bGw7CisgICAgICAgIHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgpOworICAgICAgICBz
Y3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgc2Nyb2xsSW5mby0+c2Ny
b2xscy5hcHBlbmQoc2Nyb2xsKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVs
dGEoc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5
ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0U2Nyb2xsRGVs
dGFzKHNjcm9sbEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisKIFBh
c3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vz
c1Njcm9sbERlbHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9s
bEluZm8gPSBhZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBib29sIGRp
ZE1vdmUgPSBtX3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxE
ZWx0YSgpLmlzWmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7CisgICAgY29sbGVj
dFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwor
CisgICAgYm9vbCBkaWRNb3ZlID0gc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCkgfHwgbV9wYWdl
U2NhbGVEZWx0YSAhPSAxOwogICAgIGlmICghZGlkTW92ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2
ZSB8fCBtX3BhZ2VTY2FsZUFuaW1hdGlvbikgewogICAgICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0
YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gMTsKICAgICAgICAgaWYgKG1fcGluY2hH
ZXN0dXJlQWN0aXZlKQpAQCAtNzY1LDE0ICs4ODQsNiBAQCBQYXNzT3duUHRyPENDU2Nyb2xsQW5k
U2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogCiAg
ICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IG1f
cGFnZVNjYWxlRGVsdGE7CiAKLSAgICAvLyBGSVhNRTogdHJhY2sgc2Nyb2xscyBmcm9tIGxheWVy
cyBvdGhlciB0aGFuIHRoZSByb290Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxV
cGRhdGVJbmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBs
LT5pZCgpOwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKLSAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVu
ZChzY3JvbGwpOwotCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShz
Y3JvbGwuc2Nyb2xsRGVsdGEpOwotCiAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgpOwog
fQogCkBAIC03ODcsMTUgKzg5OCwxNSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldEZ1
bGxSb290TGF5ZXJEYW1hZ2UoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVQ
YWdlU2NhbGUoZG91YmxlIG1vbm90b25pY1RpbWUpCiB7Ci0gICAgaWYgKCFtX3BhZ2VTY2FsZUFu
aW1hdGlvbiB8fCAhbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1h
dGlvbiB8fCAhbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBJ
bnRTaXplIHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9zY3JvbGxMYXllckltcGwtPnNj
cm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAg
SW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fcm9vdFNjcm9sbExheWVySW1w
bC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEo
KSk7CiAKICAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+cGFnZVNj
YWxlQXRUaW1lKG1vbm90b25pY1RpbWUpIC8gbV9wYWdlU2NhbGUpOwogICAgIEludFNpemUgbmV4
dFNjcm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZzZXRBdFRpbWUobW9ub3Rv
bmljVGltZSk7CiAgICAgbmV4dFNjcm9sbC5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7Ci0g
ICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwgLSBzY3JvbGxUb3RhbCk7
CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Nyb2xs
VG90YWwpOwogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogCiAg
ICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlvbkNvbXBsZXRlQXRUaW1lKG1v
bm90b25pY1RpbWUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXgg
NTdiMjliYzVmYzE4N2VlOGYzNGExMDQ4NGQ2MzYzNTEyMjA1NzdkMy4uNDVhYjFmMDUyMGFjYzg1
MTZmYTM2YTc1MTIwNWUzMjY4NmRkODZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaApAQCAtMTIyLDEwICsxMjIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcmVhZGJhY2so
dm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2b2lkIHNldFJvb3RMYXllcihQ
YXNzT3duUHRyPENDTGF5ZXJJbXBsPik7Ci0gICAgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcmVs
ZWFzZVJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5yZWxlYXNlKCk7IH0KKyAg
ICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZWxlYXNlUm9vdExheWVyKCk7CiAgICAgQ0NMYXll
ckltcGwqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5nZXQoKTsgfQogCi0g
ICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXll
ckltcGw7IH0KKyAgICBDQ0xheWVySW1wbCogcm9vdFNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9yb290U2Nyb2xsTGF5ZXJJbXBsOyB9CiAKICAgICBib29sIHZpc2libGUoKSBjb25zdCB7
IHJldHVybiBtX3Zpc2libGU7IH0KICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CkBAIC0xNjks
OCArMTY5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1ha2VTY3JvbGxBbmRTY2FsZVNldChDQ1Nj
cm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQs
IGZsb2F0IHBhZ2VTY2FsZSk7CiAKICAgICB2b2lkIHNldFBhZ2VTY2FsZURlbHRhKGZsb2F0KTsK
LSAgICB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCk7Ci0gICAgdm9pZCBh
ZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1h
eFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKEND
TGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgZnJhbWUgc2hvdWxkIG5v
dCBiZSBkaXNwbGF5ZWQuCkBAIC0xNzksMTIgKzE3NywxNCBAQCBwcml2YXRlOgogICAgIEludFNp
emUgY29udGVudFNpemUoKSBjb25zdDsKICAgICB2b2lkIHNlbmREaWRMb3NlQ29udGV4dFJlY3Vy
c2l2ZShDQ0xheWVySW1wbCopOwogICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXll
ckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKKyAgICBib29sIGVuc3VyZU1vc3RSZWNlbnRS
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KCk7CiAKICAgICB2b2lkIGR1bXBSZW5kZXJTdXJmYWNlcyhU
ZXh0U3RyZWFtJiwgaW50IGluZGVudCwgY29uc3QgQ0NMYXllckltcGwqKSBjb25zdDsKIAogICAg
IE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBPd25Q
dHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKLSAgICBDQ0xheWVySW1wbCogbV9zY3Jv
bGxMYXllckltcGw7CisgICAgQ0NMYXllckltcGwqIG1fcm9vdFNjcm9sbExheWVySW1wbDsKKyAg
ICBDQ0xheWVySW1wbCogbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7CiAgICAgQ0NTZXR0
aW5ncyBtX3NldHRpbmdzOwogICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgYm9vbCBt
X3Zpc2libGU7CkBAIC0yMTEsNiArMjExLDkgQEAgcHJpdmF0ZToKIAogICAgIENDTGF5ZXJTb3J0
ZXIgbV9sYXllclNvcnRlcjsKIAorICAgIC8vIExpc3Qgb2YgdmlzaWJsZSBsYXllcnMgaW4gdGhl
IG1vc3QgcmVjZW50IGZyYW1lLiBVc2VkIGZvciBpbnB1dCBldmVudCBoaXQgdGVzdGluZy4KKyAg
ICBDQ0xheWVyTGlzdCBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCiAgICAg
RmxvYXRSZWN0IG1fcm9vdERhbWFnZVJlY3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCmluZGV4IDRmNjRkNTQ3MWUzOTY2
NTBmN2NhNzVlOWUxNjI1YzY2ZDcyZjExYjYuLjlkNjEzYTNhY2E5OTFjOTk1ZGUzOTc0ODcyNGM3
MWZjYmE5NDJlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllckltcGwuY3BwCkBAIC03Miw0ICs3Miw4IEBAIHZvaWQgV2ViQ29udGVudExheWVy
SW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJbnRSZWN0JiBj
bGlwCiAgICAgbV9jb250ZW50Q2xpZW50LT5wYWludENvbnRlbnRzKGNhbnZhcywgV2ViUmVjdChj
bGlwKSk7CiB9CiAKK3ZvaWQgV2ViQ29udGVudExheWVySW1wbDo6ZGlkU2Nyb2xsKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCA1MWYz
NDRmN2NhZjEyNzExMjZhYzdiNDI2OGVkNTQ2MTIxNDIxOWQ4Li4xYmE4ODRjOWIzNTdlYmYzODdl
ZGZmMzQ5ZjY1NmVhZmE2NmFlMWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5oCkBAIC00NCw2ICs0NCw3IEBAIHByb3RlY3RlZDoKIAog
ICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOwogCiAgICAgV2ViQ29udGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRD
bGllbnQ7CiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4
IDUxYTAzMjYxOGQ1Mzg1NzUwZDU1MGQ3ZWFlNmY5YjA2ZjY3YjUxY2EuLmU0MzY0NDVhMzU4OThm
NWVkMDk1ZWY3ZTY3OTMyZDEwYmQ0MTAzZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMTMy
NSw2ICsxMzI1LDI4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFj
a0ZhY2VDdWxsaW5nKQogICAgIEVYUEVDVF9UUlVFKGNoaWxkT2ZBbmltYXRpbmdTdXJmYWNlLT52
aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlTdWJ0cmVlU2VhcmNoKQoreworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiByb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbWFza0xheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJlcGxpY2FMYXllciA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0UmVwbGljYUxheWVyKHJlcGxpY2FMYXllci5n
ZXQoKSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQuZ2V0KCkpOworICAgIGNoaWxk
LT5zZXRNYXNrTGF5ZXIobWFza0xheWVyLmdldCgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGls
ZC5nZXQoKSk7CisKKyAgICBpbnQgbm9uZXhpc3RlbnRJZCA9IC0xOworICAgIEVYUEVDVF9FUShy
b290LCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShyb290LmdldCgp
LCByb290LT5pZCgpKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkLCBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmZpbmRMYXllckluU3VidHJlZShyb290LmdldCgpLCBjaGlsZC0+aWQoKSkpOworICAgIEVY
UEVDVF9FUShncmFuZENoaWxkLCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3Vi
dHJlZShyb290LmdldCgpLCBncmFuZENoaWxkLT5pZCgpKSk7CisgICAgRVhQRUNUX0VRKG1hc2tM
YXllciwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQo
KSwgbWFza0xheWVyLT5pZCgpKSk7CisgICAgRVhQRUNUX0VRKHJlcGxpY2FMYXllciwgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgcmVwbGljYUxh
eWVyLT5pZCgpKSk7CisgICAgRVhQRUNUX0VRKDAsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Zmlu
ZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIG5vbmV4aXN0ZW50SWQpKTsKK30KKwogLy8gRklY
TUU6CiAvLyBjb250aW51ZSB3b3JraW5nIG9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02ODk0MgogLy8gIC0gYWRkIGEgdGVzdCB0byB2ZXJpZnkgY2xpcHBpbmcgdGhh
dCBjaGFuZ2VzIHRoZSAiY2VudGVyIHBvaW50IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCAwNzdlNGMy
MzliZDM1Mzc4OWE5NzIxNWYxMmFlOTgwOTMwNzgwODk5Li4wYzBjNWNjYTY4NzdlN2Q4Zjc5OGE2
MTVjNDBmZmM4NWMzN2M1YTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtOTcsNiArOTcsMjUgQEAg
cHVibGljOgogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkp
OwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVTY3Jv
bGxhYmxlTGF5ZXIoaW50IGlkLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKGlkKTsKKyAgICAgICAgbGF5ZXItPnNldFNjcm9sbGFibGUodHJ1
ZSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGxheWVy
LT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGxheWVyLT5zZXRCb3VuZHMoc2l6ZSk7
CisgICAgICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKHNpemUud2lkdGgo
KSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSk7CisgICAgICAgIHJldHVybiBsYXllci5yZWxlYXNl
KCk7CisgICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpCisgICAgeworICAgICAgICBtX2hvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihj
cmVhdGVDb250ZXh0KCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEg
ZnJhbWU7CisgICAgICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJh
bWUpKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29udGV4
dCgpCiAgICAgewpAQCAtMTgwLDEwICsxOTksMTIgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiB7CiAgICAgewogICAgICAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAg
ICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsK
ICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0U2Ny
b2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQ
b3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihyb290LnJlbGVhc2UoKSk7CisgICAgICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5k
RHJhd0ZyYW1lKCk7CiAgICAgfQogCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJl
Z2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0xOTcsMTAgKzIxOCwxMiBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHdoZWVsRXZlbnRIYW5kbGVycykKIHsKICAgICB7
CiAgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
MCk7CisgICAgICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAs
IDEwMCkpOwogICAgICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgICAgICByb290
LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAgICAgICAgIHJvb3QtPnNldE1h
eFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKICAgICAgICAgbV9ob3N0SW1wbC0+
c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICAgICAgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJBbmREcmF3RnJhbWUoKTsKICAgICB9CiAgICAgQ0NMYXllckltcGwqIHJvb3QgPSBtX2hv
c3RJbXBsLT5yb290TGF5ZXIoKTsKIApAQCAtMjE1LDExICsyMzgsMTQgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiBURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCkKIHsKICAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNl
dFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNl
dFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQo
MCwgMCkpOwogICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDAp
KTsKICAgICByb290LT5zZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQodHJ1ZSk7CiAgICAgbV9o
b3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5
ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNj
cm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKICAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpH
ZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CiB9CkBAIC0yMjcs
MTEgKzI1MywxNCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNob3VsZFNjcm9s
bE9uTWFpblRocmVhZCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNj
cm9sbGFibGVSZWdpb25CYXNpYykKIHsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50
UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAg
ICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgIHJvb3QtPnNl
dE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKICAgICByb290LT5zZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOwogICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJBbmREcmF3RnJhbWUoKTsKKwogICAgIC8vIEFsbCBzY3JvbGwgdHlwZXMgaW5zaWRlIHRo
ZSBub24tZmFzdCBzY3JvbGxhYmxlIHJlZ2lvbiBzaG91bGQgZmFpbC4KICAgICBFWFBFQ1RfRVEo
bV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CiAgICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZh
aWxlZCk7CkBAIC0yNDcsMTggKzI3NiwxNiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQmFzaWMpCiAKIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQogewotICAgIG1f
aG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNyZWF0ZUNvbnRleHQoKSk7Ci0KICAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAg
IHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDEsIDEpKTsKKyAgICByb290LT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICByb290LT5zZXRTY3JvbGxhYmxl
KHRydWUpOwogICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsKICAg
ICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgcm9v
dC0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oSW50UmVjdCgwLCAwLCA1MCwgNTApKTsKICAg
ICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC0yNSwgMCkpOwogICAgIG1faG9zdEltcGwt
PnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6
RnJhbWVEYXRhIGZyYW1lOwotICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0Ry
YXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsgLy8gVXBkYXRl
IGRyYXcgdHJhbnNmb3JtcyBzbyB3ZSBjYW4gY29ycmVjdGx5IG1hcCBwb2ludHMgaW50byBsYXll
ciBzcGFjZS4KKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogCiAg
ICAgLy8gVGhpcyBwb2ludCB3b3VsZCBmYWxsIGludG8gdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUg
cmVnaW9uIGV4Y2VwdCB0aGF0IHdlJ3ZlIG1vdmVkIHRoZSBsYXllciBkb3duIGJ5IDI1IHBpeGVs
cy4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNDAsIDEw
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbFN0YXJ0ZWQpOwpAQCAtMjczLDggKzMwMCw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgcGluY2hHZXN0dXJlKQogewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXll
cnMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJ
bnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1l
KCk7CiAKLSAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5zY3JvbGxM
YXllcigpOworICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnJvb3RT
Y3JvbGxMYXllcigpOwogICAgIEFTU0VSVChzY3JvbGxMYXllcik7CiAKICAgICBjb25zdCBmbG9h
dCBtaW5QYWdlU2NhbGUgPSAwLjUsIG1heFBhZ2VTY2FsZSA9IDQ7CkBAIC0zNTMsOCArMzgxLDkg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYWdlU2NhbGVBbmltYXRpb24pCiB7
CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CiAg
ICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAotICAgIENDTGF5ZXJJbXBsKiBz
Y3JvbGxMYXllciA9IG1faG9zdEltcGwtPnNjcm9sbExheWVyKCk7CisgICAgQ0NMYXllckltcGwq
IHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7CiAgICAgQVNTRVJU
KHNjcm9sbExheWVyKTsKIAogICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VTY2FsZSA9IDAuNSwgbWF4
UGFnZVNjYWxlID0gNDsKQEAgLTU2MSw2ICs1OTAsMjcwIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hlbkFuaW1hdGlvblVzZXNDaGVja2VyYm9h
cmQpCiAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiB9CiAKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdElnbm9yZWQpCit7CisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRT
Y3JvbGxhYmxlKGZhbHNlKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxl
YXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAg
ICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIGxheWVyIGlzIG5vdCBzY3JvbGxh
YmxlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAw
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAg
IEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE5vbkNvbXBvc2l0ZWRSb290KQoreworICAgIC8vIFRlc3Qg
dGhlIGNvbmZpZ3VyYXRpb24gd2hlcmUgYSBub24tY29tcG9zaXRlZCByb290IGxheWVyIGlzIGVt
YmVkZGVkIGluIGEKKyAgICAvLyBzY3JvbGxhYmxlIG91dGVyIGxheWVyLgorICAgIEludFNpemUg
c3VyZmFjZVNpemUoMTAsIDEwKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudExh
eWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBjb250ZW50TGF5ZXItPnNldElzTm9u
Q29tcG9zaXRlZENvbnRlbnQodHJ1ZSk7CisgICAgY29udGVudExheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisgICAgY29udGVudExheWVyLT5zZXRQb3NpdGlvbihJbnRQb2ludCg1LCA1KSk7
CisgICAgY29udGVudExheWVyLT5zZXRCb3VuZHMoc3VyZmFjZVNpemUpOworICAgIGNvbnRlbnRM
YXllci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKHN1cmZhY2VTaXplLndpZHRoKCkgKiAyLCBz
dXJmYWNlU2l6ZS5oZWlnaHQoKSAqIDIpKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gc2Ny
b2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHNjcm9sbExheWVyLT5zZXRT
Y3JvbGxhYmxlKHRydWUpOworICAgIHNjcm9sbExheWVyLT5hZGRDaGlsZChjb250ZW50TGF5ZXIu
cmVsZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxMYXllci5y
ZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7
CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEVYUEVD
VF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwor
ICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBs
LT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAg
IEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykKK3sKKyAgICBJ
bnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3Jv
bGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNl
dFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJB
bmREcmF3RnJhbWUoKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJ
bnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNp
emUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJV
RShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1p
dCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hp
bGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+YWRkQ2hp
bGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXpl
KSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBt
X2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVM
YXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdu
b3JlZCBiZWNhdXNlIHRoZSBpbnB1dCBjb29yZGluYXRlIGlzIG91dHNpZGUgdGhlIGxheWVyIGJv
dW5kYXJpZXMuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDE1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcp
OworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0JhY2tmYWNpbmdDaGlsZCkKK3sKKyAg
ICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNo
aWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VT
aXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC5yb3RhdGUzZCgxODAs
IDAsIDApOworICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICBjaGlsZC0+c2V0
RG91YmxlU2lkZWQoZmFsc2UpOworCisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgp
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGwgZXZl
bnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBzY3JvbGxhYmxlIGxheWVyIGlzIG5vdCBmYWNpbmcg
dGhlIHZpZXdlciBhbmQgdGhlcmUgaXMKKyAgICAvLyBub3RoaW5nIHNjcm9sbGFibGUgYmVoaW5k
IGl0LgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAg
IEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJsb2NrZWRCeUNvbnRlbnRMYXllcikKK3sKKyAgICBJbnRT
aXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjb250ZW50
TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFj
ZVNpemUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHRy
dWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisKKyAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+YWRkQ2hpbGQo
Y29udGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
c2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
c3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7
CisKKyAgICAvLyBTY3JvbGxpbmcgZmFpbHMgYmVjYXVzZSB0aGUgY29udGVudCBsYXllciBpcyBh
c2tpbmcgdG8gYmUgc2Nyb2xsZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIEVYUEVDVF9FUSht
X2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7Cit9CisKK1RF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2Fs
ZU9uTWFpblRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAg
ZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAg
IG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7Cisg
ICAgSW50U2l6ZSBleHBlY3RlZFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBJbnRTaXpl
IGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3Np
dGlvbigpKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
NSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7
CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAvLyBTZXQgbmV3IHBhZ2Ugc2Nh
bGUgZnJvbSBtYWluIHRocmVhZC4KKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JB
bmRMaW1pdHMocGFnZVNjYWxlLCBwYWdlU2NhbGUsIHBhZ2VTY2FsZSk7CisKKyAgICAvLyBUaGUg
c2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSBzY3JvbGwgZGVsdGEuCisgICAgZXhwZWN0ZWRTY3Jv
bGxEZWx0YS5zY2FsZShwYWdlU2NhbGUpOworICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0
PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIGV4
cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAwLCBleHBlY3RlZFNjcm9sbERlbHRhKTsK
KworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVuIHVwZGF0ZWQu
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlv
bigpLCBleHBlY3RlZE1heFNjcm9sbCk7CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBkZWx0YSBy
ZW1haW5zIGNvbnN0YW50IGJlY2F1c2UgdGhlIGltcGwgdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5wYWdlU2NhbGVEZWx0YSgpLCAx
KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hh
bmdlUGFnZVNjYWxlT25JbXBsVGhyZWFkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAs
IDEwKTsKKyAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOworICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNl
U2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAg
ICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIG1faG9zdElt
cGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCAxLCBwYWdlU2NhbGUpOworICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBJbnRTaXplIHNjcm9s
bERlbHRhKDAsIDEwKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xsRGVs
dGEpOworICAgIEludFNpemUgZXhwZWN0ZWRNYXhTY3JvbGwobV9ob3N0SW1wbC0+cm9vdExheWVy
KCktPm1heFNjcm9sbFBvc2l0aW9uKCkpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9s
bEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgIC8v
IFNldCBuZXcgcGFnZSBzY2FsZSBvbiBpbXBsIHRocmVhZCBieSBwaW5jaGluZy4KKyAgICBtX2hv
c3RJbXBsLT5waW5jaEdlc3R1cmVCZWdpbigpOworICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVy
ZVVwZGF0ZShwYWdlU2NhbGUsIEludFBvaW50KCkpOworICAgIG1faG9zdEltcGwtPnBpbmNoR2Vz
dHVyZUVuZCgpOworCisgICAgLy8gVGhlIHNjcm9sbCBkZWx0YSBpcyBub3Qgc2NhbGVkIGJlY2F1
c2UgdGhlIG1haW4gdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisgICAgT3duUHRyPENDU2Nyb2xsQW5k
U2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7
CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDAsIGV4cGVjdGVkU2Nyb2xs
RGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgYWxzbyBoYXZlIGJlZW4g
dXBkYXRlZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9s
bFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxl
IGRlbHRhIHNob3VsZCBtYXRjaCB0aGUgbmV3IHNjYWxlIG9uIHRoZSBpbXBsIHNpZGUuCisgICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5wYWdlU2NhbGVEZWx0YSgpLCBwYWdl
U2NhbGUpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxk
QW5kQ2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQoreworICAgIEludFNpemUgc3VyZmFjZVNp
emUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDApOworICAgIC8vIEFsc28gbWFyayB0aGUgcm9vdCBzY3JvbGxhYmxlIHNvIGl0IGJl
Y29tZXMgdGhlIHJvb3Qgc2Nyb2xsIGxheWVyLgorICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1
ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9p
bnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJv
b3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNp
emUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBD
Q0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4oKVsw
XS5nZXQoKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEludFNpemUg
ZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgSW50U2l6ZSBleHBlY3RlZE1h
eFNjcm9sbChjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgp
OworCisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2Nh
bGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCAxLCBwYWdlU2NhbGUpOworCisgICAgLy8gVGhl
IHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgorICAgIGV4cGVjdGVkU2Ny
b2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNl
dD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBl
eHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMSwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7
CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBub3QgaGF2ZSBjaGFuZ2VkLgorICAg
IEVYUEVDVF9FUShjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwp
OworCisgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZGVsdGEgcmVtYWlucyBjb25zdGFudCBiZWNhdXNl
IHRoZSBpbXBsIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIEVYUEVDVF9FUShjaGlsZC0+cGFn
ZVNjYWxlRGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdCkKK3sKKyAgICAvLyBTY3JvbGwgYSBjaGlsZCBsYXllciBi
ZXlvbmQgaXRzIG1heGltdW0gc2Nyb2xsIHJhbmdlIGFuZCBtYWtlIHN1cmUgdGhlCisgICAgLy8g
cGFyZW50IGxheWVyIGlzIHNjcm9sbGVkIG9uIHRoZSBheGlzIG9uIHdoaWNoIHRoZSBjaGlsZCB3
YXMgdW5hYmxlIHRvCisgICAgLy8gc2Nyb2xsLgorICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAs
IDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5
ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworCisgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiBncmFuZENoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDIsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBncmFuZENoaWxkLT5zZXRTY3JvbGxQb3NpdGlvbihJ
bnRQb2ludCgwLCA1KSk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBj
aGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMywgMCkpOworICAgIGNoaWxkLT5hZGRD
aGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5y
ZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0
aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIHsKKyAgICAgICAgSW50U2l6
ZSBzY3JvbGxEZWx0YSgtMywgLTcpOworICAgICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+
c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgICAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsK
KworICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9z
dEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKworICAgICAgICAvLyBUaGUgZ3JhbmQgY2hp
bGQgc2hvdWxkIGhhdmUgc2Nyb2xsZWQgdXAgdG8gaXRzIGxpbWl0LgorICAgICAgICBDQ0xheWVy
SW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4oKVswXS5nZXQo
KTsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVsw
XS5nZXQoKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGdyYW5k
Q2hpbGQtPmlkKCksIEludFNpemUoMCwgLTUpKTsKKworICAgICAgICAvLyBUaGUgY2hpbGQgc2hv
dWxkIGhhdmUgb25seSBzY3JvbGxlZCBvbiB0aGUgb3RoZXIgYXhpcy4KKyAgICAgICAgZXhwZWN0
Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBJbnRTaXplKC0zLCAwKSk7
CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJlZm9y
ZVJlZHJhdykKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUs
IDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJm
YWNlU2l6ZSk7CisKKyAgICAvLyBEcmF3IG9uZSBmcmFtZSBhbmQgdGhlbiBpbW1lZGlhdGVseSBy
ZWJ1aWxkIHRoZSBsYXllciB0cmVlIHRvIG1pbWljIGEgdHJlZSBzeW5jaHJvbml6YXRpb24uCisg
ICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBtX2hvc3RJbXBs
LT5yZWxlYXNlUm9vdExheWVyKCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0
ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworCisg
ICAgLy8gU2Nyb2xsaW5nIHNob3VsZCBzdGlsbCB3b3JrIGV2ZW4gdGhvdWdoIHdlIGRpZCBub3Qg
ZHJhdyB5ZXQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7Cit9CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDog
cHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRTdGF0
ZVRyYWNrZXJDb250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDg5YjNk
ZTI3MTllMTcxMTU5ZTAxZjA5ZGJlYmU0Y2Q5MmEyMmUyNGMuLmY3Mzk4Zjc5NWMwOGE0YTBmZDdj
ZTYxYjZiZmE2NjhhMjhkOWFjOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMTQxNyw2ICsxNDE3LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgeyB9CiAK
IHByaXZhdGU6CiAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OwpAQCAtMTU1MSw3ICsx
NTUyLDggQEAgY2xhc3MgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIDogcHVibGljIENvbnRlbnRM
YXllckRlbGVnYXRlIHsKIHB1YmxpYzoKICAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJvb2wo
KSk7Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJ
bnRTaXplJikgeyB9CiAgICAgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKSB7IH0KIH07CiAKQEAg
LTIzMTMsNCArMjMxNSw3MCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdEZyYWN0aW9uYWxT
Y3JvbGwsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3RUaHJlYWRlZCgpOwogfQogCitjbGFz
cyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllciA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRM
YXllcigpCisgICAgICAgIDogbV9zY3JvbGxBbW91bnQoMiwgMSkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCkpOworICAgICAgICBtX3Jvb3RTY3Jv
bGxMYXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoJm1fbW9ja0RlbGVnYXRlKTsK
KyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwor
ICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKKyAgICAgICAg
bV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIG1fcm9vdFNj
cm9sbExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZENoaWxkKG1fcm9vdFNjcm9sbExh
eWVyKTsKKyAgICAgICAgbV9jaGlsZExheWVyID0gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0
ZSgmbV9tb2NrRGVsZWdhdGUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEJvdW5kcyhJbnRT
aXplKDUwLCA1MCkpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7
CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAgbV9j
aGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIpOworICAgICAgICBw
b3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQp
CisgICAgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IG1fcm9vdFNjcm9sbExheWVyLT5z
Y3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsUG9z
aXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsK
KyAgICAgICAgRVhQRUNUX0VRKG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkp
CisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRM
YXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSArIG1fc2Nyb2xsQW1vdW50KTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09
IDEpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1
LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91
bnQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAo
aW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKKyAgICBNb2NrQ29udGVudExheWVy
RGVsZWdhdGUgbV9tb2NrRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY2hp
bGRMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290U2Nyb2xsTGF5ZXI7Cit9
OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIsIHJ1bk11bHRp
VGhyZWFkKQoreworICAgIHJ1blRlc3QodHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146640</attachid>
            <date>2012-06-08 13:35:44 -0700</date>
            <delta_ts>2012-06-11 10:45:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120608213543.patch</filename>
            <type>text/plain</type>
            <size>77264</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTg5ZjAwZWZmMGU3NDk4
ZDQ2MDQxMTJjMzY2MDJmOTg3OTVjYWU4Ny4uNTcxOTBmYjJkNTA3ZDc5MjI0ZWExN2NlZjczYmRh
MDk4YjNjN2JhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVu
IGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xs
ZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBBZGRlZCBuZXcgd2Via2l0X3VuaXRf
dGVzdHMgdG8gdmVyaWZ5IHNjcm9sbGluZyBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoQ29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpmaW5kTGF5ZXJJblN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllcklt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJsZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcm9s
bExheWVyRm9yQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0U2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDYt
MDggIFlvc2hpZnVtaSBJbm91ZSAgPHlvc2luQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbRm9y
bXNdIERyb3AgU3RlcFJhbmdlOjpOdW1iZXJXaXRoRGVjaW1hbFBsYWNlc09yTWlzc2luZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2NWI5YjUwYmM2N2IyYjEzNmE0ODc1MmM0YThiZGU0
ZmMzMDBiNmZmLi5jYzQxZjQ0ZmM3NzE3MWUzZTI3MDVjOTg0YjMyMjEwYjAwNzY0NDVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWRkIHRlc3RzIGZvciBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9y
IHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzMzNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVu
dExheWVySW1wbDo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3Jj
L1dlYkNvbnRlbnRMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvbnRlbnRMYXllckltcGwpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
RVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdDo6Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdDo6
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OlRFU1RfRik6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RPcGFjaXR5Q2hhbmdlTGF5
ZXJEZWxlZ2F0ZTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKFdURjo6TW9ja0NvbnRlbnRMYXllckRl
bGVnYXRlOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdURjo6TW9ja0NvbnRlbnRMYXllckRl
bGVnYXRlOjpkaWRTY3JvbGwpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENo
aWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRM
YXllcjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5UZXN0KToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFwcGx5U2Nyb2xs
QW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRM
YXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFmdGVyVGVzdCk6Cisg
ICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpURVNUX0YpOgorCiAyMDEyLTA2LTA3ICBOaWNv
IFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW0vbWFjXSBJ
bXByb3ZlIGRldmljZURQSSwgcmVjdCwgYW5kIGF2YWlsYWJsZVJlY3QgY29tcHV0YXRpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCBhZThkMzIwOGJmYmFiOGQ3YWRl
OTgyYTdkOGE5M2EyZDgzZWQ3ZGFmLi5hMTBmMzU0MjE2ZGNmNTg3ZmRlYWYzODM1YjNkMWMyNmVi
MjRiN2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDUsNSAr
MTQ1LDEyIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldE9wYXF1ZShib29sIG9wYXF1
ZSkKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+c2V0T3BhcXVlKG9wYXF1ZSk7CiB9CiAKK3Zv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhKQoreworICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxE
ZWx0YSk7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAgIG1fZGVsZWdhdGUtPmRpZFNjcm9s
bChzY3JvbGxEZWx0YSk7Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBjY2MxZTAwOGMwODk2
ZjE3ZTFlOTJjNDk3NTY1ZjdjZWVhMDZkYzNiLi5hZDNlZmJjYzMzOTFjNWE5OWE1ZGQ1YWViZjMz
YzBiOTEyMmE1N2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTQ2LDYg
KzQ2LDcgQEAgY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKIGNsYXNzIENvbnRlbnRMYXllckRl
bGVnYXRlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFNjcm9sbChjb25zdCBJbnRTaXplJikgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
Q29udGVudExheWVyRGVsZWdhdGUoKSB7IH0KQEAgLTY2LDYgKzY3LDggQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7CisKIHByb3RlY3RlZDoKICAg
ICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDb250ZW50TGF5ZXJEZWxlZ2F0ZSopOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI5OTQ5OTEyY2I3MzBlYzU2
NGRhMjNhMDdiNGY5ZDg2OWY2MGZiNDYuLmI4YTgwMThkOGQ0Yjc4MTFlY2I4YWVmZjdlMjRlZTVi
MzEyZmM0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50
YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJ
bnRTaXplJikgT1ZFUlJJREUgeyB9CiAKICAgICAvLyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUg
aW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
ZG91YmxlIHN0YXJ0VGltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGY2MWZkMzVkNTMw
MDE0MWYyYjJmZjI2Yjg3NjRiOGY2MmUwM2UyM2QuLmRkYTBhNTgyODMwZmQzNzI2OWI1NzI1MDg3
M2MxNTA1ZDE3OWVhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zOTEsNiArMzkxLDE0
IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKK3ZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9z
aXRpb24pCit7CisgICAgaWYgKG1fbWF4U2Nyb2xsUG9zaXRpb24gPT0gbWF4U2Nyb2xsUG9zaXRp
b24pCisgICAgICAgIHJldHVybjsKKyAgICBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4U2Nyb2xs
UG9zaXRpb247CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVt
OjpzZXRTY3JvbGxhYmxlKGJvb2wgc2Nyb2xsYWJsZSkKIHsKICAgICBpZiAobV9zY3JvbGxhYmxl
ID09IHNjcm9sbGFibGUpCkBAIC01MDgsNiArNTE2LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpw
dXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0UG9zaXRp
b24obV9wb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKHByZXNlcnZlczNEKCkp
OwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICBs
YXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obV9tYXhTY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5
ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwogICAgIGlmICgh
dHJhbnNmb3JtSXNBbmltYXRpbmcoKSkKICAgICAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3Ry
YW5zZm9ybSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNWQ1MmY4YmM5ZmVlZDEyNDEwNjhkMTEx
MmRjYzhkOWU0Mzc0NjFlZi4uNWQyM2JlN2RhMjAzN2NkZWM4MTExZjc0MjhkZmU1MDI0NGQ1ZTlk
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTQ0LDEyICsxNDQsMTcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQ
b2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9
CiAKKyAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmKTsKKyAgICBj
b25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Ny
b2xsUG9zaXRpb247IH0KKwogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sKTsKKyAgICBib29s
IHNjcm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGU7IH0KICAgICB2b2lkIHNl
dFNob3VsZFNjcm9sbE9uTWFpblRocmVhZChib29sKTsKICAgICB2b2lkIHNldEhhdmVXaGVlbEV2
ZW50SGFuZGxlcnMoYm9vbCk7CiAgICAgY29uc3QgUmVnaW9uJiBub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbigpIHsgcmV0dXJuIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb247IH0KICAgICB2b2lkIHNl
dE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYpOwogICAgIHZvaWQgc2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb25DaGFuZ2VkKCkgeyBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
Q2hhbmdlZCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6
ZSYpIHsgfQogCiAgICAgdm9pZCBzZXREcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzKGJv
b2wpOwogICAgIGJvb2wgZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcygpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlczsgfQpAQCAtMzE4LDYgKzMy
Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNlLgogICAg
IEludFJlY3QgbV9zY2lzc29yUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwor
ICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xsYWJsZTsK
ICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwogICAgIGJvb2wgbV9oYXZlV2hl
ZWxFdmVudEhhbmRsZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcAppbmRleCBiY2I3YjNjMzZjN2I4
ZTE4NGNkMjA2N2RmYTVhMGE0NTBjNWI4Njc5Li45M2RlMTliOGNmOTlhNzNkNzFhMTI3ZWNjNjBk
Zjk5NDU1NzlkOTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcApAQCAtMTAxLDYgKzEwMSwxMCBA
QCB2b2lkIExpbmtIaWdobGlnaHQ6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBnYywg
Y29uc3QgSW50UmVjdCYpCiAgICAgZ2MuZmlsbFBhdGgobV9wYXRoKTsKIH0KIAordm9pZCBMaW5r
SGlnaGxpZ2h0OjpkaWRTY3JvbGwoY29uc3QgSW50U2l6ZSYpCit7Cit9CisKIHZvaWQgTGlua0hp
Z2hsaWdodDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUpCiB7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxp
Z2h0LmgKaW5kZXggOGQ3ODg5ZmNlNzIwNTlmOTgxYTg5NzYyMTZkZGFlZWVlMzE5ZGI4NC4uOTE1
MDQ5ZTViZGU1MzBjN2RhMzUzZGNmZmY4NzNkM2ZjYmQxMmI5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQu
aApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDb250ZW50TGF5ZXJEZWxlZ2F0
ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7CiAKICAgICAvLyBDQ0xh
eWVyQW5pbWF0aW9uRGVsZWdhdGUgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlIHRpbWUpIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5w
dXRIYW5kbGVyLmgKaW5kZXggNzY2MDhkOWZjMWQwZGExMzlhNDkzMGJjNTA0N2MwOGFlYjhiMmRm
NC4uNzdkZDJkYmNmNzRiNzdmODAyNzFjZWM0ZjI1YmE3MWMwNTBmZjJiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0lucHV0SGFuZGxlci5oCkBAIC00NSwxMiArNDUsMTIgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNz
IENDSW5wdXRIYW5kbGVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0lucHV0
SGFuZGxlckNsaWVudCk7CiBwdWJsaWM6Ci0gICAgZW51bSBTY3JvbGxTdGF0dXMgeyBTY3JvbGxG
YWlsZWQsIFNjcm9sbFN0YXJ0ZWQsIFNjcm9sbElnbm9yZWQgfTsKKyAgICBlbnVtIFNjcm9sbFN0
YXR1cyB7IFNjcm9sbE9uTWFpblRocmVhZCwgU2Nyb2xsU3RhcnRlZCwgU2Nyb2xsSWdub3JlZCB9
OwogICAgIGVudW0gU2Nyb2xsSW5wdXRUeXBlIHsgR2VzdHVyZSwgV2hlZWwgfTsKIAogICAgIC8v
IEF0dGVtcHQgdG8gc3RhcnQgc2Nyb2xsaW5nIGEgbGF5ZXIgYXQgYSBnaXZlbiBwb2ludCBpbiB3
aW5kb3cKICAgICAvLyBjb29yZGluYXRlcy4gUmV0dXJucyBTY3JvbGxTdGFydGVkIGlmIHRoZSBs
YXllciBhdCB0aGUgY29vcmRpbmF0ZXMgY2FuCi0gICAgLy8gYmUgc2Nyb2xsZWQsIFNjcm9sbEZh
aWxlZCBpZiB0aGUgc2Nyb2xsIGV2ZW50IHNob3VsZCBpbnN0ZWFkIGJlCisgICAgLy8gYmUgc2Ny
b2xsZWQsIFNjcm9sbE9uTWFpblRocmVhZCBpZiB0aGUgc2Nyb2xsIGV2ZW50IHNob3VsZCBpbnN0
ZWFkIGJlCiAgICAgLy8gZGVsZWdhdGVkIHRvIHRoZSBtYWluIHRocmVhZCwgb3IgU2Nyb2xsSWdu
b3JlZCBpZiB0aGVyZSBpcyBub3RoaW5nIHRvCiAgICAgLy8gYmUgc2Nyb2xsZWQgYXQgdGhlIGdp
dmVuIGNvb3JkaW5hdGVzLgogICAgIHZpcnR1YWwgU2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNv
bnN0IEludFBvaW50JiwgU2Nyb2xsSW5wdXRUeXBlKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAKaW5kZXggNzJjMGVhMmI3OWNlNzJiYTZhZTBmYzYyZWMxNzc2YjY5MmFjNWFmYy4uM2ZkZTM3
YzU4NjYxN2I5YjZkYzQ5NTYzOGFhNTQ5MWFiNWI0ZjRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcApAQCAtMTg0LDYgKzE4NCwzNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25z
dCBGbG9hdFNpemUmIHNjcm9sbCkKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0
cmVlKCk7CiB9CiAKK0NDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllcklt
cGw6OnRyeVNjcm9sbChjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSB0eXBlKSBjb25zdAoreworICAgIGlmIChzaG91bGRT
Y3JvbGxPbk1haW5UaHJlYWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgidHJ5U2Nyb2xsIEZh
aWxlZCBzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQiLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0dXJu
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ7CisgICAgfQorCisgICAg
aWYgKCFzY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIFRS
QUNFX0VWRU5UKCJ0cnlTY3JvbGwgSWdub3JlZCBub25JbnZlcnRpYmxlVHJhbnNmb3JtIiwgdGhp
cywgMCk7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3Jl
ZDsKKyAgICB9CisKKyAgICBJbnRQb2ludCBjb250ZW50UG9pbnQoc2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKS5pbnZlcnNlKCkubWFwUG9pbnQodmlld3BvcnRQb2ludCkpOworICAgIGlmIChub25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbigpLmNvbnRhaW5zKGNvbnRlbnRQb2ludCkpIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQoInRyeVNjcm9sbCBGYWlsZWQgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24iLCB0aGlz
LCAwKTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5U
aHJlYWQ7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Oldo
ZWVsICYmIGhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgi
dHJ5U2Nyb2xsIEZhaWxlZCB3aGVlbEV2ZW50SGFuZGxlcnMiLCB0aGlzLCAwKTsKKyAgICAgICAg
cmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ7CisgICAgfQor
CisgICAgaWYgKCFzY3JvbGxhYmxlKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoInRyeVNjcm9s
bCBJZ25vcmVkIG5vdCBzY3JvbGxhYmxlIiwgdGhpcywgMCk7CisgICAgICAgIHJldHVybiBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKKyAgICB9CisKKyAgICByZXR1cm4gQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ7Cit9CisKIGNvbnN0IEludFJlY3QgQ0NM
YXllckltcGw6OmdldERyYXdSZWN0KCkgY29uc3QKIHsKICAgICAvLyBGb3JtIHRoZSBtYXRyaXgg
dXNlZCBieSB0aGUgc2hhZGVyIHRvIG1hcCB0aGUgY29ybmVycyBvZiB0aGUgbGF5ZXIncwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKaW5kZXggZmQ0ZmFjYWE0MGNiYTE1ZGY2MjlhMWIyNGRhMzJjMmZhNWIz
NzQ0ZC4uMmZjMGM5ZDM0OTcyYzk1MmU2OTkzMWUyZTRhMTIxNjYzODI5ZDA2MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9D
Q0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFy
ZWRRdWFkU3RhdGUuaCIKQEAgLTIxMiw2ICsyMTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRE
cmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzKGJvb2wgY2hlY2tlcmJvYXJkKSB7IG1fZHJh
d0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyA9IGNoZWNrZXJib2FyZDsgfQogICAgIGJvb2wg
ZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0No
ZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlczsgfQogCisgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXR1cyB0cnlTY3JvbGwoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUpIGNvbnN0OworCiAgICAgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUxheWVy
UmVjdDsgfQogICAgIHZvaWQgc2V0VmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNp
YmxlTGF5ZXJSZWN0KSB7IG1fdmlzaWJsZUxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3Q7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZmEwZWI2NGMzNjViMThkZTBk
OTY5ZmM4M2U5YjQ4MzVhMzg2OTM0YS4uMzE1NDA3ZDIyOGM3MjExOGFhY2Y4Y2IyNDE5ZDQ3YzYw
OTJjMDU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC02MjAsMTUgKzYy
MCw0MiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExh
eWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgIG9jY2x1c2lvblRyYWNrZXIub3Zl
cmRyYXdNZXRyaWNzKCkucmVjb3JkTWV0cmljcyh0aGlzKTsKIH0KIAorc3RhdGljIExheWVyQ2hy
b21pdW0qIGZpbmRGaXJzdFNjcm9sbGFibGVMYXllcihMYXllckNocm9taXVtKiBsYXllcikKK3sK
KyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChsYXllci0+c2Ny
b2xsYWJsZSgpKQorICAgICAgICByZXR1cm4gbGF5ZXI7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hy
b21pdW0qIGZvdW5kID0gZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKGxheWVyLT5jaGlsZHJlbigp
W2ldLmdldCgpKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5k
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YXBw
bHlTY3JvbGxBbmRTY2FsZShjb25zdCBDQ1Njcm9sbEFuZFNjYWxlU2V0JiBpbmZvKQogewotICAg
IC8vIEZJWE1FOiBwdXNoaW5nIHNjcm9sbCBvZmZzZXRzIHRvIG5vbi1yb290IGxheWVycyBub3Qg
aW1wbGVtZW50ZWQKLSAgICBpZiAoIWluZm8uc2Nyb2xscy5zaXplKCkpCisgICAgaWYgKCFtX3Jv
b3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGluZm8uc2Nyb2xscy5zaXpl
KCkgPT0gMSk7Ci0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IGluZm8uc2Nyb2xsc1swXS5zY3Jv
bGxEZWx0YTsKLSAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShzY3JvbGxEZWx0YSwg
aW5mby5wYWdlU2NhbGVEZWx0YSk7CisgICAgTGF5ZXJDaHJvbWl1bSogcm9vdFNjcm9sbExheWVy
ID0gZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICBJbnRT
aXplIHJvb3RTY3JvbGxEZWx0YTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5z
Y3JvbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUobV9yb290TGF5ZXIuZ2V0KCks
IGluZm8uc2Nyb2xsc1tpXS5sYXllcklkKTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobGF5ZXIgPT0gcm9vdFNjcm9sbExheWVyKQorICAg
ICAgICAgICAgcm9vdFNjcm9sbERlbHRhICs9IGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGF5ZXItPnNjcm9sbEJ5KGluZm8uc2Nyb2xsc1tp
XS5zY3JvbGxEZWx0YSk7CisgICAgfQorICAgIGlmICghcm9vdFNjcm9sbERlbHRhLmlzWmVybygp
IHx8IGluZm8ucGFnZVNjYWxlRGVsdGEgIT0gMSkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Ny
b2xsQW5kU2NhbGUocm9vdFNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIH0KIAog
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IGY4
MDQ1MTYxN2RkMjVmYjE0Y2YxMWZhNmVkYWU5NzQ5YWUyNWQ3NmYuLjY5NjY2YzI1NTE2NzYwM2Nm
YmIyNjI0M2RkNmMwMThhZGQyMzVkNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oCkBAIC00OSw2ICs0OSwxMCBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBMYXllclR5cGU+IHN0YXRpYyBib29sIHJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFy
Z2V0KExheWVyVHlwZSosIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CiAKKyAgICAvLyBSZXR1
cm5zIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgaWYgb25lIGV4aXN0cyBpbiB0aGUgc3VidHJl
ZSBzdGFydGluZworICAgIC8vIGZyb20gdGhlIGdpdmVuIHJvb3QgbGF5ZXIgKGluY2x1ZGluZyBt
YXNrIGFuZCByZXBsaWNhIGxheWVycykuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBl
PiBzdGF0aWMgTGF5ZXJUeXBlKiBmaW5kTGF5ZXJJblN1YnRyZWUoTGF5ZXJUeXBlKiByb290TGF5
ZXIsIGludCBsYXllcklkKTsKKwogICAgIHN0cnVjdCBTY3JvbGxVcGRhdGVJbmZvIHsKICAgICAg
ICAgaW50IGxheWVySWQ7CiAgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGE7CkBAIC03NCw2ICs3
OCwyNSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1
dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiBsYXllciwgaQogICAgIHJldHVybiBsYXllci0+cmVuZGVy
U3VyZmFjZSgpICYmIGxheWVyLT5pZCgpICE9IHRhcmdldFN1cmZhY2VMYXllcklEOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CitMYXllclR5cGUqIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKExheWVyVHlwZSogcm9vdExheWVyLCBpbnQgbGF5ZXJJ
ZCkKK3sKKyAgICBpZiAocm9vdExheWVyLT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVy
biByb290TGF5ZXI7CisKKyAgICBpZiAocm9vdExheWVyLT5tYXNrTGF5ZXIoKSAmJiByb290TGF5
ZXItPm1hc2tMYXllcigpLT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiByb290TGF5
ZXItPm1hc2tMYXllcigpOworCisgICAgaWYgKHJvb3RMYXllci0+cmVwbGljYUxheWVyKCkgJiYg
cm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKS0+aWQoKSA9PSBsYXllcklkKQorICAgICAgICByZXR1
cm4gcm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChMYXll
clR5cGUqIGZvdW5kID0gZmluZExheWVySW5TdWJ0cmVlKHJvb3RMYXllci0+Y2hpbGRyZW4oKVtp
XS5nZXQoKSwgbGF5ZXJJZCkpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorICAg
IHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA1YjEzZTFiOGVjYjU2ZjgxMWI2
MTY3NGVhMjgxMTRlYTRjNzAwMzZiLi4zNjA1YmNlN2FhNjhlZjZmYmQzMWM2OWM2Mjg1Y2U5NmVh
OThkYWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMTE0
LDcgKzExNCw5IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29u
c3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlCiAgICAgOiBtX2NsaWVudChjbGll
bnQpCiAgICAgLCBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigw
KQotICAgICwgbV9zY3JvbGxMYXllckltcGwoMCkKKyAgICAsIG1fcm9vdFNjcm9sbExheWVySW1w
bCgwKQorICAgICwgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwoMCkKKyAgICAsIG1fc2Ny
b2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1RyZWUoLTEpCiAgICAgLCBtX3NldHRpbmdzKHNldHRp
bmdzKQogICAgICwgbV92aXNpYmxlKHRydWUpCiAgICAgLCBtX3NvdXJjZUZyYW1lQ2FuQmVEcmF3
bih0cnVlKQpAQCAtMTgwLDEwICsxODIsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjph
bmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSkKIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRT
aXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBk
b3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExh
eWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRh
KCkpOworICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3Jv
bGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNj
cm9sbERlbHRhKCkpOwogICAgIHNjcm9sbFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwog
ICAgIGZsb2F0IHNjYWxlVG90YWwgPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAg
ICAgSW50U2l6ZSBzY2FsZWRDb250ZW50U2l6ZSA9IGNvbnRlbnRTaXplKCk7CkBAIC0yMzMsNiAr
MjM1LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZh
Y2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQogewogICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKG1fcm9vdExheWVySW1wbCk7CiAKICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogCkBAIC0zNzIsOSArMzc1
LDkgQEAgSW50U2l6ZSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0CiB7
CiAgICAgLy8gVE9ETyhhZWxpYXMpOiBIYXJkY29kaW5nIHRoZSBmaXJzdCBjaGlsZCBoZXJlIGlz
IHdlaXJkLiBUaGluayBvZgogICAgIC8vIGEgY2xlYW5lciB3YXkgdG8gZ2V0IHRoZSBjb250ZW50
Qm91bmRzIG9uIHRoZSBJbXBsIHNpZGUuCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCBt
X3Njcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3Jvb3RT
Y3JvbGxMYXllckltcGwgfHwgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLSAgICByZXR1cm4gbV9zY3JvbGxMYXll
ckltcGwtPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsKKyAgICByZXR1cm4gbV9yb290
U2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7CiB9CiAKIGJv
b2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQpA
QCAtMzg0LDEwICszODcsMTMgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9E
cmF3KEZyYW1lRGF0YSYgZnJhbWUpCiAKICAgICBmcmFtZS5yZW5kZXJQYXNzZXMuY2xlYXIoKTsK
ICAgICBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CisgICAgbV9tb3N0UmVj
ZW50UmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOwogCiAgICAgaWYgKCFjYWxjdWxhdGVS
ZW5kZXJQYXNzZXMoZnJhbWUucmVuZGVyUGFzc2VzLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgbV9tb3N0UmVjZW50UmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCA9IGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICAvLyBJ
ZiB3ZSByZXR1cm4gdHJ1ZSwgdGhlbiB3ZSBleHBlY3QgZHJhd0xheWVycygpIHRvIGJlIGNhbGxl
ZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4uCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00OTAsNyArNDk2LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZWFkYmFj
ayh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgbV9sYXllclJlbmRlcmVy
LT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOwogfQogCi1zdGF0aWMgQ0NMYXll
ckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCitzdGF0aWMgQ0NMYXll
ckltcGwqIGZpbmRSb290U2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogewogICAgIGlm
ICghbGF5ZXIpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDk5LDcgKzUwNSw3IEBAIHN0YXRpYyBD
Q0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAg
cmV0dXJuIGxheWVyOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRy
ZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICBDQ0xheWVySW1wbCogZm91bmQgPSBmaW5kU2Ny
b2xsTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAgICAgICBDQ0xheWVySW1w
bCogZm91bmQgPSBmaW5kUm9vdFNjcm9sbExheWVyKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgp
KTsKICAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgIH0K
QEAgLTUwNywxMiArNTEzLDQyIEBAIHN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVy
KENDTGF5ZXJJbXBsKiBsYXllcikKICAgICByZXR1cm4gMDsKIH0KIAorLy8gQ29udGVudCBsYXll
cnMgY2FuIGJlIGVpdGhlciBkaXJlY3RseSBzY3JvbGxhYmxlIG9yIGNvbnRhaW5lZCBpbiBhbiBv
dXRlcgorLy8gc2Nyb2xsaW5nIGxheWVyIHdoaWNoIGFwcGxpZXMgdGhlIHNjcm9sbCB0cmFuc2Zv
cm0uIEdpdmVuIGEgY29udGVudCBsYXllciwKKy8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUg
YXNzb2NpYXRlZCBzY3JvbGwgbGF5ZXIgaWYgYW55Lgorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5k
U2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sKKyAg
ICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXJJbXBs
LT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllckltcGw7CisKKyAgICBpZiAobGF5
ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllckltcGwtPnBhcmVudCgpICYmIGxheWVySW1w
bC0+cGFyZW50KCktPnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVySW1wbC0+cGFy
ZW50KCk7CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRSb290TGF5ZXIoUGFzc093blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290
TGF5ZXJJbXBsID0gbGF5ZXI7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsID0gZmluZFJvb3RT
Y3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOworICAgIG1fY3VycmVudGx5U2Nyb2xs
aW5nTGF5ZXJJbXBsID0gMDsKKworICAgIGlmIChtX3Jvb3RMYXllckltcGwgJiYgbV9zY3JvbGxp
bmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSAhPSAtMSkKKyAgICAgICAgbV9jdXJyZW50bHlTY3Jv
bGxpbmdMYXllckltcGwgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJl
ZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1Ry
ZWUpOwogCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgdGhpcyBvbmx5IGZpbmRzIHRoZSBmaXJz
dCBzY3JvbGxhYmxlIGxheWVyLgotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNjcm9sbExh
eWVyKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisgICAgbV9zY3JvbGxpbmdMYXllcklkRnJvbVBy
ZXZpb3VzVHJlZSA9IC0xOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpyZWxlYXNlUm9vdExheWVyKCkKK3sKKyAgICBtX3Njcm9sbGluZ0xheWVySWRG
cm9tUHJldmlvdXNUcmVlID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPyBtX2N1cnJl
bnRseVNjcm9sbGluZ0xheWVySW1wbC0+aWQoKSA6IC0xOworICAgIG1fY3VycmVudGx5U2Nyb2xs
aW5nTGF5ZXJJbXBsID0gMDsKKworICAgIG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxp
c3QuY2xlYXIoKTsKKyAgICByZXR1cm4gbV9yb290TGF5ZXJJbXBsLnJlbGVhc2UoKTsKIH0KIAog
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTU3
Niw2ICs2MTIsMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydFNpemUo
Y29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZp
ZXdwb3J0Q2hhbmdlZCgpOwogfQogCitzdGF0aWMgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNj
YWxlQ2hhbmdlKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkK
K3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxheWVy
SW1wbC0+c2Nyb2xsYWJsZSgpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY29udmVydCBpbXBs
LXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2UuCisgICAgICAgIEZsb2F0U2l6
ZSBzY3JvbGxEZWx0YSA9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICAgICAgc2Nyb2xs
RGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTY3Jv
bGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFkanVzdFNjcm9s
bHNGb3JQYWdlU2NhbGVDaGFuZ2UobGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpLCBwYWdl
U2NhbGVDaGFuZ2UpOworfQorCitzdGF0aWMgdm9pZCBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3Jv
bGxMYXllcnMoQ0NMYXllckltcGwqIGxheWVySW1wbCwgZmxvYXQgcGFnZVNjYWxlRGVsdGEpCit7
CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXllcklt
cGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRQYWdlU2NhbGVEZWx0YShw
YWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Ny
b2xsTGF5ZXJzKGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFnZVNjYWxlRGVsdGEp
OworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZUZhY3RvckFuZExp
bWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IG1pblBhZ2VTY2FsZSwgZmxvYXQgbWF4UGFnZVNj
YWxlKQogewogICAgIGlmICghcGFnZVNjYWxlKQpAQCAtNTkwLDI1ICs2NTQsMTMgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoZmxvYXQgcGFn
ZVNjYWxlLCBmbG9hdCBtaW4KICAgICBmbG9hdCBwYWdlU2NhbGVDaGFuZ2UgPSBwYWdlU2NhbGUg
LyBtX3BhZ2VTY2FsZTsKICAgICBtX3BhZ2VTY2FsZSA9IHBhZ2VTY2FsZTsKIAotICAgIGFkanVz
dFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICBpZiAocGFn
ZVNjYWxlQ2hhbmdlICE9IDEpCisgICAgICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFu
Z2UobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBwYWdlU2NhbGVDaGFuZ2UpOwogCiAgICAgLy8gQ2xh
bXAgZGVsdGEgdG8gbGltaXRzIGFuZCByZWZyZXNoIGRpc3BsYXkgbWF0cml4LgogICAgIHNldFBh
Z2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlRGVsdGEgLyBtX3NlbnRQYWdlU2NhbGVEZWx0YSk7CiAg
ICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSAxOwotICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Nj
cm9sbExheWVyKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xs
c0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCi17Ci0gICAgaWYgKHBh
Z2VTY2FsZUNoYW5nZSA9PSAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBhbHNvIG5l
ZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2Uu
Ci0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY3JvbGxE
ZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgICAgICBzY3JvbGxE
ZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+
c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICBhcHBseVBhZ2VTY2FsZURl
bHRhVG9TY3JvbGxMYXllcnMobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2FsZURlbHRh
KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVEZWx0YShmbG9h
dCBkZWx0YSkKQEAgLTYyNiwyMiArNjc4LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEpCiAgICAgbV9wYWdlU2NhbGVEZWx0YSA9IGRl
bHRhOwogCiAgICAgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKLSAgICBhcHBseVBhZ2VTY2Fs
ZURlbHRhVG9TY3JvbGxMYXllcigpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFw
cGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCkKLXsKLSAgICBpZiAobV9zY3JvbGxMYXll
ckltcGwpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRQYWdlU2NhbGVEZWx0YShtX3Bh
Z2VTY2FsZURlbHRhKTsKKyAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMobV9y
b290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiB7Ci0gICAgaWYgKCFtX3Nj
cm9sbExheWVySW1wbCB8fCAhbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpKQor
ICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Jvb3RTY3JvbGxMYXllckltcGwt
PmNoaWxkcmVuKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFNpemUgdmll
d0JvdW5kcyA9IG1fdmlld3BvcnRTaXplOwotICAgIGlmIChDQ0xheWVySW1wbCogY2xpcExheWVy
ID0gbV9zY3JvbGxMYXllckltcGwtPnBhcmVudCgpKSB7CisgICAgaWYgKENDTGF5ZXJJbXBsKiBj
bGlwTGF5ZXIgPSBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnBhcmVudCgpKSB7CiAgICAgICAgIGlm
IChjbGlwTGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkKICAgICAgICAgICAgIHZpZXdCb3VuZHMgPSBj
bGlwTGF5ZXItPmJvdW5kcygpOwogICAgIH0KQEAgLTY1NSw5ICs3MDEsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAgICAvLyBoYXZpbmcg
YSB2ZXJ0aWNhbCBzY3JvbGxiYXIgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cuCiAgICAgbWF4
U2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
ZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9ETyhhZWxpYXMpOiBB
bHNvIHVwZGF0ZSBzdWJsYXllcnMuCisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zZXRNYXhT
Y3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldE5lZWRzUmVkcmF3KCkKQEAgLTY2NSw1MSArNzA5LDExNCBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdP
bkltcGxUaHJlYWQoKTsKIH0KIAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjplbnN1cmVNb3N0
UmVjZW50UmVuZGVyU3VyZmFjZUxheWVyTGlzdCgpCit7CisgICAgaWYgKCFtX3Jvb3RMYXllcklt
cGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX21vc3RSZWNlbnRSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAmJiBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2Uo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGFmdGVy
IHNldFJvb3RMYXllcigpIGJ1dCBiZWZvcmUgcHJlcGFyZVRvRHJhdygpLCB3ZSBuZWVkCisgICAg
Ly8gdG8gcmVjYWxjdWxhdGUgdGhlIHZpc2libGUgbGF5ZXJzLiBUaGlzIHByZXZlbnRzIGJlaW5n
IHVuYWJsZSB0byBzY3JvbGwKKyAgICAvLyBkdXJpbmcgcGFydCBvZiBhIGNvbW1pdC4KKyAgICBt
X21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CisgICAgY2FsY3VsYXRl
UmVuZGVyU3VyZmFjZUxheWVyTGlzdChtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKKworICAgIHJldHVybiBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUo
KTsKK30KKwogQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSB0eXBlKQogewotICAgIC8vIFRPRE86IENo
ZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBs
IHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7Ci0gICAgICAgIFRSQUNFX0VW
RU5UKCJzY3JvbGxCZWdpbiBJZ25vcmVkIG5vIHNjcm9sbGFibGUiLCB0aGlzLCAwKTsKLSAgICAg
ICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7Ci0gICAgfQorICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbiIsIHRoaXMsIDApOwogCi0gICAgaWYgKG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoKSkgewotICAgICAgICBUUkFDRV9F
VkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCIsIHRoaXMs
IDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOwotICAgIH0KKyAgICBzY3JvbGxFbmQo
KTsKKworICAgIGlmICghZW5zdXJlTW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QoKSkK
KyAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7CiAKICAgICBJbnRQb2ludCBkZXZpY2VWaWV3
cG9ydFBvaW50ID0gdmlld3BvcnRQb2ludDsKICAgICBkZXZpY2VWaWV3cG9ydFBvaW50LnNjYWxl
KG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3IsIG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0
b3IpOwogCi0gICAgLy8gVGhlIGludmVyc2Ugb2YgdGhlIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0g
dGFrZXMgdXMgZnJvbSBwaHlzaWNhbCBwaXhlbHMgdG8gbGF5b3V0IHBpeGVscy4KLSAgICBJbnRQ
b2ludCBzY3JvbGxMYXllclBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChkZXZpY2VWaWV3cG9ydFBvaW50KSk7Ci0KLSAgICBp
ZiAobV9zY3JvbGxMYXllckltcGwtPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29udGFpbnMo
c2Nyb2xsTGF5ZXJQb2ludCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJlZ2luIEZh
aWxlZCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4g
U2Nyb2xsRmFpbGVkOworICAgIC8vIEZpcnN0IGZpbmQgb3V0IHdoaWNoIGxheWVyIHdhcyBoaXQg
Ynkgd2Fsa2luZyB0aGUgc2F2ZWQgbGlzdCBvZiB2aXNpYmxlIGxheWVycyBmcm9tIHRoZSBtb3N0
IHJlY2VudCBmcmFtZS4KKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gMDsKKworICAgIEFT
U0VSVChtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgdHlwZWRlZiBDQ0xh
eWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDTGF5ZXJMaXN0LCBDQ1JlbmRlclN1cmZhY2UsIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBlOwor
ICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZt
X21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJdGVy
YXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmbV9tb3N0UmVjZW50UmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDQ0xheWVy
SW1wbCogcmVuZGVyU3VyZmFjZUxheWVySW1wbCA9ICgqaXQpOworICAgICAgICBpZiAoIXJlbmRl
clN1cmZhY2VMYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaXNJbnZlcnRpYmxlKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgSW50UG9pbnQgc2Nyb2xsTGF5ZXJQb2lu
dChyZW5kZXJTdXJmYWNlTGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2Uo
KS5tYXBQb2ludCh2aWV3cG9ydFBvaW50KSk7CisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZUxh
eWVySW1wbC0+dmlzaWJsZUxheWVyUmVjdCgpLmNvbnRhaW5zKHNjcm9sbExheWVyUG9pbnQpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxheWVySW1wbCA9IHJlbmRlclN1cmZhY2VM
YXllckltcGw7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmICh0eXBlID09IENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpXaGVlbCAmJiBtX3Njcm9sbExheWVySW1wbC0+aGF2ZVdoZWVsRXZl
bnRIYW5kbGVycygpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBGYWlsZWQg
d2hlZWxFdmVudEhhbmRsZXJzIiwgdGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBTY3JvbGxGYWls
ZWQ7CisgICAgLy8gV2FsayB1cCB0aGUgaGllcmFyY2h5IGFuZCBsb29rIGZvciBhIHNjcm9sbGFi
bGUgbGF5ZXIuCisgICAgQ0NMYXllckltcGwqIHBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBs
ID0gMDsKKyAgICBmb3IgKDsgbGF5ZXJJbXBsOyBsYXllckltcGwgPSBsYXllckltcGwtPnBhcmVu
dCgpKSB7CisgICAgICAgIC8vIFRoZSBjb250ZW50IGxheWVyIGNhbiBhbHNvIGJsb2NrIGF0dGVt
cHRzIHRvIHNjcm9sbCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgaWYgKGxheWVy
SW1wbC0+dHJ5U2Nyb2xsKGRldmljZVZpZXdwb3J0UG9pbnQsIHR5cGUpID09IFNjcm9sbE9uTWFp
blRocmVhZCkKKyAgICAgICAgICAgIHJldHVybiBTY3JvbGxPbk1haW5UaHJlYWQ7CisKKyAgICAg
ICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllckZvckNvbnRl
bnRMYXllcihsYXllckltcGwpOworICAgICAgICBpZiAoIXNjcm9sbExheWVySW1wbCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNjcm9sbFN0YXR1cyBzdGF0dXMgPSBzY3JvbGxM
YXllckltcGwtPnRyeVNjcm9sbCh2aWV3cG9ydFBvaW50LCB0eXBlKTsKKworICAgICAgICAvLyBJ
ZiBhbnkgbGF5ZXIgd2FudHMgdG8gZGl2ZXJ0IHRoZSBzY3JvbGwgZXZlbnQgdG8gdGhlIG1haW4g
dGhyZWFkLCBhYm9ydC4KKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTY3JvbGxPbk1haW5UaHJlYWQp
CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsT25NYWluVGhyZWFkOworCisgICAgICAgIGlmIChz
dGF0dXMgPT0gU2Nyb2xsU3RhcnRlZCAmJiAhcG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGwp
CisgICAgICAgICAgICBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCA9IHNjcm9sbExheWVy
SW1wbDsKICAgICB9CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAgICBpZiAocG90ZW50
aWFsbHlTY3JvbGxpbmdMYXllckltcGwpIHsKKyAgICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdM
YXllckltcGwgPSBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbDsKKyAgICAgICAgcmV0dXJu
IFNjcm9sbFN0YXJ0ZWQ7CisgICAgfQorICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOwogfQogCiB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIs
IHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX2N1cnJl
bnRseVNjcm9sbGluZ0xheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zY3JvbGxM
YXllckltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHND
b21taXRPbkltcGxUaHJlYWQoKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxU
aHJlYWQoKTsKKyAgICBGbG9hdFNpemUgcGVuZGluZ0RlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBw
ZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOworCisgICAgZm9yIChDQ0xh
eWVySW1wbCogbGF5ZXJJbXBsID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7IGxheWVy
SW1wbCAmJiAhcGVuZGluZ0RlbHRhLmlzWmVybygpOyBsYXllckltcGwgPSBsYXllckltcGwtPnBh
cmVudCgpKSB7CisgICAgICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgRmxvYXRTaXplIHByZXZpb3VzRGVsdGEobGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShwZW5kaW5nRGVs
dGEpOworICAgICAgICAvLyBSZXNldCB0aGUgcGVuZGluZyBzY3JvbGwgZGVsdGEgdG8gemVybyBp
ZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8gbW92ZSBhbG9uZyB0aGUgcmVxdWVzdGVkCisgICAgICAg
IC8vIGF4aXMuIFRoaXMgaXMgdG8gZW5zdXJlIGl0IGlzIHBvc3NpYmxlIHRvIHNjcm9sbCBleGFj
dGx5IHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEKKyAgICAgICAgLy8gc2Nyb2xsIGFyZWEg
cmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZvciBkaWFnb25hbCBzY3JvbGxzIHRoaXMg
YWxzbyBhdm9pZHMgYXBwbHlpbmcKKyAgICAgICAgLy8gdGhlIHNjcm9sbCBvbiBvbmUgYXhpcyB0
byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLndpZHRoKCkgIT0g
bGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLndpZHRoKCkpCisgICAgICAgICAgICBwZW5kaW5nRGVs
dGEuc2V0V2lkdGgoMCk7CisgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLmhlaWdodCgpICE9IGxh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5oZWlnaHQoKSkKKyAgICAgICAgICAgIHBlbmRpbmdEZWx0
YS5zZXRIZWlnaHQoMCk7CisgICAgfQorCisgICAgaWYgKCFzY3JvbGxEZWx0YS5pc1plcm8oKSAm
JiBwZW5kaW5nRGVsdGEuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0Nv
bW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbklt
cGxUaHJlYWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xs
RW5kKCkKIHsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisgICAgbV9z
Y3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSA9IC0xOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUJlZ2luKCkKQEAgLTcyMyw3ICs4MzAsNyBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCBtYWduaWZ5RGVs
dGEsCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVy
ZVVwZGF0ZSIsIHRoaXMsIDApOwogCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBp
ZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
cHJldmlvdXNQaW5jaEFuY2hvciA9PSBJbnRQb2ludDo6emVybygpKQpAQCAtNzM4LDcgKzg0NSw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0IG1h
Z25pZnlEZWx0YSwKIAogICAgIG1fcHJldmlvdXNQaW5jaEFuY2hvciA9IGFuY2hvcjsKIAotICAg
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShyb3VuZGVkSW50U2l6ZShtb3ZlKSk7CisgICAg
bV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShyb3VuZGVkSW50U2l6ZShtb3ZlKSk7CiAg
ICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiAgICAgbV9jbGllbnQt
PnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CkBAIC03NjAsNyArODY3LDcgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlRG91YmxlVGFwWm9vbURlbHRhcyhDQ1Njcm9s
bEFuZFNjYWxlU2V0KiBzY3JvbGwKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRl
UGluY2hab29tRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8pCiB7Ci0gICAg
aWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT25seSBzZW5kIGZha2Ugc2Nyb2xsL3pvb20gZGVs
dGFzIGlmIHdlJ3JlIHBpbmNoIHpvb21pbmcgb3V0IGJ5IGEKQEAgLTc3Miw3ICs4NzksNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMoQ0NTY3JvbGxB
bmRTY2FsZVNldCogc2Nyb2xsSW5mbwogCiAgICAgLy8gQ29tcHV0ZSB3aGVyZSB0aGUgc2Nyb2xs
IG9mZnNldC9wYWdlIHNjYWxlIHdvdWxkIGJlIGlmIGZ1bGx5IHBpbmNoLXpvb21lZAogICAgIC8v
IG91dCBmcm9tIHRoZSBhbmNob3IgcG9pbnQuCi0gICAgSW50U2l6ZSBzY3JvbGxCZWdpbiA9IGZs
b29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3Jv
bGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsQmVnaW4gPSBm
bG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBt
X3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwogICAgIHNjcm9sbEJlZ2luLnNj
YWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlQmVnaW4gPSBtX3BhZ2VTY2Fs
ZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGFUb1NlbmQgPSBt
X21pblBhZ2VTY2FsZSAvIG1fcGFnZVNjYWxlOwpAQCAtNzkyLDIxICs4OTksNDEgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKENDU2Nyb2xsQW5kU2Nh
bGVTZXQqIHNjcm9sbEluZm8KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjptYWtlU2Nyb2xs
QW5kU2NhbGVTZXQoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgY29uc3QgSW50U2l6
ZSYgc2Nyb2xsT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExh
eWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsK
LSAgICBzY3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAgIHNjcm9s
bC5zY3JvbGxEZWx0YSA9IHNjcm9sbE9mZnNldCAtIHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+
c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgc2Nyb2xsLmxheWVySWQgPSBtX3Jvb3RTY3JvbGxMYXll
ckltcGwtPmlkKCk7CisgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsT2Zmc2V0IC0gdG9T
aXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgc2Nyb2xs
SW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0
U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7CisgICAgbV9yb290U2Nyb2xsTGF5
ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKICAgICBtX3Nl
bnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gcGFnZVNjYWxl
IC8gbV9wYWdlU2NhbGU7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbGxlY3RTY3JvbGxEZWx0YXMoQ0NT
Y3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sK
KyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFsYXllcklt
cGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkpIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0
YSA9IGZsb29yZWRJbnRTaXplKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7CisgICAgICAgIHNj
cm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgpOworICAgICAgICBzY3JvbGwuc2Nyb2xsRGVs
dGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Ny
b2xsKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEp
OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJl
bigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8s
IGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisKIFBhc3NPd25QdHI8Q0NTY3Jv
bGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygp
CiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBhZG9wdFB0
cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBib29sIGRpZE1vdmUgPSBtX3Njcm9s
bExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygp
IHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7CisgICAgY29sbGVjdFNjcm9sbERlbHRhcyhz
Y3JvbGxJbmZvLmdldCgpLCBtX3Jvb3RMYXllckltcGwuZ2V0KCkpOworCisgICAgYm9vbCBkaWRN
b3ZlID0gc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCkgfHwgbV9wYWdlU2NhbGVEZWx0YSAhPSAx
OwogICAgIGlmICghZGlkTW92ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2ZSB8fCBtX3BhZ2VTY2Fs
ZUFuaW1hdGlvbikgewogICAgICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8t
PnBhZ2VTY2FsZURlbHRhID0gMTsKICAgICAgICAgaWYgKG1fcGluY2hHZXN0dXJlQWN0aXZlKQpA
QCAtODE4LDE0ICs5NDUsNiBAQCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5
ZXJUcmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogCiAgICAgbV9zZW50UGFnZVNj
YWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IG1fcGFnZVNjYWxlRGVsdGE7
CiAKLSAgICAvLyBGSVhNRTogdHJhY2sgc2Nyb2xscyBmcm9tIGxheWVycyBvdGhlciB0aGFuIHRo
ZSByb290Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9s
bDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAgIHNj
cm9sbC5zY3JvbGxEZWx0YSA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpKTsKLSAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOwotCi0g
ICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVs
dGEpOwotCiAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgpOwogfQogCkBAIC04NDAsMTUg
Kzk1OSwxNSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldEZ1bGxSb290TGF5ZXJEYW1h
Z2UoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVQYWdlU2NhbGUoZG91Ymxl
IG1vbm90b25pY1RpbWUpCiB7Ci0gICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbiB8fCAhbV9z
Y3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbiB8fCAhbV9yb290
U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNjcm9sbFRv
dGFsID0gZmxvb3JlZEludFNpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkg
KyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IGZsb29yZWRJbnRTaXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRp
b24oKSArIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAKICAgICBzZXRQ
YWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+cGFnZVNjYWxlQXRUaW1lKG1vbm90
b25pY1RpbWUpIC8gbV9wYWdlU2NhbGUpOwogICAgIEludFNpemUgbmV4dFNjcm9sbCA9IG1fcGFn
ZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZzZXRBdFRpbWUobW9ub3RvbmljVGltZSk7CiAgICAg
bmV4dFNjcm9sbC5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7Ci0gICAgbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwgLSBzY3JvbGxUb3RhbCk7CisgICAgbV9yb290U2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOwogICAgIG1f
Y2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogCiAgICAgaWYgKG1fcGFnZVNj
YWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlvbkNvbXBsZXRlQXRUaW1lKG1vbm90b25pY1RpbWUpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYzc0MGE2NjIwMmY0YmQw
ZjFiM2QwNjA2ZDNhZWJhOTQ4OWQyMDA5Mi4uOTg1Y2JjZTlhMDg1NWIwNWVlYTVlODE1NDFmM2My
N2YzN2FhMDllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTMy
LDEwICsxMzIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcmVhZGJhY2sodm9pZCogcGl4ZWxzLCBj
b25zdCBJbnRSZWN0Jik7CiAKICAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzT3duUHRyPENDTGF5
ZXJJbXBsPik7Ci0gICAgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcmVsZWFzZVJvb3RMYXllcigp
IHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5yZWxlYXNlKCk7IH0KKyAgICBQYXNzT3duUHRyPEND
TGF5ZXJJbXBsPiByZWxlYXNlUm9vdExheWVyKCk7CiAgICAgQ0NMYXllckltcGwqIHJvb3RMYXll
cigpIHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5nZXQoKTsgfQogCi0gICAgQ0NMYXllckltcGwq
IHNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllckltcGw7IH0KKyAgICBD
Q0xheWVySW1wbCogcm9vdFNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290U2Nyb2xs
TGF5ZXJJbXBsOyB9CiAKICAgICBib29sIHZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2li
bGU7IH0KICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CkBAIC0xOTIsOCArMTkyLDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIG1ha2VTY3JvbGxBbmRTY2FsZVNldChDQ1Njcm9sbEFuZFNjYWxlU2V0
KiBzY3JvbGxJbmZvLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQsIGZsb2F0IHBhZ2VTY2Fs
ZSk7CiAKICAgICB2b2lkIHNldFBhZ2VTY2FsZURlbHRhKGZsb2F0KTsKLSAgICB2b2lkIGFwcGx5
UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCk7Ci0gICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9u
KCk7CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290
RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAK
QEAgLTIwNiwxMyArMjA0LDE2IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgp
IGNvbnN0OwogICAgIHZvaWQgc2VuZERpZExvc2VDb250ZXh0UmVjdXJzaXZlKENDTGF5ZXJJbXBs
Kik7CiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShD
Q0xheWVySW1wbCopOworICAgIGJvb2wgZW5zdXJlTW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXll
ckxpc3QoKTsKIAogICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50LCBjb25zdCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgUmVmUHRyPENDR3JhcGhp
Y3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPENDUmVuZGVyZXI+IG1fbGF5ZXJSZW5k
ZXJlcjsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKLSAgICBDQ0xh
eWVySW1wbCogbV9zY3JvbGxMYXllckltcGw7CisgICAgQ0NMYXllckltcGwqIG1fcm9vdFNjcm9s
bExheWVySW1wbDsKKyAgICBDQ0xheWVySW1wbCogbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllcklt
cGw7CisgICAgaW50IG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1RyZWU7CiAgICAgQ0NT
ZXR0aW5ncyBtX3NldHRpbmdzOwogICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgSW50
U2l6ZSBtX2RldmljZVZpZXdwb3J0U2l6ZTsKQEAgLTI0Myw2ICsyNDQsOSBAQCBwcml2YXRlOgog
CiAgICAgRmxvYXRSZWN0IG1fcm9vdFNjaXNzb3JSZWN0OwogCisgICAgLy8gTGlzdCBvZiB2aXNp
YmxlIGxheWVycyBpbiB0aGUgbW9zdCByZWNlbnQgZnJhbWUuIFVzZWQgZm9yIGlucHV0IGV2ZW50
IGhpdCB0ZXN0aW5nLgorICAgIENDTGF5ZXJMaXN0IG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisKICAgICBPd25QdHI8Q0NGcmFtZVJhdGVDb3VudGVyPiBtX2Zwc0NvdW50ZXI7
CiAgICAgT3duUHRyPENDRGVidWdSZWN0SGlzdG9yeT4gbV9kZWJ1Z1JlY3RIaXN0b3J5OwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAppbmRleCA4ZTBjNjEzYTQyYTM5NjY3ZWE2M2U2NWU5MjVh
MjJhN2EzNGIxNDlkLi42M2JmMjcwZmUwMjI2NDM2MGY0MjdhMmUyM2M2MjhjYWVhMTEyYzk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGwuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGw6OkV2ZW50RGlzcG9zaXRpb24gV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw6OmgKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBEcm9wRXZl
bnQsIGJ1dCBpbiBjYXNlcyB3aGVyZSB3ZSBmYWlsIHRvIHByb3Blcmx5IHN5bmMgc2Nyb2xsYWJp
bGl0eSBpdCdzIHNhZmVyIHRvIHNlbmQgdGhlCiAgICAgICAgICAgICAvLyBldmVudCB0byB0aGUg
bWFpbiB0aHJlYWQuIENoYW5nZSBiYWNrIHRvIERyb3BFdmVudCBvbmNlIHdlIGhhdmUgc3luY2hy
b25pemF0aW9uIGJ1Z3Mgc29ydGVkIG91dC4KICAgICAgICAgICAgIHJldHVybiBEaWROb3RIYW5k
bGU7IAotICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6Cisg
ICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDoKICAg
ICAgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYg
KGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luKSB7CkBAIC0y
MDYsNyArMjA2LDcgQEAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OkV2ZW50RGlzcG9z
aXRpb24gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmgKICAgICAgICAgY2FzZSBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKICAgICAgICAgICAgIG1fZ2VzdHVyZVNj
cm9sbFN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKLSAgICAg
ICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgorICAgICAgICBjYXNl
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ6CiAgICAgICAgICAgICBy
ZXR1cm4gRGlkTm90SGFuZGxlOwogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJZ25vcmVkOgogICAgICAgICAgICAgcmV0dXJuIERyb3BFdmVudDsKQEAgLTI3OCw4ICsy
NzgsOCBAQCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aAogICAgICAgICBtX2lucHV0SGFuZGxlckNs
aWVudC0+c2NoZWR1bGVBbmltYXRpb24oKTsKICAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAg
ICB9Ci0gICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOiB7Ci0gICAg
ICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIsICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nOjpmYWlsZWQiKTsKKyAgICBjYXNlIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ6IHsKKyAgICAgICAgVFJBQ0VfRVZFTlRfSU5T
VEFOVDAoImNjIiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJl
Rmxpbmc6OnNjcm9sbE9uTWFpblRocmVhZCIpOwogICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxl
OwogICAgIH0KICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwu
Y3BwCmluZGV4IDIyMmZhMmZhNzY2NTIwMjI4MDhjMTRhY2U5MTE0MTQxYmE0N2VkNWQuLmQ4ODIx
NTAzYTkwNTY1N2VmODA4M2UzZjIzMmRiNTQzZGRiYTE1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC02MSw0ICs2MSw4
IEBAIHZvaWQgV2ViQ29udGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRl
eHQmIGdjLCBjb25zdCBJbnRSZWN0JiBjbGlwCiAgICAgbV9jb250ZW50Q2xpZW50LT5wYWludENv
bnRlbnRzKGNhbnZhcywgV2ViUmVjdChjbGlwKSk7CiB9CiAKK3ZvaWQgV2ViQ29udGVudExheWVy
SW1wbDo6ZGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQoreworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuaAppbmRleCBhMDZjZjkwODI5MWZhZmVhNjIzY2JiZTc1N2FjZTI2OGJmNTJk
ZDA4Li4yNjk4Mjc4Y2ViOTAxYmUzMzc5YzRjOTU0Y2IyNzg2MjBkN2VjYWY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCkBAIC00Miw2
ICs0Miw3IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxl
bWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwg
dm9pZCBkaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCiAgICAgV2ViQ29udGVu
dExheWVyQ2xpZW50KiBtX2NvbnRlbnRDbGllbnQ7CiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCmluZGV4IDFkMDY5YTViZTNhYjU0OWYwZGYxODYxOTJkYmJlZTk5
NTZjODNlMTguLjA1N2MwNGQ5ZWY3OTU3MzUxMjFmYWFhZDVjNzk0MWNmOWQzMzY3YTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcApAQCAtMjI2OSw2ICsyMjY5LDI4IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZlczNkRm9yRmxh
dHRlbmluCiAgICAgRVhQRUNUX0VRKGNoaWxkMS0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dFsxXS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQoKSk7CiB9CiAKK1RFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5U3VidHJlZVNlYXJjaCkKK3sKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1hc2tMYXllciA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhTGF5ZXIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldFJlcGxpY2FMYXll
cihyZXBsaWNhTGF5ZXIuZ2V0KCkpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLmdl
dCgpKTsKKyAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1hc2tMYXllci5nZXQoKSk7CisgICAgcm9v
dC0+YWRkQ2hpbGQoY2hpbGQuZ2V0KCkpOworCisgICAgaW50IG5vbmV4aXN0ZW50SWQgPSAtMTsK
KyAgICBFWFBFQ1RfRVEocm9vdCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1
YnRyZWUocm9vdC5nZXQoKSwgcm9vdC0+aWQoKSkpOworICAgIEVYUEVDVF9FUShjaGlsZCwgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgY2hpbGQt
PmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgZ3JhbmRDaGlsZC0+aWQoKSkpOworICAg
IEVYUEVDVF9FUShtYXNrTGF5ZXIsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5T
dWJ0cmVlKHJvb3QuZ2V0KCksIG1hc2tMYXllci0+aWQoKSkpOworICAgIEVYUEVDVF9FUShyZXBs
aWNhTGF5ZXIsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3Qu
Z2V0KCksIHJlcGxpY2FMYXllci0+aWQoKSkpOworICAgIEVYUEVDVF9FUSgwLCBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShyb290LmdldCgpLCBub25leGlzdGVudElk
KSk7Cit9CisKIC8vIEZJWE1FOgogLy8gY29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NDIKIC8vICAtIGFkZCBhIHRlc3QgdG8gdmVy
aWZ5IGNsaXBwaW5nIHRoYXQgY2hhbmdlcyB0aGUgImNlbnRlciBwb2ludCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5j
cHAKaW5kZXggMTY1N2MzMzQxODkxMzAzY2VjMzNlNjA5ZGNiZDc5ZTQxYjJjYzc5YS4uZTE0YjU3
MmNkNjdjNmJjNzQ2OTMyMDkxOGJkMTUyYjI2ZWM5NjU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAg
LTEzNiw2ICsxMzYsMjYgQEAgcHVibGljOgogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5
ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5
ZXJJbXBsPiBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoaW50IGlkLCBjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gbGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKGlkKTsKKyAgICAgICAgbGF5ZXIt
PnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7CisgICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGxheWVy
LT5zZXRCb3VuZHMoc2l6ZSk7CisgICAgICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJ
bnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSk7CisgICAgICAgIHJl
dHVybiBsYXllci5yZWxlYXNlKCk7CisgICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlckFuZERyYXdGcmFtZSgpCisgICAgeworICAgICAgICBtX2hvc3RJbXBsLT5pbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihjcmVhdGVDb250ZXh0KCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOwor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgICAgIEVY
UEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICAgICAgbV9o
b3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgICAgIG1faG9zdEltcGwtPmRpZERyYXdB
bGxMYXllcnMoZnJhbWUpOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIFBhc3NSZWZQdHI8Q0NH
cmFwaGljc0NvbnRleHQ+IGNyZWF0ZUNvbnRleHQoKQogICAgIHsKQEAgLTIyMSwxMCArMjQxLDEy
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0
QW5kUmVkcmF3KQogewogICAgIHsKICAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICAgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVj
dChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgICAgIHJvb3QtPnNldFNjcm9sbGFibGUo
dHJ1ZSk7CiAgICAgICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsK
ICAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwog
ICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgICAg
ICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogICAgIH0KIAogICAgIEVY
UEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQp
OwpAQCAtMjM0LDIwICsyNTYsNzUgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxSb290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1
ZXN0Q29tbWl0KTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxX
aXRob3V0Um9vdExheWVyKQoreworICAgIC8vIFdlIHNob3VsZCBub3QgY3Jhc2ggd2hlbiB0cnlp
bmcgdG8gc2Nyb2xsIGFuIGVtcHR5IGxheWVyIHRyZWUuCisgICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hl
ZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7Cit9CisKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcmVwbGFjZVRyZWVXaGlsZVNjcm9sbGluZykKK3sKKyAg
ICBpbnQgbGF5ZXJJZCA9IDc7CisgICAgeworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKGxheWVySWQpOworICAgICAgICByb290LT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKKyAgICAgICAgcm9vdC0+c2V0
U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50
U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5y
ZWxlYXNlKCkpOworICAgICAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgp
OworICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBub3QgY3Jhc2ggaWYgdGhlIHRyZWUgaXMgcmVw
bGFjZWQgd2hpbGUgd2UgYXJlIHNjcm9sbGluZy4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5y
ZWxlYXNlUm9vdExheWVyKCk7CisKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUobGF5ZXJJZCk7CisgICAgICAgIHJvb3QtPnNldFZp
c2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOworICAgICAgICByb290LT5z
ZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJ
bnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290
LnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgLy8gV2Ugc2hvdWxkIHN0aWxsIGJlIHNjcm9sbGlu
ZywgYmVjYXVzZSB0aGUgc2Nyb2xsZWQgbGF5ZXIgYWxzbyBleGlzdHMgaW4gdGhlIG5ldyB0cmVl
LgorICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIG1faG9zdEltcGwtPnNjcm9s
bEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBPd25Q
dHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NT
Y3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgbGF5ZXJJZCwg
c2Nyb2xsRGVsdGEpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGNsZWFy
Um9vdFJlbmRlclN1cmZhY2VBbmRTY3JvbGwpCit7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKHRy
dWUpOworICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsK
KyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIGluaXRp
YWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBXZSBzaG91bGQgYmUg
YWJsZSB0byBzY3JvbGwgZXZlbiBpZiB0aGUgcm9vdCBsYXllciBsb3NlcyBpdHMgcmVuZGVyIHN1
cmZhY2UgYWZ0ZXIgdGhlIG1vc3QKKyAgICAvLyByZWNlbnQgcmVuZGVyLgorICAgIG1faG9zdElt
cGwtPnJvb3RMYXllcigpLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKK30KKwogVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiB7CiAgICAg
ewogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDApOworICAgICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAw
LCAxMDApKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9v
dC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgICAgICByb290LT5zZXRN
YXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgICAgIG1faG9zdEltcGwt
PnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgICAgIGluaXRpYWxpemVMYXllclJl
bmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgfQogICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9o
b3N0SW1wbC0+cm9vdExheWVyKCk7CiAKICAgICByb290LT5zZXRIYXZlV2hlZWxFdmVudEhhbmRs
ZXJzKHRydWUpOwogICAgIC8vIFdpdGggcmVnaXN0ZXJlZCBldmVudCBoYW5kbGVycywgd2hlZWwg
c2Nyb2xscyBoYXZlIHRvIGdvIHRvIHRoZSBtYWluIHRocmVhZC4KLSAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworICAgIEVYUEVD
VF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVh
ZCk7CiAKICAgICAvLyBCdXQgZ2VzdHVyZSBzY3JvbGxzIGNhbiBzdGlsbCBiZSBoYW5kbGVkLgog
ICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7CkBAIC0yNTYsMjYgKzMzMywzMiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHdoZWVsRXZlbnRIYW5kbGVycykKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKQogewogICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVy
UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAgICAg
cm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIHJvb3Qt
PnNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZCh0cnVlKTsKICAgICBtX2hvc3RJbXBsLT5zZXRS
b290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7Ci0gICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6R2Vz
dHVyZSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworICAgIGluaXRpYWxp
emVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1w
bC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVl
bCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOworICAgIEVYUEVD
VF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhy
ZWFkKTsKIH0KIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbkJhc2ljKQogewogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0
KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICBy
b290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAgICAgcm9vdC0+c2V0TWF4
U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNldE5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKEludFJlY3QoMCwgMCwgNTAsIDUwKSk7CiAgICAgbV9ob3N0SW1wbC0+
c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJl
ckFuZERyYXdGcmFtZSgpOworCiAgICAgLy8gQWxsIHNjcm9sbCB0eXBlcyBpbnNpZGUgdGhlIG5v
bi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uIHNob3VsZCBmYWlsLgotICAgIEVYUEVDVF9FUShtX2hv
c3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgyNSwgMjUpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKLSAgICBFWFBF
Q1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVk
KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbE9uTWFpblRocmVhZCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2lu
KEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7CiAKICAgICAvLyBBbGwgc2Nyb2xs
IHR5cGVzIG91dHNpZGUgdGhpcyByZWdpb24gc2hvdWxkIHN1Y2NlZWQuCiAgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDc1LCA3NSksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKQEAg
LTI4OSwxNSArMzcyLDE1IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFz
dFNjcm9sbGFibGVSZWdpb25CYXNpYykKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
bm9uRmFzdFNjcm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQogewogICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0Qm91bmRz
KEludFNpemUoMSwgMSkpOworICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgcm9v
dC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwogICAgIHJvb3QtPnNldE1heFNj
cm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKICAgICByb290LT5zZXROb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbihJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOwogICAgIHJvb3QtPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoLTI1LCAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJv
b3QucmVsZWFzZSgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7
Ci0gICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOwotICAg
IG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOyAvLyBVcGRhdGUgZHJhdyB0cmFuc2Zvcm1z
IHNvIHdlIGNhbiBjb3JyZWN0bHkgbWFwIHBvaW50cyBpbnRvIGxheWVyIHNwYWNlLgorICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKICAgICAvLyBUaGlzIHBvaW50
IHdvdWxkIGZhbGwgaW50byB0aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdpb24gZXhjZXB0IHRo
YXQgd2UndmUgbW92ZWQgdGhlIGxheWVyIGRvd24gYnkgMjUgcGl4ZWxzLgogICAgIEVYUEVDVF9F
UShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg0MCwgMTApLCBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBA
IC0zMDUsMTUgKzM4OCwxNiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIG5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uV2l0aE9mZnNldCkKICAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQo
KTsKIAogICAgIC8vIFRoaXMgcG9pbnQgaXMgc3RpbGwgaW5zaWRlIHRoZSBub24tZmFzdCByZWdp
b24uCi0gICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDEwLCAx
MCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxGYWlsZWQpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQ
b2ludCgxMCwgMTApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKTsKIH0KIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBwaW5jaEdlc3R1cmUpCiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xh
eWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXpl
KEludFNpemUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJh
bWUoKTsKIAotICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnNjcm9s
bExheWVyKCk7CisgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9v
dFNjcm9sbExheWVyKCk7CiAgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKIAogICAgIGNvbnN0IGZs
b2F0IG1pblBhZ2VTY2FsZSA9IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKQEAgLTM5Miw4ICs0NzYs
OSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikK
IHsKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsK
ICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1MCwgNTApKTsKKyAgICBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogCi0gICAgQ0NMYXllckltcGwq
IHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+c2Nyb2xsTGF5ZXIoKTsKKyAgICBDQ0xheWVySW1w
bCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290U2Nyb2xsTGF5ZXIoKTsKICAgICBBU1NF
UlQoc2Nyb2xsTGF5ZXIpOwogCiAgICAgY29uc3QgZmxvYXQgbWluUGFnZVNjYWxlID0gMC41LCBt
YXhQYWdlU2NhbGUgPSA0OwpAQCAtNjEyLDYgKzY5NywyOTkgQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBwcmVwYXJlVG9EcmF3RmFpbHNXaGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJi
b2FyZCkKICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKIH0KIAorVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKK3sKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJv
b3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihy
b290LnJlbGVhc2UoKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUo
KTsKKworICAgIC8vIFNjcm9sbCBldmVudCBpcyBpZ25vcmVkIGJlY2F1c2UgbGF5ZXIgaXMgbm90
IHNjcm9sbGFibGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJh
dyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QpCit7CisgICAg
Ly8gVGVzdCB0aGUgY29uZmlndXJhdGlvbiB3aGVyZSBhIG5vbi1jb21wb3NpdGVkIHJvb3QgbGF5
ZXIgaXMgZW1iZWRkZWQgaW4gYQorICAgIC8vIHNjcm9sbGFibGUgb3V0ZXIgbGF5ZXIuCisgICAg
SW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBj
b250ZW50TGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIGNvbnRlbnRMYXllci0+
c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFBvc2l0aW9uKEludFBvaW50
KDUsIDUpKTsKKyAgICBjb250ZW50TGF5ZXItPnNldEJvdW5kcyhzdXJmYWNlU2l6ZSk7CisgICAg
Y29udGVudExheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoc3VyZmFjZVNpemUud2lkdGgo
KSAqIDIsIHN1cmZhY2VTaXplLmhlaWdodCgpICogMikpOworCisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBzY3JvbGxMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgc2Nyb2xsTGF5
ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgc2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBv
c2l0aW9uKHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+YWRkQ2hpbGQoY29udGVudExh
eWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsTGF5
ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNp
emUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBF
WFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVk
KTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CisgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0UmVkcmF3KTsK
KyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRBbmRSZWRyYXcpCit7Cisg
ICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBs
LT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRl
cmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVn
aW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJ
bnRTaXplKDAsIDEwKSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNU
X1RSVUUobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RD
b21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nl
c0NoaWxkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPmFk
ZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNl
U2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFs
aXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8gU2Nyb2xsIGV2ZW50IGlz
IGlnbm9yZWQgYmVjYXVzZSB0aGUgaW5wdXQgY29vcmRpbmF0ZSBpcyBvdXRzaWRlIHRoZSBsYXll
ciBib3VuZGFyaWVzLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQ
b2ludCgxNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVk
cmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNrZmFjaW5nQ2hpbGQpCit7
CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJm
YWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsK
KworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICBtYXRyaXgucm90YXRl
M2QoMTgwLCAwLCAwKTsKKyAgICBjaGlsZC0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgY2hp
bGQtPnNldERvdWJsZVNpZGVkKGZhbHNlKTsKKworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJl
bGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsK
KyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8gU2Ny
b2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgc2Nyb2xsYWJsZSBsYXllciBpcyBub3Qg
ZmFjaW5nIHRoZSB2aWV3ZXIgYW5kIHRoZXJlIGlzCisgICAgLy8gbm90aGluZyBzY3JvbGxhYmxl
IGJlaGluZCBpdC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3
KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCbG9ja2VkQnlDb250ZW50TGF5ZXIpCit7Cisg
ICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4g
Y29udGVudExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSks
IHN1cmZhY2VTaXplKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFNob3VsZFNjcm9sbE9uTWFpblRo
cmVhZCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOworCisg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IGNyZWF0ZVNjcm9sbGFibGVMYXll
cigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgc2Nyb2xsTGF5ZXItPmFk
ZENoaWxkKGNvbnRlbnRMYXllci5yZWxlYXNlKCkpOworCisgICAgbV9ob3N0SW1wbC0+c2V0Um9v
dExheWVyKHNjcm9sbExheWVyLnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3Bv
cnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdG
cmFtZSgpOworCisgICAgLy8gU2Nyb2xsaW5nIGZhaWxzIGJlY2F1c2UgdGhlIGNvbnRlbnQgbGF5
ZXIgaXMgYXNraW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBFWFBF
Q1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJl
YWQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RBbmRD
aGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgx
MCwgMTApOworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwor
ICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVs
dGEoMCwgMTApOworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7
CisgICAgSW50U2l6ZSBleHBlY3RlZE1heFNjcm9sbChtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+
bWF4U2Nyb2xsUG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJl
Z2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnko
c2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworCisgICAgLy8gU2V0
IG5ldyBwYWdlIHNjYWxlIGZyb20gbWFpbiB0aHJlYWQuCisgICAgbV9ob3N0SW1wbC0+c2V0UGFn
ZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwgcGFnZVNjYWxlLCBwYWdlU2NhbGUpOwor
CisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgorICAg
IGV4cGVjdGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAgICBPd25QdHI8Q0NTY3Jv
bGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0
YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMCwgZXhwZWN0ZWRT
Y3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBhbHNvIGhhdmUg
YmVlbiB1cGRhdGVkLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4
U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ug
c2NhbGUgZGVsdGEgcmVtYWlucyBjb25zdGFudCBiZWNhdXNlIHRoZSBpbXBsIHRocmVhZCBkaWQg
bm90IHNjYWxlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+cGFnZVNj
YWxlRGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Ny
b2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1
cmZhY2VTaXplKDEwLCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1
LCA1KSwgc3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJl
bGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsK
KyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMSwgMSwgcGFnZVNj
YWxlKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAg
SW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBleHBlY3RlZFNjcm9sbERl
bHRhKHNjcm9sbERlbHRhKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9zdElt
cGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hv
c3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5k
KCk7CisKKyAgICAvLyBTZXQgbmV3IHBhZ2Ugc2NhbGUgb24gaW1wbCB0aHJlYWQgYnkgcGluY2hp
bmcuCisgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlQmVnaW4oKTsKKyAgICBtX2hvc3RJbXBs
LT5waW5jaEdlc3R1cmVVcGRhdGUocGFnZVNjYWxlLCBJbnRQb2ludCgpKTsKKyAgICBtX2hvc3RJ
bXBsLT5waW5jaEdlc3R1cmVFbmQoKTsKKworICAgIC8vIFRoZSBzY3JvbGwgZGVsdGEgaXMgbm90
IHNjYWxlZCBiZWNhdXNlIHRoZSBtYWluIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIE93blB0
cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Nj
cm9sbERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAwLCBl
eHBlY3RlZFNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIGFs
c28gaGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXll
cigpLT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9sbCk7CisKKyAgICAvLyBU
aGUgcGFnZSBzY2FsZSBkZWx0YSBzaG91bGQgbWF0Y2ggdGhlIG5ldyBzY2FsZSBvbiB0aGUgaW1w
bCBzaWRlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+cGFnZVNjYWxl
RGVsdGEoKSwgcGFnZVNjYWxlKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKK3sKKyAgICBJbnRT
aXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICAvLyBBbHNvIG1hcmsgdGhlIHJvb3Qgc2Nyb2xs
YWJsZSBzbyBpdCBiZWNvbWVzIHRoZSByb290IHNjcm9sbCBsYXllci4KKyAgICByb290LT5zZXRT
Y3JvbGxhYmxlKHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXll
cigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNl
dFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRT
aXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCkt
PmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsK
KyAgICBJbnRTaXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIEludFNp
emUgZXhwZWN0ZWRNYXhTY3JvbGwoY2hpbGQtPm1heFNjcm9sbFBvc2l0aW9uKCkpOworICAgIEVY
UEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQp
OworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBs
LT5zY3JvbGxFbmQoKTsKKworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7CisgICAgbV9ob3N0SW1w
bC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwgMSwgcGFnZVNjYWxlKTsK
KworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHNjcm9sbCBkZWx0YS4KKyAg
ICBleHBlY3RlZFNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZSk7CisgICAgT3duUHRyPENDU2Ny
b2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVs
dGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDEsIGV4cGVjdGVk
U2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgbm90IGhhdmUg
Y2hhbmdlZC4KKyAgICBFWFBFQ1RfRVEoY2hpbGQtPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVj
dGVkTWF4U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxlIGRlbHRhIHJlbWFpbnMgY29u
c3RhbnQgYmVjYXVzZSB0aGUgaW1wbCB0aHJlYWQgZGlkIG5vdCBzY2FsZS4KKyAgICBFWFBFQ1Rf
RVEoY2hpbGQtPnBhZ2VTY2FsZURlbHRhKCksIDEpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQmV5b25kTGltaXQpCit7CisgICAgLy8gU2Nyb2xsIGEg
Y2hpbGQgbGF5ZXIgYmV5b25kIGl0cyBtYXhpbXVtIHNjcm9sbCByYW5nZSBhbmQgbWFrZSBzdXJl
IHRoZQorICAgIC8vIHBhcmVudCBsYXllciBpcyBzY3JvbGxlZCBvbiB0aGUgYXhpcyBvbiB3aGlj
aCB0aGUgY2hpbGQgd2FzIHVuYWJsZSB0bworICAgIC8vIHNjcm9sbC4KKyAgICBJbnRTaXplIHN1
cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigy
LCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0U2Ny
b2xsUG9zaXRpb24oSW50UG9pbnQoMCwgNSkpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBj
aGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNl
U2l6ZSk7CisgICAgY2hpbGQtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDMsIDApKTsKKyAg
ICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworCisgICAgcm9vdC0+YWRk
Q2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6
ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICB7Cisg
ICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEoLTMsIC03KTsKKyAgICAgICAgRVhQRUNUX0VRKG1f
aG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAg
IG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+
c2Nyb2xsRW5kKCk7CisKKyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9s
bEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisKKyAgICAgICAgLy8g
VGhlIGdyYW5kIGNoaWxkIHNob3VsZCBoYXZlIHNjcm9sbGVkIHVwIHRvIGl0cyBsaW1pdC4KKyAg
ICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCktPmNoaWxk
cmVuKClbMF0uZ2V0KCk7CisgICAgICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQt
PmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZv
LmdldCgpLCBncmFuZENoaWxkLT5pZCgpLCBJbnRTaXplKDAsIC01KSk7CisKKyAgICAgICAgLy8g
VGhlIGNoaWxkIHNob3VsZCBoYXZlIG9ubHkgc2Nyb2xsZWQgb24gdGhlIG90aGVyIGF4aXMuCisg
ICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBjaGlsZC0+aWQoKSwgSW50
U2l6ZSgtMywgMCkpOworICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxFdmVudEJ1YmJsaW5nKQoreworICAgIC8vIFdoZW4gd2UgdHJ5IHRvIHNjcm9sbCBh
IG5vbi1zY3JvbGxhYmxlIGNoaWxkIGxheWVyLCB0aGUgc2Nyb2xsIGRlbHRhCisgICAgLy8gc2hv
dWxkIGJlIGFwcGxpZWQgdG8gb25lIG9mIGl0cyBhbmNlc3RvcnMgaWYgcG9zc2libGUuCisgICAg
SW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6
ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXll
cigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisKKyAgICBjaGlsZC0+c2V0U2Ny
b2xsYWJsZShmYWxzZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKwor
ICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0
YSgwLCA0KTsKKyAgICAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9s
bERlbHRhKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAgICAgT3du
UHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNz
U2Nyb2xsRGVsdGFzKCk7CisKKyAgICAgICAgLy8gT25seSB0aGUgcm9vdCBzaG91bGQgaGF2ZSBz
Y3JvbGxlZC4KKyAgICAgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAx
dSk7CisgICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBtX2hvc3RJbXBs
LT5yb290TGF5ZXIoKS0+aWQoKSwgc2Nyb2xsRGVsdGEpOworICAgIH0KK30KKworVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCZWZvcmVSZWRyYXcpCit7CisgICAgSW50U2l6
ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihjcmVh
dGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAg
ICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworCisgICAgLy8gRHJh
dyBvbmUgZnJhbWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVidWlsZCB0aGUgbGF5ZXIgdHJlZSB0
byBtaW1pYyBhIHRyZWUgc3luY2hyb25pemF0aW9uLgorICAgIGluaXRpYWxpemVMYXllclJlbmRl
cmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgbV9ob3N0SW1wbC0+cmVsZWFzZVJvb3RMYXllcigpOwor
ICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKworICAgIC8vIFNjcm9sbGluZyBzaG91bGQg
c3RpbGwgd29yayBldmVuIHRob3VnaCB3ZSBkaWQgbm90IGRyYXcgeWV0LgorICAgIEVYUEVDVF9F
UShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworfQor
CiBjbGFzcyBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3ND
b250ZXh0M0QgewogcHVibGljOgogICAgIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dCgpIDogbV9i
bGVuZChmYWxzZSkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBhYTI3ZTg4ZjdkYzNlZDgwODAyMTA2NDljY2Qw
YmUzMDAyN2NmMGJmLi4wODI1MWYyNzhiNzdiYTk1YjI0NDRmZjZjZjZhM2ZjZGI5N2IwZWU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAKQEAgLTE5MzQsNiArMTkzNCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgcHJlc2VydmVzM0QoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRTY3JvbGwoY29uc3QgSW50U2l6ZSYpIHsgfQogCiBwcml2YXRlOgogICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3QqIG1fdGVzdDsKQEAgLTIwMjEsNyArMjAyMiw4IEBAIGNsYXNzIE1vY2tDb250
ZW50TGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6
CiAgICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgTU9D
S19DT05TVF9NRVRIT0QwKHByZXNlcnZlczNELCBib29sKCkpOwotICAgIHZvaWQgcGFpbnRDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3QgSW50U2l6ZSYpIHsgfQogICAgIHZvaWQg
bm90aWZ5U3luY1JlcXVpcmVkKCkgeyB9CiB9OwogCkBAIC0yOTY5LDQgKzI5NzEsNzAgQEAgcHJp
dmF0ZToKIAogU0lOR0xFX0FORF9NVUxUSV9USFJFQURfVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRl
c3RMYXllckFkZGVkV2l0aEFuaW1hdGlvbikKIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6Cisg
ICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIoKQorICAgICAgICA6IG1fc2Ny
b2xsQW1vdW50KDIsIDEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRl
c3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50
U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXIgPSBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5
ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRT
Y3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJv
b3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RTY3JvbGxMYXllcik7CisgICAgICAgIG1fY2hpbGRM
YXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoJm1fbW9ja0RlbGVnYXRlKTsKKyAg
ICAgICAgbV9jaGlsZExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1MCwgNTApKTsKKyAgICAgICAg
bV9jaGlsZExheWVyLT5zZXRJc0RyYXdhYmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXIt
PnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+
YWRkQ2hpbGQobV9jaGlsZExheWVyKTsKKyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWlu
VGhyZWFkKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUo
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0KQorICAgIHsKKyAgICAgICAgSW50UG9p
bnQgcG9zaXRpb24gPSBtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAg
ICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xs
RGVsdGEpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUShtX3Jv
b3RTY3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGlm
ICghbV9sYXllclRyZWVIb3N0LT5mcmFtZU51bWJlcigpKQorICAgICAgICAgICAgRVhQRUNUX0VR
KG1fY2hpbGRMYXllci0+c2Nyb2xsUG9zaXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCks
IEludFBvaW50KCkgKyBtX3Njcm9sbEFtb3VudCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgewor
ICAgICAgICBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoaW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAg
ICAgICAgIGltcGwtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwt
PnNjcm9sbEVuZCgpOworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0g
MikKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0
ZXJUZXN0KCkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEludFNpemUgbV9z
Y3JvbGxBbW91bnQ7CisgICAgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIG1fbW9ja0RlbGVnYXRl
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NoaWxkTGF5ZXI7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0
KHRydWUpOworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRl
c3QuY3BwCmluZGV4IDkyZjAwNjE4NDE0Nzk1NmUxMDE5ZmM2OTAxNWY2MzllNDg5NGYzMzEuLmQ1
YjY4YTg2N2Y3ODJjYzY3ZmQxYjdiYzI5NjIwNTI5MzRmZDcwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsVGVzdC5jcHAKQEAgLTIwMiwxNCArMjAyLDE0IEBAIFRFU1RfRihXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxTdGFydGVkKQogICAgIG1f
aW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogfQogCi1URVNUX0YoV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlU2Nyb2xsRmFpbGVkKQorVEVT
VF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNjcm9sbE9uTWFp
blRocmVhZCkKIHsKICAgICAvLyBXZSBzaG91bGQgc2VuZCBhbGwgZXZlbnRzIHRvIHRoZSB3aWRn
ZXQgZm9yIHRoaXMgZ2VzdHVyZS4KICAgICBtX2V4cGVjdGVkRGlzcG9zaXRpb24gPSBEaWROb3RI
YW5kbGU7CiAgICAgVkVSSUZZX0FORF9SRVNFVF9NT0NLUygpOwogCiAgICAgRVhQRUNUX0NBTEwo
bV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKDo6dGVzdGluZzo6XywgOjp0
ZXN0aW5nOjpfKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5XaWxsT25jZSh0
ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFp
blRocmVhZCkpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNj
cm9sbEJlZ2luOwogICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUp
OwpAQCAtMzA2LDcgKzMwNiw3IEBAIFRFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bFRlc3QsIGdlc3R1cmVGbGluZ0ZhaWxlZCkKICAgICBWRVJJRllfQU5EX1JFU0VUX01PQ0tTKCk7
CiAKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVn
aW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCi0gICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpS
ZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkpOworICAg
ICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpKTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0OwogICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1
dEV2ZW50KGdlc3R1cmUpOwpAQCAtMzg3LDcgKzM4Nyw3IEBAIFRFU1RfRihXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVGbGluZ0FuaW1hdGVzKQogICAgIC8vIHRyYW5z
ZmVycmVkIHRvIHRoZSBtYWluIHRocmVhZC4KICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0
SGFuZGxlckNsaWVudCwgc2NoZWR1bGVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0NBTEwobV9t
b2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rpbmc6
Ol8pKQotICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6
OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFk
KSk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJ5
KHRlc3Rpbmc6Ol8pKS5UaW1lcygwKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFu
ZGxlckNsaWVudCwgc2Nyb2xsRW5kKCkpLlRpbWVzKDApOwogCkBAIC00NjksNyArNDY5LDcgQEAg
VEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZUZsaW5nVHJh
bnNmZXJSZXNldHMpCiAgICAgLy8gdHJhbnNmZXJyZWQgdG8gdGhlIG1haW4gdGhyZWFkLgogICAg
IEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY2hlZHVsZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xs
QmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCi0gICAgICAgIC5XaWxsT25jZSh0ZXN0aW5n
OjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkpOwor
ICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lu
cHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQnkodGVzdGluZzo6XykpLlRpbWVzKDApOwogICAgIEVY
UEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxFbmQoKSkuVGltZXMo
MCk7CiAKQEAgLTU0Niw3ICs1NDYsNyBAQCBURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGxUZXN0LCBnZXN0dXJlRmxpbmdUcmFuc2ZlclJlc2V0cykKICAgICAvLyBUaGVuIGFib3J0
IHRoZSBzZWNvbmQgZmxpbmcuCiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJD
bGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5w
dXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKLSAg
ICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4o
V2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCkpOwogICAg
IEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCeSh0ZXN0aW5n
OjpfKSkuVGltZXMoMCk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGll
bnQsIHNjcm9sbEVuZCgpKS5UaW1lcygwKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146873</attachid>
            <date>2012-06-11 10:45:48 -0700</date>
            <delta_ts>2012-06-13 12:07:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120611184546.patch</filename>
            <type>text/plain</type>
            <size>81873</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDY5MDk2YmE0NjMwY2Ri
OGE4OTE2MzAzOGQwZmIyYWE1ZWJmNzc4ZS4uNTU3ZDNiZjJlNThkMjJhMjRiMjVhNzViMmFlMTlk
MzI5MGUwMWFhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVu
IGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xs
ZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBBZGRlZCBuZXcgd2Via2l0X3VuaXRf
dGVzdHMgdG8gdmVyaWZ5IHNjcm9sbGluZyBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoQ29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpmaW5kTGF5ZXJJblN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllcklt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJsZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcm9s
bExheWVyRm9yQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0U2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDYt
MTEgIE1pY2hhZWwgQnLDvG5pbmcgIDxtaWNoYWVsLmJydW5pbmdAbm9raWEuY29tPgogCiAgICAg
ICAgIFtRdF1bV0syXSBDb21wdXRlIGFuZCBzZXQgY2FjaGUgY2FwYWNpdGllcyB1c2luZyB0aGUg
Y3VycmVudCBDYWNoZU1vZGVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDEwYTlkMTZj
N2FiYWU2YTZjZWYwYWFiODQ1MzJiNTE2ODU1MmQ3ZjguLjcwMjIyM2UzNmFlOWE2YzVhZTkxYjJh
OTczYmM5MmEwMzZmNmI3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzggQEAKKzIwMTItMDMtMjggIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgdGVzdHMgZm9yIHNjcm9sbGluZyBub24tcm9vdCBs
YXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXJJbXBsOjpkaWRTY3JvbGwpOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKiBzcmMvV2ViQ29udGVudExheWVySW1wbC5oOgorICAgICAgICAo
V2ViQ29udGVudExheWVySW1wbCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckltcGxUZXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkNDTGF5ZXJUcmVlSG9zdEltcGxUZXN0OjpjcmVhdGVTY3JvbGxhYmxlTGF5ZXIpOgorICAg
ICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVF9GKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdU
Rjo6VGVzdE9wYWNpdHlDaGFuZ2VMYXllckRlbGVnYXRlOjpkaWRTY3JvbGwpOgorICAgICAgICAo
V1RGOjpNb2NrQ29udGVudExheWVyRGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAo
V1RGOjpNb2NrQ29udGVudExheWVyRGVsZWdhdGU6OmRpZFNjcm9sbCk6CisgICAgICAgIChDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hp
bGRMYXllcik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xs
Q2hpbGRMYXllcjo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6ZHJhd0xheWVy
c09uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hp
bGRMYXllcjo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OlRFU1Rf
Rik6CisKIDIwMTItMDYtMTEgIE1pbiBRaW4gIDxxaW5taW5AZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBBZGRpbmcgYSBmbGFnIHRvIHNob3cgZnVsbHNjcmVlbiBtZWRpYSBjb250cm9scyBpbiBjaHJv
bWl1bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGFlOGQzMjA4YmZi
YWI4ZDdhZGU5ODJhN2Q4YTkzYTJkODNlZDdkYWYuLmExMGYzNTQyMTZkY2Y1ODdmZGVhZjM4MzVi
M2QxYzI2ZWIyNGI3ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTE0NSw1ICsxNDUsMTIgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0T3BhcXVlKGJv
b2wgb3BhcXVlKQogICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5zZXRPcGFxdWUob3BhcXVlKTsK
IH0KIAordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdGEpCit7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSAr
IHNjcm9sbERlbHRhKTsKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+
ZGlkU2Nyb2xsKHNjcm9sbERlbHRhKTsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGNjYzFl
MDA4YzA4OTZmMTdlMWU5MmM0OTc1NjVmN2NlZWEwNmRjM2IuLmFkM2VmYmNjMzM5MWM1YTk5YTVk
ZDVhZWJmMzNjMGI5MTIyYTU3ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApA
QCAtNDYsNiArNDYsNyBAQCBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwogY2xhc3MgQ29udGVu
dExheWVyRGVsZWdhdGUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIH5Db250ZW50TGF5ZXJEZWxlZ2F0ZSgpIHsgfQpAQCAtNjYsNiArNjcsOCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlKGJvb2wpIE9WRVJSSURFOwogCisgICAg
dmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKKwogcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKENvbnRlbnRMYXllckRlbGVn
YXRlKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggYjk5NDk5MTJj
YjczMGVjNTY0ZGEyM2EwN2I0ZjlkODY5ZjYwZmI0Ni4uYjhhODAxOGQ4ZDRiNzgxMWVjYjhhZWZm
N2UyNGVlNWIzMTJmYzQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAg
LTExOSw2ICsxMTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSBp
bXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xs
KGNvbnN0IEludFNpemUmKSBPVkVSUklERSB7IH0KIAogICAgIC8vIENDTGF5ZXJBbmltYXRpb25E
ZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZDM1
ZjU5MjE5ZmY3NDNjZmQ5ZGU2YmQ3OWViZTU5MWNhYzkyMWFhOS4uZmE3NTcxY2NhMDY2NTcxZjcx
ODk2ZWU0N2FlZmYxYzZlMDI4MTk0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM5Miw2
ICszOTIsMTQgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAordm9p
ZCBMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBtYXhT
Y3JvbGxQb3NpdGlvbikKK3sKKyAgICBpZiAobV9tYXhTY3JvbGxQb3NpdGlvbiA9PSBtYXhTY3Jv
bGxQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBt
YXhTY3JvbGxQb3NpdGlvbjsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiB2b2lkIExheWVy
Q2hyb21pdW06OnNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxhYmxlKQogewogICAgIGlmIChtX3Nj
cm9sbGFibGUgPT0gc2Nyb2xsYWJsZSkKQEAgLTUwOSw2ICs1MTcsNyBAQCB2b2lkIExheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGxheWVyLT5z
ZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2Vy
dmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24p
OworICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNjcm9sbFBvc2l0aW9uKTsK
ICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7CiAg
ICAgaWYgKCF0cmFuc2Zvcm1Jc0FuaW1hdGluZygpKQogICAgICAgICBsYXllci0+c2V0VHJhbnNm
b3JtKG1fdHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCAxMWViMjcyZWE4ZWY0ZWEy
M2RjZDJhMzRiYWI3Njk1MWQzNzUzMDQ2Li5lOTcxNGJiNWI5ZjhiODQxMWQyNTQ2MGY0YWFjZDNh
ODkzZjE3YTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNDUsMTIgKzE0NSwxNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIGNv
bnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9z
aXRpb247IH0KIAorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYp
OworICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorCiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wpOwor
ICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogICAg
IHZvaWQgc2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKGJvb2wpOwogICAgIHZvaWQgc2V0SGF2
ZVdoZWVsRXZlbnRIYW5kbGVycyhib29sKTsKICAgICBjb25zdCBSZWdpb24mIG5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uKCkgeyByZXR1cm4gbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsgfQogICAg
IHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJik7CiAgICAgdm9p
ZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQoKSB7IG1fbm9uRmFzdFNjcm9sbGFi
bGVSZWdpb25DaGFuZ2VkID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25z
dCBJbnRTaXplJikgeyB9CiAKICAgICB2b2lkIHNldERyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5n
VGlsZXMoYm9vbCk7CiAgICAgYm9vbCBkcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9kcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzOyB9CkBAIC0z
MTksNiArMzI0LDcgQEAgcHJpdmF0ZToKICAgICAvLyBVc2VzIHRhcmdldCBzdXJmYWNlJ3Mgc3Bh
Y2UuCiAgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9z
aXRpb247CisgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGJvb2wgbV9zY3Jv
bGxhYmxlOwogICAgIGJvb2wgbV9zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQ7CiAgICAgYm9vbCBt
X2hhdmVXaGVlbEV2ZW50SGFuZGxlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwCmluZGV4IGJlYTMy
YzBhMzU3OWFmNTcxZmM3ZjA1MmE3NGRiZGM3ZmI5ZGU2NzguLjljMjQyNDlhOTUxOGU3ZWQ2Mjk4
NDA0MjVjNzNhZTk0MDQ0MDQzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwCkBAIC0xMDEsNiAr
MTAxLDEwIEBAIHZvaWQgTGlua0hpZ2hsaWdodDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRl
eHQmIGdjLCBjb25zdCBJbnRSZWN0JikKICAgICBnYy5maWxsUGF0aChtX3BhdGgpOwogfQogCit2
b2lkIExpbmtIaWdobGlnaHQ6OmRpZFNjcm9sbChjb25zdCBJbnRTaXplJikKK3sKK30KKwogdm9p
ZCBMaW5rSGlnaGxpZ2h0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSkKIHsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtI
aWdobGlnaHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xp
bmtIaWdobGlnaHQuaAppbmRleCA4ZDc4ODlmY2U3MjA1OWY5ODFhODk3NjIxNmRkYWVlZWUzMTlk
Yjg0Li45MTUwNDllNWJkZTUzMGM3ZGEzNTNkY2ZmZjg3M2QzZmNiZDEyYjkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hp
Z2hsaWdodC5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENvbnRlbnRMYXll
ckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKIAogICAg
IC8vIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSkgT1ZFUlJJREU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lu
cHV0SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NJbnB1dEhhbmRsZXIuaAppbmRleCA3NjYwOGQ5ZmMxZDBkYTEzOWE0OTMwYmM1MDQ3YzA4
YWViOGIyZGY0Li43N2RkMmRiY2Y3NGI3N2Y4MDI3MWNlYzRmMjViYTcxYzA1MGZmMmJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lu
cHV0SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgKQEAgLTQ1LDEyICs0NSwxMiBAQCBjbGFzcyBJbnRTaXpl
OwogY2xhc3MgQ0NJbnB1dEhhbmRsZXJDbGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENDSW5wdXRIYW5kbGVyQ2xpZW50KTsKIHB1YmxpYzoKLSAgICBlbnVtIFNjcm9sbFN0YXR1cyB7
IFNjcm9sbEZhaWxlZCwgU2Nyb2xsU3RhcnRlZCwgU2Nyb2xsSWdub3JlZCB9OworICAgIGVudW0g
U2Nyb2xsU3RhdHVzIHsgU2Nyb2xsT25NYWluVGhyZWFkLCBTY3JvbGxTdGFydGVkLCBTY3JvbGxJ
Z25vcmVkIH07CiAgICAgZW51bSBTY3JvbGxJbnB1dFR5cGUgeyBHZXN0dXJlLCBXaGVlbCB9Owog
CiAgICAgLy8gQXR0ZW1wdCB0byBzdGFydCBzY3JvbGxpbmcgYSBsYXllciBhdCBhIGdpdmVuIHBv
aW50IGluIHdpbmRvdwogICAgIC8vIGNvb3JkaW5hdGVzLiBSZXR1cm5zIFNjcm9sbFN0YXJ0ZWQg
aWYgdGhlIGxheWVyIGF0IHRoZSBjb29yZGluYXRlcyBjYW4KLSAgICAvLyBiZSBzY3JvbGxlZCwg
U2Nyb2xsRmFpbGVkIGlmIHRoZSBzY3JvbGwgZXZlbnQgc2hvdWxkIGluc3RlYWQgYmUKKyAgICAv
LyBiZSBzY3JvbGxlZCwgU2Nyb2xsT25NYWluVGhyZWFkIGlmIHRoZSBzY3JvbGwgZXZlbnQgc2hv
dWxkIGluc3RlYWQgYmUKICAgICAvLyBkZWxlZ2F0ZWQgdG8gdGhlIG1haW4gdGhyZWFkLCBvciBT
Y3JvbGxJZ25vcmVkIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8KICAgICAvLyBiZSBzY3JvbGxlZCBh
dCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuCiAgICAgdmlydHVhbCBTY3JvbGxTdGF0dXMgc2Nyb2xs
QmVnaW4oY29uc3QgSW50UG9pbnQmLCBTY3JvbGxJbnB1dFR5cGUpID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcAppbmRleCA3MmMwZWEyYjc5Y2U3MmJhNmFlMGZjNjJlYzE3NzZiNjkyYWM1YWZj
Li4zZmRlMzdjNTg2NjE3YjliNmRjNDk1NjM4YWE1NDkxYWI1YjRmNGMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCkBAIC0xODQsNiArMTg0LDM3IEBAIHZvaWQgQ0NMYXllckltcGw6OnNjcm9s
bEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZEZvclN1YnRyZWUoKTsKIH0KIAorQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBD
Q0xheWVySW1wbDo6dHJ5U2Nyb2xsKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgaWYg
KHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJ0cnlT
Y3JvbGwgRmFpbGVkIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCIsIHRoaXMsIDApOworICAgICAg
ICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDsKKyAgICB9
CisKKyAgICBpZiAoIXNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaXNJbnZlcnRpYmxlKCkpIHsKKyAg
ICAgICAgVFJBQ0VfRVZFTlQoInRyeVNjcm9sbCBJZ25vcmVkIG5vbkludmVydGlibGVUcmFuc2Zv
cm0iLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxJZ25vcmVkOworICAgIH0KKworICAgIEludFBvaW50IGNvbnRlbnRQb2ludChzY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludCh2aWV3cG9ydFBvaW50KSk7CisgICAgaWYg
KG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29udGFpbnMoY29udGVudFBvaW50KSkgeworICAg
ICAgICBUUkFDRV9FVkVOVCgidHJ5U2Nyb2xsIEZhaWxlZCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lv
biIsIHRoaXMsIDApOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bE9uTWFpblRocmVhZDsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBDQ0lucHV0SGFuZGxlckNs
aWVudDo6V2hlZWwgJiYgaGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpKSB7CisgICAgICAgIFRSQUNF
X0VWRU5UKCJ0cnlTY3JvbGwgRmFpbGVkIHdoZWVsRXZlbnRIYW5kbGVycyIsIHRoaXMsIDApOwor
ICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDsK
KyAgICB9CisKKyAgICBpZiAoIXNjcm9sbGFibGUoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgi
dHJ5U2Nyb2xsIElnbm9yZWQgbm90IHNjcm9sbGFibGUiLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0
dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworICAgIH0KKworICAgIHJl
dHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDsKK30KKwogY29uc3QgSW50
UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogewogICAgIC8vIEZvcm0gdGhl
IG1hdHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJzIG9mIHRoZSBsYXll
cidzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBmMDNjNWMzZWEzMWQ5YmI0NzI1MDE5MTYzMzk5
NWE0MGE5MGVlZGRkLi43MzBlZjdmNzFkODkyZjA3YWE4Y2IyMzMxYThiNmZmMWJiZWQxYjU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1
ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlICJj
Yy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgpAQCAtMjEyLDYgKzIxMyw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldERyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoYm9vbCBjaGVja2VyYm9hcmQp
IHsgbV9kcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzID0gY2hlY2tlcmJvYXJkOyB9CiAg
ICAgYm9vbCBkcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzKCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzOyB9CiAKKyAgICBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsU3RhdHVzIHRyeVNjcm9sbChjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQ
b2ludCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSkgY29uc3Q7CisKICAg
ICBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNp
YmxlTGF5ZXJSZWN0OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJl
Y3QmIHZpc2libGVMYXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVy
UmVjdDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAwYTAxNTRjM2Vm
ZTNlMDNiYTUwNDhmMWI2ODRhMjVhODQ0MWI0ZmRiLi4wMTVkNGY0NTQ2MzhlZjg2ZTg3MTZjMTA2
N2VjNTBlZjE5YWY4NTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTYy
MiwxNSArNjIyLDQyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMo
Y29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgb2NjbHVzaW9uVHJh
Y2tlci5vdmVyZHJhd01ldHJpY3MoKS5yZWNvcmRNZXRyaWNzKHRoaXMpOwogfQogCitzdGF0aWMg
TGF5ZXJDaHJvbWl1bSogZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKExheWVyQ2hyb21pdW0qIGxh
eWVyKQoreworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxh
eWVyLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
TGF5ZXJDaHJvbWl1bSogZm91bmQgPSBmaW5kRmlyc3RTY3JvbGxhYmxlTGF5ZXIobGF5ZXItPmNo
aWxkcmVuKClbaV0uZ2V0KCkpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1
cm4gZm91bmQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjphcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8p
CiB7Ci0gICAgLy8gRklYTUU6IHB1c2hpbmcgc2Nyb2xsIG9mZnNldHMgdG8gbm9uLXJvb3QgbGF5
ZXJzIG5vdCBpbXBsZW1lbnRlZAotICAgIGlmICghaW5mby5zY3JvbGxzLnNpemUoKSkKKyAgICBp
ZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaW5mby5zY3Jv
bGxzLnNpemUoKSA9PSAxKTsKLSAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gaW5mby5zY3JvbGxz
WzBdLnNjcm9sbERlbHRhOwotICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKHNjcm9s
bERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKKyAgICBMYXllckNocm9taXVtKiByb290U2Ny
b2xsTGF5ZXIgPSBmaW5kRmlyc3RTY3JvbGxhYmxlTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOwor
ICAgIEludFNpemUgcm9vdFNjcm9sbERlbHRhOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbmZvLnNjcm9sbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogbGF5
ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShtX3Jvb3RMYXll
ci5nZXQoKSwgaW5mby5zY3JvbGxzW2ldLmxheWVySWQpOworICAgICAgICBpZiAoIWxheWVyKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChsYXllciA9PSByb290U2Nyb2xsTGF5
ZXIpCisgICAgICAgICAgICByb290U2Nyb2xsRGVsdGEgKz0gaW5mby5zY3JvbGxzW2ldLnNjcm9s
bERlbHRhOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsYXllci0+c2Nyb2xsQnkoaW5mby5z
Y3JvbGxzW2ldLnNjcm9sbERlbHRhKTsKKyAgICB9CisgICAgaWYgKCFyb290U2Nyb2xsRGVsdGEu
aXNaZXJvKCkgfHwgaW5mby5wYWdlU2NhbGVEZWx0YSAhPSAxKQorICAgICAgICBtX2NsaWVudC0+
YXBwbHlTY3JvbGxBbmRTY2FsZShyb290U2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEp
OwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
aW5kZXggZjgwNDUxNjE3ZGQyNWZiMTRjZjExZmE2ZWRhZTk3NDlhZTI1ZDc2Zi4uNjk2NjZjMjU1
MTY3NjAzY2ZiYjI2MjQzZGQ2YzAxOGFkZDIzNWQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3RhdGljIGJvb2wgcmVuZGVyU3VyZmFjZUNvbnRyaWJ1
dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKTsKIAorICAg
IC8vIFJldHVybnMgYSBsYXllciB3aXRoIHRoZSBnaXZlbiBpZCBpZiBvbmUgZXhpc3RzIGluIHRo
ZSBzdWJ0cmVlIHN0YXJ0aW5nCisgICAgLy8gZnJvbSB0aGUgZ2l2ZW4gcm9vdCBsYXllciAoaW5j
bHVkaW5nIG1hc2sgYW5kIHJlcGxpY2EgbGF5ZXJzKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBM
YXllclR5cGU+IHN0YXRpYyBMYXllclR5cGUqIGZpbmRMYXllckluU3VidHJlZShMYXllclR5cGUq
IHJvb3RMYXllciwgaW50IGxheWVySWQpOworCiAgICAgc3RydWN0IFNjcm9sbFVwZGF0ZUluZm8g
ewogICAgICAgICBpbnQgbGF5ZXJJZDsKICAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTsKQEAg
LTc0LDYgKzc4LDI1IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNl
Q29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqIGxheWVyLCBpCiAgICAgcmV0dXJuIGxheWVy
LT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPmlkKCkgIT0gdGFyZ2V0U3VyZmFjZUxheWVySUQ7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK0xheWVyVHlwZSogQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUoTGF5ZXJUeXBlKiByb290TGF5ZXIsIGlu
dCBsYXllcklkKQoreworICAgIGlmIChyb290TGF5ZXItPmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAg
ICAgcmV0dXJuIHJvb3RMYXllcjsKKworICAgIGlmIChyb290TGF5ZXItPm1hc2tMYXllcigpICYm
IHJvb3RMYXllci0+bWFza0xheWVyKCktPmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAgICAgcmV0dXJu
IHJvb3RMYXllci0+bWFza0xheWVyKCk7CisKKyAgICBpZiAocm9vdExheWVyLT5yZXBsaWNhTGF5
ZXIoKSAmJiByb290TGF5ZXItPnJlcGxpY2FMYXllcigpLT5pZCgpID09IGxheWVySWQpCisgICAg
ICAgIHJldHVybiByb290TGF5ZXItPnJlcGxpY2FMYXllcigpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByb290TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKExheWVyVHlwZSogZm91bmQgPSBmaW5kTGF5ZXJJblN1YnRyZWUocm9vdExheWVyLT5jaGls
ZHJlbigpW2ldLmdldCgpLCBsYXllcklkKSkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDQ0MWZhMGE3YWQ1
MjM0ZWY4YzU3ZmQ1OWY0MDUzMGYxODA3Njc0YzcuLjBhMjI0NzRlYTczODUxNmVhOWI4YjI3ZmQ5
NjcyMmFhNGIyYzI3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CkBAIC0xMTQsNyArMTE0LDkgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0
SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRyZWUKICAgICA6IG1fY2xp
ZW50KGNsaWVudCkKICAgICAsIG1fc291cmNlRnJhbWVOdW1iZXIoLTEpCiAgICAgLCBtX2ZyYW1l
TnVtYmVyKDApCi0gICAgLCBtX3Njcm9sbExheWVySW1wbCgwKQorICAgICwgbV9yb290U2Nyb2xs
TGF5ZXJJbXBsKDApCisgICAgLCBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCgwKQorICAg
ICwgbV9zY3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSgtMSkKICAgICAsIG1fc2V0dGlu
Z3Moc2V0dGluZ3MpCiAgICAgLCBtX3Zpc2libGUodHJ1ZSkKICAgICAsIG1fc291cmNlRnJhbWVD
YW5CZURyYXduKHRydWUpCkBAIC0xODEsMTAgKzE4MywxMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1l
KQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNv
bnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdl
U2NhbGUsIGRvdWJsZSBzdGFydFRpbWUsIGRvdWJsZSBkdXJhdGlvbikKIHsKLSAgICBpZiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Ny
b2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1f
cm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fcm9vdFNjcm9sbExheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAgICAgc2Nyb2xsVG90YWwuc2NhbGUobV9wYWdlU2NhbGVE
ZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVUb3RhbCA9IG1fcGFnZVNjYWxlICogbV9wYWdlU2NhbGVE
ZWx0YTsKICAgICBJbnRTaXplIHNjYWxlZENvbnRlbnRTaXplID0gY29udGVudFNpemUoKTsKQEAg
LTIzNCw2ICsyMzYsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9y
QWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXllckxpc3QmIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2VMYXllckxp
c3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9yb290TGF5ZXJJbXBsKTsKIAogICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CiAKQEAgLTM3
Myw5ICszNzYsOSBAQCBJbnRTaXplIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRTaXplKCkg
Y29uc3QKIHsKICAgICAvLyBUT0RPKGFlbGlhcyk6IEhhcmRjb2RpbmcgdGhlIGZpcnN0IGNoaWxk
IGhlcmUgaXMgd2VpcmQuIFRoaW5rIG9mCiAgICAgLy8gYSBjbGVhbmVyIHdheSB0byBnZXQgdGhl
IGNvbnRlbnRCb3VuZHMgb24gdGhlIEltcGwgc2lkZS4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJ
bXBsIHx8IG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLmlzRW1wdHkoKSkKKyAgICBpZiAo
IW1fcm9vdFNjcm9sbExheWVySW1wbCB8fCBtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVu
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotICAgIHJldHVybiBtX3Nj
cm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKVswXS0+Y29udGVudEJvdW5kcygpOworICAgIHJldHVy
biBtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsK
IH0KIAogYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZyYW1lRGF0YSYg
ZnJhbWUpCkBAIC0zODYsMTAgKzM4OSwxMyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBy
ZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKICAgICBmcmFtZS5yZW5kZXJQYXNzZXMuY2xl
YXIoKTsKICAgICBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CiAgICAgZnJh
bWUud2lsbERyYXdMYXllcnMuY2xlYXIoKTsKKyAgICBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmNsZWFyKCk7CiAKICAgICBpZiAoIWNhbGN1bGF0ZVJlbmRlclBhc3NlcyhmcmFt
ZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QsIGZyYW1lLndpbGxE
cmF3TGF5ZXJzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgbV9tb3N0UmVjZW50UmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCA9IGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAg
ICAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgdGhlbiB3ZSBleHBlY3QgZHJhd0xheWVycygpIHRvIGJl
IGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4uCiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC00ODcsNyArNDkzLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpy
ZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgbV9sYXllclJl
bmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOwogfQogCi1zdGF0aWMg
Q0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCitzdGF0aWMg
Q0NMYXllckltcGwqIGZpbmRSb290U2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogewog
ICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDk2LDcgKzUwMiw3IEBAIHN0
YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAg
ICAgICAgcmV0dXJuIGxheWVyOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICBDQ0xheWVySW1wbCogZm91bmQgPSBm
aW5kU2Nyb2xsTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAgICAgICBDQ0xh
eWVySW1wbCogZm91bmQgPSBmaW5kUm9vdFNjcm9sbExheWVyKGxheWVyLT5jaGlsZHJlbigpW2ld
LmdldCgpKTsKICAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwog
ICAgIH0KQEAgLTUwNCwxMiArNTEwLDQyIEBAIHN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9s
bExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICByZXR1cm4gMDsKIH0KIAorLy8gQ29udGVu
dCBsYXllcnMgY2FuIGJlIGVpdGhlciBkaXJlY3RseSBzY3JvbGxhYmxlIG9yIGNvbnRhaW5lZCBp
biBhbiBvdXRlcgorLy8gc2Nyb2xsaW5nIGxheWVyIHdoaWNoIGFwcGxpZXMgdGhlIHNjcm9sbCB0
cmFuc2Zvcm0uIEdpdmVuIGEgY29udGVudCBsYXllciwKKy8vIHRoaXMgZnVuY3Rpb24gcmV0dXJu
cyB0aGUgYXNzb2NpYXRlZCBzY3JvbGwgbGF5ZXIgaWYgYW55Lgorc3RhdGljIENDTGF5ZXJJbXBs
KiBmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCkK
K3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5
ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllckltcGw7CisKKyAgICBp
ZiAobGF5ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllckltcGwtPnBhcmVudCgpICYmIGxh
eWVySW1wbC0+cGFyZW50KCktPnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVySW1w
bC0+cGFyZW50KCk7CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXRSb290TGF5ZXIoUGFzc093blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAg
bV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsID0gZmlu
ZFJvb3RTY3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOworICAgIG1fY3VycmVudGx5
U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKKworICAgIGlmIChtX3Jvb3RMYXllckltcGwgJiYgbV9z
Y3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSAhPSAtMSkKKyAgICAgICAgbV9jdXJyZW50
bHlTY3JvbGxpbmdMYXllckltcGwgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllcklu
U3VidHJlZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2
aW91c1RyZWUpOwogCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgdGhpcyBvbmx5IGZpbmRzIHRo
ZSBmaXJzdCBzY3JvbGxhYmxlIGxheWVyLgotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNj
cm9sbExheWVyKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisgICAgbV9zY3JvbGxpbmdMYXllcklk
RnJvbVByZXZpb3VzVHJlZSA9IC0xOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpyZWxlYXNlUm9vdExheWVyKCkKK3sKKyAgICBtX3Njcm9sbGluZ0xh
eWVySWRGcm9tUHJldmlvdXNUcmVlID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPyBt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbC0+aWQoKSA6IC0xOworICAgIG1fY3VycmVudGx5
U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKKworICAgIG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VM
YXllckxpc3QuY2xlYXIoKTsKKyAgICByZXR1cm4gbV9yb290TGF5ZXJJbXBsLnJlbGVhc2UoKTsK
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkK
QEAgLTU3Myw2ICs2MDksMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9y
dFNpemUoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogICAgICAgICBtX2xheWVyUmVuZGVy
ZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwogfQogCitzdGF0aWMgdm9pZCBhZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGZsb2F0IHBhZ2VTY2FsZUNo
YW5nZSkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY29udmVy
dCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2UuCisgICAgICAgIEZs
b2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICAgICAg
c2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5z
ZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFkanVz
dFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UobGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgp
LCBwYWdlU2NhbGVDaGFuZ2UpOworfQorCitzdGF0aWMgdm9pZCBhcHBseVBhZ2VTY2FsZURlbHRh
VG9TY3JvbGxMYXllcnMoQ0NMYXllckltcGwqIGxheWVySW1wbCwgZmxvYXQgcGFnZVNjYWxlRGVs
dGEpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChs
YXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRQYWdlU2NhbGVE
ZWx0YShwYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVy
SW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgYXBwbHlQYWdlU2NhbGVEZWx0
YVRvU2Nyb2xsTGF5ZXJzKGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFnZVNjYWxl
RGVsdGEpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZUZhY3Rv
ckFuZExpbWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IG1pblBhZ2VTY2FsZSwgZmxvYXQgbWF4
UGFnZVNjYWxlKQogewogICAgIGlmICghcGFnZVNjYWxlKQpAQCAtNTg3LDI1ICs2NTEsMTMgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoZmxv
YXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KICAgICBmbG9hdCBwYWdlU2NhbGVDaGFuZ2UgPSBwYWdl
U2NhbGUgLyBtX3BhZ2VTY2FsZTsKICAgICBtX3BhZ2VTY2FsZSA9IHBhZ2VTY2FsZTsKIAotICAg
IGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICBp
ZiAocGFnZVNjYWxlQ2hhbmdlICE9IDEpCisgICAgICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2Nh
bGVDaGFuZ2UobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBwYWdlU2NhbGVDaGFuZ2UpOwogCiAgICAg
Ly8gQ2xhbXAgZGVsdGEgdG8gbGltaXRzIGFuZCByZWZyZXNoIGRpc3BsYXkgbWF0cml4LgogICAg
IHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlRGVsdGEgLyBtX3NlbnRQYWdlU2NhbGVEZWx0
YSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSAxOwotICAgIGFwcGx5UGFnZVNjYWxlRGVs
dGFUb1Njcm9sbExheWVyKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YWRqdXN0
U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCi17Ci0gICAg
aWYgKHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBh
bHNvIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUg
c3BhY2UuCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBz
Y3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgICAgICBz
Y3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9sbExheWVy
SW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICBhcHBseVBhZ2VT
Y2FsZURlbHRhVG9TY3JvbGxMYXllcnMobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2Fs
ZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVEZWx0
YShmbG9hdCBkZWx0YSkKQEAgLTYyMywyMiArNjc1LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEpCiAgICAgbV9wYWdlU2NhbGVEZWx0
YSA9IGRlbHRhOwogCiAgICAgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKLSAgICBhcHBseVBh
Z2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCkKLXsKLSAgICBpZiAobV9zY3Jv
bGxMYXllckltcGwpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRQYWdlU2NhbGVEZWx0
YShtX3BhZ2VTY2FsZURlbHRhKTsKKyAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXll
cnMobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiB7Ci0gICAgaWYg
KCFtX3Njcm9sbExheWVySW1wbCB8fCAhbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuc2l6
ZSgpKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Jvb3RTY3JvbGxMYXll
ckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFNp
emUgdmlld0JvdW5kcyA9IG1fdmlld3BvcnRTaXplOwotICAgIGlmIChDQ0xheWVySW1wbCogY2xp
cExheWVyID0gbV9zY3JvbGxMYXllckltcGwtPnBhcmVudCgpKSB7CisgICAgaWYgKENDTGF5ZXJJ
bXBsKiBjbGlwTGF5ZXIgPSBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnBhcmVudCgpKSB7CiAgICAg
ICAgIGlmIChjbGlwTGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkKICAgICAgICAgICAgIHZpZXdCb3Vu
ZHMgPSBjbGlwTGF5ZXItPmJvdW5kcygpOwogICAgIH0KQEAgLTY1Miw5ICs2OTgsNyBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAgICAvLyBo
YXZpbmcgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cuCiAg
ICAgbWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9ETyhhZWxp
YXMpOiBBbHNvIHVwZGF0ZSBzdWJsYXllcnMuCisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5z
ZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldE5lZWRzUmVkcmF3KCkKQEAgLTY2Miw1MSArNzA2LDExNCBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNS
ZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjplbnN1
cmVNb3N0UmVjZW50UmVuZGVyU3VyZmFjZUxheWVyTGlzdCgpCit7CisgICAgaWYgKCFtX3Jvb3RM
YXllckltcGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX21vc3RSZWNlbnRS
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAmJiBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1
cmZhY2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiB3ZSBhcmUgY2FsbGVk
IGFmdGVyIHNldFJvb3RMYXllcigpIGJ1dCBiZWZvcmUgcHJlcGFyZVRvRHJhdygpLCB3ZSBuZWVk
CisgICAgLy8gdG8gcmVjYWxjdWxhdGUgdGhlIHZpc2libGUgbGF5ZXJzLiBUaGlzIHByZXZlbnRz
IGJlaW5nIHVuYWJsZSB0byBzY3JvbGwKKyAgICAvLyBkdXJpbmcgcGFydCBvZiBhIGNvbW1pdC4K
KyAgICBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CisgICAgY2Fs
Y3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKworICAgIHJldHVybiBtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LnNpemUoKTsKK30KKwogQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSB0eXBlKQogewotICAgIC8vIFRP
RE86IENoZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5
ZXJJbXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7Ci0gICAgICAgIFRS
QUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBJZ25vcmVkIG5vIHNjcm9sbGFibGUiLCB0aGlzLCAwKTsK
LSAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7Ci0gICAgfQorICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbiIsIHRoaXMsIDApOwogCi0gICAgaWYgKG1f
c2Nyb2xsTGF5ZXJJbXBsLT5zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoKSkgewotICAgICAgICBU
UkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCIs
IHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOwotICAgIH0KKyAgICBzY3Jv
bGxFbmQoKTsKKworICAgIGlmICghZW5zdXJlTW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxp
c3QoKSkKKyAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7CiAKICAgICBJbnRQb2ludCBkZXZp
Y2VWaWV3cG9ydFBvaW50ID0gdmlld3BvcnRQb2ludDsKICAgICBkZXZpY2VWaWV3cG9ydFBvaW50
LnNjYWxlKG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3IsIG1fc2V0dGluZ3MuZGV2aWNlU2Nh
bGVGYWN0b3IpOwogCi0gICAgLy8gVGhlIGludmVyc2Ugb2YgdGhlIHNjcmVlbiBzcGFjZSB0cmFu
c2Zvcm0gdGFrZXMgdXMgZnJvbSBwaHlzaWNhbCBwaXhlbHMgdG8gbGF5b3V0IHBpeGVscy4KLSAg
ICBJbnRQb2ludCBzY3JvbGxMYXllclBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChkZXZpY2VWaWV3cG9ydFBvaW50KSk7Ci0K
LSAgICBpZiAobV9zY3JvbGxMYXllckltcGwtPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29u
dGFpbnMoc2Nyb2xsTGF5ZXJQb2ludCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJl
Z2luIEZhaWxlZCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiIsIHRoaXMsIDApOwotICAgICAgICBy
ZXR1cm4gU2Nyb2xsRmFpbGVkOworICAgIC8vIEZpcnN0IGZpbmQgb3V0IHdoaWNoIGxheWVyIHdh
cyBoaXQgYnkgd2Fsa2luZyB0aGUgc2F2ZWQgbGlzdCBvZiB2aXNpYmxlIGxheWVycyBmcm9tIHRo
ZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gMDsKKwor
ICAgIEFTU0VSVChtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgdHlwZWRl
ZiBDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDTGF5ZXJMaXN0LCBDQ1JlbmRlclN1cmZh
Y2UsIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JU
eXBlOworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6
ZW5kKCZtX21vc3RSZWNlbnRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5
ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmbV9tb3N0UmVj
ZW50UmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBD
Q0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVySW1wbCA9ICgqaXQpOworICAgICAgICBpZiAo
IXJlbmRlclN1cmZhY2VMYXllckltcGwtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaXNJbnZlcnRp
YmxlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgSW50UG9pbnQgc2Nyb2xsTGF5
ZXJQb2ludChyZW5kZXJTdXJmYWNlTGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmlu
dmVyc2UoKS5tYXBQb2ludCh2aWV3cG9ydFBvaW50KSk7CisgICAgICAgIGlmICghcmVuZGVyU3Vy
ZmFjZUxheWVySW1wbC0+dmlzaWJsZUxheWVyUmVjdCgpLmNvbnRhaW5zKHNjcm9sbExheWVyUG9p
bnQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxheWVySW1wbCA9IHJlbmRlclN1
cmZhY2VMYXllckltcGw7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmICh0eXBlID09
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCAmJiBtX3Njcm9sbExheWVySW1wbC0+aGF2ZVdo
ZWVsRXZlbnRIYW5kbGVycygpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxCZWdpbiBG
YWlsZWQgd2hlZWxFdmVudEhhbmRsZXJzIiwgdGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBTY3Jv
bGxGYWlsZWQ7CisgICAgLy8gV2FsayB1cCB0aGUgaGllcmFyY2h5IGFuZCBsb29rIGZvciBhIHNj
cm9sbGFibGUgbGF5ZXIuCisgICAgQ0NMYXllckltcGwqIHBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsID0gMDsKKyAgICBmb3IgKDsgbGF5ZXJJbXBsOyBsYXllckltcGwgPSBsYXllckltcGwt
PnBhcmVudCgpKSB7CisgICAgICAgIC8vIFRoZSBjb250ZW50IGxheWVyIGNhbiBhbHNvIGJsb2Nr
IGF0dGVtcHRzIHRvIHNjcm9sbCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgaWYg
KGxheWVySW1wbC0+dHJ5U2Nyb2xsKGRldmljZVZpZXdwb3J0UG9pbnQsIHR5cGUpID09IFNjcm9s
bE9uTWFpblRocmVhZCkKKyAgICAgICAgICAgIHJldHVybiBTY3JvbGxPbk1haW5UaHJlYWQ7CisK
KyAgICAgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllckZv
ckNvbnRlbnRMYXllcihsYXllckltcGwpOworICAgICAgICBpZiAoIXNjcm9sbExheWVySW1wbCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNjcm9sbFN0YXR1cyBzdGF0dXMgPSBz
Y3JvbGxMYXllckltcGwtPnRyeVNjcm9sbCh2aWV3cG9ydFBvaW50LCB0eXBlKTsKKworICAgICAg
ICAvLyBJZiBhbnkgbGF5ZXIgd2FudHMgdG8gZGl2ZXJ0IHRoZSBzY3JvbGwgZXZlbnQgdG8gdGhl
IG1haW4gdGhyZWFkLCBhYm9ydC4KKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTY3JvbGxPbk1haW5U
aHJlYWQpCisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsT25NYWluVGhyZWFkOworCisgICAgICAg
IGlmIChzdGF0dXMgPT0gU2Nyb2xsU3RhcnRlZCAmJiAhcG90ZW50aWFsbHlTY3JvbGxpbmdMYXll
ckltcGwpCisgICAgICAgICAgICBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCA9IHNjcm9s
bExheWVySW1wbDsKICAgICB9CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAgICBpZiAo
cG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGwpIHsKKyAgICAgICAgbV9jdXJyZW50bHlTY3Jv
bGxpbmdMYXllckltcGwgPSBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbDsKKyAgICAgICAg
cmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgfQorICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOwog
fQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3Jv
bGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKLSAgICBtX2NsaWVudC0+c2V0
TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdP
bkltcGxUaHJlYWQoKTsKKyAgICBGbG9hdFNpemUgcGVuZGluZ0RlbHRhKHNjcm9sbERlbHRhKTsK
KyAgICBwZW5kaW5nRGVsdGEuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOworCisgICAgZm9y
IChDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7
IGxheWVySW1wbCAmJiAhcGVuZGluZ0RlbHRhLmlzWmVybygpOyBsYXllckltcGwgPSBsYXllcklt
cGwtPnBhcmVudCgpKSB7CisgICAgICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgRmxvYXRTaXplIHByZXZpb3VzRGVsdGEobGF5
ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zY3JvbGxCeShwZW5k
aW5nRGVsdGEpOworICAgICAgICAvLyBSZXNldCB0aGUgcGVuZGluZyBzY3JvbGwgZGVsdGEgdG8g
emVybyBpZiB0aGUgbGF5ZXIgd2FzIGFibGUgdG8gbW92ZSBhbG9uZyB0aGUgcmVxdWVzdGVkCisg
ICAgICAgIC8vIGF4aXMuIFRoaXMgaXMgdG8gZW5zdXJlIGl0IGlzIHBvc3NpYmxlIHRvIHNjcm9s
bCBleGFjdGx5IHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEKKyAgICAgICAgLy8gc2Nyb2xs
IGFyZWEgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsIHN0ZXAuIEZvciBkaWFnb25hbCBzY3JvbGxz
IHRoaXMgYWxzbyBhdm9pZHMgYXBwbHlpbmcKKyAgICAgICAgLy8gdGhlIHNjcm9sbCBvbiBvbmUg
YXhpcyB0byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLndpZHRo
KCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLndpZHRoKCkpCisgICAgICAgICAgICBwZW5k
aW5nRGVsdGEuc2V0V2lkdGgoMCk7CisgICAgICAgIGlmIChwcmV2aW91c0RlbHRhLmhlaWdodCgp
ICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5oZWlnaHQoKSkKKyAgICAgICAgICAgIHBlbmRp
bmdEZWx0YS5zZXRIZWlnaHQoMCk7CisgICAgfQorCisgICAgaWYgKCFzY3JvbGxEZWx0YS5pc1pl
cm8oKSAmJiBwZW5kaW5nRGVsdGEuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fY2xpZW50LT5zZXRO
ZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRy
YXdPbkltcGxUaHJlYWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2Nyb2xsRW5kKCkKIHsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7Cisg
ICAgbV9zY3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSA9IC0xOwogfQogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUJlZ2luKCkKQEAgLTcyMCw3ICs4MjcsNyBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCBtYWdu
aWZ5RGVsdGEsCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNo
R2VzdHVyZVVwZGF0ZSIsIHRoaXMsIDApOwogCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkK
KyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG1fcHJldmlvdXNQaW5jaEFuY2hvciA9PSBJbnRQb2ludDo6emVybygpKQpAQCAtNzM1LDcg
Kzg0Miw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKGZs
b2F0IG1hZ25pZnlEZWx0YSwKIAogICAgIG1fcHJldmlvdXNQaW5jaEFuY2hvciA9IGFuY2hvcjsK
IAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShyb3VuZGVkSW50U2l6ZShtb3ZlKSk7
CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShyb3VuZGVkSW50U2l6ZShtb3Zl
KSk7CiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiAgICAgbV9j
bGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CkBAIC03NTcsNyArODY0LDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlRG91YmxlVGFwWm9vbURlbHRhcyhD
Q1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGwKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
b21wdXRlUGluY2hab29tRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8pCiB7
Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVy
SW1wbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT25seSBzZW5kIGZha2Ugc2Nyb2xsL3pv
b20gZGVsdGFzIGlmIHdlJ3JlIHBpbmNoIHpvb21pbmcgb3V0IGJ5IGEKQEAgLTc2OSw3ICs4NzYs
NyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMoQ0NT
Y3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbwogCiAgICAgLy8gQ29tcHV0ZSB3aGVyZSB0aGUg
c2Nyb2xsIG9mZnNldC9wYWdlIHNjYWxlIHdvdWxkIGJlIGlmIGZ1bGx5IHBpbmNoLXpvb21lZAog
ICAgIC8vIG91dCBmcm9tIHRoZSBhbmNob3IgcG9pbnQuCi0gICAgSW50U2l6ZSBzY3JvbGxCZWdp
biA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsg
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsQmVn
aW4gPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9u
KCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwogICAgIHNjcm9sbEJl
Z2luLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNjYWxlQmVnaW4gPSBtX3Bh
Z2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgcGFnZVNjYWxlRGVsdGFUb1Nl
bmQgPSBtX21pblBhZ2VTY2FsZSAvIG1fcGFnZVNjYWxlOwpAQCAtNzg5LDIyICs4OTYsNDAgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKENDU2Nyb2xs
QW5kU2NhbGVTZXQqIHNjcm9sbEluZm8KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjptYWtl
U2Nyb2xsQW5kU2NhbGVTZXQoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUpCiB7Ci0gICAgaWYgKCFtX3Nj
cm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNj
cm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAg
IHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNjcm9sbE9mZnNldCAtIHRvU2l6ZShtX3Njcm9sbExheWVy
SW1wbC0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgc2Nyb2xsLmxheWVySWQgPSBtX3Jvb3RTY3Jv
bGxMYXllckltcGwtPmlkKCk7CisgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsT2Zmc2V0
IC0gdG9TaXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAg
c2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLSAgICBtX3Njcm9sbExheWVySW1w
bC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7CisgICAgbV9yb290U2Ny
b2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKICAg
ICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gcGFn
ZVNjYWxlIC8gbV9wYWdlU2NhbGU7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbGxlY3RTY3JvbGxEZWx0
YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbywgQ0NMYXllckltcGwqIGxheWVySW1w
bCkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFs
YXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkpIHsKKyAgICAgICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSA9IGZsb29yZWRJbnRTaXplKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7CisgICAg
ICAgIHNjcm9sbC5sYXllcklkID0gbGF5ZXJJbXBsLT5pZCgpOworICAgICAgICBzY3JvbGwuc2Ny
b2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsKKyAgICAgICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBl
bmQoc2Nyb2xsKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xs
RGVsdGEpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5j
aGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9s
bEluZm8sIGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisKIFBhc3NPd25QdHI8
Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERl
bHRhcygpCiB7CiAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBh
ZG9wdFB0cihuZXcgQ0NTY3JvbGxBbmRTY2FsZVNldCgpKTsKLSAgICBib29sIGRpZE1vdmUgPSBt
X3Njcm9sbExheWVySW1wbCAmJiAoIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlz
WmVybygpIHx8IG1fcGFnZVNjYWxlRGVsdGEgIT0gMS4wZik7Ci0gICAgaWYgKCFkaWRNb3ZlIHx8
IG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9uKSB7CisKKyAgICBp
ZiAobV9waW5jaEdlc3R1cmVBY3RpdmUgfHwgbV9wYWdlU2NhbGVBbmltYXRpb24pIHsKICAgICAg
ICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IDE7
CiAgICAgICAgIGlmIChtX3BpbmNoR2VzdHVyZUFjdGl2ZSkKICAgICAgICAgICAgIGNvbXB1dGVQ
aW5jaFpvb21EZWx0YXMoc2Nyb2xsSW5mby5nZXQoKSk7CkBAIC04MTMsMTYgKzkzOCw5IEBAIFBh
c3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vz
c1Njcm9sbERlbHRhcygpCiAgICAgICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKICAg
ICB9CiAKKyAgICBjb2xsZWN0U2Nyb2xsRGVsdGFzKHNjcm9sbEluZm8uZ2V0KCksIG1fcm9vdExh
eWVySW1wbC5nZXQoKSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5w
YWdlU2NhbGVEZWx0YSA9IG1fcGFnZVNjYWxlRGVsdGE7CiAKLSAgICAvLyBGSVhNRTogdHJhY2sg
c2Nyb2xscyBmcm9tIGxheWVycyBvdGhlciB0aGFuIHRoZSByb290Ci0gICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKLSAgICBzY3JvbGwubGF5ZXJJZCA9
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwotICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IGZsb29y
ZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKLSAgICBzY3JvbGxJ
bmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOwotCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNl
dFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOwotCiAgICAgcmV0dXJuIHNjcm9s
bEluZm8ucmVsZWFzZSgpOwogfQogCkBAIC04MzcsMTUgKzk1NSwxNSBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKQogCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmFuaW1hdGVQYWdlU2NhbGUoZG91YmxlIG1vbm90b25pY1RpbWUpCiB7Ci0gICAg
aWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbiB8fCAhbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYg
KCFtX3BhZ2VTY2FsZUFuaW1hdGlvbiB8fCAhbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Ny
b2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1f
cm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fcm9vdFNjcm9sbExheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAKICAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2Fs
ZUFuaW1hdGlvbi0+cGFnZVNjYWxlQXRUaW1lKG1vbm90b25pY1RpbWUpIC8gbV9wYWdlU2NhbGUp
OwogICAgIEludFNpemUgbmV4dFNjcm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxP
ZmZzZXRBdFRpbWUobW9ub3RvbmljVGltZSk7CiAgICAgbmV4dFNjcm9sbC5zY2FsZSgxIC8gbV9w
YWdlU2NhbGVEZWx0YSk7Ci0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3Jv
bGwgLSBzY3JvbGxUb3RhbCk7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShu
ZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOwogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09u
SW1wbFRocmVhZCgpOwogCiAgICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlv
bkNvbXBsZXRlQXRUaW1lKG1vbm90b25pY1RpbWUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKaW5kZXggMDk1YzBlNWIzOTMyNDFhNjk1YzUxNDA1MGY0MGRiZjgzZTgzYjA5
MS4uZmFlYWQ5ZDAxNjlhN2I1ODk3N2UzMzBhODcwYTUzMWViOGRjNTcyYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTMzLDEwICsxMzMsMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2
b2lkIHNldFJvb3RMYXllcihQYXNzT3duUHRyPENDTGF5ZXJJbXBsPik7Ci0gICAgUGFzc093blB0
cjxDQ0xheWVySW1wbD4gcmVsZWFzZVJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVySW1w
bC5yZWxlYXNlKCk7IH0KKyAgICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZWxlYXNlUm9vdExh
eWVyKCk7CiAgICAgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVy
SW1wbC5nZXQoKTsgfQogCi0gICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JvbGxMYXllckltcGw7IH0KKyAgICBDQ0xheWVySW1wbCogcm9vdFNjcm9sbExh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290U2Nyb2xsTGF5ZXJJbXBsOyB9CiAKICAgICBib29s
IHZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAgICB2b2lkIHNldFZpc2li
bGUoYm9vbCk7CkBAIC0xOTYsOCArMTk2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1ha2VTY3Jv
bGxBbmRTY2FsZVNldChDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBjb25zdCBJbnRT
aXplJiBzY3JvbGxPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSk7CiAKICAgICB2b2lkIHNldFBhZ2VT
Y2FsZURlbHRhKGZsb2F0KTsKLSAgICB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExh
eWVyKCk7Ci0gICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsK
ICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0cmFja0RhbWFn
ZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKQEAgLTIxMCwxMyArMjA4LDE2IEBAIHBy
aXZhdGU6CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogICAgIHZvaWQgc2VuZERp
ZExvc2VDb250ZXh0UmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7CiAgICAgdm9pZCBjbGVhclJlbmRl
clN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1wbCopOworICAgIGJvb2wg
ZW5zdXJlTW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3QoKTsKIAogICAgIHZvaWQgZHVt
cFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25zdCBDQ0xheWVySW1w
bCopIGNvbnN0OwogCiAgICAgUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAg
ICAgT3duUHRyPENDUmVuZGVyZXI+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBPd25QdHI8Q0NMYXll
ckltcGw+IG1fcm9vdExheWVySW1wbDsKLSAgICBDQ0xheWVySW1wbCogbV9zY3JvbGxMYXllcklt
cGw7CisgICAgQ0NMYXllckltcGwqIG1fcm9vdFNjcm9sbExheWVySW1wbDsKKyAgICBDQ0xheWVy
SW1wbCogbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7CisgICAgaW50IG1fc2Nyb2xsaW5n
TGF5ZXJJZEZyb21QcmV2aW91c1RyZWU7CiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogICAg
IEludFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgSW50U2l6ZSBtX2RldmljZVZpZXdwb3J0U2l6
ZTsKQEAgLTI0OCw2ICsyNDksOSBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRSZWN0IG1fcm9vdFNj
aXNzb3JSZWN0OwogCisgICAgLy8gTGlzdCBvZiB2aXNpYmxlIGxheWVycyBpbiB0aGUgbW9zdCBy
ZWNlbnQgZnJhbWUuIFVzZWQgZm9yIGlucHV0IGV2ZW50IGhpdCB0ZXN0aW5nLgorICAgIENDTGF5
ZXJMaXN0IG1fbW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICBPd25QdHI8
Q0NGcmFtZVJhdGVDb3VudGVyPiBtX2Zwc0NvdW50ZXI7CiAgICAgT3duUHRyPENDRGVidWdSZWN0
SGlzdG9yeT4gbV9kZWJ1Z1JlY3RIaXN0b3J5OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcApp
bmRleCA4ZTBjNjEzYTQyYTM5NjY3ZWE2M2U2NWU5MjVhMjJhN2EzNGIxNDlkLi42M2JmMjcwZmUw
MjI2NDM2MGY0MjdhMmUyM2M2MjhjYWVhMTEyYzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3Bw
CkBAIC0xOTEsNyArMTkxLDcgQEAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OkV2ZW50
RGlzcG9zaXRpb24gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmgKICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBEcm9wRXZlbnQsIGJ1dCBpbiBjYXNlcyB3aGVyZSB3
ZSBmYWlsIHRvIHByb3Blcmx5IHN5bmMgc2Nyb2xsYWJpbGl0eSBpdCdzIHNhZmVyIHRvIHNlbmQg
dGhlCiAgICAgICAgICAgICAvLyBldmVudCB0byB0aGUgbWFpbiB0aHJlYWQuIENoYW5nZSBiYWNr
IHRvIERyb3BFdmVudCBvbmNlIHdlIGhhdmUgc3luY2hyb25pemF0aW9uIGJ1Z3Mgc29ydGVkIG91
dC4KICAgICAgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7IAotICAgICAgICBjYXNlIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6CisgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDoKICAgICAgICAgICAgIHJldHVybiBEaWROb3RI
YW5kbGU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRF
dmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luKSB7CkBAIC0yMDYsNyArMjA2LDcgQEAgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGw6OkV2ZW50RGlzcG9zaXRpb24gV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGw6OmgKICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZDoKICAgICAgICAgICAgIG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQgPSB0cnVlOwogICAg
ICAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKLSAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsRmFpbGVkOgorICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxPbk1haW5UaHJlYWQ6CiAgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogICAg
ICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOgogICAgICAgICAg
ICAgcmV0dXJuIERyb3BFdmVudDsKQEAgLTI3OCw4ICsyNzgsOCBAQCBXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6aAogICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2NoZWR1bGVBbmltYXRpb24o
KTsKICAgICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICB9Ci0gICAgY2FzZSBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOiB7Ci0gICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQw
KCJjYyIsICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5n
OjpmYWlsZWQiKTsKKyAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5U
aHJlYWQ6IHsKKyAgICAgICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNjIiwgIldlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OnNjcm9sbE9uTWFpblRocmVh
ZCIpOwogICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogICAgIH0KICAgICBjYXNlIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCmluZGV4IDIyMmZhMmZhNzY2NTIw
MjI4MDhjMTRhY2U5MTE0MTQxYmE0N2VkNWQuLmQ4ODIxNTAzYTkwNTY1N2VmODA4M2UzZjIzMmRi
NTQzZGRiYTE1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllckltcGwuY3BwCkBAIC02MSw0ICs2MSw4IEBAIHZvaWQgV2ViQ29udGVudExheWVy
SW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJbnRSZWN0JiBj
bGlwCiAgICAgbV9jb250ZW50Q2xpZW50LT5wYWludENvbnRlbnRzKGNhbnZhcywgV2ViUmVjdChj
bGlwKSk7CiB9CiAKK3ZvaWQgV2ViQ29udGVudExheWVySW1wbDo6ZGlkU2Nyb2xsKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCBhMDZj
ZjkwODI5MWZhZmVhNjIzY2JiZTc1N2FjZTI2OGJmNTJkZDA4Li4yNjk4Mjc4Y2ViOTAxYmUzMzc5
YzRjOTU0Y2IyNzg2MjBkN2VjYWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5oCkBAIC00Miw2ICs0Miw3IEBAIHByb3RlY3RlZDoKIAog
ICAgIC8vIENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOwogCiAgICAgV2ViQ29udGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRD
bGllbnQ7CiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4
IDFkMDY5YTViZTNhYjU0OWYwZGYxODYxOTJkYmJlZTk5NTZjODNlMTguLjA1N2MwNGQ5ZWY3OTU3
MzUxMjFmYWFhZDVjNzk0MWNmOWQzMzY3YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMjI2
OSw2ICsyMjY5LDI4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFj
a0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZlczNkRm9yRmxhdHRlbmluCiAgICAgRVhQRUNUX0VRKGNo
aWxkMS0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+cmVuZGVyU3VyZmFjZSgpLT5s
YXllckxpc3QoKVsxXS0+aWQoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5U3VidHJlZVNlYXJjaCkKK3sKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9v
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBj
aGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IG1hc2tMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiByZXBsaWNhTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KworICAgIGdyYW5kQ2hpbGQtPnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIuZ2V0KCkpOwor
ICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLmdldCgpKTsKKyAgICBjaGlsZC0+c2V0TWFz
a0xheWVyKG1hc2tMYXllci5nZXQoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQuZ2V0KCkp
OworCisgICAgaW50IG5vbmV4aXN0ZW50SWQgPSAtMTsKKyAgICBFWFBFQ1RfRVEocm9vdCwgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgcm9vdC0+
aWQoKSkpOworICAgIEVYUEVDVF9FUShjaGlsZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5k
TGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgY2hpbGQtPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEo
Z3JhbmRDaGlsZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9v
dC5nZXQoKSwgZ3JhbmRDaGlsZC0+aWQoKSkpOworICAgIEVYUEVDVF9FUShtYXNrTGF5ZXIsIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIG1hc2tM
YXllci0+aWQoKSkpOworICAgIEVYUEVDVF9FUShyZXBsaWNhTGF5ZXIsIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIHJlcGxpY2FMYXllci0+aWQo
KSkpOworICAgIEVYUEVDVF9FUSgwLCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllcklu
U3VidHJlZShyb290LmdldCgpLCBub25leGlzdGVudElkKSk7Cit9CisKIC8vIEZJWE1FOgogLy8g
Y29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Njg5NDIKIC8vICAtIGFkZCBhIHRlc3QgdG8gdmVyaWZ5IGNsaXBwaW5nIHRoYXQgY2hhbmdl
cyB0aGUgImNlbnRlciBwb2ludCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZjI2ZmRmODEwZWUwOWQ2
NDdiNDY2NmY1YzE1YzY2ZDMwMGMyM2NlNC4uYTY4ZTBjNjQxM2I3MzA4M2UxNzY0NDc4NGQ4Yzhi
MzJmNGE2OTE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTEzNiw2ICsxMzYsMjYgQEAgcHVibGlj
OgogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAg
IH0KIAorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVTY3JvbGxhYmxl
TGF5ZXIoaW50IGlkLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKGlkKTsKKyAgICAgICAgbGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7Cisg
ICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXRQ
b3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGxheWVyLT5zZXRCb3VuZHMoc2l6ZSk7CisgICAg
ICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKHNpemUud2lkdGgoKSAqIDIs
IHNpemUuaGVpZ2h0KCkgKiAyKSk7CisgICAgICAgIHJldHVybiBsYXllci5yZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpCisg
ICAgeworICAgICAgICBtX2hvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjcmVhdGVD
b250ZXh0KCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnBy
ZXBhcmVUb0RyYXcoZnJhbWUpKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFt
ZSk7CisgICAgICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIH0K
KwogcHJvdGVjdGVkOgogICAgIFBhc3NSZWZQdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUNv
bnRleHQoKQogICAgIHsKQEAgLTIyMSwxMCArMjQxLDEyIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0QW5kUmVkcmF3KQogewogICAgIHsKICAg
ICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsK
KyAgICAgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAw
KSk7CiAgICAgICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgICAgIHJvb3QtPnNl
dFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsKICAgICAgICAgcm9vdC0+c2V0TWF4U2Ny
b2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgICAgICBtX2hvc3RJbXBsLT5zZXRS
b290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgICAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJl
ckFuZERyYXdGcmFtZSgpOwogICAgIH0KIAogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMjM0LDIwICsyNTYsNzUgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290Q2FsbHNDb21taXRBbmRS
ZWRyYXcpCiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKIH0KIAorVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxXaXRob3V0Um9vdExheWVyKQoreworICAg
IC8vIFdlIHNob3VsZCBub3QgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gc2Nyb2xsIGFuIGVtcHR5IGxh
eWVyIHRyZWUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsSWdub3JlZCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
cmVwbGFjZVRyZWVXaGlsZVNjcm9sbGluZykKK3sKKyAgICBpbnQgbGF5ZXJJZCA9IDc7CisgICAg
eworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KGxheWVySWQpOworICAgICAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwg
MCwgMTAwLCAxMDApKTsKKyAgICAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAg
ICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgICAgICBpbml0
aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIH0KKworICAgIC8vIFdlIHNo
b3VsZCBub3QgY3Jhc2ggaWYgdGhlIHRyZWUgaXMgcmVwbGFjZWQgd2hpbGUgd2UgYXJlIHNjcm9s
bGluZy4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwg
MCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5yZWxlYXNlUm9vdExheWVyKCk7CisKKyAg
ICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVh
dGUobGF5ZXJJZCk7CisgICAgICAgIHJvb3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCkpOworICAgICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAg
ICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAg
ICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgfQorCisg
ICAgLy8gV2Ugc2hvdWxkIHN0aWxsIGJlIHNjcm9sbGluZywgYmVjYXVzZSB0aGUgc2Nyb2xsZWQg
bGF5ZXIgYWxzbyBleGlzdHMgaW4gdGhlIG5ldyB0cmVlLgorICAgIEludFNpemUgc2Nyb2xsRGVs
dGEoMCwgMTApOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBt
X2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4g
c2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBleHBl
Y3RDb250YWlucygqc2Nyb2xsSW5mbywgbGF5ZXJJZCwgc2Nyb2xsRGVsdGEpOworfQorCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGNsZWFyUm9vdFJlbmRlclN1cmZhY2VBbmRTY3Jv
bGwpCit7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgxKTsKKyAgICByb290LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAx
MDApKTsKKyAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIHJvb3QtPnNldE1heFNj
cm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJh
d0ZyYW1lKCk7CisKKyAgICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBzY3JvbGwgZXZlbiBpZiB0
aGUgcm9vdCBsYXllciBsb3NlcyBpdHMgcmVuZGVyIHN1cmZhY2UgYWZ0ZXIgdGhlIG1vc3QKKyAg
ICAvLyByZWNlbnQgcmVuZGVyLgorICAgIG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5jbGVhclJl
bmRlclN1cmZhY2UoKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGFydGVkKTsKK30KKwogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiB7CiAgICAgewogICAgICAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgICAgICByb290LT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICAgICAgcm9vdC0+
c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50
UG9pbnQoMCwgMCkpOwogICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXpl
KDEwMCwgMTAwKSk7CiAgICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVh
c2UoKSk7CisgICAgICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAg
ICAgfQogICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCk7CiAK
ICAgICByb290LT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKHRydWUpOwogICAgIC8vIFdpdGgg
cmVnaXN0ZXJlZCBldmVudCBoYW5kbGVycywgd2hlZWwgc2Nyb2xscyBoYXZlIHRvIGdvIHRvIHRo
ZSBtYWluIHRocmVhZC4KLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxGYWlsZWQpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxC
ZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7CiAKICAgICAvLyBCdXQgZ2VzdHVy
ZSBzY3JvbGxzIGNhbiBzdGlsbCBiZSBoYW5kbGVkLgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBs
LT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1
cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0yNTYsMjYgKzMz
MywzMiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHdoZWVsRXZlbnRIYW5kbGVy
cykKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2hvdWxkU2Nyb2xsT25NYWluVGhy
ZWFkKQogewogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVh
dGUoMCk7CisgICAgcm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwg
MTAwKSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICByb290LT5zZXRTY3Jv
bGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRp
b24oSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIHJvb3QtPnNldFNob3VsZFNjcm9sbE9uTWFpblRo
cmVhZCh0cnVlKTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkp
OwotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bEZhaWxlZCk7Ci0gICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6R2VzdHVyZSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxGYWlsZWQpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
MCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxPbk1haW5UaHJlYWQpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxC
ZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKTsKIH0KIAogVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkJhc2ljKQogewogICAg
IE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAg
cm9vdC0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAg
cm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJ
bnRQb2ludCgwLCAwKSk7CiAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgx
MDAsIDEwMCkpOwogICAgIHJvb3QtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKEludFJlY3Qo
MCwgMCwgNTAsIDUwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFz
ZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCiAgICAg
Ly8gQWxsIHNjcm9sbCB0eXBlcyBpbnNpZGUgdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9u
IHNob3VsZCBmYWlsLgotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQ
b2ludCgyNSwgMjUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7CisgICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9u
TWFpblRocmVhZCk7CiAKICAgICAvLyBBbGwgc2Nyb2xsIHR5cGVzIG91dHNpZGUgdGhpcyByZWdp
b24gc2hvdWxkIHN1Y2NlZWQuCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2lu
KEludFBvaW50KDc1LCA3NSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKQEAgLTI4OSwxNSArMzcyLDE1IEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25CYXNpYykK
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25X
aXRoT2Zmc2V0KQogewogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMSwgMSkpOworICAgIHJv
b3QtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIHJv
b3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50
UG9pbnQoMCwgMCkpOwogICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAw
LCAxMDApKTsKICAgICByb290LT5zZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihJbnRSZWN0KDAs
IDAsIDUwLCA1MCkpOwogICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLTI1LCAwKSk7
CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKLSAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7Ci0gICAgRVhQRUNUX1RSVUUobV9ob3N0
SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOwotICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMo
ZnJhbWUpOyAvLyBVcGRhdGUgZHJhdyB0cmFuc2Zvcm1zIHNvIHdlIGNhbiBjb3JyZWN0bHkgbWFw
IHBvaW50cyBpbnRvIGxheWVyIHNwYWNlLgorICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5k
RHJhd0ZyYW1lKCk7CiAKICAgICAvLyBUaGlzIHBvaW50IHdvdWxkIGZhbGwgaW50byB0aGUgbm9u
LWZhc3Qgc2Nyb2xsYWJsZSByZWdpb24gZXhjZXB0IHRoYXQgd2UndmUgbW92ZWQgdGhlIGxheWVy
IGRvd24gYnkgMjUgcGl4ZWxzLgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdp
bihJbnRQb2ludCg0MCwgMTApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0zMDUsMTUgKzM4OCwxNiBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uV2l0aE9m
ZnNldCkKICAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKIAogICAgIC8vIFRoaXMgcG9pbnQg
aXMgc3RpbGwgaW5zaWRlIHRoZSBub24tZmFzdCByZWdpb24uCi0gICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDEwLCAxMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworICAgIEVYUEVD
VF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxMCwgMTApLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhy
ZWFkKTsKIH0KIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwaW5jaEdlc3R1cmUp
CiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7
CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAotICAgIENDTGF5ZXJJbXBs
KiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnNjcm9sbExheWVyKCk7CisgICAgQ0NMYXllcklt
cGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7CiAgICAgQVNT
RVJUKHNjcm9sbExheWVyKTsKIAogICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VTY2FsZSA9IDAuNSwg
bWF4UGFnZVNjYWxlID0gNDsKQEAgLTM5Miw4ICs0NzYsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikKIHsKICAgICBzZXR1cFNjcm9sbEFuZENv
bnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3
cG9ydFNpemUoSW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFu
ZERyYXdGcmFtZSgpOwogCi0gICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1w
bC0+c2Nyb2xsTGF5ZXIoKTsKKyAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJ
bXBsLT5yb290U2Nyb2xsTGF5ZXIoKTsKICAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOwogCiAgICAg
Y29uc3QgZmxvYXQgbWluUGFnZVNjYWxlID0gMC41LCBtYXhQYWdlU2NhbGUgPSA0OwpAQCAtNDM3
LDYgKzUyMiwxMDEgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYWdlU2NhbGVB
bmltYXRpb24pCiAgICAgfQogfQogCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGlu
aGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVzV2hpbGVQaW5jaFpvb21pbmcpCit7CisgICAg
c2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgbV9o
b3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxM
YXllciA9IG1faG9zdEltcGwtPnJvb3RTY3JvbGxMYXllcigpOworICAgIEFTU0VSVChzY3JvbGxM
YXllcik7CisKKyAgICBjb25zdCBmbG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUsIG1heFBhZ2VTY2Fs
ZSA9IDQ7CisKKyAgICAvLyBQaW5jaCB6b29tIGluLgorICAgIHsKKyAgICAgICAgLy8gU3RhcnQg
YSBwaW5jaCBpbiBnZXN0dXJlIGF0IHRoZSBib3R0b20gcmlnaHQgY29ybmVyIG9mIHRoZSB2aWV3
cG9ydC4KKyAgICAgICAgY29uc3QgZmxvYXQgem9vbUluRGVsdGEgPSAyOworICAgICAgICBtX2hv
c3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMSwgbWluUGFnZVNjYWxlLCBtYXhQ
YWdlU2NhbGUpOworICAgICAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVCZWdpbigpOworICAg
ICAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVVcGRhdGUoem9vbUluRGVsdGEsIEludFBvaW50
KDUwLCA1MCkpOworCisgICAgICAgIC8vIEJlY2F1c2Ugd2UgYXJlIHBpbmNoIHpvb21pbmcgaW4s
IHdlIHNob3VsZG4ndCBnZXQgYW55IHNjcm9sbCBvciBwYWdlCisgICAgICAgIC8vIHNjYWxlIGRl
bHRhcy4KKyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBt
X2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgICAgIEVYUEVDVF9FUShzY3Jv
bGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgMSk7CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZv
LT5zY3JvbGxzLnNpemUoKSwgMHUpOworCisgICAgICAgIC8vIE9uY2UgdGhlIGdlc3R1cmUgZW5k
cywgd2UgZ2V0IHRoZSBmaW5hbCBzY3JvbGwgYW5kIHBhZ2Ugc2NhbGUgdmFsdWVzLgorICAgICAg
ICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVFbmQoKTsKKyAgICAgICAgc2Nyb2xsSW5mbyA9IG1f
aG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNjcm9s
bEluZm8tPnBhZ2VTY2FsZURlbHRhLCB6b29tSW5EZWx0YSk7CisgICAgICAgIGV4cGVjdENvbnRh
aW5zKCpzY3JvbGxJbmZvLCBzY3JvbGxMYXllci0+aWQoKSwgSW50U2l6ZSgyNSwgMjUpKTsKKyAg
ICB9CisKKyAgICAvLyBQaW5jaCB6b29tIG91dC4KKyAgICB7CisgICAgICAgIC8vIFN0YXJ0IGEg
cGluY2ggb3V0IGdlc3R1cmUgYXQgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgdGhlIHZpZXdw
b3J0LgorICAgICAgICBjb25zdCBmbG9hdCB6b29tT3V0RGVsdGEgPSAwLjc1OworICAgICAgICBt
X2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMSwgbWluUGFnZVNjYWxlLCBt
YXhQYWdlU2NhbGUpOworICAgICAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVCZWdpbigpOwor
ICAgICAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVVcGRhdGUoem9vbU91dERlbHRhLCBJbnRQ
b2ludCg1MCwgNTApKTsKKworICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgcGluY2ggem9vbWluZyBv
dXQsIHdlIHNob3VsZCBnZXQgYW4gdXBkYXRlIHRvIHpvb20gYWxsCisgICAgICAgIC8vIHRoZSB3
YXkgb3V0IHRvIHRoZSBtaW5pbXVtIHBhZ2Ugc2NhbGUuCisgICAgICAgIE93blB0cjxDQ1Njcm9s
bEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRh
cygpOworICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIG1pblBh
Z2VTY2FsZSk7CisgICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLCBzY3JvbGxMYXll
ci0+aWQoKSwgSW50U2l6ZSgwLCAwKSk7CisKKyAgICAgICAgLy8gT25jZSB0aGUgZ2VzdHVyZSBl
bmRzLCB3ZSBnZXQgdGhlIGZpbmFsIHNjcm9sbCBhbmQgcGFnZSBzY2FsZSB2YWx1ZXMuCisgICAg
ICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZUVuZCgpOworICAgICAgICBzY3JvbGxJbmZvID0g
bV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgICAgICBFWFBFQ1RfRVEoc2Ny
b2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIHpvb21PdXREZWx0YSk7CisgICAgICAgIGV4cGVjdENv
bnRhaW5zKCpzY3JvbGxJbmZvLCBzY3JvbGxMYXllci0+aWQoKSwgSW50U2l6ZSg4LCA4KSk7Cisg
ICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGluaGliaXRTY3JvbGxB
bmRQYWdlU2NhbGVVcGRhdGVzV2hpbGVBbmltYXRpbmdQYWdlU2NhbGUpCit7CisgICAgc2V0dXBT
Y3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9
IG1faG9zdEltcGwtPnJvb3RTY3JvbGxMYXllcigpOworICAgIEFTU0VSVChzY3JvbGxMYXllcik7
CisKKyAgICBjb25zdCBmbG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUsIG1heFBhZ2VTY2FsZSA9IDQ7
CisgICAgY29uc3QgZG91YmxlIHN0YXJ0VGltZSA9IDE7CisgICAgY29uc3QgZG91YmxlIGR1cmF0
aW9uID0gMC4xOworICAgIGNvbnN0IGRvdWJsZSBoYWxmd2F5VGhyb3VnaEFuaW1hdGlvbiA9IHN0
YXJ0VGltZSArIGR1cmF0aW9uIC8gMjsKKyAgICBjb25zdCBkb3VibGUgZW5kVGltZSA9IHN0YXJ0
VGltZSArIGR1cmF0aW9uOworCisgICAgLy8gU3RhcnQgYSBwYWdlIHNjYWxlIGFuaW1hdGlvbi4K
KyAgICBjb25zdCBmbG9hdCBwYWdlU2NhbGVEZWx0YSA9IDI7CisgICAgbV9ob3N0SW1wbC0+c2V0
UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDEsIG1pblBhZ2VTY2FsZSwgbWF4UGFnZVNjYWxlKTsK
KyAgICBtX2hvc3RJbXBsLT5zdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihJbnRTaXplKDUwLCA1MCks
IGZhbHNlLCBwYWdlU2NhbGVEZWx0YSwgc3RhcnRUaW1lLCBkdXJhdGlvbik7CisKKyAgICAvLyBX
ZSBzaG91bGQgaW1tZWRpYXRlbHkgZ2V0IHRoZSBmaW5hbCB6b29tIGFuZCBzY3JvbGwgdmFsdWVz
IGZvciB0aGUKKyAgICAvLyBhbmltYXRpb24uCisgICAgbV9ob3N0SW1wbC0+YW5pbWF0ZShoYWxm
d2F5VGhyb3VnaEFuaW1hdGlvbiwgaGFsZndheVRocm91Z2hBbmltYXRpb24pOworICAgIE93blB0
cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Nj
cm9sbERlbHRhcygpOworICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwg
cGFnZVNjYWxlRGVsdGEpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLCBzY3JvbGxM
YXllci0+aWQoKSwgSW50U2l6ZSgyNSwgMjUpKTsKKworICAgIC8vIFNjcm9sbGluZyBkdXJpbmcg
dGhlIGFuaW1hdGlvbiBpcyBpZ25vcmVkLgorICAgIGNvbnN0IEludFNpemUgc2Nyb2xsRGVsdGEo
MCwgMTApOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgy
NSwgMjUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEp
OworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworCisgICAgLy8gVGhlIGZpbmFsIHBhZ2Ug
c2NhbGUgYW5kIHNjcm9sbCBkZWx0YXMgc2hvdWxkIG1hdGNoIHdoYXQgd2UgZ290CisgICAgLy8g
ZWFybGllci4KKyAgICBtX2hvc3RJbXBsLT5hbmltYXRlKGVuZFRpbWUsIGVuZFRpbWUpOworICAg
IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgRVhQ
RUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCBwYWdlU2NhbGVEZWx0YSk7CisgICAg
ZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKDI1
LCAyNSkpOworfQorCiBjbGFzcyBEaWREcmF3Q2hlY2tMYXllciA6IHB1YmxpYyBDQ1RpbGVkTGF5
ZXJJbXBsIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxEaWREcmF3Q2hlY2tMYXll
cj4gY3JlYXRlKGludCBpZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IERpZERyYXdDaGVja0xheWVy
KGlkKSk7IH0KQEAgLTY1Myw2ICs4MzMsMjk5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hlbkFuaW1hdGlvblVzZXNDaGVja2VyYm9hcmQpCiAg
ICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CiB9CiAKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdElnbm9yZWQpCit7CisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5zZXRT
Y3JvbGxhYmxlKGZhbHNlKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxl
YXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAg
ICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIGxheWVyIGlzIG5vdCBzY3JvbGxh
YmxlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAw
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAg
IEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE5vbkNvbXBvc2l0ZWRSb290KQoreworICAgIC8vIFRlc3Qg
dGhlIGNvbmZpZ3VyYXRpb24gd2hlcmUgYSBub24tY29tcG9zaXRlZCByb290IGxheWVyIGlzIGVt
YmVkZGVkIGluIGEKKyAgICAvLyBzY3JvbGxhYmxlIG91dGVyIGxheWVyLgorICAgIEludFNpemUg
c3VyZmFjZVNpemUoMTAsIDEwKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudExh
eWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBjb250ZW50TGF5ZXItPnNldElzTm9u
Q29tcG9zaXRlZENvbnRlbnQodHJ1ZSk7CisgICAgY29udGVudExheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisgICAgY29udGVudExheWVyLT5zZXRQb3NpdGlvbihJbnRQb2ludCg1LCA1KSk7
CisgICAgY29udGVudExheWVyLT5zZXRCb3VuZHMoc3VyZmFjZVNpemUpOworICAgIGNvbnRlbnRM
YXllci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKHN1cmZhY2VTaXplLndpZHRoKCkgKiAyLCBz
dXJmYWNlU2l6ZS5oZWlnaHQoKSAqIDIpKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gc2Ny
b2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHNjcm9sbExheWVyLT5zZXRT
Y3JvbGxhYmxlKHRydWUpOworICAgIHNjcm9sbExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihz
dXJmYWNlU2l6ZSk7CisgICAgc2Nyb2xsTGF5ZXItPmFkZENoaWxkKGNvbnRlbnRMYXllci5yZWxl
YXNlKCkpOworCisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9sbExheWVyLnJlbGVh
c2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAg
ICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAg
bV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOworICAgIG1faG9zdEltcGwtPnNj
cm9sbEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQ
RUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzY3JvbGxDaGlsZENhbGxzQ29tbWl0QW5kUmVkcmF3KQoreworICAgIEludFNp
emUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFi
bGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmll
d3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERy
YXdGcmFtZSgpOworCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgw
LCAxMCkpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIEVYUEVDVF9UUlVFKG1f
ZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsK
K30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNDaGlsZCkK
K3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5hZGRDaGlsZChj
cmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsK
KyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9z
dEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIC8vIFNjcm9sbCBldmVudCBpcyBpZ25vcmVk
IGJlY2F1c2UgdGhlIGlucHV0IGNvb3JkaW5hdGUgaXMgb3V0c2lkZSB0aGUgbGF5ZXIgYm91bmRh
cmllcy4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTUs
IDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7Cisg
ICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkKQoreworICAgIElu
dFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQg
PSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4LnJvdGF0ZTNkKDE4MCwg
MCwgMCk7CisgICAgY2hpbGQtPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgIGNoaWxkLT5zZXRE
b3VibGVTaWRlZChmYWxzZSk7CisKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkp
OworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIC8vIFNjcm9sbCBldmVu
dCBpcyBpZ25vcmVkIGJlY2F1c2UgdGhlIHNjcm9sbGFibGUgbGF5ZXIgaXMgbm90IGZhY2luZyB0
aGUgdmlld2VyIGFuZCB0aGVyZSBpcworICAgIC8vIG5vdGhpbmcgc2Nyb2xsYWJsZSBiZWhpbmQg
aXQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUp
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAg
RVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQmxvY2tlZEJ5Q29udGVudExheWVyKQoreworICAgIEludFNp
emUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNvbnRlbnRM
YXllciA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNl
U2l6ZSk7CisgICAgY29udGVudExheWVyLT5zZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQodHJ1
ZSk7CisgICAgY29udGVudExheWVyLT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIHNjcm9sbExheWVyLT5hZGRDaGlsZChj
b250ZW50TGF5ZXIucmVsZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihz
Y3JvbGxMYXllci5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShz
dXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsK
KworICAgIC8vIFNjcm9sbGluZyBmYWlscyBiZWNhdXNlIHRoZSBjb250ZW50IGxheWVyIGlzIGFz
a2luZyB0byBiZSBzY3JvbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgRVhQRUNUX0VRKG1f
aG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKTsKK30K
KworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFn
ZVNjYWxlT25NYWluVGhyZWFkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsK
KyAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9
IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEw
KTsKKyAgICBJbnRTaXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIElu
dFNpemUgZXhwZWN0ZWRNYXhTY3JvbGwobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9s
bFBvc2l0aW9uKCkpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQ
b2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERl
bHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgIC8vIFNldCBuZXcgcGFn
ZSBzY2FsZSBmcm9tIG1haW4gdGhyZWFkLgorICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZh
Y3RvckFuZExpbWl0cyhwYWdlU2NhbGUsIHBhZ2VTY2FsZSwgcGFnZVNjYWxlKTsKKworICAgIC8v
IFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHNjcm9sbCBkZWx0YS4KKyAgICBleHBlY3Rl
ZFNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZSk7CisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2Nh
bGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Cisg
ICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDAsIGV4cGVjdGVkU2Nyb2xsRGVs
dGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgYWxzbyBoYXZlIGJlZW4gdXBk
YXRlZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9sbFBv
c2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxlIGRl
bHRhIHJlbWFpbnMgY29uc3RhbnQgYmVjYXVzZSB0aGUgaW1wbCB0aHJlYWQgZGlkIG5vdCBzY2Fs
ZS4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPnBhZ2VTY2FsZURlbHRh
KCksIDEpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RB
bmRDaGFuZ2VQYWdlU2NhbGVPbkltcGxUaHJlYWQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6
ZSgxMCwgMTApOworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1
cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgbV9o
b3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDEsIDEsIHBhZ2VTY2FsZSk7Cisg
ICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEludFNpemUg
c2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3Jv
bGxEZWx0YSk7CisgICAgSW50U2l6ZSBleHBlY3RlZE1heFNjcm9sbChtX2hvc3RJbXBsLT5yb290
TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwp
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+
c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworCisg
ICAgLy8gU2V0IG5ldyBwYWdlIHNjYWxlIG9uIGltcGwgdGhyZWFkIGJ5IHBpbmNoaW5nLgorICAg
IG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZUJlZ2luKCk7CisgICAgbV9ob3N0SW1wbC0+cGluY2hH
ZXN0dXJlVXBkYXRlKHBhZ2VTY2FsZSwgSW50UG9pbnQoKSk7CisgICAgbV9ob3N0SW1wbC0+cGlu
Y2hHZXN0dXJlRW5kKCk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIGRlbHRhIGlzIG5vdCBzY2FsZWQg
YmVjYXVzZSB0aGUgbWFpbiB0aHJlYWQgZGlkIG5vdCBzY2FsZS4KKyAgICBPd25QdHI8Q0NTY3Jv
bGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0
YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMCwgZXhwZWN0ZWRT
Y3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBhbHNvIGhhdmUg
YmVlbiB1cGRhdGVkLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4
U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ug
c2NhbGUgZGVsdGEgc2hvdWxkIG1hdGNoIHRoZSBuZXcgc2NhbGUgb24gdGhlIGltcGwgc2lkZS4K
KyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPnBhZ2VTY2FsZURlbHRhKCks
IHBhZ2VTY2FsZSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
Q2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCit7CisgICAgSW50U2l6ZSBzdXJm
YWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMCk7CisgICAgLy8gQWxzbyBtYXJrIHRoZSByb290IHNjcm9sbGFibGUgc28g
aXQgYmVjb21lcyB0aGUgcm9vdCBzY3JvbGwgbGF5ZXIuCisgICAgcm9vdC0+c2V0U2Nyb2xsYWJs
ZSh0cnVlKTsKKyAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5
ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJm
YWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKwor
ICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5jaGlsZHJl
bigpWzBdLmdldCgpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgSW50
U2l6ZSBleHBlY3RlZFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBJbnRTaXplIGV4cGVj
dGVkTWF4U2Nyb2xsKGNoaWxkLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEo
bV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBt
X2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xs
RW5kKCk7CisKKyAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOworICAgIG1faG9zdEltcGwtPnNldFBh
Z2VTY2FsZUZhY3RvckFuZExpbWl0cyhwYWdlU2NhbGUsIDEsIHBhZ2VTY2FsZSk7CisKKyAgICAv
LyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSBzY3JvbGwgZGVsdGEuCisgICAgZXhwZWN0
ZWRTY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGUpOworICAgIE93blB0cjxDQ1Njcm9sbEFuZFNj
YWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwor
ICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAxLCBleHBlY3RlZFNjcm9sbERl
bHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIG5vdCBoYXZlIGNoYW5nZWQu
CisgICAgRVhQRUNUX0VRKGNoaWxkLT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNj
cm9sbCk7CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBkZWx0YSByZW1haW5zIGNvbnN0YW50IGJl
Y2F1c2UgdGhlIGltcGwgdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisgICAgRVhQRUNUX0VRKGNoaWxk
LT5wYWdlU2NhbGVEZWx0YSgpLCAxKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBzY3JvbGxDaGlsZEJleW9uZExpbWl0KQoreworICAgIC8vIFNjcm9sbCBhIGNoaWxkIGxh
eWVyIGJleW9uZCBpdHMgbWF4aW11bSBzY3JvbGwgcmFuZ2UgYW5kIG1ha2Ugc3VyZSB0aGUKKyAg
ICAvLyBwYXJlbnQgbGF5ZXIgaXMgc2Nyb2xsZWQgb24gdGhlIGF4aXMgb24gd2hpY2ggdGhlIGNo
aWxkIHdhcyB1bmFibGUgdG8KKyAgICAvLyBzY3JvbGwuCisgICAgSW50U2l6ZSBzdXJmYWNlU2l6
ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFi
bGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQ
b2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIGdyYW5kQ2hpbGQtPnNldFNjcm9sbFBvc2l0
aW9uKEludFBvaW50KDAsIDUpKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBj
cmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwor
ICAgIGNoaWxkLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgzLCAwKSk7CisgICAgY2hpbGQt
PmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKworICAgIHJvb3QtPmFkZENoaWxkKGNo
aWxkLnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFz
ZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgeworICAgICAgICBJ
bnRTaXplIHNjcm9sbERlbHRhKC0zLCAtNyk7CisgICAgICAgIEVYUEVDVF9FUShtX2hvc3RJbXBs
LT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVs
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgICAgICBtX2hvc3RJ
bXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgICAgIG1faG9zdEltcGwtPnNjcm9sbEVu
ZCgpOworCisgICAgICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0g
bV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworCisgICAgICAgIC8vIFRoZSBncmFu
ZCBjaGlsZCBzaG91bGQgaGF2ZSBzY3JvbGxlZCB1cCB0byBpdHMgbGltaXQuCisgICAgICAgIEND
TGF5ZXJJbXBsKiBjaGlsZCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5jaGlsZHJlbigpWzBd
LmdldCgpOworICAgICAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJl
bigpWzBdLmdldCgpOworICAgICAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwg
Z3JhbmRDaGlsZC0+aWQoKSwgSW50U2l6ZSgwLCAtNSkpOworCisgICAgICAgIC8vIFRoZSBjaGls
ZCBzaG91bGQgaGF2ZSBvbmx5IHNjcm9sbGVkIG9uIHRoZSBvdGhlciBheGlzLgorICAgICAgICBl
eHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgY2hpbGQtPmlkKCksIEludFNpemUoLTMs
IDApKTsKKyAgICB9Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
RXZlbnRCdWJibGluZykKK3sKKyAgICAvLyBXaGVuIHdlIHRyeSB0byBzY3JvbGwgYSBub24tc2Ny
b2xsYWJsZSBjaGlsZCBsYXllciwgdGhlIHNjcm9sbCBkZWx0YQorICAgIC8vIHNob3VsZCBiZSBh
cHBsaWVkIHRvIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGlmIHBvc3NpYmxlLgorICAgIEludFNpemUg
c3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworCisgICAgY2hpbGQtPnNldFNjcm9sbGFibGUo
ZmFsc2UpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNl
dFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJB
bmREcmF3RnJhbWUoKTsKKyAgICB7CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgNCk7
CisgICAgICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbFN0YXJ0ZWQpOworICAgICAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7
CisgICAgICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworCisgICAgICAgIE93blB0cjxDQ1Nj
cm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERl
bHRhcygpOworCisgICAgICAgIC8vIE9ubHkgdGhlIHJvb3Qgc2hvdWxkIGhhdmUgc2Nyb2xsZWQu
CisgICAgICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zY3JvbGxzLnNpemUoKSwgMXUpOworICAg
ICAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgbV9ob3N0SW1wbC0+cm9vdExh
eWVyKCktPmlkKCksIHNjcm9sbERlbHRhKTsKKyAgICB9Cit9CisKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQmVmb3JlUmVkcmF3KQoreworICAgIEludFNpemUgc3VyZmFj
ZVNpemUoMTAsIDEwKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoY3JlYXRlU2Nyb2xs
YWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKworICAgIC8vIERyYXcgb25lIGZy
YW1lIGFuZCB0aGVuIGltbWVkaWF0ZWx5IHJlYnVpbGQgdGhlIGxheWVyIHRyZWUgdG8gbWltaWMg
YSB0cmVlIHN5bmNocm9uaXphdGlvbi4KKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERy
YXdGcmFtZSgpOworICAgIG1faG9zdEltcGwtPnJlbGVhc2VSb290TGF5ZXIoKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKSk7CisKKyAgICAvLyBTY3JvbGxpbmcgc2hvdWxkIHN0aWxsIHdv
cmsgZXZlbiB0aG91Z2ggd2UgZGlkIG5vdCBkcmF3IHlldC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpX
aGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKK30KKwogY2xhc3Mg
QmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
IHsKIHB1YmxpYzoKICAgICBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQoKSA6IG1fYmxlbmQoZmFs
c2UpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAKaW5kZXggYjAzNDM3MGNlZTYxNzU2YzE4ZmY0ODAyMDliZjNiNDFkNTgw
MzY1Yi4uMjMwZDVkN2I1N2UyMGZhYjFiNmYwM2U5YWEwNGFjNTg4MjQ2M2Q0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
CkBAIC0xMTU5LDYgKzExNTksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCBib29s
IHByZXNlcnZlczNEKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Ny
b2xsKGNvbnN0IEludFNpemUmKSB7IH0KIAogcHJpdmF0ZToKICAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0KiBtX3Rlc3Q7CkBAIC0xMjQ2LDcgKzEyNDcsOCBAQCBjbGFzcyBNb2NrQ29udGVudExheWVy
RGVsZWdhdGUgOiBwdWJsaWMgQ29udGVudExheWVyRGVsZWdhdGUgewogcHVibGljOgogICAgIGJv
b2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIE1PQ0tfQ09OU1Rf
TUVUSE9EMChwcmVzZXJ2ZXMzRCwgYm9vbCgpKTsKLSAgICB2b2lkIHBhaW50Q29udGVudHMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWlu
dENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKSB7IH0KICAgICB2b2lkIG5vdGlmeVN5
bmNSZXF1aXJlZCgpIHsgfQogfTsKIApAQCAtMjIwMiw0ICsyMjA0LDcwIEBAIHByaXZhdGU6CiAK
IFNJTkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJB
ZGRlZFdpdGhBbmltYXRpb24pCiAKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGls
ZExheWVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5
ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKCkKKyAgICAgICAgOiBtX3Njcm9sbEFtb3Vu
dCgyLCAxKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAg
ICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAs
IDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyID0gQ29udGVudExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmbV9tb2NrRGVsZWdhdGUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0
Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRJ
c0RyYXdhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJs
ZSh0cnVlKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9u
KEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIo
KS0+YWRkQ2hpbGQobV9yb290U2Nyb2xsTGF5ZXIpOworICAgICAgICBtX2NoaWxkTGF5ZXIgPSBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0ZSk7CisgICAgICAgIG1f
Y2hpbGRMYXllci0+c2V0Qm91bmRzKEludFNpemUoNTAsIDUwKSk7CisgICAgICAgIG1fY2hpbGRM
YXllci0+c2V0SXNEcmF3YWJsZSh0cnVlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRTY3Jv
bGxhYmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9u
KEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPmFkZENoaWxk
KG1fY2hpbGRMYXllcik7CisgICAgICAgIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFpblRocmVhZCgp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCkKKyAgICB7CisgICAgICAgIEludFBvaW50IHBvc2l0
aW9uID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcm9v
dFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiArIHNjcm9sbERlbHRhKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9yb290U2Nyb2xs
TGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBpZiAoIW1fbGF5
ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxk
TGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2lu
dCgpICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5
ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAg
aWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKGlt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hl
ZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgICAgICBp
bXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxF
bmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDIpCisgICAg
ICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgp
CisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1v
dW50OworICAgIE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZSBtX21vY2tEZWxlZ2F0ZTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9jaGlsZExheWVyOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBtX3Jvb3RTY3JvbGxMYXllcjsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0
U2Nyb2xsQ2hpbGRMYXllciwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdCh0cnVlKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcApp
bmRleCA5MmYwMDYxODQxNDc5NTZlMTAxOWZjNjkwMTVmNjM5ZTQ4OTRmMzMxLi5kNWI2OGE4Njdm
NzgyY2M2N2ZkMWI3YmMyOTYyMDUyOTM0ZmQ3MDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbFRlc3QuY3BwCkBAIC0yMDIsMTQgKzIwMiwxNCBAQCBURVNUX0YoV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlU2Nyb2xsU3RhcnRlZCkKICAgICBtX2lucHV0SGFu
ZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKIH0KIAotVEVTVF9GKFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNjcm9sbEZhaWxlZCkKK1RFU1RfRihXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxPbk1haW5UaHJlYWQp
CiB7CiAgICAgLy8gV2Ugc2hvdWxkIHNlbmQgYWxsIGV2ZW50cyB0byB0aGUgd2lkZ2V0IGZvciB0
aGlzIGdlc3R1cmUuCiAgICAgbV9leHBlY3RlZERpc3Bvc2l0aW9uID0gRGlkTm90SGFuZGxlOwog
ICAgIFZFUklGWV9BTkRfUkVTRVRfTU9DS1MoKTsKIAogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0ND
SW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbig6OnRlc3Rpbmc6Ol8sIDo6dGVzdGluZzo6
XykpCi0gICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkpOworICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6
UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQp
KTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdp
bjsKICAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKQEAgLTMw
Niw3ICszMDYsNyBAQCBURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBn
ZXN0dXJlRmxpbmdGYWlsZWQpCiAgICAgVkVSSUZZX0FORF9SRVNFVF9NT0NLUygpOwogCiAgICAg
RVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rp
bmc6Ol8sIHRlc3Rpbmc6Ol8pKQotICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdl
YkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAgICAgLldp
bGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsT25NYWluVGhyZWFkKSk7CiAKICAgICBnZXN0dXJlLnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpH
ZXN0dXJlRmxpbmdTdGFydDsKICAgICBtX2lucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChn
ZXN0dXJlKTsKQEAgLTM4Nyw3ICszODcsNyBAQCBURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdBbmltYXRlcykKICAgICAvLyB0cmFuc2ZlcnJlZCB0
byB0aGUgbWFpbiB0aHJlYWQuCiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJD
bGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5w
dXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKLSAg
ICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4o
V2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCkpOwogICAg
IEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCeSh0ZXN0aW5n
OjpfKSkuVGltZXMoMCk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGll
bnQsIHNjcm9sbEVuZCgpKS5UaW1lcygwKTsKIApAQCAtNDY5LDcgKzQ2OSw3IEBAIFRFU1RfRihX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVGbGluZ1RyYW5zZmVyUmVz
ZXRzKQogICAgIC8vIHRyYW5zZmVycmVkIHRvIHRoZSBtYWluIHRocmVhZC4KICAgICBFWFBFQ1Rf
Q0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2NoZWR1bGVBbmltYXRpb24oKSk7CiAg
ICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRl
c3Rpbmc6Ol8sIHRlc3Rpbmc6Ol8pKQotICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJu
KFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAgICAg
LldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsT25NYWluVGhyZWFkKSk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRs
ZXJDbGllbnQsIHNjcm9sbEJ5KHRlc3Rpbmc6Ol8pKS5UaW1lcygwKTsKICAgICBFWFBFQ1RfQ0FM
TChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsRW5kKCkpLlRpbWVzKDApOwogCkBA
IC01NDYsNyArNTQ2LDcgQEAgVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVz
dCwgZ2VzdHVyZUZsaW5nVHJhbnNmZXJSZXNldHMpCiAgICAgLy8gVGhlbiBhYm9ydCB0aGUgc2Vj
b25kIGZsaW5nLgogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBz
Y2hlZHVsZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxl
ckNsaWVudCwgc2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCi0gICAgICAgIC5X
aWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbEZhaWxlZCkpOworICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6
OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpKTsKICAgICBFWFBFQ1Rf
Q0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQnkodGVzdGluZzo6XykpLlRp
bWVzKDApOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3Jv
bGxFbmQoKSkuVGltZXMoMCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147383</attachid>
            <date>2012-06-13 12:07:48 -0700</date>
            <delta_ts>2012-06-14 09:51:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120613200746.patch</filename>
            <type>text/plain</type>
            <size>119429</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBkODY1ZTA1ZTgxMjdj
ZDdlNmEzZWI3MWU5Zjk0NWEzNjZhZGUxZC4uYzdlNjIxYWU2YThiNmNmN2I4NDU4MDkxMmI0Mzg3
MzA1ZmE3OWVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAzLTI4ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBlbmFibGVzIHNjcm9sbGluZyBjaGlsZCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgorICAgICAgICBTY3JvbGwgZGVsdGFzIGFyZSBhY2N1bXVsYXRlZCBmb3IgZWFjaCBzY3JvbGxl
ZCBDQ0xheWVySW1wbCBhbmQKKyAgICAgICAgc3luY2hyb25pemVkIHRvIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICBJZiBhIGxheWVyIGhhcyBubyByb29tIHRvIHNjcm9sbCBpbiBhIGdpdmVu
IGRpcmVjdGlvbiwgb25lIG9mIGl0cworICAgICAgICBhbmNlc3RvciBsYXllcnMgaXMgc2Nyb2xs
ZWQgaW5zdGVhZCBpZiBwb3NzaWJsZS4KKworICAgICAgICBBZGRlZCBuZXcgd2Via2l0X3VuaXRf
dGVzdHMgdG8gdmVyaWZ5IHNjcm9sbGluZyBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyRGVsZWdhdGUpOgorICAgICAgICAoQ29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjpkaWRTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2Nyb2xsQnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpmaW5kTGF5ZXJJblN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllcklt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGF5ZXJCeUlkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlVmlzaWJsZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcm9s
bExheWVyRm9yQ29udGVudExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0U2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDYt
MTIgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTcGVlY2gg
SmF2YVNjcmlwdCBBUEk6IEFkZCB0ZXN0IGZvciBjb25zdHJ1Y3RpbmcgU3BlZWNoUmVjb2duaXRp
b25FcnJvciBldmVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzE3YzVlNWRjNTg1
NWEwNjljMGNlM2EwZTY5ZDlmMTNlMDc4YTZiZS4uOGFkYzQ4ZjViM2RmY2ZlNjc2NWIwMGM1YWQ1
ZjI5ZmI1M2FhMTAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBA
QAorMjAxMi0wMy0yOCAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbY2hyb21pdW1dIEFkZCB0ZXN0cyBmb3Igc2Nyb2xsaW5nIG5vbi1yb290IGxheWVy
cyBpbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczMzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBzcmMvV2ViQ29udGVudExheWVySW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6OmRpZFNjcm9sbCk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJD
b250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiB0
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6OmNyZWF0ZVNjcm9sbGFibGVMYXllcik6CisgICAgICAg
IChDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NMYXll
clRyZWVIb3N0SW1wbFRlc3Q6OmluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUX0YpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpU
ZXN0T3BhY2l0eUNoYW5nZUxheWVyRGVsZWdhdGU6OmRpZFNjcm9sbCk6CisgICAgICAgIChXVEY6
Ok1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXVEY6
Ok1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZTo6ZGlkU2Nyb2xsKToKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6
OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGls
ZExheWVyOjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpkcmF3TGF5ZXJzT25D
Q1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToK
KwogMjAxMi0wNi0xMyAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBSRUdSRVNTSU9OKHIxMTgwOTgpOiA8Y29udGVudD4gZWxlbWVudCBkb2VzIG5vdCByZW5k
ZXIgZGlzdHJpYnV0ZWQgY2hpbGRyZW4gd2hlbiBjbG9uZWQgZnJvbSBhbm90aGVyIGRvY3VtZW50
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI5OTQ5OTEyY2I3MzBlYzU2
NGRhMjNhMDdiNGY5ZDg2OWY2MGZiNDYuLmI4YTgwMThkOGQ0Yjc4MTFlY2I4YWVmZjdlMjRlZTVi
MzEyZmM0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ29udGVudExheWVyRGVsZWdhdGUgaW1wbGVtZW50
YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJ
bnRTaXplJikgT1ZFUlJJREUgeyB9CiAKICAgICAvLyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUg
aW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
ZG91YmxlIHN0YXJ0VGltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGJjODJmZWIwZGY0
M2Y3YjQ4NWYwMjE5NzZiMjI3NjFjZDYxZDE4MjUuLjY1MTk3ZjA4ZWQ5YzdhM2I3MDAzZDVlOTUw
MWI4OWRmNGY4NGZiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC05Myw2ICs5Myw3IEBA
IExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwgbV9zY3JlZW5TcGFjZVRyYW5z
Zm9ybUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEuMCkKICAgICAs
IG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKQorICAgICwgbV9sYXllclNjcm9sbERlbGVnYXRl
KDApCiB7CiB9CiAKQEAgLTM5NCw2ICszOTUsMTQgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgc2V0TmVl
ZHNDb21taXQoKTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikKK3sKKyAgICBpZiAobV9tYXhTY3Jv
bGxQb3NpdGlvbiA9PSBtYXhTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG1f
bWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsKKyAgICBzZXROZWVkc0NvbW1p
dCgpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxh
YmxlKQogewogICAgIGlmIChtX3Njcm9sbGFibGUgPT0gc2Nyb2xsYWJsZSkKQEAgLTQyNyw2ICs0
MzYsMTMgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihj
b25zdCBSZWdpb24mIHJlZ2lvbikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIExh
eWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAg
IHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7CisgICAg
aWYgKG1fbGF5ZXJTY3JvbGxEZWxlZ2F0ZSkKKyAgICAgICAgbV9sYXllclNjcm9sbERlbGVnYXRl
LT5kaWRTY3JvbGwoc2Nyb2xsRGVsdGEpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldERy
YXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoYm9vbCBjaGVja2VyYm9hcmQpCiB7CiAgICAg
aWYgKG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyA9PSBjaGVja2VyYm9hcmQpCkBA
IC01MTMsNiArNTI5LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKEND
TGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlz
aWJsZVJlY3QobV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk7CiAgICAgbGF5ZXIt
PnNldFByZXNlcnZlczNEKHByZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3Np
dGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
bV9tYXhTY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKG1f
c3VibGF5ZXJUcmFuc2Zvcm0pOwogICAgIGlmICghdHJhbnNmb3JtSXNBbmltYXRpbmcoKSkKICAg
ICAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
aW5kZXggZTMzYzJmZGE4OGE3ODRmNTUzMzYxYWJjM2Y4ZTE1YmU5ODc1YzBhNS4uNDk3YTQwMzE5
NTE3MzdjMWY3NWY5ODUwNDAwODZhODU1OTM5NjcxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAt
NjUsNiArNjUsMTUgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NUZXh0dXJlVXBk
YXRlcjsKIGNsYXNzIFNjcm9sbGJhckxheWVyQ2hyb21pdW07CiAKKy8vIERlbGVnYXRlIGZvciBo
YW5kbGluZyBzY3JvbGwgaW5wdXQgZm9yIGEgTGF5ZXJDaHJvbWl1bS4KK2NsYXNzIExheWVyQ2hy
b21pdW1TY3JvbGxEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9s
bChjb25zdCBJbnRTaXplJikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TGF5ZXJD
aHJvbWl1bVNjcm9sbERlbGVnYXRlKCkgeyB9Cit9OworCiAvLyBCYXNlIGNsYXNzIGZvciBjb21w
b3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0
aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVy
Q2hyb21pdW0+LCBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgewpAQCAt
MTUxLDEyICsxNjAsMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldE1heFNjcm9sbFBv
c2l0aW9uKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKwogICAgIHZvaWQg
c2V0U2Nyb2xsYWJsZShib29sKTsKKyAgICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbGFibGU7IH0KICAgICB2b2lkIHNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZChi
b29sKTsKICAgICB2b2lkIHNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoYm9vbCk7CiAgICAgY29u
c3QgUmVnaW9uJiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpIHsgcmV0dXJuIG1fbm9uRmFzdFNj
cm9sbGFibGVSZWdpb247IH0KICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNv
bnN0IFJlZ2lvbiYpOwogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25DaGFuZ2Vk
KCkgeyBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCA9IHRydWU7IH0KKyAgICB2b2lk
IHNldExheWVyU2Nyb2xsRGVsZWdhdGUoTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRlKiBsYXll
clNjcm9sbERlbGVnYXRlKSB7IG1fbGF5ZXJTY3JvbGxEZWxlZ2F0ZSA9IGxheWVyU2Nyb2xsRGVs
ZWdhdGU7IH0KKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKIAogICAgIHZvaWQg
c2V0RHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyhib29sKTsKICAgICBib29sIGRyYXdD
aGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX2RyYXdDaGVja2Vy
Ym9hcmRGb3JNaXNzaW5nVGlsZXM7IH0KQEAgLTMyNSw2ICszNDAsNyBAQCBwcml2YXRlOgogICAg
IC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fc2Npc3NvclJl
Y3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1fbWF4U2Ny
b2xsUG9zaXRpb247CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAgICAgYm9vbCBtX3Nob3VsZFNj
cm9sbE9uTWFpblRocmVhZDsKICAgICBib29sIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVyczsKQEAg
LTM3Nyw2ICszOTMsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKIAog
ICAgIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSogbV9sYXllckFuaW1hdGlvbkRlbGVnYXRlOwor
ICAgIExheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZSogbV9sYXllclNjcm9sbERlbGVnYXRlOwog
fTsKIAogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRl
cmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCmluZGV4IDc2NjA4ZDlmYzFkMGRhMTM5YTQ5MzBiYzUw
NDdjMDhhZWI4YjJkZjQuLjc3ZGQyZGJjZjc0Yjc3ZjgwMjcxY2VjNGYyNWJhNzFjMDUwZmYyYmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSW5wdXRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaApAQCAtNDUsMTIgKzQ1LDEyIEBAIGNsYXNzIElu
dFNpemU7CiBjbGFzcyBDQ0lucHV0SGFuZGxlckNsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ0NJbnB1dEhhbmRsZXJDbGllbnQpOwogcHVibGljOgotICAgIGVudW0gU2Nyb2xsU3Rh
dHVzIHsgU2Nyb2xsRmFpbGVkLCBTY3JvbGxTdGFydGVkLCBTY3JvbGxJZ25vcmVkIH07CisgICAg
ZW51bSBTY3JvbGxTdGF0dXMgeyBTY3JvbGxPbk1haW5UaHJlYWQsIFNjcm9sbFN0YXJ0ZWQsIFNj
cm9sbElnbm9yZWQgfTsKICAgICBlbnVtIFNjcm9sbElucHV0VHlwZSB7IEdlc3R1cmUsIFdoZWVs
IH07CiAKICAgICAvLyBBdHRlbXB0IHRvIHN0YXJ0IHNjcm9sbGluZyBhIGxheWVyIGF0IGEgZ2l2
ZW4gcG9pbnQgaW4gd2luZG93CiAgICAgLy8gY29vcmRpbmF0ZXMuIFJldHVybnMgU2Nyb2xsU3Rh
cnRlZCBpZiB0aGUgbGF5ZXIgYXQgdGhlIGNvb3JkaW5hdGVzIGNhbgotICAgIC8vIGJlIHNjcm9s
bGVkLCBTY3JvbGxGYWlsZWQgaWYgdGhlIHNjcm9sbCBldmVudCBzaG91bGQgaW5zdGVhZCBiZQor
ICAgIC8vIGJlIHNjcm9sbGVkLCBTY3JvbGxPbk1haW5UaHJlYWQgaWYgdGhlIHNjcm9sbCBldmVu
dCBzaG91bGQgaW5zdGVhZCBiZQogICAgIC8vIGRlbGVnYXRlZCB0byB0aGUgbWFpbiB0aHJlYWQs
IG9yIFNjcm9sbElnbm9yZWQgaWYgdGhlcmUgaXMgbm90aGluZyB0bwogICAgIC8vIGJlIHNjcm9s
bGVkIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4KICAgICB2aXJ0dWFsIFNjcm9sbFN0YXR1cyBz
Y3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYsIFNjcm9sbElucHV0VHlwZSkgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCmluZGV4IGMxNTVhNDgwYjE2NzRhNTJlYTgyZGZkNjdjMGRhMjViOGUy
MzBhOTcuLjBiNmYyZmViNGM5OTE3ZGQ0NWMyMjQ5YmMyZGE0ZDBkYTA2M2Q4MjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKQEAgLTE4Niw2ICsxODYsMzcgQEAgdm9pZCBDQ0xheWVySW1wbDo6
c2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpCiAgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
dHVzIENDTGF5ZXJJbXBsOjp0cnlTY3JvbGwoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQs
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUgdHlwZSkgY29uc3QKK3sKKyAg
ICBpZiAoc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQw
KCJjYyIsICJDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsOiBGYWlsZWQgc2hvdWxkU2Nyb2xsT25NYWlu
VGhyZWFkIik7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25N
YWluVGhyZWFkOworICAgIH0KKworICAgIGlmICghc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pc0lu
dmVydGlibGUoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJJbXBsOjp0
cnlTY3JvbGw6IElnbm9yZWQgbm9uSW52ZXJ0aWJsZVRyYW5zZm9ybSIpOworICAgICAgICByZXR1
cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisgICAgfQorCisgICAgSW50
UG9pbnQgY29udGVudFBvaW50KHNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBv
aW50KHZpZXdwb3J0UG9pbnQpKTsKKyAgICBpZiAobm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKS5j
b250YWlucyhjb250ZW50UG9pbnQpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NM
YXllckltcGw6OnRyeVNjcm9sbDogRmFpbGVkIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uIik7Cisg
ICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkOwor
ICAgIH0KKworICAgIGlmICh0eXBlID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCAmJiBo
YXZlV2hlZWxFdmVudEhhbmRsZXJzKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJD
Q0xheWVySW1wbDo6dHJ5U2Nyb2xsOiBGYWlsZWQgd2hlZWxFdmVudEhhbmRsZXJzIik7CisgICAg
ICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkOworICAg
IH0KKworICAgIGlmICghc2Nyb2xsYWJsZSgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiQ0NMYXllckltcGw6OnRyeVNjcm9sbDogSWdub3JlZCBub3Qgc2Nyb2xsYWJsZSIpOworICAg
ICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisgICAgfQor
CisgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOworfQorCiBj
b25zdCBJbnRSZWN0IENDTGF5ZXJJbXBsOjpnZXREcmF3UmVjdCgpIGNvbnN0CiB7CiAgICAgLy8g
Rm9ybSB0aGUgbWF0cml4IHVzZWQgYnkgdGhlIHNoYWRlciB0byBtYXAgdGhlIGNvcm5lcnMgb2Yg
dGhlIGxheWVyJ3MKQEAgLTIzOCw3ICsyNjksNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkdW1wTGF5
ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogCiB2b2lkIHNv
cnRMYXllcnMoVmVjdG9yPENDTGF5ZXJJbXBsKj46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0b3I8Q0NM
YXllckltcGwqPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlcikKIHsK
LSAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzb3J0TGF5ZXJzIiwgMCwg
MCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJMYXllclJlbmRlcmVyQ2hyb21pdW06OnNvcnRM
YXllcnMiKTsKICAgICBsYXllclNvcnRlci0+c29ydChmaXJzdCwgZW5kKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKaW5kZXggNzE4OTk2M2EwNDNmZjJhZTY4N2M4YzcwMTQ2YmI1NzNiYjBmOWY4
My4uYmRiMmI3MGQ1OWE5YjhkODBhOTk5MGY0NjYyMjkzYmRiZDFjNTljYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9DQ0lu
cHV0SGFuZGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuaCIKQEAgLTIxOCw2ICsyMTksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREcmF3
Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzKGJvb2wgY2hlY2tlcmJvYXJkKSB7IG1fZHJhd0No
ZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyA9IGNoZWNrZXJib2FyZDsgfQogICAgIGJvb2wgZHJh
d0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0NoZWNr
ZXJib2FyZEZvck1pc3NpbmdUaWxlczsgfQogCisgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbFN0YXR1cyB0cnlTY3JvbGwoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUpIGNvbnN0OworCiAgICAgY29uc3QgSW50
UmVjdCYgdmlzaWJsZUxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUxheWVyUmVj
dDsgfQogICAgIHZvaWQgc2V0VmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxl
TGF5ZXJSZWN0KSB7IG1fdmlzaWJsZUxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3Q7IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggYWJhNDU0NDc5NTUxYjdkMTBiZmEx
YjVkYTZiMWI0Mjg0MWVmZTIxYS4uMjk5MGM3MzlmZWRiNWQ3YTZiYTVjNWViNDdlMzBhMzZjYTg5
OGI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yNDIsNyArMjQyLDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVy
VHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOwogCi0gICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpz
eW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0SW1wbC0+cmVsZWFzZVJvb3RMYXllcigp
LCBob3N0SW1wbCkpOworICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPmRldGFjaExheWVyVHJl
ZSgpLCBob3N0SW1wbCkpOwogCiAgICAgLy8gV2UgbWF5IGhhdmUgYWRkZWQgYW4gYW5pbWF0aW9u
IGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2UgYm90aCBsYXllciB0cmVlIGhv
c3RzCiAgICAgLy8gdG8gdmlzaXQgdGhlaXIgY29udHJvbGxlcnMuCkBAIC02MTgsMTUgKzYxOCw0
MiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgIG9jY2x1c2lvblRyYWNrZXIub3ZlcmRy
YXdNZXRyaWNzKCkucmVjb3JkTWV0cmljcyh0aGlzKTsKIH0KIAorc3RhdGljIExheWVyQ2hyb21p
dW0qIGZpbmRGaXJzdFNjcm9sbGFibGVMYXllcihMYXllckNocm9taXVtKiBsYXllcikKK3sKKyAg
ICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChsYXllci0+c2Nyb2xs
YWJsZSgpKQorICAgICAgICByZXR1cm4gbGF5ZXI7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21p
dW0qIGZvdW5kID0gZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKGxheWVyLT5jaGlsZHJlbigpW2ld
LmdldCgpKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwor
ICAgIH0KKworICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YXBwbHlT
Y3JvbGxBbmRTY2FsZShjb25zdCBDQ1Njcm9sbEFuZFNjYWxlU2V0JiBpbmZvKQogewotICAgIC8v
IEZJWE1FOiBwdXNoaW5nIHNjcm9sbCBvZmZzZXRzIHRvIG5vbi1yb290IGxheWVycyBub3QgaW1w
bGVtZW50ZWQKLSAgICBpZiAoIWluZm8uc2Nyb2xscy5zaXplKCkpCisgICAgaWYgKCFtX3Jvb3RM
YXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGluZm8uc2Nyb2xscy5zaXplKCkg
PT0gMSk7Ci0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IGluZm8uc2Nyb2xsc1swXS5zY3JvbGxE
ZWx0YTsKLSAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShzY3JvbGxEZWx0YSwgaW5m
by5wYWdlU2NhbGVEZWx0YSk7CisgICAgTGF5ZXJDaHJvbWl1bSogcm9vdFNjcm9sbExheWVyID0g
ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICBJbnRTaXpl
IHJvb3RTY3JvbGxEZWx0YTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zY3Jv
bGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUobV9yb290TGF5ZXIuZ2V0KCksIGlu
Zm8uc2Nyb2xsc1tpXS5sYXllcklkKTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZiAobGF5ZXIgPT0gcm9vdFNjcm9sbExheWVyKQorICAgICAg
ICAgICAgcm9vdFNjcm9sbERlbHRhICs9IGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbGF5ZXItPnNjcm9sbEJ5KGluZm8uc2Nyb2xsc1tpXS5z
Y3JvbGxEZWx0YSk7CisgICAgfQorICAgIGlmICghcm9vdFNjcm9sbERlbHRhLmlzWmVybygpIHx8
IGluZm8ucGFnZVNjYWxlRGVsdGEgIT0gMSkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xs
QW5kU2NhbGUocm9vdFNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
aW5kZXggZjgwNDUxNjE3ZGQyNWZiMTRjZjExZmE2ZWRhZTk3NDlhZTI1ZDc2Zi4uNjk2NjZjMjU1
MTY3NjAzY2ZiYjI2MjQzZGQ2YzAxOGFkZDIzNWQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3RhdGljIGJvb2wgcmVuZGVyU3VyZmFjZUNvbnRyaWJ1
dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKTsKIAorICAg
IC8vIFJldHVybnMgYSBsYXllciB3aXRoIHRoZSBnaXZlbiBpZCBpZiBvbmUgZXhpc3RzIGluIHRo
ZSBzdWJ0cmVlIHN0YXJ0aW5nCisgICAgLy8gZnJvbSB0aGUgZ2l2ZW4gcm9vdCBsYXllciAoaW5j
bHVkaW5nIG1hc2sgYW5kIHJlcGxpY2EgbGF5ZXJzKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBM
YXllclR5cGU+IHN0YXRpYyBMYXllclR5cGUqIGZpbmRMYXllckluU3VidHJlZShMYXllclR5cGUq
IHJvb3RMYXllciwgaW50IGxheWVySWQpOworCiAgICAgc3RydWN0IFNjcm9sbFVwZGF0ZUluZm8g
ewogICAgICAgICBpbnQgbGF5ZXJJZDsKICAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTsKQEAg
LTc0LDYgKzc4LDI1IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNl
Q29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqIGxheWVyLCBpCiAgICAgcmV0dXJuIGxheWVy
LT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPmlkKCkgIT0gdGFyZ2V0U3VyZmFjZUxheWVySUQ7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK0xheWVyVHlwZSogQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUoTGF5ZXJUeXBlKiByb290TGF5ZXIsIGlu
dCBsYXllcklkKQoreworICAgIGlmIChyb290TGF5ZXItPmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAg
ICAgcmV0dXJuIHJvb3RMYXllcjsKKworICAgIGlmIChyb290TGF5ZXItPm1hc2tMYXllcigpICYm
IHJvb3RMYXllci0+bWFza0xheWVyKCktPmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAgICAgcmV0dXJu
IHJvb3RMYXllci0+bWFza0xheWVyKCk7CisKKyAgICBpZiAocm9vdExheWVyLT5yZXBsaWNhTGF5
ZXIoKSAmJiByb290TGF5ZXItPnJlcGxpY2FMYXllcigpLT5pZCgpID09IGxheWVySWQpCisgICAg
ICAgIHJldHVybiByb290TGF5ZXItPnJlcGxpY2FMYXllcigpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByb290TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKExheWVyVHlwZSogZm91bmQgPSBmaW5kTGF5ZXJJblN1YnRyZWUocm9vdExheWVyLT5jaGls
ZHJlbigpW2ldLmdldCgpLCBsYXllcklkKSkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDYwYzQyZDdkNzQz
M2I0ZGEyNmMyNTAwMjJmZWY4ZjkwMjQwNmZiZTUuLjhhZjFkNDdkMmIxZWVhNjQwMzJkMTlkMGQ4
M2VlMTVhZGJmYzk0NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CkBAIC0xMTQsNyArMTE0LDkgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0
SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRyZWUKICAgICA6IG1fY2xp
ZW50KGNsaWVudCkKICAgICAsIG1fc291cmNlRnJhbWVOdW1iZXIoLTEpCiAgICAgLCBtX2ZyYW1l
TnVtYmVyKDApCi0gICAgLCBtX3Njcm9sbExheWVySW1wbCgwKQorICAgICwgbV9yb290U2Nyb2xs
TGF5ZXJJbXBsKDApCisgICAgLCBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCgwKQorICAg
ICwgbV9zY3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSgtMSkKICAgICAsIG1fc2V0dGlu
Z3Moc2V0dGluZ3MpCiAgICAgLCBtX3Zpc2libGUodHJ1ZSkKICAgICAsIG1fc291cmNlRnJhbWVD
YW5CZURyYXduKHRydWUpCkBAIC0xMzcsNyArMTM5LDcgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRy
ZWUKIENDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkKIHsKICAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpIiwgdGhpcywgMCk7CisgICAgVFJB
Q0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1w
bCgpIik7CiAKICAgICBpZiAobV9yb290TGF5ZXJJbXBsKQogICAgICAgICBjbGVhclJlbmRlclN1
cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwpAQCAt
MTgxLDEwICsxODMsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJs
ZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSkKIAogdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQ
b3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRU
aW1lLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkKKyAg
ICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50
U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIElu
dFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwt
PnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkp
OwogICAgIHNjcm9sbFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0IHNj
YWxlVG90YWwgPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6ZSBz
Y2FsZWRDb250ZW50U2l6ZSA9IGNvbnRlbnRTaXplKCk7CkBAIC0yMzQsNiArMjM2LDcgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJ
bXBsKiByb290RHJhd0xheWVyLAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KQogewogICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUKG1fcm9vdExheWVySW1wbCk7CiAKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogCkBAIC0yNDUsNyArMjQ4LDcgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5
ZXJMaXN0JiByZW5kZXJTdXIKICAgICBtX3Jvb3RMYXllckltcGwtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgZGV2aWNlVmlld3BvcnRTaXplKCkpKTsKIAogICAgIHsKLSAgICAgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7
CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY0Ry
YXdFdGMiKTsKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7
CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxlVHJhbnNmb3JtOwog
ICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3NldHRpbmdzLmRldmljZVNjYWxl
RmFjdG9yKTsKQEAgLTI2OCw3ICsyNzEsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQogCiAg
ICAgY2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKIAotICAgIFRSQUNFX0VWRU5UMSgid2Via2l0IiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGN1bGF0ZVJlbmRlclBhc3NlcyIsICJyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSIsIHN0
YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCkpKTsKKyAgICBUUkFDRV9FVkVOVDEoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1
bGF0ZVJlbmRlclBhc3NlcyIsICJyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSIsIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkp
KTsKIAogICAgIG1fcm9vdExheWVySW1wbC0+c2V0U2Npc3NvclJlY3QoZW5jbG9zaW5nSW50UmVj
dChtX3Jvb3RTY2lzc29yUmVjdCkpOwogCkBAIC0zNzMsMjEgKzM3NiwyMiBAQCBJbnRTaXplIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRTaXplKCkgY29uc3QKIHsKICAgICAvLyBUT0RPKGFl
bGlhcyk6IEhhcmRjb2RpbmcgdGhlIGZpcnN0IGNoaWxkIGhlcmUgaXMgd2VpcmQuIFRoaW5rIG9m
CiAgICAgLy8gYSBjbGVhbmVyIHdheSB0byBnZXQgdGhlIGNvbnRlbnRCb3VuZHMgb24gdGhlIElt
cGwgc2lkZS4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8IG1fc2Nyb2xsTGF5ZXJJbXBs
LT5jaGlsZHJlbigpLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCB8
fCBtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOwotICAgIHJldHVybiBtX3Njcm9sbExheWVySW1wbC0+Y2hpbGRyZW4o
KVswXS0+Y29udGVudEJvdW5kcygpOworICAgIHJldHVybiBtX3Jvb3RTY3JvbGxMYXllckltcGwt
PmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsKIH0KIAotYm9vbCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZyYW1lRGF0YSYgZnJhbWUpCitib29sIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXBhcmVUb0RyYXcoUmVmUHRyPEZyYW1lRGF0YT4mIGZyYW1lKQogewotICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3IiwgdGhpcywg
MCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJl
VG9EcmF3Iik7CiAgICAgQVNTRVJUKGNhbkRyYXcoKSk7CiAKLSAgICBmcmFtZS5yZW5kZXJQYXNz
ZXMuY2xlYXIoKTsKLSAgICBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7Ci0g
ICAgZnJhbWUud2lsbERyYXdMYXllcnMuY2xlYXIoKTsKKyAgICBtX21vc3RSZWNlbnRGcmFtZURh
dGEgPSBmcmFtZSA9IEZyYW1lRGF0YTo6Y3JlYXRlKCk7CisgICAgZnJhbWUtPnJlbmRlclBhc3Nl
cy5jbGVhcigpOworICAgIGZyYW1lLT53aWxsRHJhd0xheWVycy5jbGVhcigpOworICAgIGZyYW1l
LT5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CiAKLSAgICBpZiAoIWNhbGN1bGF0ZVJl
bmRlclBhc3NlcyhmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGZyYW1lLndpbGxEcmF3TGF5ZXJzKSkKKyAgICBpZiAoIWNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyhmcmFtZS0+cmVuZGVyUGFzc2VzLCBmcmFtZS0+cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZnJh
bWUtPndpbGxEcmF3TGF5ZXJzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gSWYg
d2UgcmV0dXJuIHRydWUsIHRoZW4gd2UgZXhwZWN0IGRyYXdMYXllcnMoKSB0byBiZSBjYWxsZWQg
YmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFnYWluLgpAQCAtNDAxLDcgKzQwNSw3IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Q29udGVudHNNZW1vcnlBbGxvY2F0aW9uTGlt
aXRCeXRlcyhzaXplX3QgYnl0ZXMpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xh
eWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIik7CiAgICAgQVNTRVJUKGNhbkRy
YXcoKSk7CiAgICAgQVNTRVJUKCFmcmFtZS5yZW5kZXJQYXNzZXMuaXNFbXB0eSgpKTsKIApAQCAt
NDg5LDcgKzQ5Myw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCog
cGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJh
bWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotc3RhdGljIENDTGF5ZXJJbXBsKiBm
aW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQorc3RhdGljIENDTGF5ZXJJbXBsKiBm
aW5kUm9vdFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVy
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTQ5OCw3ICs1MDIsNyBAQCBzdGF0aWMgQ0NMYXllcklt
cGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJldHVybiBs
YXllcjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFNjcm9sbExheWVy
KGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGZvdW5k
ID0gZmluZFJvb3RTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiAgICAg
ICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CkBAIC01MDYs
MTIgKzUxMCw0MyBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIENvbnRlbnQgbGF5ZXJzIGNhbiBi
ZSBlaXRoZXIgZGlyZWN0bHkgc2Nyb2xsYWJsZSBvciBjb250YWluZWQgaW4gYW4gb3V0ZXIKKy8v
IHNjcm9sbGluZyBsYXllciB3aGljaCBhcHBsaWVzIHRoZSBzY3JvbGwgdHJhbnNmb3JtLiBHaXZl
biBhIGNvbnRlbnQgbGF5ZXIsCisvLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFzc29jaWF0
ZWQgc2Nyb2xsIGxheWVyIGlmIGFueS4KK3N0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExh
eWVyRm9yQ29udGVudExheWVyKENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgaWYgKCFs
YXllckltcGwpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xs
YWJsZSgpKQorICAgICAgICByZXR1cm4gbGF5ZXJJbXBsOworCisgICAgaWYgKGxheWVySW1wbC0+
ZHJhd3NDb250ZW50KCkgJiYgbGF5ZXJJbXBsLT5wYXJlbnQoKSAmJiBsYXllckltcGwtPnBhcmVu
dCgpLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllckltcGwtPnBhcmVudCgpOwor
CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExh
eWVyKFBhc3NPd25QdHI8Q0NMYXllckltcGw+IGxheWVyKQogewogICAgIG1fcm9vdExheWVySW1w
bCA9IGxheWVyOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbCA9IGZpbmRSb290U2Nyb2xsTGF5
ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVy
SW1wbCA9IDA7CisKKyAgICBpZiAobV9yb290TGF5ZXJJbXBsICYmIG1fc2Nyb2xsaW5nTGF5ZXJJ
ZEZyb21QcmV2aW91c1RyZWUgIT0gLTEpCisgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUobV9yb290
TGF5ZXJJbXBsLmdldCgpLCBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlvdXNUcmVlKTsKKwor
ICAgIG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1RyZWUgPSAtMTsKK30KKworUGFzc093
blB0cjxDQ0xheWVySW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6ZGV0YWNoTGF5ZXJUcmVlKCkK
K3sKKyAgICAvLyBDbGVhciBhbGwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSBkaXJlY3QgcmVm
ZXJlbmNlcyB0byB0aGUgbGF5ZXIgdHJlZS4KKyAgICBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJl
dmlvdXNUcmVlID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPyBtX2N1cnJlbnRseVNj
cm9sbGluZ0xheWVySW1wbC0+aWQoKSA6IC0xOworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsID0gMDsKKyAgICBtX21vc3RSZWNlbnRGcmFtZURhdGEuY2xlYXIoKTsKIAotICAgIC8v
IEZJWE1FOiBDdXJyZW50bHksIHRoaXMgb25seSBmaW5kcyB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBs
YXllci4KLSAgICBtX3Njcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllcihtX3Jvb3RMYXll
ckltcGwuZ2V0KCkpOworICAgIHJldHVybiBtX3Jvb3RMYXllckltcGwucmVsZWFzZSgpOwogfQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAt
NTQ1LDYgKzU4MCw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIoUGFzc1JlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4KICAgICAvLyBTaW5jZSB3ZSBu
b3cgaGF2ZSBhIG5ldyBjb250ZXh0L2xheWVyUmVuZGVyZXIsIHdlIGNhbm5vdCBjb250aW51ZSB0
byB1c2UgdGhlIG9sZAogICAgIC8vIHJlc291cmNlcyAoaS5lLiByZW5kZXJTdXJmYWNlcyBhbmQg
dGV4dHVyZSBJRHMpLgogICAgIGlmIChtX3Jvb3RMYXllckltcGwpIHsKKyAgICAgICAgbV9tb3N0
UmVjZW50RnJhbWVEYXRhLmNsZWFyKCk7CiAgICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkND
TGF5ZXJJbXBsUmVjdXJzaXZlKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CiAgICAgICAgIHNlbmRE
aWRMb3NlQ29udGV4dFJlY3Vyc2l2ZShtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogICAgIH0KQEAg
LTU3NSw2ICs2MTEsMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydFNp
emUoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnZpZXdwb3J0Q2hhbmdlZCgpOwogfQogCitzdGF0aWMgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFn
ZVNjYWxlQ2hhbmdlKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGZsb2F0IHBhZ2VTY2FsZUNoYW5n
ZSkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxh
eWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY29udmVydCBp
bXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2UuCisgICAgICAgIEZsb2F0
U2l6ZSBzY3JvbGxEZWx0YSA9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAgICAgICAgc2Ny
b2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRT
Y3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFkanVzdFNj
cm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UobGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpLCBw
YWdlU2NhbGVDaGFuZ2UpOworfQorCitzdGF0aWMgdm9pZCBhcHBseVBhZ2VTY2FsZURlbHRhVG9T
Y3JvbGxMYXllcnMoQ0NMYXllckltcGwqIGxheWVySW1wbCwgZmxvYXQgcGFnZVNjYWxlRGVsdGEp
Cit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXll
ckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRQYWdlU2NhbGVEZWx0
YShwYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1w
bC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRv
U2Nyb2xsTGF5ZXJzKGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFnZVNjYWxlRGVs
dGEpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZUZhY3RvckFu
ZExpbWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IG1pblBhZ2VTY2FsZSwgZmxvYXQgbWF4UGFn
ZVNjYWxlKQogewogICAgIGlmICghcGFnZVNjYWxlKQpAQCAtNTg5LDI1ICs2NTMsMTMgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoZmxvYXQg
cGFnZVNjYWxlLCBmbG9hdCBtaW4KICAgICBmbG9hdCBwYWdlU2NhbGVDaGFuZ2UgPSBwYWdlU2Nh
bGUgLyBtX3BhZ2VTY2FsZTsKICAgICBtX3BhZ2VTY2FsZSA9IHBhZ2VTY2FsZTsKIAotICAgIGFk
anVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICBpZiAo
cGFnZVNjYWxlQ2hhbmdlICE9IDEpCisgICAgICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVD
aGFuZ2UobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBwYWdlU2NhbGVDaGFuZ2UpOwogCiAgICAgLy8g
Q2xhbXAgZGVsdGEgdG8gbGltaXRzIGFuZCByZWZyZXNoIGRpc3BsYXkgbWF0cml4LgogICAgIHNl
dFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlRGVsdGEgLyBtX3NlbnRQYWdlU2NhbGVEZWx0YSk7
CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSAxOwotICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVyKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YWRqdXN0U2Ny
b2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCi17Ci0gICAgaWYg
KHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBhbHNv
IG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUgc3Bh
Y2UuCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY3Jv
bGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAgICAgICBzY3Jv
bGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9sbExheWVySW1w
bC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICBhcHBseVBhZ2VTY2Fs
ZURlbHRhVG9TY3JvbGxMYXllcnMobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2FsZURl
bHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVEZWx0YShm
bG9hdCBkZWx0YSkKQEAgLTYyNSwyMiArNjc3LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEpCiAgICAgbV9wYWdlU2NhbGVEZWx0YSA9
IGRlbHRhOwogCiAgICAgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKLSAgICBhcHBseVBhZ2VT
Y2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCkKLXsKLSAgICBpZiAobV9zY3JvbGxM
YXllckltcGwpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRQYWdlU2NhbGVEZWx0YSht
X3BhZ2VTY2FsZURlbHRhKTsKKyAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMo
bV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiB7Ci0gICAgaWYgKCFt
X3Njcm9sbExheWVySW1wbCB8fCAhbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgp
KQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPmNoaWxkcmVuKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFNpemUg
dmlld0JvdW5kcyA9IG1fdmlld3BvcnRTaXplOwotICAgIGlmIChDQ0xheWVySW1wbCogY2xpcExh
eWVyID0gbV9zY3JvbGxMYXllckltcGwtPnBhcmVudCgpKSB7CisgICAgaWYgKENDTGF5ZXJJbXBs
KiBjbGlwTGF5ZXIgPSBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnBhcmVudCgpKSB7CiAgICAgICAg
IGlmIChjbGlwTGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkKICAgICAgICAgICAgIHZpZXdCb3VuZHMg
PSBjbGlwTGF5ZXItPmJvdW5kcygpOwogICAgIH0KQEAgLTY1NCw5ICs3MDAsNyBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAgICAvLyBoYXZp
bmcgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cuCiAgICAg
bWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9ETyhhZWxpYXMp
OiBBbHNvIHVwZGF0ZSBzdWJsYXllcnMuCisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zZXRN
YXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnNldE5lZWRzUmVkcmF3KCkKQEAgLTY2NCw1MSArNzA4LDEyMSBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRy
YXdPbkltcGxUaHJlYWQoKTsKIH0KIAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjplbnN1cmVN
b3N0UmVjZW50UmVuZGVyU3VyZmFjZUxheWVyTGlzdCgpCit7CisgICAgaWYgKCFtX3Jvb3RMYXll
ckltcGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9tb3N0UmVjZW50RnJh
bWVEYXRhKQorICAgICAgICBtX21vc3RSZWNlbnRGcmFtZURhdGEgPSBGcmFtZURhdGE6OmNyZWF0
ZSgpOworCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGF0IHRoZSBsaXN0IGlzIGJvdGggbm9u
LWVtcHR5IGFuZCB0aGF0IHdlIHN0aWxsIGhhdmUgYQorICAgIC8vIHJvb3QgcmVuZGVyIHN1cmZh
Y2UgdG8gYmUgYWJsZSB0byBpdGVyYXRlIG92ZXIgdGhlIHZpc2libGUgbGF5ZXJzLgorICAgIGlm
IChtX21vc3RSZWNlbnRGcmFtZURhdGEtPnJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpICYm
IG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vIElmIHdlIGFyZSBjYWxsZWQgYWZ0ZXIgc2V0Um9vdExheWVyKCkgYnV0IGJlZm9y
ZSBwcmVwYXJlVG9EcmF3KCksIHdlIG5lZWQKKyAgICAvLyB0byByZWNhbGN1bGF0ZSB0aGUgdmlz
aWJsZSBsYXllcnMuIFRoaXMgcHJldmVudHMgYmVpbmcgdW5hYmxlIHRvIHNjcm9sbAorICAgIC8v
IGR1cmluZyBwYXJ0IG9mIGEgY29tbWl0LgorICAgIG1fbW9zdFJlY2VudEZyYW1lRGF0YS0+cmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOworICAgIGNhbGN1bGF0ZVJlbmRlclN1cmZhY2VM
YXllckxpc3QobV9tb3N0UmVjZW50RnJhbWVEYXRhLT5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
KworICAgIHJldHVybiBtX21vc3RSZWNlbnRGcmFtZURhdGEtPnJlbmRlclN1cmZhY2VMYXllckxp
c3Quc2l6ZSgpOworfQorCiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlIHR5cGUpCiB7Ci0gICAgLy8g
VE9ETzogQ2hlY2sgZm9yIHNjcm9sbGFibGUgc3VibGF5ZXJzLgotICAgIGlmICghbV9zY3JvbGxM
YXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpIHsKLSAgICAgICAg
VFJBQ0VfRVZFTlQoInNjcm9sbEJlZ2luIElnbm9yZWQgbm8gc2Nyb2xsYWJsZSIsIHRoaXMsIDAp
OwotICAgICAgICByZXR1cm4gU2Nyb2xsSWdub3JlZDsKLSAgICB9CisgICAgVFJBQ0VfRVZFTlQw
KCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbiIpOwogCi0gICAgaWYgKG1f
c2Nyb2xsTGF5ZXJJbXBsLT5zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoKSkgewotICAgICAgICBU
UkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCIs
IHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOwotICAgIH0KKyAgICBzY3Jv
bGxFbmQoKTsKKworICAgIGlmICghZW5zdXJlTW9zdFJlY2VudFJlbmRlclN1cmZhY2VMYXllckxp
c3QoKSkKKyAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7CiAKICAgICBJbnRQb2ludCBkZXZp
Y2VWaWV3cG9ydFBvaW50ID0gdmlld3BvcnRQb2ludDsKICAgICBkZXZpY2VWaWV3cG9ydFBvaW50
LnNjYWxlKG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3IsIG1fc2V0dGluZ3MuZGV2aWNlU2Nh
bGVGYWN0b3IpOwogCi0gICAgLy8gVGhlIGludmVyc2Ugb2YgdGhlIHNjcmVlbiBzcGFjZSB0cmFu
c2Zvcm0gdGFrZXMgdXMgZnJvbSBwaHlzaWNhbCBwaXhlbHMgdG8gbGF5b3V0IHBpeGVscy4KLSAg
ICBJbnRQb2ludCBzY3JvbGxMYXllclBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChkZXZpY2VWaWV3cG9ydFBvaW50KSk7Ci0K
LSAgICBpZiAobV9zY3JvbGxMYXllckltcGwtPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29u
dGFpbnMoc2Nyb2xsTGF5ZXJQb2ludCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJl
Z2luIEZhaWxlZCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiIsIHRoaXMsIDApOwotICAgICAgICBy
ZXR1cm4gU2Nyb2xsRmFpbGVkOworICAgIC8vIEZpcnN0IGZpbmQgb3V0IHdoaWNoIGxheWVyIHdh
cyBoaXQgYnkgd2Fsa2luZyB0aGUgc2F2ZWQgbGlzdCBvZiB2aXNpYmxlCisgICAgLy8gbGF5ZXJz
IGZyb20gdGhlIG1vc3QgcmVjZW50IGZyYW1lLgorICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwg
PSAwOworCisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDTGF5ZXJM
aXN0LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNr
PiBDQ0xheWVySXRlcmF0b3JUeXBlOworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NM
YXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZtX21vc3RSZWNlbnRGcmFtZURhdGEtPnJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJ
dGVyYXRvclR5cGU6OmJlZ2luKCZtX21vc3RSZWNlbnRGcmFtZURhdGEtPnJlbmRlclN1cmZhY2VM
YXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCFpdC5yZXByZXNlbnRz
SXRzZWxmKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQ0NMYXllckltcGwqIHJl
bmRlclN1cmZhY2VMYXllckltcGwgPSAoKml0KTsKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNl
TGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmlzSW52ZXJ0aWJsZSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIEludFBvaW50IHNjcm9sbExheWVyUG9pbnQocmVuZGVy
U3VyZmFjZUxheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9p
bnQodmlld3BvcnRQb2ludCkpOworICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2VMYXllckltcGwt
PnZpc2libGVMYXllclJlY3QoKS5jb250YWlucyhzY3JvbGxMYXllclBvaW50KSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBsYXllckltcGwgPSByZW5kZXJTdXJmYWNlTGF5ZXJJbXBs
OworICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAodHlwZSA9PSBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6V2hlZWwgJiYgbV9zY3JvbGxMYXllckltcGwtPmhhdmVXaGVlbEV2ZW50SGFuZGxl
cnMoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIHdoZWVsRXZl
bnRIYW5kbGVycyIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOworICAg
IC8vIFdhbGsgdXAgdGhlIGhpZXJhcmNoeSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIGxheWVy
LgorICAgIENDTGF5ZXJJbXBsKiBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7Cisg
ICAgZm9yICg7IGxheWVySW1wbDsgbGF5ZXJJbXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKSkgewor
ICAgICAgICAvLyBUaGUgY29udGVudCBsYXllciBjYW4gYWxzbyBibG9jayBhdHRlbXB0cyB0byBz
Y3JvbGwgb3V0c2lkZSB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIGlmIChsYXllckltcGwtPnRy
eVNjcm9sbChkZXZpY2VWaWV3cG9ydFBvaW50LCB0eXBlKSA9PSBTY3JvbGxPbk1haW5UaHJlYWQp
CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsT25NYWluVGhyZWFkOworCisgICAgICAgIENDTGF5
ZXJJbXBsKiBzY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIo
bGF5ZXJJbXBsKTsKKyAgICAgICAgaWYgKCFzY3JvbGxMYXllckltcGwpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBTY3JvbGxTdGF0dXMgc3RhdHVzID0gc2Nyb2xsTGF5ZXJJbXBs
LT50cnlTY3JvbGwodmlld3BvcnRQb2ludCwgdHlwZSk7CisKKyAgICAgICAgLy8gSWYgYW55IGxh
eWVyIHdhbnRzIHRvIGRpdmVydCB0aGUgc2Nyb2xsIGV2ZW50IHRvIHRoZSBtYWluIHRocmVhZCwg
YWJvcnQuCisgICAgICAgIGlmIChzdGF0dXMgPT0gU2Nyb2xsT25NYWluVGhyZWFkKQorICAgICAg
ICAgICAgcmV0dXJuIFNjcm9sbE9uTWFpblRocmVhZDsKKworICAgICAgICBpZiAoc3RhdHVzID09
IFNjcm9sbFN0YXJ0ZWQgJiYgIXBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQorICAgICAg
ICAgICAgcG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGwgPSBzY3JvbGxMYXllckltcGw7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgaWYgKHBvdGVudGlhbGx5U2Ny
b2xsaW5nTGF5ZXJJbXBsKSB7CisgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBs
ID0gcG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGw7CisgICAgICAgIHJldHVybiBTY3JvbGxT
dGFydGVkOworICAgIH0KKyAgICByZXR1cm4gU2Nyb2xsSWdub3JlZDsKIH0KIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsK
LSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAw
KTsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAi
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiKTsKKyAgICBpZiAoIW1fY3VycmVudGx5U2Ny
b2xsaW5nTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9u
SW1wbFRocmVhZCgpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgp
OworICAgIEZsb2F0U2l6ZSBwZW5kaW5nRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIHBlbmRpbmdE
ZWx0YS5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKENDTGF5ZXJJbXBs
KiBsYXllckltcGwgPSBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsgbGF5ZXJJbXBsICYm
ICFwZW5kaW5nRGVsdGEuaXNaZXJvKCk7IGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCkp
IHsKKyAgICAgICAgaWYgKCFsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBGbG9hdFNpemUgcHJldmlvdXNEZWx0YShsYXllckltcGwtPnNjcm9s
bERlbHRhKCkpOworICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHBlbmRpbmdEZWx0YSk7Cisg
ICAgICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIHNjcm9sbCBkZWx0YSB0byB6ZXJvIGlmIHRoZSBs
YXllciB3YXMgYWJsZSB0byBtb3ZlIGFsb25nIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgLy8gYXhp
cy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xsIGV4YWN0bHkgdG8g
dGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAgICAgICAvLyBzY3JvbGwgYXJlYSByZWdhcmRs
ZXNzIG9mIHRoZSBzY3JvbGwgc3RlcC4gRm9yIGRpYWdvbmFsIHNjcm9sbHMgdGhpcyBhbHNvIGF2
b2lkcyBhcHBseWluZworICAgICAgICAvLyB0aGUgc2Nyb2xsIG9uIG9uZSBheGlzIHRvIG11bHRp
cGxlIGxheWVycy4KKyAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEud2lkdGgoKSAhPSBsYXllcklt
cGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRX
aWR0aCgwKTsKKyAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEuaGVpZ2h0KCkgIT0gbGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpLmhlaWdodCgpKQorICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhl
aWdodCgwKTsKKyAgICB9CisKKyAgICBpZiAoIXNjcm9sbERlbHRhLmlzWmVybygpICYmIHBlbmRp
bmdEZWx0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxFbmQoKQog
eworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKKyAgICBtX3Njcm9sbGlu
Z0xheWVySWRGcm9tUHJldmlvdXNUcmVlID0gLTE7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlQmVnaW4oKQpAQCAtNzIwLDkgKzgzNCw5IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlQmVnaW4oKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQgbWFnbmlmeURlbHRhLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIGFuY2hvcikK
IHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBk
YXRlIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUiKTsKIAotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwp
CisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChtX3ByZXZpb3VzUGluY2hBbmNob3IgPT0gSW50UG9pbnQ6Onplcm8oKSkKQEAgLTczNyw3
ICs4NTEsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZShm
bG9hdCBtYWduaWZ5RGVsdGEsCiAKICAgICBtX3ByZXZpb3VzUGluY2hBbmNob3IgPSBhbmNob3I7
CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkocm91bmRlZEludFNpemUobW92ZSkp
OworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsQnkocm91bmRlZEludFNpemUobW92
ZSkpOwogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogICAgIG1f
Y2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQpAQCAtNzU5LDcgKzg3Myw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZURvdWJsZVRhcFpvb21EZWx0YXMo
Q0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvKQog
ewotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXll
ckltcGwpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE9ubHkgc2VuZCBmYWtlIHNjcm9sbC96
b29tIGRlbHRhcyBpZiB3ZSdyZSBwaW5jaCB6b29taW5nIG91dCBieSBhCkBAIC03NzEsNyArODg1
LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKEND
U2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8KIAogICAgIC8vIENvbXB1dGUgd2hlcmUgdGhl
IHNjcm9sbCBvZmZzZXQvcGFnZSBzY2FsZSB3b3VsZCBiZSBpZiBmdWxseSBwaW5jaC16b29tZWQK
ICAgICAvLyBvdXQgZnJvbSB0aGUgYW5jaG9yIHBvaW50LgotICAgIEludFNpemUgc2Nyb2xsQmVn
aW4gPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSAr
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9sbEJl
Z2luID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlv
bigpICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKICAgICBzY3JvbGxC
ZWdpbi5zY2FsZShtX3BhZ2VTY2FsZURlbHRhKTsKICAgICBmbG9hdCBzY2FsZUJlZ2luID0gbV9w
YWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhOwogICAgIGZsb2F0IHBhZ2VTY2FsZURlbHRhVG9T
ZW5kID0gbV9taW5QYWdlU2NhbGUgLyBtX3BhZ2VTY2FsZTsKQEAgLTc5MSwyMiArOTA1LDQwIEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9s
bEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6bWFr
ZVNjcm9sbEFuZFNjYWxlU2V0KENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIGNvbnN0
IEludFNpemUmIHNjcm9sbE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlKQogewotICAgIGlmICghbV9z
Y3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAg
IHJldHVybjsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBz
Y3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9sbExheWVySW1wbC0+aWQoKTsKLSAg
ICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxPZmZzZXQgLSB0b1NpemUobV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNjcm9sbC5sYXllcklkID0gbV9yb290U2Ny
b2xsTGF5ZXJJbXBsLT5pZCgpOworICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNjcm9sbE9mZnNl
dCAtIHRvU2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkpOwogICAg
IHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7Ci0gICAgbV9zY3JvbGxMYXllcklt
cGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOworICAgIG1fcm9vdFNj
cm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7CiAg
ICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IHBh
Z2VTY2FsZSAvIG1fcGFnZVNjYWxlOwogfQogCitzdGF0aWMgdm9pZCBjb2xsZWN0U2Nyb2xsRGVs
dGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIENDTGF5ZXJJbXBsKiBsYXllcklt
cGwpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAgIEludFNpemUgc2Ny
b2xsRGVsdGEgPSBmbG9vcmVkSW50U2l6ZShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAg
ICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOworICAg
ICAgICBzY3JvbGwubGF5ZXJJZCA9IGxheWVySW1wbC0+aWQoKTsKKyAgICAgICAgc2Nyb2xsLnNj
cm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBw
ZW5kKHNjcm9sbCk7CisgICAgICAgIGxheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9s
bERlbHRhKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3Jv
bGxJbmZvLCBsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworfQorCiBQYXNzT3duUHRy
PENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxE
ZWx0YXMoKQogewogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0g
YWRvcHRQdHIobmV3IENDU2Nyb2xsQW5kU2NhbGVTZXQoKSk7Ci0gICAgYm9vbCBkaWRNb3ZlID0g
bV9zY3JvbGxMYXllckltcGwgJiYgKCFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5p
c1plcm8oKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDEuMGYpOwotICAgIGlmICghZGlkTW92ZSB8
fCBtX3BpbmNoR2VzdHVyZUFjdGl2ZSB8fCBtX3BhZ2VTY2FsZUFuaW1hdGlvbikgeworCisgICAg
aWYgKG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9uKSB7CiAgICAg
ICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSAx
OwogICAgICAgICBpZiAobV9waW5jaEdlc3R1cmVBY3RpdmUpCiAgICAgICAgICAgICBjb21wdXRl
UGluY2hab29tRGVsdGFzKHNjcm9sbEluZm8uZ2V0KCkpOwpAQCAtODE1LDE2ICs5NDcsOSBAQCBQ
YXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByb2Nl
c3NTY3JvbGxEZWx0YXMoKQogICAgICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiAg
ICAgfQogCisgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBtX3Jvb3RM
YXllckltcGwuZ2V0KCkpOwogICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+
cGFnZVNjYWxlRGVsdGEgPSBtX3BhZ2VTY2FsZURlbHRhOwogCi0gICAgLy8gRklYTUU6IHRyYWNr
IHNjcm9sbHMgZnJvbSBsYXllcnMgb3RoZXIgdGhhbiB0aGUgcm9vdAotICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQg
PSBtX3Njcm9sbExheWVySW1wbC0+aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBmbG9v
cmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7Ci0gICAgc2Nyb2xs
SW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
ZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKLQogICAgIHJldHVybiBzY3Jv
bGxJbmZvLnJlbGVhc2UoKTsKIH0KIApAQCAtODM5LDE1ICs5NjQsMTUgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzZXRGdWxsUm9vdExheWVyRGFtYWdlKCkKIAogdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjphbmltYXRlUGFnZVNjYWxlKGRvdWJsZSBtb25vdG9uaWNUaW1lKQogewotICAg
IGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24gfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlm
ICghbV9wYWdlU2NhbGVBbmltYXRpb24gfHwgIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNj
cm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZSht
X3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXll
ckltcGwtPnNjcm9sbERlbHRhKCkpOwogCiAgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2Nh
bGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShtb25vdG9uaWNUaW1lKSAvIG1fcGFnZVNjYWxl
KTsKICAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xs
T2Zmc2V0QXRUaW1lKG1vbm90b25pY1RpbWUpOwogICAgIG5leHRTY3JvbGwuc2NhbGUoMSAvIG1f
cGFnZVNjYWxlRGVsdGEpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShuZXh0U2Ny
b2xsIC0gc2Nyb2xsVG90YWwpOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsQnko
bmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdP
bkltcGxUaHJlYWQoKTsKIAogICAgIGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+aXNBbmltYXRp
b25Db21wbGV0ZUF0VGltZShtb25vdG9uaWNUaW1lKSkgewpAQCAtODYxLDcgKzk4Niw3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhkb3VibGUgbW9ub3RvbmljVGlt
ZSwgZG91YmxlIHdhbGxDbG9ja1RpCiAgICAgaWYgKCFtX3NldHRpbmdzLnRocmVhZGVkQW5pbWF0
aW9uRW5hYmxlZCB8fCAhbV9uZWVkc0FuaW1hdGVMYXllcnMgfHwgIW1fcm9vdExheWVySW1wbCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6
OmFuaW1hdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiKTsKIAogICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggMDk1YzBlNWIz
OTMyNDFhNjk1YzUxNDA1MGY0MGRiZjgzZTgzYjA5MS4uM2VhY2EyNTYyMTA4ZDI2ZWNiZWIyZjgy
ODg0OWQ2OTBhOTQxYTk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApA
QCAtODQsMTAgKzg0LDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4pOwogICAg
IHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwogCi0gICAgc3RydWN0IEZyYW1lRGF0
YSB7CisgICAgY2xhc3MgRnJhbWVEYXRhOiBwdWJsaWMgUmVmQ291bnRlZDxGcmFtZURhdGE+IHsK
KyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJhbWVEYXRhKTsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lRGF0YT4gY3JlYXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZURhdGEoKSk7CisgICAgICAgIH0K
KwogICAgICAgICBDQ1JlbmRlclBhc3NMaXN0IHJlbmRlclBhc3NlczsKICAgICAgICAgQ0NMYXll
ckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICAgICAgQ0NMYXllckxpc3Qgd2lsbERy
YXdMYXllcnM7CisKKyAgICBwcml2YXRlOgorICAgICAgICBGcmFtZURhdGEoKSB7IH0KICAgICB9
OwogCiAgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4KQEAgLTk1LDExICsxMDUsMTEgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOwogICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSk7CiAK
LSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHByb2JsZW1zIG9jY3VyZWQgcHJlcGFyaW5nIHRoZSBm
cmFtZSwgYW5kIHdlIHNob3VsZCB0cnkKKyAgICAvLyBSZXR1cm5zIG51bGwgaWYgcHJvYmxlbXMg
b2NjdXJlZCBwcmVwYXJpbmcgdGhlIGZyYW1lLCBhbmQgd2Ugc2hvdWxkIHRyeQogICAgIC8vIHRv
IGF2b2lkIGRpc3BsYXlpbmcgdGhlIGZyYW1lLiBJZiBwcmVwYXJlVG9EcmF3IGlzIGNhbGxlZCwK
ICAgICAvLyBkaWREcmF3QWxsTGF5ZXJzIG11c3QgYWxzbyBiZSBjYWxsZWQsIHJlZ2FyZGxlc3Mg
b2Ygd2hldGhlciBkcmF3TGF5ZXJzIGlzCiAgICAgLy8gY2FsbGVkIGJldHdlZW4gdGhlIHR3by4K
LSAgICB2aXJ0dWFsIGJvb2wgcHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcHJlcGFyZVRvRHJhdyhSZWZQdHI8RnJhbWVEYXRhPiYpOwogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYpOwogICAgIC8vIE11c3QgYmUgY2FsbGVkIGlm
IGFuZCBvbmx5IGlmIHByZXBhcmVUb0RyYXcgd2FzIGNhbGxlZC4KICAgICB2b2lkIGRpZERyYXdB
bGxMYXllcnMoY29uc3QgRnJhbWVEYXRhJik7CkBAIC0xMzMsMTAgKzE0MywxMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKIAogICAg
IHZvaWQgc2V0Um9vdExheWVyKFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKLSAgICBQYXNzT3du
UHRyPENDTGF5ZXJJbXBsPiByZWxlYXNlUm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXJJ
bXBsLnJlbGVhc2UoKTsgfQogICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSB7IHJldHVybiBt
X3Jvb3RMYXllckltcGwuZ2V0KCk7IH0KIAotICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJbXBsOyB9CisgICAgLy8gUmVsZWFzZSBvd25l
cnNoaXAgb2YgdGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuIGVt
cHR5CisgICAgLy8gdHJlZS4gUmV0dXJucyB0aGUgcm9vdCBsYXllciBvZiB0aGUgZGV0YWNoZWQg
dHJlZS4KKyAgICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBkZXRhY2hMYXllclRyZWUoKTsKKwor
ICAgIENDTGF5ZXJJbXBsKiByb290U2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RT
Y3JvbGxMYXllckltcGw7IH0KIAogICAgIGJvb2wgdmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlzaWJsZTsgfQogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKQEAgLTE5Niw4ICsyMDksNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgbWFrZVNjcm9sbEFuZFNjYWxlU2V0KENDU2Nyb2xsQW5kU2Nh
bGVTZXQqIHNjcm9sbEluZm8sIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCwgZmxvYXQgcGFn
ZVNjYWxlKTsKIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwotICAgIHZvaWQg
YXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLSAgICB2b2lkIGFkanVzdFNjcm9s
bHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9z
aXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwq
IHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKIApAQCAtMjEwLDEzICsyMjEsMTYgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIGNvbnRlbnRT
aXplKCkgY29uc3Q7CiAgICAgdm9pZCBzZW5kRGlkTG9zZUNvbnRleHRSZWN1cnNpdmUoQ0NMYXll
ckltcGwqKTsKICAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJz
aXZlKENDTGF5ZXJJbXBsKik7CisgICAgYm9vbCBlbnN1cmVNb3N0UmVjZW50UmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCgpOwogCiAgICAgdm9pZCBkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYs
IGludCBpbmRlbnQsIGNvbnN0IENDTGF5ZXJJbXBsKikgY29uc3Q7CiAKICAgICBSZWZQdHI8Q0NH
cmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKICAgICBPd25QdHI8Q0NSZW5kZXJlcj4gbV9sYXll
clJlbmRlcmVyOwogICAgIE93blB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOwotICAg
IENDTGF5ZXJJbXBsKiBtX3Njcm9sbExheWVySW1wbDsKKyAgICBDQ0xheWVySW1wbCogbV9yb290
U2Nyb2xsTGF5ZXJJbXBsOworICAgIENDTGF5ZXJJbXBsKiBtX2N1cnJlbnRseVNjcm9sbGluZ0xh
eWVySW1wbDsKKyAgICBpbnQgbV9zY3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZTsKICAg
ICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAg
ICBJbnRTaXplIG1fZGV2aWNlVmlld3BvcnRTaXplOwpAQCAtMjQ4LDYgKzI2Miw5IEBAIHByaXZh
dGU6CiAKICAgICBGbG9hdFJlY3QgbV9yb290U2Npc3NvclJlY3Q7CiAKKyAgICAvLyBNb3N0IHJl
Y2VudGx5IHByZXBhcmVkIGZyYW1lLgorICAgIFJlZlB0cjxGcmFtZURhdGE+IG1fbW9zdFJlY2Vu
dEZyYW1lRGF0YTsKKwogICAgIE93blB0cjxDQ0ZyYW1lUmF0ZUNvdW50ZXI+IG1fZnBzQ291bnRl
cjsKICAgICBPd25QdHI8Q0NEZWJ1Z1JlY3RIaXN0b3J5PiBtX2RlYnVnUmVjdEhpc3Rvcnk7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCA4ZjMwNTJkOTMx
NmM0N2E4OGNlYjFlMGI5NmYzYzAxODE5NDdmYTFlLi5mZGFlMDBkMDUzOWU4M2RkN2ZkOTgwMmUx
MTIwOGMzYmE5MjhlZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cApAQCAtMzc1LDEwICszNzUsMTIgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0NvbXBv
c2l0ZSgpCiAgICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbC0+Y2FuRHJhdygpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZy
YW1lRGF0YSBmcmFtZTsKKyAgICAgICAgUmVmUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1l
RGF0YT4gZnJhbWU7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByZXBhcmVUb0RyYXco
ZnJhbWUpOwotICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsK
LSAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7Cisg
ICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJh
d0xheWVycygqZnJhbWUpOworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZGlkRHJh
d0FsbExheWVycygqZnJhbWUpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNw
cAppbmRleCBlOTU1NTU1MTA1NjdlMjk3ZjM5YTBlM2MxOTZlZmE4ZjI4MmFjOWE0Li40ZjdjYjZj
OGUwYzA2MzdiMTk2NDFmMTk4Nzk5MzdhMjdhYjZhNzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmNwcApAQCAtNjQxLDEzICs2NDEsMTQgQEAgQ0NTY2hlZHVsZWRBY3Rpb25EcmF3QW5kU3dh
cFJlc3VsdCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25EcmF3QW5kU3dhcEludGUKICAg
ICAvLyBiZSB1c2VkIHdoZW4gc3VjaCBhIGZyYW1lIGlzIHBvc3NpYmxlLiBTaW5jZSBkcmF3TGF5
ZXJzKCkgZGVwZW5kcyBvbiB0aGUgcmVzdWx0IG9mCiAgICAgLy8gcHJlcGFyZVRvRHJhdygpLCBp
dCBpcyBndWFyZGVkIG9uIGNhbkRyYXcoKSBhcyB3ZWxsLgogCi0gICAgQ0NMYXllclRyZWVIb3N0
SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsOjpG
cmFtZURhdGE+IGZyYW1lOwogICAgIGJvb2wgZHJhd0ZyYW1lID0gbV9sYXllclRyZWVIb3N0SW1w
bC0+Y2FuRHJhdygpICYmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1l
KSB8fCBmb3JjZWREcmF3KTsKLSAgICBpZiAoZHJhd0ZyYW1lKSB7Ci0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIGlmIChmcmFtZSAmJiBkcmF3RnJh
bWUpIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOwog
ICAgICAgICByZXN1bHQuZGlkRHJhdyA9IHRydWU7CiAgICAgfQotICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIGlmIChmcmFtZSkKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygqZnJhbWUpOwogCiAgICAgLy8g
Q2hlY2sgZm9yIGEgcGVuZGluZyBjb21wb3NpdGVBbmRSZWFkYmFjay4KICAgICBpZiAobV9yZWFk
YmFja1JlcXVlc3RPbkltcGxUaHJlYWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAppbmRleCA4
ZTBjNjEzYTQyYTM5NjY3ZWE2M2U2NWU5MjVhMjJhN2EzNGIxNDlkLi42M2JmMjcwZmUwMjI2NDM2
MGY0MjdhMmUyM2M2MjhjYWVhMTEyYzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCkBAIC0x
OTEsNyArMTkxLDcgQEAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OkV2ZW50RGlzcG9z
aXRpb24gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmgKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBEcm9wRXZlbnQsIGJ1dCBpbiBjYXNlcyB3aGVyZSB3ZSBmYWls
IHRvIHByb3Blcmx5IHN5bmMgc2Nyb2xsYWJpbGl0eSBpdCdzIHNhZmVyIHRvIHNlbmQgdGhlCiAg
ICAgICAgICAgICAvLyBldmVudCB0byB0aGUgbWFpbiB0aHJlYWQuIENoYW5nZSBiYWNrIHRvIERy
b3BFdmVudCBvbmNlIHdlIGhhdmUgc3luY2hyb25pemF0aW9uIGJ1Z3Mgc29ydGVkIG91dC4KICAg
ICAgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7IAotICAgICAgICBjYXNlIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6CisgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbE9uTWFpblRocmVhZDoKICAgICAgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6
R2VzdHVyZVNjcm9sbEJlZ2luKSB7CkBAIC0yMDYsNyArMjA2LDcgQEAgV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGw6OkV2ZW50RGlzcG9zaXRpb24gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGw6OmgKICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRl
ZDoKICAgICAgICAgICAgIG1fZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICAg
ICAgcmV0dXJuIERpZEhhbmRsZTsKLSAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsRmFpbGVkOgorICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxP
bk1haW5UaHJlYWQ6CiAgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogICAgICAgICBj
YXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOgogICAgICAgICAgICAgcmV0
dXJuIERyb3BFdmVudDsKQEAgLTI3OCw4ICsyNzgsOCBAQCBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6
aAogICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2NoZWR1bGVBbmltYXRpb24oKTsKICAg
ICAgICAgcmV0dXJuIERpZEhhbmRsZTsKICAgICB9Ci0gICAgY2FzZSBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsRmFpbGVkOiB7Ci0gICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIs
ICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nOjpmYWls
ZWQiKTsKKyAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ6
IHsKKyAgICAgICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNjIiwgIldlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OnNjcm9sbE9uTWFpblRocmVhZCIpOwog
ICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogICAgIH0KICAgICBjYXNlIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCmluZGV4IDIyMmZhMmZhNzY2NTIwMjI4MDhj
MTRhY2U5MTE0MTQxYmE0N2VkNWQuLmQ4ODIxNTAzYTkwNTY1N2VmODA4M2UzZjIzMmRiNTQzZGRi
YTE1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRM
YXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRM
YXllckltcGwuY3BwCkBAIC02MSw0ICs2MSw4IEBAIHZvaWQgV2ViQ29udGVudExheWVySW1wbDo6
cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJbnRSZWN0JiBjbGlwCiAg
ICAgbV9jb250ZW50Q2xpZW50LT5wYWludENvbnRlbnRzKGNhbnZhcywgV2ViUmVjdChjbGlwKSk7
CiB9CiAKK3ZvaWQgV2ViQ29udGVudExheWVySW1wbDo6ZGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaAppbmRleCBhMDZjZjkwODI5
MWZhZmVhNjIzY2JiZTc1N2FjZTI2OGJmNTJkZDA4Li4yNjk4Mjc4Y2ViOTAxYmUzMzc5YzRjOTU0
Y2IyNzg2MjBkN2VjYWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb250ZW50TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29udGVudExheWVySW1wbC5oCkBAIC00Miw2ICs0Miw3IEBAIHByb3RlY3RlZDoKIAogICAgIC8v
IENvbnRlbnRMYXllckRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOwogCiAgICAgV2ViQ29udGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRDbGllbnQ7
CiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IDg0MGM0
ZWQzYWY5NDJlOTk1NmVjYWYzYjU5MjRiNmNlNmY0ZWI0NjAuLmZjMzJiMGYxMzJkZTVhNWRmZGI2
NGVhYTUzODNkYzhjNDdlZWNjOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMjkxMCw2ICsy
OTEwLDI4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VD
dWxsaW5nV2l0aFByZXNlcnZlczNkRm9yRmxhdHRlbmluCiAgICAgRVhQRUNUX0VRKGNoaWxkMS0+
aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxp
c3QoKVsxXS0+aWQoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5U3VidHJlZVNlYXJjaCkKK3sKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFu
ZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IG1hc2tMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiByZXBsaWNhTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAg
IGdyYW5kQ2hpbGQtPnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIuZ2V0KCkpOworICAgIGNo
aWxkLT5hZGRDaGlsZChncmFuZENoaWxkLmdldCgpKTsKKyAgICBjaGlsZC0+c2V0TWFza0xheWVy
KG1hc2tMYXllci5nZXQoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQuZ2V0KCkpOworCisg
ICAgaW50IG5vbmV4aXN0ZW50SWQgPSAtMTsKKyAgICBFWFBFQ1RfRVEocm9vdCwgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgcm9vdC0+aWQoKSkp
OworICAgIEVYUEVDVF9FUShjaGlsZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJ
blN1YnRyZWUocm9vdC5nZXQoKSwgY2hpbGQtPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRD
aGlsZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQo
KSwgZ3JhbmRDaGlsZC0+aWQoKSkpOworICAgIEVYUEVDVF9FUShtYXNrTGF5ZXIsIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIG1hc2tMYXllci0+
aWQoKSkpOworICAgIEVYUEVDVF9FUShyZXBsaWNhTGF5ZXIsIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIHJlcGxpY2FMYXllci0+aWQoKSkpOwor
ICAgIEVYUEVDVF9FUSgwLCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJl
ZShyb290LmdldCgpLCBub25leGlzdGVudElkKSk7Cit9CisKIC8vIEZJWE1FOgogLy8gY29udGlu
dWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5
NDIKIC8vICAtIGFkZCBhIHRlc3QgdG8gdmVyaWZ5IGNsaXBwaW5nIHRoYXQgY2hhbmdlcyB0aGUg
ImNlbnRlciBwb2ludCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggYTYxZGQ4MTJkMzg3NmY0NzczNWQ2
OTVkM2ZjZTA3ZmVmNDliYjQ0NS4uOTQxYWRiNjFhYmQwODdlN2M0MGUxMDRmMzI4OGI2ZjU4ODcy
NzliZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTEzOCw2ICsxMzgsMjcgQEAgcHVibGljOgogICAg
ICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIH0KIAor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIo
aW50IGlkLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
KyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKGlkKTsKKyAgICAgICAgbGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAg
IGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXRQb3NpdGlv
bihwb3NpdGlvbik7CisgICAgICAgIGxheWVyLT5zZXRCb3VuZHMoc2l6ZSk7CisgICAgICAgIGxh
eWVyLT5zZXRDb250ZW50Qm91bmRzKHNpemUpOworICAgICAgICBsYXllci0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24oSW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpICogMikpOwor
ICAgICAgICByZXR1cm4gbGF5ZXIucmVsZWFzZSgpOworICAgIH0KKworICAgIHZvaWQgaW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKQorICAgIHsKKyAgICAgICAgbV9ob3N0SW1w
bC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY3JlYXRlQ29udGV4dCgpLCBVbnRocm90dGxlZFVw
bG9hZGVyKTsKKyAgICAgICAgUmVmUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YT4g
ZnJhbWU7CisgICAgICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJh
bWUpKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOworICAgICAgICBt
X2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgUGFzc1JlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY3JlYXRlQ29udGV4dCgpCiAgICAg
ewpAQCAtMjIxLDEzICsyNDIsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNj
cm9sbERlbHRhUmVwZWF0ZWRTY3JvbGxzKQogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJhdykKIHsKLSAgICB7Ci0gICAgICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgICAg
IHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7Ci0gICAgICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0
aW9uKEludFBvaW50KDAsIDApKTsKLSAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
SW50U2l6ZSgxMDAsIDEwMCkpOwotICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dC5yZWxlYXNlKCkpOwotICAgIH0KKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKElu
dFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6
ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwog
CiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7CiAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOwpAQCAt
MjM2LDIwICsyNTMsNTcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxS
b290Q2FsbHNDb21taXRBbmRSZWRyYXcpCiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29t
bWl0KTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxXaXRob3V0
Um9vdExheWVyKQoreworICAgIC8vIFdlIHNob3VsZCBub3QgY3Jhc2ggd2hlbiB0cnlpbmcgdG8g
c2Nyb2xsIGFuIGVtcHR5IGxheWVyIHRyZWUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNj
cm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7Cit9CisKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgcmVwbGFjZVRyZWVXaGlsZVNjcm9sbGluZykKK3sKKyAgICBjb25z
dCBpbnQgc2Nyb2xsTGF5ZXJJZCA9IDA7CisKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5
ZXJzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
SW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpOworCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmFzaCBpZiB0aGUgdHJlZSBpcyByZXBsYWNl
ZCB3aGlsZSB3ZSBhcmUgc2Nyb2xsaW5nLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPmRldGFj
aExheWVyVHJlZSgpOworCisgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXpl
KDEwMCwgMTAwKSk7CisKKyAgICAvLyBXZSBzaG91bGQgc3RpbGwgYmUgc2Nyb2xsaW5nLCBiZWNh
dXNlIHRoZSBzY3JvbGxlZCBsYXllciBhbHNvIGV4aXN0cyBpbiB0aGUgbmV3IHRyZWUuCisgICAg
SW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Ny
b2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIE93blB0cjxDQ1Nj
cm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERl
bHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLCBzY3JvbGxMYXllcklkLCBz
Y3JvbGxEZWx0YSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgY2xlYXJS
b290UmVuZGVyU3VyZmFjZUFuZFNjcm9sbCkKK3sKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRz
TGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNp
emUoSW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdG
cmFtZSgpOworCisgICAgLy8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gc2Nyb2xsIGV2ZW4gaWYgdGhl
IHJvb3QgbGF5ZXIgbG9zZXMgaXRzIHJlbmRlciBzdXJmYWNlIGFmdGVyIHRoZSBtb3N0CisgICAg
Ly8gcmVjZW50IHJlbmRlci4KKyAgICBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2xlYXJSZW5k
ZXJTdXJmYWNlKCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsU3RhcnRlZCk7Cit9CisKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgd2hlZWxFdmVudEhhbmRsZXJzKQogewotICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICAgICAgcm9vdC0+c2V0U2Ny
b2xsYWJsZSh0cnVlKTsKLSAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQo
MCwgMCkpOwotICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwg
MTAwKSk7Ci0gICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7
Ci0gICAgfQorICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOwor
ICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgQ0NMYXllcklt
cGwqIHJvb3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKIAogICAgIHJvb3QtPnNldEhhdmVX
aGVlbEV2ZW50SGFuZGxlcnModHJ1ZSk7CisKICAgICAvLyBXaXRoIHJlZ2lzdGVyZWQgZXZlbnQg
aGFuZGxlcnMsIHdoZWVsIHNjcm9sbHMgaGF2ZSB0byBnbyB0byB0aGUgbWFpbiB0aHJlYWQuCi0g
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFp
bGVkKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwg
MCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxPbk1haW5UaHJlYWQpOwogCiAgICAgLy8gQnV0IGdlc3R1cmUgc2Nyb2xscyBjYW4gc3Rp
bGwgYmUgaGFuZGxlZC4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMjU3LDI3ICszMTEsMjkgQEAgVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiAKIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKQogewotICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9v
dC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKLSAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQ
b2ludCgwLCAwKSk7Ci0gICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAs
IDEwMCkpOworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOwor
ICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgQ0NMYXllcklt
cGwqIHJvb3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKKwogICAgIHJvb3QtPnNldFNob3Vs
ZFNjcm9sbE9uTWFpblRocmVhZCh0cnVlKTsKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
cm9vdC5yZWxlYXNlKCkpOwotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJ
bnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7Ci0gICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6R2VzdHVyZSksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworCisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKTsKKyAgICBF
WFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFp
blRocmVhZCk7CiB9CiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNj
cm9sbGFibGVSZWdpb25CYXNpYykKIHsKLSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDApOwotICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7Ci0g
ICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwotICAgIHJvb3QtPnNl
dE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBzZXR1cFNjcm9sbEFu
ZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMjAwLCAyMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRW
aWV3cG9ydFNpemUoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRl
cmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgQ0NMYXllckltcGwqIHJvb3QgPSBtX2hvc3RJbXBsLT5y
b290TGF5ZXIoKTsKKwogICAgIHJvb3QtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKEludFJl
Y3QoMCwgMCwgNTAsIDUwKSk7Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVs
ZWFzZSgpKTsKKwogICAgIC8vIEFsbCBzY3JvbGwgdHlwZXMgaW5zaWRlIHRoZSBub24tZmFzdCBz
Y3JvbGxhYmxlIHJlZ2lvbiBzaG91bGQgZmFpbC4KLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVs
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7Ci0gICAgRVhQRUNUX0VRKG1f
aG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CisgICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1h
aW5UaHJlYWQpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2lu
dCgyNSwgMjUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6R2VzdHVyZSksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOwogCiAgICAgLy8gQWxsIHNjcm9sbCB0eXBlcyBv
dXRzaWRlIHRoaXMgcmVnaW9uIHNob3VsZCBzdWNjZWVkLgogICAgIEVYUEVDVF9FUShtX2hvc3RJ
bXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg3NSwgNzUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0yOTAsMTYg
KzM0NiwxMyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uQmFzaWMpCiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFz
dFNjcm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0
cnVlKTsKLSAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7Ci0gICAg
cm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIHNldHVw
U2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgyMDAsIDIwMCkpOworICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgQ0NMYXllckltcGwq
IHJvb3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKKwogICAgIHJvb3QtPnNldE5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKEludFJlY3QoMCwgMCwgNTAsIDUwKSk7CiAgICAgcm9vdC0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCgtMjUsIDApKTsKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
cm9vdC5yZWxlYXNlKCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFt
ZTsKLSAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0g
ICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7IC8vIFVwZGF0ZSBkcmF3IHRyYW5zZm9y
bXMgc28gd2UgY2FuIGNvcnJlY3RseSBtYXAgcG9pbnRzIGludG8gbGF5ZXIgc3BhY2UuCisgICAg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAogICAgIC8vIFRoaXMgcG9p
bnQgd291bGQgZmFsbCBpbnRvIHRoZSBub24tZmFzdCBzY3JvbGxhYmxlIHJlZ2lvbiBleGNlcHQg
dGhhdCB3ZSd2ZSBtb3ZlZCB0aGUgbGF5ZXIgZG93biBieSAyNSBwaXhlbHMuCiAgICAgRVhQRUNU
X0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDQwLCAxMCksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsK
QEAgLTMwNywxNSArMzYwLDE2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9u
RmFzdFNjcm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQogICAgIG1faG9zdEltcGwtPnNjcm9sbEVu
ZCgpOwogCiAgICAgLy8gVGhpcyBwb2ludCBpcyBzdGlsbCBpbnNpZGUgdGhlIG5vbi1mYXN0IHJl
Z2lvbi4KLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTAs
IDEwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbEZhaWxlZCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKElu
dFBvaW50KDEwLCAxMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOwogfQogCiBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHBpbmNoR2VzdHVyZSkKIHsKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRz
TGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNp
emUoSW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdG
cmFtZSgpOwogCi0gICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+c2Ny
b2xsTGF5ZXIoKTsKKyAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5y
b290U2Nyb2xsTGF5ZXIoKTsKICAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOwogCiAgICAgY29uc3Qg
ZmxvYXQgbWluUGFnZVNjYWxlID0gMC41LCBtYXhQYWdlU2NhbGUgPSA0OwpAQCAtMzk0LDggKzQ0
OCw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFnZVNjYWxlQW5pbWF0aW9u
KQogewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkp
OwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKLSAgICBDQ0xheWVySW1w
bCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5zY3JvbGxMYXllcigpOworICAgIENDTGF5ZXJJ
bXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnJvb3RTY3JvbGxMYXllcigpOwogICAgIEFT
U0VSVChzY3JvbGxMYXllcik7CiAKICAgICBjb25zdCBmbG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUs
IG1heFBhZ2VTY2FsZSA9IDQ7CkBAIC00MzksNiArNDk0LDEwMSBAQCBURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikKICAgICB9CiB9CiAKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgaW5oaWJpdFNjcm9sbEFuZFBhZ2VTY2FsZVVwZGF0ZXNX
aGlsZVBpbmNoWm9vbWluZykKK3sKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKElu
dFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6
ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwor
CisgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExh
eWVyKCk7CisgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKworICAgIGNvbnN0IGZsb2F0IG1pblBh
Z2VTY2FsZSA9IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKKworICAgIC8vIFBpbmNoIHpvb20gaW4u
CisgICAgeworICAgICAgICAvLyBTdGFydCBhIHBpbmNoIGluIGdlc3R1cmUgYXQgdGhlIGJvdHRv
bSByaWdodCBjb3JuZXIgb2YgdGhlIHZpZXdwb3J0LgorICAgICAgICBjb25zdCBmbG9hdCB6b29t
SW5EZWx0YSA9IDI7CisgICAgICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExp
bWl0cygxLCBtaW5QYWdlU2NhbGUsIG1heFBhZ2VTY2FsZSk7CisgICAgICAgIG1faG9zdEltcGwt
PnBpbmNoR2VzdHVyZUJlZ2luKCk7CisgICAgICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZVVw
ZGF0ZSh6b29tSW5EZWx0YSwgSW50UG9pbnQoNTAsIDUwKSk7CisKKyAgICAgICAgLy8gQmVjYXVz
ZSB3ZSBhcmUgcGluY2ggem9vbWluZyBpbiwgd2Ugc2hvdWxkbid0IGdldCBhbnkgc2Nyb2xsIG9y
IHBhZ2UKKyAgICAgICAgLy8gc2NhbGUgZGVsdGFzLgorICAgICAgICBPd25QdHI8Q0NTY3JvbGxB
bmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMo
KTsKKyAgICAgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCAxKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7CisKKyAgICAg
ICAgLy8gT25jZSB0aGUgZ2VzdHVyZSBlbmRzLCB3ZSBnZXQgdGhlIGZpbmFsIHNjcm9sbCBhbmQg
cGFnZSBzY2FsZSB2YWx1ZXMuCisgICAgICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZUVuZCgp
OworICAgICAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygp
OworICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIHpvb21JbkRl
bHRhKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5p
ZCgpLCBJbnRTaXplKDI1LCAyNSkpOworICAgIH0KKworICAgIC8vIFBpbmNoIHpvb20gb3V0Lgor
ICAgIHsKKyAgICAgICAgLy8gU3RhcnQgYSBwaW5jaCBvdXQgZ2VzdHVyZSBhdCB0aGUgYm90dG9t
IHJpZ2h0IGNvcm5lciBvZiB0aGUgdmlld3BvcnQuCisgICAgICAgIGNvbnN0IGZsb2F0IHpvb21P
dXREZWx0YSA9IDAuNzU7CisgICAgICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFu
ZExpbWl0cygxLCBtaW5QYWdlU2NhbGUsIG1heFBhZ2VTY2FsZSk7CisgICAgICAgIG1faG9zdElt
cGwtPnBpbmNoR2VzdHVyZUJlZ2luKCk7CisgICAgICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVy
ZVVwZGF0ZSh6b29tT3V0RGVsdGEsIEludFBvaW50KDUwLCA1MCkpOworCisgICAgICAgIC8vIFNp
bmNlIHdlIGFyZSBwaW5jaCB6b29taW5nIG91dCwgd2Ugc2hvdWxkIGdldCBhbiB1cGRhdGUgdG8g
em9vbSBhbGwKKyAgICAgICAgLy8gdGhlIHdheSBvdXQgdG8gdGhlIG1pbmltdW0gcGFnZSBzY2Fs
ZS4KKyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hv
c3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJ
bmZvLT5wYWdlU2NhbGVEZWx0YSwgbWluUGFnZVNjYWxlKTsKKyAgICAgICAgZXhwZWN0Q29udGFp
bnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKDAsIDApKTsKKworICAg
ICAgICAvLyBPbmNlIHRoZSBnZXN0dXJlIGVuZHMsIHdlIGdldCB0aGUgZmluYWwgc2Nyb2xsIGFu
ZCBwYWdlIHNjYWxlIHZhbHVlcy4KKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlRW5k
KCk7CisgICAgICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFz
KCk7CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgem9vbU91
dERlbHRhKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVy
LT5pZCgpLCBJbnRTaXplKDgsIDgpKTsKKyAgICB9Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgaW5oaWJpdFNjcm9sbEFuZFBhZ2VTY2FsZVVwZGF0ZXNXaGlsZUFuaW1hdGlu
Z1BhZ2VTY2FsZSkKK3sKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUo
MTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1MCwg
NTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAg
Q0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7
CisgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKworICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VTY2Fs
ZSA9IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKKyAgICBjb25zdCBkb3VibGUgc3RhcnRUaW1lID0g
MTsKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAwLjE7CisgICAgY29uc3QgZG91YmxlIGhh
bGZ3YXlUaHJvdWdoQW5pbWF0aW9uID0gc3RhcnRUaW1lICsgZHVyYXRpb24gLyAyOworICAgIGNv
bnN0IGRvdWJsZSBlbmRUaW1lID0gc3RhcnRUaW1lICsgZHVyYXRpb247CisKKyAgICAvLyBTdGFy
dCBhIHBhZ2Ugc2NhbGUgYW5pbWF0aW9uLgorICAgIGNvbnN0IGZsb2F0IHBhZ2VTY2FsZURlbHRh
ID0gMjsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMSwgbWlu
UGFnZVNjYWxlLCBtYXhQYWdlU2NhbGUpOworICAgIG1faG9zdEltcGwtPnN0YXJ0UGFnZVNjYWxl
QW5pbWF0aW9uKEludFNpemUoNTAsIDUwKSwgZmFsc2UsIHBhZ2VTY2FsZURlbHRhLCBzdGFydFRp
bWUsIGR1cmF0aW9uKTsKKworICAgIC8vIFdlIHNob3VsZCBpbW1lZGlhdGVseSBnZXQgdGhlIGZp
bmFsIHpvb20gYW5kIHNjcm9sbCB2YWx1ZXMgZm9yIHRoZQorICAgIC8vIGFuaW1hdGlvbi4KKyAg
ICBtX2hvc3RJbXBsLT5hbmltYXRlKGhhbGZ3YXlUaHJvdWdoQW5pbWF0aW9uLCBoYWxmd2F5VGhy
b3VnaEFuaW1hdGlvbik7CisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbElu
Zm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgRVhQRUNUX0VRKHNj
cm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCBwYWdlU2NhbGVEZWx0YSk7CisgICAgZXhwZWN0Q29u
dGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKDI1LCAyNSkpOwor
CisgICAgLy8gU2Nyb2xsaW5nIGR1cmluZyB0aGUgYW5pbWF0aW9uIGlzIGlnbm9yZWQuCisgICAg
Y29uc3QgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpX
aGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJ
bXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7
CisKKyAgICAvLyBUaGUgZmluYWwgcGFnZSBzY2FsZSBhbmQgc2Nyb2xsIGRlbHRhcyBzaG91bGQg
bWF0Y2ggd2hhdCB3ZSBnb3QKKyAgICAvLyBlYXJsaWVyLgorICAgIG1faG9zdEltcGwtPmFuaW1h
dGUoZW5kVGltZSwgZW5kVGltZSk7CisgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nl
c3NTY3JvbGxEZWx0YXMoKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVs
dGEsIHBhZ2VTY2FsZURlbHRhKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgc2Ny
b2xsTGF5ZXItPmlkKCksIEludFNpemUoMjUsIDI1KSk7Cit9CisKIGNsYXNzIERpZERyYXdDaGVj
a0xheWVyIDogcHVibGljIENDVGlsZWRMYXllckltcGwgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPERpZERyYXdDaGVja0xheWVyPiBjcmVhdGUoaW50IGlkKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgRGlkRHJhd0NoZWNrTGF5ZXIoaWQpKTsgfQpAQCAtNDk4LDE0ICs2NDgsMTQgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBkaWREcmF3Tm90Q2FsbGVkT25IaWRkZW5M
YXllcikKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgbGF5ZXIt
PnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKIAotICAgIENDTGF5ZXJUcmVlSG9z
dEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0SW1wbDo6
RnJhbWVEYXRhPiBmcmFtZTsKIAogICAgIEVYUEVDVF9GQUxTRShsYXllci0+d2lsbERyYXdDYWxs
ZWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5kaWREcmF3Q2FsbGVkKCkpOwogCiAgICAg
RVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOwotICAgIG1faG9z
dEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwotICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXll
cnMoZnJhbWUpOworICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoKmZyYW1lKTsKKyAgICBtX2hv
c3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAgICBFWFBFQ1RfRkFMU0UobGF5
ZXItPndpbGxEcmF3Q2FsbGVkKCkpOwogICAgIEVYUEVDVF9GQUxTRShsYXllci0+ZGlkRHJhd0Nh
bGxlZCgpKTsKQEAgLTUxOSw4ICs2NjksOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIGRpZERyYXdOb3RDYWxsZWRPbkhpZGRlbkxheWVyKQogICAgIEVYUEVDVF9GQUxTRShsYXll
ci0+ZGlkRHJhd0NhbGxlZCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBh
cmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKLSAg
ICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5k
cmF3TGF5ZXJzKCpmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygqZnJh
bWUpOwogCiAgICAgRVhQRUNUX1RSVUUobGF5ZXItPndpbGxEcmF3Q2FsbGVkKCkpOwogICAgIEVY
UEVDVF9UUlVFKGxheWVyLT5kaWREcmF3Q2FsbGVkKCkpOwpAQCAtNTQ3LDcgKzY5Nyw3IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgd2lsbERyYXdOb3RDYWxsZWRPbk9jY2x1ZGVk
TGF5ZXIpCiAgICAgdG9wTGF5ZXItPnNldENvbnRlbnRCb3VuZHMoYmlnU2l6ZSk7CiAgICAgdG9w
TGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1l
RGF0YSBmcmFtZTsKKyAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhPiBm
cmFtZTsKIAogICAgIEVYUEVDVF9GQUxTRShvY2NsdWRlZExheWVyLT53aWxsRHJhd0NhbGxlZCgp
KTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVkZWRMYXllci0+ZGlkRHJhd0NhbGxlZCgpKTsKQEAg
LTU1NSw4ICs3MDUsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHdpbGxEcmF3
Tm90Q2FsbGVkT25PY2NsdWRlZExheWVyKQogICAgIEVYUEVDVF9GQUxTRSh0b3BMYXllci0+ZGlk
RHJhd0NhbGxlZCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0Ry
YXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKLSAgICBtX2hv
c3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kcmF3TGF5
ZXJzKCpmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygqZnJhbWUpOwog
CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1ZGVkTGF5ZXItPndpbGxEcmF3Q2FsbGVkKCkpOwogICAg
IEVYUEVDVF9GQUxTRShvY2NsdWRlZExheWVyLT5kaWREcmF3Q2FsbGVkKCkpOwpAQCAtNTgyLDEw
ICs3MzIsMTAgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBkaWREcmF3Q2FsbGVk
T25BbGxMYXllcnMpCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVyMS0+ZGlkRHJhd0NhbGxlZCgpKTsK
ICAgICBFWFBFQ1RfRkFMU0UobGF5ZXIyLT5kaWREcmF3Q2FsbGVkKCkpOwogCi0gICAgQ0NMYXll
clRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsOjpGcmFtZURhdGE+IGZyYW1lOwogICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnBy
ZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsK
LSAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBs
LT5kcmF3TGF5ZXJzKCpmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygq
ZnJhbWUpOwogCiAgICAgRVhQRUNUX1RSVUUocm9vdC0+ZGlkRHJhd0NhbGxlZCgpKTsKICAgICBF
WFBFQ1RfVFJVRShsYXllcjEtPmRpZERyYXdDYWxsZWQoKSk7CkBAIC02MjEsMTEgKzc3MSwxMSBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1doZW5B
bmltYXRpb25Vc2VzQ2hlY2tlcmJvYXJkKQogICAgIERpZERyYXdDaGVja0xheWVyKiByb290ID0g
c3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7
CiAgICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRl
KDEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJh
bWVEYXRhIGZyYW1lOworICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGE+
IGZyYW1lOwogCiAgICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFt
ZSkpOwotICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwotICAgIG1faG9zdEltcGwt
PmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoKmZy
YW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAgICAv
LyBXaGVuIGEgdGV4dHVyZSBpcyBtaXNzaW5nIGFuZCB3ZSdyZSBub3QgYW5pbWF0aW5nLCB3ZSBk
cmF3IGFzIHVzdWFsIHdpdGggY2hlY2tlcmJvYXJkaW5nLgogICAgIG1faG9zdEltcGwtPnNldFJv
b3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDApKTsKQEAgLTYzMyw4ICs3ODMsOCBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1doZW5B
bmltYXRpb25Vc2VzQ2hlY2tlcmJvYXJkKQogICAgIHJvb3QtPmFkZENoaWxkKE1pc3NpbmdUZXh0
dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgxLCB0cnVlLCBmYWxzZSwgZmFsc2UpKTsKIAogICAg
IEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hv
c3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKLSAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5
ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKCpmcmFtZSk7CisgICAgbV9o
b3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygqZnJhbWUpOwogCiAgICAgLy8gV2hlbiBhIHRleHR1
cmUgaXMgbWlzc2luZyBhbmQgd2UncmUgYW5pbWF0aW5nLCB3ZSBkb24ndCB3YW50IHRvIGRyYXcg
YW55dGhpbmcuCiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVy
OjpjcmVhdGUoMCkpOwpAQCAtNjQyLDggKzc5Miw4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hlbkFuaW1hdGlvblVzZXNDaGVja2VyYm9hcmQp
CiAgICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRl
KDEsIHRydWUsIGZhbHNlLCB0cnVlKSk7CiAKICAgICBFWFBFQ1RfRkFMU0UobV9ob3N0SW1wbC0+
cHJlcGFyZVRvRHJhdyhmcmFtZSkpOwotICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUp
OwotICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIG1faG9zdElt
cGwtPmRyYXdMYXllcnMoKmZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJz
KCpmcmFtZSk7CiAKICAgICAvLyBXaGVuIHRoZSBsYXllciBza2lwcyBkcmF3IGFuZCB3ZSdyZSBh
bmltYXRpbmcsIHdlIHN0aWxsIGRyYXcgdGhlIGZyYW1lLgogICAgIG1faG9zdEltcGwtPnNldFJv
b3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDApKTsKQEAgLTY1MSw4ICs4MDEsMzAx
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hl
bkFuaW1hdGlvblVzZXNDaGVja2VyYm9hcmQpCiAgICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1Rl
eHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDEsIGZhbHNlLCB0cnVlLCB0cnVlKSk7CiAKICAg
ICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbV9o
b3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7Ci0gICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExh
eWVycyhmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOworICAgIG1f
aG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoKmZyYW1lKTsKK30KKworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKK3sKKyAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPnNldFNjcm9s
bGFibGUoZmFsc2UpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2Uo
KSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIC8v
IFNjcm9sbCBldmVudCBpcyBpZ25vcmVkIGJlY2F1c2UgbGF5ZXIgaXMgbm90IHNjcm9sbGFibGUu
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
SWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQ
RUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QpCit7CisgICAgLy8gVGVzdCB0aGUg
Y29uZmlndXJhdGlvbiB3aGVyZSBhIG5vbi1jb21wb3NpdGVkIHJvb3QgbGF5ZXIgaXMgZW1iZWRk
ZWQgaW4gYQorICAgIC8vIHNjcm9sbGFibGUgb3V0ZXIgbGF5ZXIuCisgICAgSW50U2l6ZSBzdXJm
YWNlU2l6ZSgxMCwgMTApOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjb250ZW50TGF5ZXIg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIGNvbnRlbnRMYXllci0+c2V0SXNOb25Db21w
b3NpdGVkQ29udGVudCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0
cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFBvc2l0aW9uKEludFBvaW50KDUsIDUpKTsKKyAg
ICBjb250ZW50TGF5ZXItPnNldEJvdW5kcyhzdXJmYWNlU2l6ZSk7CisgICAgY29udGVudExheWVy
LT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoc3VyZmFjZVNpemUud2lkdGgoKSAqIDIsIHN1cmZh
Y2VTaXplLmhlaWdodCgpICogMikpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxM
YXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgc2Nyb2xsTGF5ZXItPnNldFNjcm9s
bGFibGUodHJ1ZSk7CisgICAgc2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKHN1cmZh
Y2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+YWRkQ2hpbGQoY29udGVudExheWVyLnJlbGVhc2Uo
KSk7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgp
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hv
c3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xs
RW5kKCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1Rf
VFJVRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRBbmRSZWRyYXcpCit7CisgICAgSW50U2l6ZSBz
dXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxh
eWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+
c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
NSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEw
KSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRS
ZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOworfQor
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0NoaWxkKQorewor
ICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0
ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAg
IG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8gU2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVj
YXVzZSB0aGUgaW5wdXQgY29vcmRpbmF0ZSBpcyBvdXRzaWRlIHRoZSBsYXllciBib3VuZGFyaWVz
LgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxNSwgNSks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBF
WFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNrZmFjaW5nQ2hpbGQpCit7CisgICAgSW50U2l6
ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNy
ZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKworICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICBtYXRyaXgucm90YXRlM2QoMTgwLCAwLCAw
KTsKKyAgICBjaGlsZC0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgY2hpbGQtPnNldERvdWJs
ZVNpZGVkKGZhbHNlKTsKKworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFs
aXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8gU2Nyb2xsIGV2ZW50IGlz
IGlnbm9yZWQgYmVjYXVzZSB0aGUgc2Nyb2xsYWJsZSBsYXllciBpcyBub3QgZmFjaW5nIHRoZSB2
aWV3ZXIgYW5kIHRoZXJlIGlzCisgICAgLy8gbm90aGluZyBzY3JvbGxhYmxlIGJlaGluZCBpdC4K
KyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJ
Z25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBF
Q1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzY3JvbGxCbG9ja2VkQnlDb250ZW50TGF5ZXIpCit7CisgICAgSW50U2l6ZSBz
dXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudExheWVy
ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXpl
KTsKKyAgICBjb250ZW50TGF5ZXItPnNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZCh0cnVlKTsK
KyAgICBjb250ZW50TGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOworCisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBv
aW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgc2Nyb2xsTGF5ZXItPmFkZENoaWxkKGNvbnRl
bnRMYXllci5yZWxlYXNlKCkpOworCisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9s
bExheWVyLnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZh
Y2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisg
ICAgLy8gU2Nyb2xsaW5nIGZhaWxzIGJlY2F1c2UgdGhlIGNvbnRlbnQgbGF5ZXIgaXMgYXNraW5n
IHRvIGJlIHNjcm9sbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpX
aGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOworfQorCitU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2Nh
bGVPbk1haW5UaHJlYWQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAg
IGZsb2F0IHBhZ2VTY2FsZSA9IDI7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3Jl
YXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOwor
ICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgSW50U2l6
ZSBleHBlY3RlZE1heFNjcm9sbChtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9z
aXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEp
OworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworCisgICAgLy8gU2V0IG5ldyBwYWdlIHNj
YWxlIGZyb20gbWFpbiB0aHJlYWQuCisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9y
QW5kTGltaXRzKHBhZ2VTY2FsZSwgcGFnZVNjYWxlLCBwYWdlU2NhbGUpOworCisgICAgLy8gVGhl
IHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgorICAgIGV4cGVjdGVkU2Ny
b2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNl
dD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBl
eHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMCwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7
CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBhbHNvIGhhdmUgYmVlbiB1cGRhdGVk
LgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRp
b24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZGVsdGEg
cmVtYWlucyBjb25zdGFudCBiZWNhdXNlIHRoZSBpbXBsIHRocmVhZCBkaWQgbm90IHNjYWxlLgor
ICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+cGFnZVNjYWxlRGVsdGEoKSwg
MSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENo
YW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEw
LCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFj
ZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Cisg
ICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMSwgMSwgcGFnZVNjYWxlKTsKKyAgICBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBleHBlY3RlZFNjcm9sbERlbHRhKHNjcm9sbERl
bHRhKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9zdEltcGwtPnJvb3RMYXll
cigpLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3Jv
bGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAv
LyBTZXQgbmV3IHBhZ2Ugc2NhbGUgb24gaW1wbCB0aHJlYWQgYnkgcGluY2hpbmcuCisgICAgbV9o
b3N0SW1wbC0+cGluY2hHZXN0dXJlQmVnaW4oKTsKKyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1
cmVVcGRhdGUocGFnZVNjYWxlLCBJbnRQb2ludCgpKTsKKyAgICBtX2hvc3RJbXBsLT5waW5jaEdl
c3R1cmVFbmQoKTsKKworICAgIC8vIFRoZSBzY3JvbGwgZGVsdGEgaXMgbm90IHNjYWxlZCBiZWNh
dXNlIHRoZSBtYWluIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIE93blB0cjxDQ1Njcm9sbEFu
ZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygp
OworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAwLCBleHBlY3RlZFNjcm9s
bERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVu
IHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3Jv
bGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9sbCk7CisKKyAgICAvLyBUaGUgcGFnZSBzY2Fs
ZSBkZWx0YSBzaG91bGQgbWF0Y2ggdGhlIG5ldyBzY2FsZSBvbiB0aGUgaW1wbCBzaWRlLgorICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+cGFnZVNjYWxlRGVsdGEoKSwgcGFn
ZVNjYWxlKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGls
ZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VT
aXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgwKTsKKyAgICAvLyBBbHNvIG1hcmsgdGhlIHJvb3Qgc2Nyb2xsYWJsZSBzbyBpdCBi
ZWNvbWVzIHRoZSByb290IHNjcm9sbCBsYXllci4KKyAgICByb290LT5zZXRTY3JvbGxhYmxlKHRy
dWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBv
aW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihy
b290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VT
aXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAg
Q0NMYXllckltcGwqIGNoaWxkID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCktPmNoaWxkcmVuKClb
MF0uZ2V0KCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBJbnRTaXpl
IGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIEludFNpemUgZXhwZWN0ZWRN
YXhTY3JvbGwoY2hpbGQtPm1heFNjcm9sbFBvc2l0aW9uKCkpOworICAgIEVYUEVDVF9FUShtX2hv
c3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9z
dEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQo
KTsKKworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNj
YWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwgMSwgcGFnZVNjYWxlKTsKKworICAgIC8vIFRo
ZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHNjcm9sbCBkZWx0YS4KKyAgICBleHBlY3RlZFNj
cm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZSk7CisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVT
ZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAg
ZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDEsIGV4cGVjdGVkU2Nyb2xsRGVsdGEp
OworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgbm90IGhhdmUgY2hhbmdlZC4KKyAg
ICBFWFBFQ1RfRVEoY2hpbGQtPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xs
KTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxlIGRlbHRhIHJlbWFpbnMgY29uc3RhbnQgYmVjYXVz
ZSB0aGUgaW1wbCB0aHJlYWQgZGlkIG5vdCBzY2FsZS4KKyAgICBFWFBFQ1RfRVEoY2hpbGQtPnBh
Z2VTY2FsZURlbHRhKCksIDEpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHNjcm9sbENoaWxkQmV5b25kTGltaXQpCit7CisgICAgLy8gU2Nyb2xsIGEgY2hpbGQgbGF5ZXIg
YmV5b25kIGl0cyBtYXhpbXVtIHNjcm9sbCByYW5nZSBhbmQgbWFrZSBzdXJlIHRoZQorICAgIC8v
IHBhcmVudCBsYXllciBpcyBzY3JvbGxlZCBvbiB0aGUgYXhpcyBvbiB3aGljaCB0aGUgY2hpbGQg
d2FzIHVuYWJsZSB0bworICAgIC8vIHNjcm9sbC4KKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEw
LCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxh
eWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKworICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gZ3JhbmRDaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24o
SW50UG9pbnQoMCwgNSkpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0
ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAg
Y2hpbGQtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDMsIDApKTsKKyAgICBjaGlsZC0+YWRk
Q2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworCisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQu
cmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICB7CisgICAgICAgIEludFNp
emUgc2Nyb2xsRGVsdGEoLTMsIC03KTsKKyAgICAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNj
cm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgIG1faG9zdEltcGwt
PnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7
CisKKyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hv
c3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisKKyAgICAgICAgLy8gVGhlIGdyYW5kIGNo
aWxkIHNob3VsZCBoYXZlIHNjcm9sbGVkIHVwIHRvIGl0cyBsaW1pdC4KKyAgICAgICAgQ0NMYXll
ckltcGwqIGNoaWxkID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCktPmNoaWxkcmVuKClbMF0uZ2V0
KCk7CisgICAgICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClb
MF0uZ2V0KCk7CisgICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBncmFu
ZENoaWxkLT5pZCgpLCBJbnRTaXplKDAsIC01KSk7CisKKyAgICAgICAgLy8gVGhlIGNoaWxkIHNo
b3VsZCBoYXZlIG9ubHkgc2Nyb2xsZWQgb24gdGhlIG90aGVyIGF4aXMuCisgICAgICAgIGV4cGVj
dENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBjaGlsZC0+aWQoKSwgSW50U2l6ZSgtMywgMCkp
OworICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxFdmVu
dEJ1YmJsaW5nKQoreworICAgIC8vIFdoZW4gd2UgdHJ5IHRvIHNjcm9sbCBhIG5vbi1zY3JvbGxh
YmxlIGNoaWxkIGxheWVyLCB0aGUgc2Nyb2xsIGRlbHRhCisgICAgLy8gc2hvdWxkIGJlIGFwcGxp
ZWQgdG8gb25lIG9mIGl0cyBhbmNlc3RvcnMgaWYgcG9zc2libGUuCisgICAgSW50U2l6ZSBzdXJm
YWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNj
cm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBv
aW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisKKyAgICBjaGlsZC0+c2V0U2Nyb2xsYWJsZShmYWxz
ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmll
d3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERy
YXdGcmFtZSgpOworICAgIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCA0KTsKKyAg
ICAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7CisgICAgICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAg
ICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAgICAgT3duUHRyPENDU2Nyb2xs
QW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFz
KCk7CisKKyAgICAgICAgLy8gT25seSB0aGUgcm9vdCBzaG91bGQgaGF2ZSBzY3JvbGxlZC4KKyAg
ICAgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgICAg
IGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBtX2hvc3RJbXBsLT5yb290TGF5ZXIo
KS0+aWQoKSwgc2Nyb2xsRGVsdGEpOworICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBzY3JvbGxCZWZvcmVSZWRyYXcpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6
ZSgxMCwgMTApOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihjcmVhdGVTY3JvbGxhYmxl
TGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAgICBtX2hvc3RJbXBs
LT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworCisgICAgLy8gRHJhdyBvbmUgZnJhbWUg
YW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVidWlsZCB0aGUgbGF5ZXIgdHJlZSB0byBtaW1pYyBhIHRy
ZWUgc3luY2hyb25pemF0aW9uLgorICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CisgICAgbV9ob3N0SW1wbC0+ZGV0YWNoTGF5ZXJUcmVlKCk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUp
LCBzdXJmYWNlU2l6ZSkpOworCisgICAgLy8gU2Nyb2xsaW5nIHNob3VsZCBzdGlsbCB3b3JrIGV2
ZW4gdGhvdWdoIHdlIGRpZCBub3QgZHJhdyB5ZXQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwp
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CiB9CiAKIGNsYXNzIEJsZW5k
U3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CkBA
IC03NTMsMzQgKzExOTYsMzQgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBibGVu
ZGluZ09mZldoZW5EcmF3aW5nT3BhcXVlTGF5ZXJzKQogICAgIHJvb3QtPmFkZENoaWxkKEJsZW5k
U3RhdGVDaGVja0xheWVyOjpjcmVhdGUoMSkpOwogICAgIEJsZW5kU3RhdGVDaGVja0xheWVyKiBs
YXllcjEgPSBzdGF0aWNfY2FzdDxCbGVuZFN0YXRlQ2hlY2tMYXllcio+KHJvb3QtPmNoaWxkcmVu
KClbMF0uZ2V0KCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1l
OworICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGE+IGZyYW1lOwogCiAg
ICAgLy8gT3BhcXVlIGxheWVyLCBkcmF3biB3aXRob3V0IGJsZW5kaW5nLgogICAgIGxheWVyMS0+
c2V0T3BhcXVlKHRydWUpOwogICAgIGxheWVyMS0+c2V0T3BhcXVlQ29udGVudHModHJ1ZSk7CiAg
ICAgbGF5ZXIxLT5zZXRFeHBlY3RhdGlvbihmYWxzZSwgZmFsc2UpOwogICAgIEVYUEVDVF9UUlVF
KG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3
TGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKCpmcmFtZSk7CiAgICAg
RVhQRUNUX1RSVUUobGF5ZXIxLT5xdWFkc0FwcGVuZGVkKCkpOwotICAgIG1faG9zdEltcGwtPmRp
ZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
KmZyYW1lKTsKIAogICAgIC8vIExheWVyIHdpdGggdHJhbnNsdWNlbnQgY29udGVudCwgYnV0IG9w
YXF1ZSBjb250ZW50LCBzbyBkcmF3biB3aXRob3V0IGJsZW5kaW5nLgogICAgIGxheWVyMS0+c2V0
T3BhcXVlKGZhbHNlKTsKICAgICBsYXllcjEtPnNldE9wYXF1ZUNvbnRlbnRzKHRydWUpOwogICAg
IGxheWVyMS0+c2V0RXhwZWN0YXRpb24oZmFsc2UsIGZhbHNlKTsKICAgICBFWFBFQ1RfVFJVRSht
X2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbV9ob3N0SW1wbC0+ZHJhd0xh
eWVycyhmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOwogICAgIEVY
UEVDVF9UUlVFKGxheWVyMS0+cXVhZHNBcHBlbmRlZCgpKTsKLSAgICBtX2hvc3RJbXBsLT5kaWRE
cmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpm
cmFtZSk7CiAKICAgICAvLyBMYXllciB3aXRoIHRyYW5zbHVjZW50IGNvbnRlbnQgYW5kIHBhaW50
aW5nLCBzbyBkcmF3biB3aXRoIGJsZW5kaW5nLgogICAgIGxheWVyMS0+c2V0T3BhcXVlKGZhbHNl
KTsKICAgICBsYXllcjEtPnNldE9wYXF1ZUNvbnRlbnRzKGZhbHNlKTsKICAgICBsYXllcjEtPnNl
dEV4cGVjdGF0aW9uKHRydWUsIGZhbHNlKTsKICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5w
cmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7
CisgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOwogICAgIEVYUEVDVF9UUlVFKGxh
eWVyMS0+cXVhZHNBcHBlbmRlZCgpKTsKLSAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJz
KGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAg
ICAvLyBMYXllciB3aXRoIHRyYW5zbHVjZW50IG9wYWNpdHksIGRyYXduIHdpdGggYmxlbmRpbmcu
CiAgICAgbGF5ZXIxLT5zZXRPcGFxdWUodHJ1ZSk7CkBAIC03ODgsOSArMTIzMSw5IEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgYmxlbmRpbmdPZmZXaGVuRHJhd2luZ09wYXF1ZUxh
eWVycykKICAgICBsYXllcjEtPnNldE9wYWNpdHkoMC41KTsKICAgICBsYXllcjEtPnNldEV4cGVj
dGF0aW9uKHRydWUsIGZhbHNlKTsKICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJl
VG9EcmF3KGZyYW1lKSk7Ci0gICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAg
bV9ob3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOwogICAgIEVYUEVDVF9UUlVFKGxheWVyMS0+
cXVhZHNBcHBlbmRlZCgpKTsKLSAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1l
KTsKKyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAgICAvLyBM
YXllciB3aXRoIHRyYW5zbHVjZW50IG9wYWNpdHkgYW5kIHBhaW50aW5nLCBkcmF3biB3aXRoIGJs
ZW5kaW5nLgogICAgIGxheWVyMS0+c2V0T3BhcXVlKHRydWUpOwpAQCAtNzk4LDkgKzEyNDEsOSBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5nT2ZmV2hlbkRyYXdpbmdP
cGFxdWVMYXllcnMpCiAgICAgbGF5ZXIxLT5zZXRPcGFjaXR5KDAuNSk7CiAgICAgbGF5ZXIxLT5z
ZXRFeHBlY3RhdGlvbih0cnVlLCBmYWxzZSk7CiAgICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+
cHJlcGFyZVRvRHJhdyhmcmFtZSkpOwotICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUp
OworICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoKmZyYW1lKTsKICAgICBFWFBFQ1RfVFJVRShs
YXllcjEtPnF1YWRzQXBwZW5kZWQoKSk7Ci0gICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVy
cyhmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygqZnJhbWUpOwogCiAg
ICAgbGF5ZXIxLT5hZGRDaGlsZChCbGVuZFN0YXRlQ2hlY2tMYXllcjo6Y3JlYXRlKDIpKTsKICAg
ICBCbGVuZFN0YXRlQ2hlY2tMYXllciogbGF5ZXIyID0gc3RhdGljX2Nhc3Q8QmxlbmRTdGF0ZUNo
ZWNrTGF5ZXIqPihsYXllcjEtPmNoaWxkcmVuKClbMF0uZ2V0KCkpOwpAQCAtODE1LDEwICsxMjU4
LDEwIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgYmxlbmRpbmdPZmZXaGVuRHJh
d2luZ09wYXF1ZUxheWVycykKICAgICBsYXllcjItPnNldE9wYWNpdHkoMSk7CiAgICAgbGF5ZXIy
LT5zZXRFeHBlY3RhdGlvbihmYWxzZSwgZmFsc2UpOwogICAgIEVYUEVDVF9UUlVFKG1faG9zdElt
cGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZy
YW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKCpmcmFtZSk7CiAgICAgRVhQRUNUX1RS
VUUobGF5ZXIxLT5xdWFkc0FwcGVuZGVkKCkpOwogICAgIEVYUEVDVF9UUlVFKGxheWVyMi0+cXVh
ZHNBcHBlbmRlZCgpKTsKLSAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsK
KyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAgICAvLyBQYXJl
bnQgbGF5ZXIgd2l0aCB0cmFuc2x1Y2VudCBjb250ZW50LCBkcmF3biB3aXRoIGJsZW5kaW5nLgog
ICAgIC8vIENoaWxkIGxheWVyIHdpdGggb3BhcXVlIGNvbnRlbnQsIGRyYXduIHdpdGhvdXQgYmxl
bmRpbmcuCkBAIC04MjcsMTAgKzEyNzAsMTAgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBibGVuZGluZ09mZldoZW5EcmF3aW5nT3BhcXVlTGF5ZXJzKQogICAgIGxheWVyMS0+c2V0
RXhwZWN0YXRpb24odHJ1ZSwgZmFsc2UpOwogICAgIGxheWVyMi0+c2V0RXhwZWN0YXRpb24oZmFs
c2UsIGZhbHNlKTsKICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZy
YW1lKSk7Ci0gICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbV9ob3N0SW1w
bC0+ZHJhd0xheWVycygqZnJhbWUpOwogICAgIEVYUEVDVF9UUlVFKGxheWVyMS0+cXVhZHNBcHBl
bmRlZCgpKTsKICAgICBFWFBFQ1RfVFJVRShsYXllcjItPnF1YWRzQXBwZW5kZWQoKSk7Ci0gICAg
bV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZGlk
RHJhd0FsbExheWVycygqZnJhbWUpOwogCiAgICAgLy8gUGFyZW50IGxheWVyIHdpdGggdHJhbnNs
dWNlbnQgY29udGVudCBidXQgb3BhcXVlIHBhaW50aW5nLCBkcmF3biB3aXRob3V0IGJsZW5kaW5n
LgogICAgIC8vIENoaWxkIGxheWVyIHdpdGggb3BhcXVlIGNvbnRlbnQsIGRyYXduIHdpdGhvdXQg
YmxlbmRpbmcuCkBAIC04MzksMTAgKzEyODIsMTAgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBibGVuZGluZ09mZldoZW5EcmF3aW5nT3BhcXVlTGF5ZXJzKQogICAgIGxheWVyMS0+
c2V0RXhwZWN0YXRpb24oZmFsc2UsIGZhbHNlKTsKICAgICBsYXllcjItPnNldEV4cGVjdGF0aW9u
KGZhbHNlLCBmYWxzZSk7CiAgICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJh
dyhmcmFtZSkpOwotICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG1faG9z
dEltcGwtPmRyYXdMYXllcnMoKmZyYW1lKTsKICAgICBFWFBFQ1RfVFJVRShsYXllcjEtPnF1YWRz
QXBwZW5kZWQoKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXIyLT5xdWFkc0FwcGVuZGVkKCkpOwot
ICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIG1faG9zdEltcGwt
PmRpZERyYXdBbGxMYXllcnMoKmZyYW1lKTsKIAogICAgIC8vIFBhcmVudCBsYXllciB3aXRoIHRy
YW5zbHVjZW50IG9wYWNpdHkgYW5kIG9wYXF1ZSBjb250ZW50LiBTaW5jZSBpdCBoYXMgYQogICAg
IC8vIGRyYXdpbmcgY2hpbGQsIGl0J3MgZHJhd24gdG8gYSByZW5kZXIgc3VyZmFjZSB3aGljaCBj
YXJyaWVzIHRoZSBvcGFjaXR5LApAQCAtODU1LDEwICsxMjk4LDEwIEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgYmxlbmRpbmdPZmZXaGVuRHJhd2luZ09wYXF1ZUxheWVycykKICAg
ICBsYXllcjEtPnNldEV4cGVjdGF0aW9uKGZhbHNlLCB0cnVlKTsKICAgICBsYXllcjItPnNldEV4
cGVjdGF0aW9uKGZhbHNlLCBmYWxzZSk7CiAgICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJl
cGFyZVRvRHJhdyhmcmFtZSkpOwotICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwor
ICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoKmZyYW1lKTsKICAgICBFWFBFQ1RfVFJVRShsYXll
cjEtPnF1YWRzQXBwZW5kZWQoKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXIyLT5xdWFkc0FwcGVu
ZGVkKCkpOwotICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIG1f
aG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoKmZyYW1lKTsKIAogICAgIC8vIERyYXcgYWdhaW4s
IGJ1dCB3aXRoIGNoaWxkIG5vbi1vcGFxdWUsIHRvIG1ha2Ugc3VyZQogICAgIC8vIGxheWVyMSBu
b3QgY3VsbGVkLgpAQCAtODcxLDEwICsxMzE0LDEwIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgYmxlbmRpbmdPZmZXaGVuRHJhd2luZ09wYXF1ZUxheWVycykKICAgICBsYXllcjIt
PnNldE9wYWNpdHkoMC41KTsKICAgICBsYXllcjItPnNldEV4cGVjdGF0aW9uKHRydWUsIGZhbHNl
KTsKICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0g
ICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZHJhd0xh
eWVycygqZnJhbWUpOwogICAgIEVYUEVDVF9UUlVFKGxheWVyMS0+cXVhZHNBcHBlbmRlZCgpKTsK
ICAgICBFWFBFQ1RfVFJVRShsYXllcjItPnF1YWRzQXBwZW5kZWQoKSk7Ci0gICAgbV9ob3N0SW1w
bC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExh
eWVycygqZnJhbWUpOwogCiAgICAgLy8gQSBzZWNvbmQgd2F5IG9mIG1ha2luZyB0aGUgY2hpbGQg
bm9uLW9wYXF1ZS4KICAgICBsYXllcjEtPnNldE9wYXF1ZSh0cnVlKTsKQEAgLTg4NSwxMCArMTMy
OCwxMCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5nT2ZmV2hlbkRy
YXdpbmdPcGFxdWVMYXllcnMpCiAgICAgbGF5ZXIyLT5zZXRPcGFjaXR5KDEpOwogICAgIGxheWVy
Mi0+c2V0RXhwZWN0YXRpb24odHJ1ZSwgZmFsc2UpOwogICAgIEVYUEVDVF9UUlVFKG1faG9zdElt
cGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZy
YW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKCpmcmFtZSk7CiAgICAgRVhQRUNUX1RS
VUUobGF5ZXIxLT5xdWFkc0FwcGVuZGVkKCkpOwogICAgIEVYUEVDVF9UUlVFKGxheWVyMi0+cXVh
ZHNBcHBlbmRlZCgpKTsKLSAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsK
KyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAgICAvLyBBbmQg
d2hlbiB0aGUgbGF5ZXIgc2F5cyBpdHMgbm90IG9wYXF1ZSBidXQgaXMgcGFpbnRlZCBvcGFxdWUs
IGl0IGlzIG5vdCBibGVuZGVkLgogICAgIGxheWVyMS0+c2V0T3BhcXVlKHRydWUpOwpAQCAtODk5
LDEwICsxMzQyLDEwIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgYmxlbmRpbmdP
ZmZXaGVuRHJhd2luZ09wYXF1ZUxheWVycykKICAgICBsYXllcjItPnNldE9wYWNpdHkoMSk7CiAg
ICAgbGF5ZXIyLT5zZXRFeHBlY3RhdGlvbihmYWxzZSwgZmFsc2UpOwogICAgIEVYUEVDVF9UUlVF
KG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3
TGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKCpmcmFtZSk7CiAgICAg
RVhQRUNUX1RSVUUobGF5ZXIxLT5xdWFkc0FwcGVuZGVkKCkpOwogICAgIEVYUEVDVF9UUlVFKGxh
eWVyMi0+cXVhZHNBcHBlbmRlZCgpKTsKLSAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJz
KGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAg
ICAvLyBMYXllciB3aXRoIHBhcnRpYWxseSBvcGFxdWUgY29udGVudHMsIGRyYXduIHdpdGggYmxl
bmRpbmcuCiAgICAgbGF5ZXIxLT5zZXRPcGFxdWUoZmFsc2UpOwpAQCAtOTEyLDkgKzEzNTUsOSBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5nT2ZmV2hlbkRyYXdpbmdP
cGFxdWVMYXllcnMpCiAgICAgbGF5ZXIxLT5zZXRPcGFxdWVDb250ZW50UmVjdChJbnRSZWN0KDUs
IDUsIDIsIDUpKTsKICAgICBsYXllcjEtPnNldEV4cGVjdGF0aW9uKHRydWUsIGZhbHNlKTsKICAg
ICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbV9o
b3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygq
ZnJhbWUpOwogICAgIEVYUEVDVF9UUlVFKGxheWVyMS0+cXVhZHNBcHBlbmRlZCgpKTsKLSAgICBt
X2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kaWRE
cmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAgICAvLyBMYXllciB3aXRoIHBhcnRpYWxseSBvcGFx
dWUgY29udGVudHMgcGFydGlhbGx5IGN1bGxlZCwgZHJhd24gd2l0aCBibGVuZGluZy4KICAgICBs
YXllcjEtPnNldE9wYXF1ZShmYWxzZSk7CkBAIC05MjQsOSArMTM2Nyw5IEBAIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgYmxlbmRpbmdPZmZXaGVuRHJhd2luZ09wYXF1ZUxheWVycykK
ICAgICBsYXllcjEtPnNldE9wYXF1ZUNvbnRlbnRSZWN0KEludFJlY3QoNSwgNSwgMiwgNSkpOwog
ICAgIGxheWVyMS0+c2V0RXhwZWN0YXRpb24odHJ1ZSwgZmFsc2UpOwogICAgIEVYUEVDVF9UUlVF
KG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3
TGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKCpmcmFtZSk7CiAgICAg
RVhQRUNUX1RSVUUobGF5ZXIxLT5xdWFkc0FwcGVuZGVkKCkpOwotICAgIG1faG9zdEltcGwtPmRp
ZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
KmZyYW1lKTsKIAogICAgIC8vIExheWVyIHdpdGggcGFydGlhbGx5IG9wYXF1ZSBjb250ZW50cyBj
dWxsZWQsIGRyYXduIHdpdGggYmxlbmRpbmcuCiAgICAgbGF5ZXIxLT5zZXRPcGFxdWUoZmFsc2Up
OwpAQCAtOTM2LDkgKzEzNzksOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJs
ZW5kaW5nT2ZmV2hlbkRyYXdpbmdPcGFxdWVMYXllcnMpCiAgICAgbGF5ZXIxLT5zZXRPcGFxdWVD
b250ZW50UmVjdChJbnRSZWN0KDUsIDUsIDIsIDUpKTsKICAgICBsYXllcjEtPnNldEV4cGVjdGF0
aW9uKHRydWUsIGZhbHNlKTsKICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9E
cmF3KGZyYW1lKSk7Ci0gICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbV9o
b3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOwogICAgIEVYUEVDVF9UUlVFKGxheWVyMS0+cXVh
ZHNBcHBlbmRlZCgpKTsKLSAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsK
KyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAgICAvLyBMYXll
ciB3aXRoIHBhcnRpYWxseSBvcGFxdWUgY29udGVudHMgYW5kIHRyYW5zbHVjZW50IGNvbnRlbnRz
IGN1bGxlZCwgZHJhd24gd2l0aG91dCBibGVuZGluZy4KICAgICBsYXllcjEtPnNldE9wYXF1ZShm
YWxzZSk7CkBAIC05NDgsOSArMTM5MSw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgYmxlbmRpbmdPZmZXaGVuRHJhd2luZ09wYXF1ZUxheWVycykKICAgICBsYXllcjEtPnNldE9w
YXF1ZUNvbnRlbnRSZWN0KEludFJlY3QoNSwgNSwgMiwgNSkpOwogICAgIGxheWVyMS0+c2V0RXhw
ZWN0YXRpb24oZmFsc2UsIGZhbHNlKTsKICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVw
YXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7Cisg
ICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOwogICAgIEVYUEVDVF9UUlVFKGxheWVy
MS0+cXVhZHNBcHBlbmRlZCgpKTsKLSAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZy
YW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKIH0KIApA
QCAtOTc2LDE4ICsxNDE5LDE4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgdmll
d3BvcnRDb3ZlcmVkKQogICAgICAgICByb290LT5zZXRRdWFkUmVjdChJbnRSZWN0KEludFBvaW50
KCksIGxheWVyUmVjdC5zaXplKCkpKTsKICAgICAgICAgcm9vdC0+c2V0UXVhZFZpc2libGVSZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXJSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIENDTGF5
ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAgICAgUmVmUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGw6OkZyYW1lRGF0YT4gZnJhbWU7CiAgICAgICAgIEVYUEVDVF9UUlVFKG1faG9z
dEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICAgICAgQVNTRVJUX0VRKDF1LCBmcmFt
ZS5yZW5kZXJQYXNzZXMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDF1LCBmcmFtZS0+cmVu
ZGVyUGFzc2VzLnNpemUoKSk7CiAKICAgICAgICAgc2l6ZV90IG51bUd1dHRlclF1YWRzID0gMDsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1
YWRMaXN0KCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBudW1HdXR0ZXJRdWFkcyArPSAoZnJh
bWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpW2ldLT5tYXRlcmlhbCgpID09IENDRHJhd1F1
YWQ6OlNvbGlkQ29sb3IpID8gMSA6IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnJhbWUtPnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG51bUd1dHRlclF1YWRzICs9IChmcmFtZS0+cmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgp
W2ldLT5tYXRlcmlhbCgpID09IENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IpID8gMSA6IDA7CiAgICAg
ICAgIEVYUEVDVF9FUSgwdSwgbnVtR3V0dGVyUXVhZHMpOwotICAgICAgICBFWFBFQ1RfRVEoMXUs
IGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBFWFBF
Q1RfRVEoMXUsIGZyYW1lLT5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKIAot
ICAgICAgICB2ZXJpZnlRdWFkc0V4YWN0bHlDb3ZlclJlY3QoZnJhbWUucmVuZGVyUGFzc2VzWzBd
LT5xdWFkTGlzdCgpLCBJbnRSZWN0KC1sYXllclJlY3QubG9jYXRpb24oKSwgdmlld3BvcnRTaXpl
KSk7Ci0gICAgICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgICAg
ICB2ZXJpZnlRdWFkc0V4YWN0bHlDb3ZlclJlY3QoZnJhbWUtPnJlbmRlclBhc3Nlc1swXS0+cXVh
ZExpc3QoKSwgSW50UmVjdCgtbGF5ZXJSZWN0LmxvY2F0aW9uKCksIHZpZXdwb3J0U2l6ZSkpOwor
ICAgICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAgICAgfQogCiAg
ICAgLy8gRW1wdHkgdmlzaWJsZSBjb250ZW50IGFyZWEgKGZ1bGxzY3JlZW4gZ3V0dGVyIHJlY3Qp
CkBAIC05OTksMTkgKzE0NDIsMTkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB2
aWV3cG9ydENvdmVyZWQpCiAgICAgICAgIHJvb3QtPnNldFF1YWRSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgbGF5ZXJSZWN0LnNpemUoKSkpOwogICAgICAgICByb290LT5zZXRRdWFkVmlzaWJsZVJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXllclJlY3Quc2l6ZSgpKSk7CiAKLSAgICAgICAgQ0NM
YXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgICAgICBSZWZQdHI8Q0NMYXll
clRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhPiBmcmFtZTsKICAgICAgICAgRVhQRUNUX1RSVUUobV9o
b3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOwotICAgICAgICBBU1NFUlRfRVEoMXUsIGZy
YW1lLnJlbmRlclBhc3Nlcy5zaXplKCkpOwotICAgICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxs
TGF5ZXJzKGZyYW1lKTsKKyAgICAgICAgQVNTRVJUX0VRKDF1LCBmcmFtZS0+cmVuZGVyUGFzc2Vz
LnNpemUoKSk7CisgICAgICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoKmZyYW1lKTsK
IAogICAgICAgICBzaXplX3QgbnVtR3V0dGVyUXVhZHMgPSAwOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIG51bUd1dHRlclF1YWRzICs9IChmcmFtZS5yZW5kZXJQYXNzZXNbMF0t
PnF1YWRMaXN0KClbaV0tPm1hdGVyaWFsKCkgPT0gQ0NEcmF3UXVhZDo6U29saWRDb2xvcikgPyAx
IDogMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZS0+cmVuZGVyUGFzc2Vz
WzBdLT5xdWFkTGlzdCgpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbnVtR3V0dGVyUXVhZHMg
Kz0gKGZyYW1lLT5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbaV0tPm1hdGVyaWFsKCkgPT0g
Q0NEcmF3UXVhZDo6U29saWRDb2xvcikgPyAxIDogMDsKICAgICAgICAgRVhQRUNUX0VRKDF1LCBu
dW1HdXR0ZXJRdWFkcyk7Ci0gICAgICAgIEVYUEVDVF9FUSgxdSwgZnJhbWUucmVuZGVyUGFzc2Vz
WzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgZnJhbWUtPnJl
bmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOwogCi0gICAgICAgIHZlcmlmeVF1YWRz
RXhhY3RseUNvdmVyUmVjdChmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCksIEludFJl
Y3QoLWxheWVyUmVjdC5sb2NhdGlvbigpLCB2aWV3cG9ydFNpemUpKTsKLSAgICAgICAgbV9ob3N0
SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgICAgIHZlcmlmeVF1YWRzRXhhY3Rs
eUNvdmVyUmVjdChmcmFtZS0+cmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpLCBJbnRSZWN0KC1s
YXllclJlY3QubG9jYXRpb24oKSwgdmlld3BvcnRTaXplKSk7CisgICAgICAgIG1faG9zdEltcGwt
PmRpZERyYXdBbGxMYXllcnMoKmZyYW1lKTsKICAgICB9CiAKICAgICAvLyBDb250ZW50IGFyZWEg
aW4gbWlkZGxlIG9mIGNsaXAgcmVjdCAoZm91ciBzdXJyb3VuZGluZyBndXR0ZXIgcmVjdHMpCkBA
IC0xMDIzLDE4ICsxNDY2LDE4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgdmll
d3BvcnRDb3ZlcmVkKQogICAgICAgICByb290LT5zZXRRdWFkUmVjdChJbnRSZWN0KEludFBvaW50
KCksIGxheWVyUmVjdC5zaXplKCkpKTsKICAgICAgICAgcm9vdC0+c2V0UXVhZFZpc2libGVSZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXJSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIENDTGF5
ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAgICAgUmVmUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGw6OkZyYW1lRGF0YT4gZnJhbWU7CiAgICAgICAgIEVYUEVDVF9UUlVFKG1faG9z
dEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICAgICAgQVNTRVJUX0VRKDF1LCBmcmFt
ZS5yZW5kZXJQYXNzZXMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDF1LCBmcmFtZS0+cmVu
ZGVyUGFzc2VzLnNpemUoKSk7CiAKICAgICAgICAgc2l6ZV90IG51bUd1dHRlclF1YWRzID0gMDsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1
YWRMaXN0KCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBudW1HdXR0ZXJRdWFkcyArPSAoZnJh
bWUucmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpW2ldLT5tYXRlcmlhbCgpID09IENDRHJhd1F1
YWQ6OlNvbGlkQ29sb3IpID8gMSA6IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnJhbWUtPnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG51bUd1dHRlclF1YWRzICs9IChmcmFtZS0+cmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgp
W2ldLT5tYXRlcmlhbCgpID09IENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IpID8gMSA6IDA7CiAgICAg
ICAgIEVYUEVDVF9FUSg0dSwgbnVtR3V0dGVyUXVhZHMpOwotICAgICAgICBFWFBFQ1RfRVEoNXUs
IGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKS5zaXplKCkpOworICAgICAgICBFWFBF
Q1RfRVEoNXUsIGZyYW1lLT5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKIAot
ICAgICAgICB2ZXJpZnlRdWFkc0V4YWN0bHlDb3ZlclJlY3QoZnJhbWUucmVuZGVyUGFzc2VzWzBd
LT5xdWFkTGlzdCgpLCBJbnRSZWN0KC1sYXllclJlY3QubG9jYXRpb24oKSwgdmlld3BvcnRTaXpl
KSk7Ci0gICAgICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgICAg
ICB2ZXJpZnlRdWFkc0V4YWN0bHlDb3ZlclJlY3QoZnJhbWUtPnJlbmRlclBhc3Nlc1swXS0+cXVh
ZExpc3QoKSwgSW50UmVjdCgtbGF5ZXJSZWN0LmxvY2F0aW9uKCksIHZpZXdwb3J0U2l6ZSkpOwor
ICAgICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAgICAgfQogCiB9
CkBAIC0xMDc3LDExICsxNTIwLDExIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
cmVzaGFwZU5vdENhbGxlZFVudGlsRHJhdykKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
YWRvcHRQdHIocm9vdCkpOwogICAgIEVYUEVDVF9GQUxTRShyZXNoYXBlVHJhY2tlci0+cmVzaGFw
ZUNhbGxlZCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsK
KyAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhPiBmcmFtZTsKICAgICBF
WFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbV9ob3N0
SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygqZnJh
bWUpOwogICAgIEVYUEVDVF9UUlVFKHJlc2hhcGVUcmFja2VyLT5yZXNoYXBlQ2FsbGVkKCkpOwot
ICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIG1faG9zdEltcGwt
PmRpZERyYXdBbGxMYXllcnMoKmZyYW1lKTsKIH0KIAogY2xhc3MgUGFydGlhbFN3YXBUcmFja2Vy
Q29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewpAQCAtMTEzMywxMiAr
MTU3NiwxMiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwUmVj
ZWl2ZXNEYW1hZ2VSZWN0KQogICAgIHJvb3QtPmFkZENoaWxkKGFkb3B0UHRyKGNoaWxkKSk7CiAg
ICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldFJvb3RMYXllcihhZG9wdFB0cihyb290KSk7CiAKLSAg
ICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgUmVmUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YT4gZnJhbWU7CiAKICAgICAvLyBGaXJzdCBmcmFtZSwg
dGhlIGVudGlyZSBzY3JlZW4gc2hvdWxkIGdldCBzd2FwcGVkLgogICAgIEVYUEVDVF9UUlVFKGxh
eWVyVHJlZUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbGF5ZXJUcmVlSG9z
dEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwotICAgIGxheWVyVHJlZUhvc3RJbXBsLT5kaWREcmF3
QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBsYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygqZnJh
bWUpOworICAgIGxheWVyVHJlZUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAg
ICAgbGF5ZXJUcmVlSG9zdEltcGwtPnN3YXBCdWZmZXJzKCk7CiAgICAgSW50UmVjdCBhY3R1YWxT
d2FwUmVjdCA9IHBhcnRpYWxTd2FwVHJhY2tlci0+cGFydGlhbFN3YXBSZWN0KCk7CiAgICAgSW50
UmVjdCBleHBlY3RlZFN3YXBSZWN0ID0gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXpl
KDUwMCwgNTAwKSk7CkBAIC0xMTUzLDggKzE1OTYsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHBhcnRpYWxTd2FwUmVjZWl2ZXNEYW1hZ2VSZWN0KQogICAgIC8vIGV4cGVjdGVk
IHN3YXAgcmVjdDogdmVydGljYWxseSBmbGlwcGVkLCB3aXRoIG9yaWdpbiBhdCBib3R0b20gbGVm
dCBjb3JuZXIuCiAgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMCwgMCkpOwogICAg
IEVYUEVDVF9UUlVFKGxheWVyVHJlZUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0g
ICAgbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwotICAgIG1faG9zdEltcGwt
PmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIGxheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5
ZXJzKCpmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygqZnJhbWUpOwog
ICAgIGxheWVyVHJlZUhvc3RJbXBsLT5zd2FwQnVmZmVycygpOwogICAgIGFjdHVhbFN3YXBSZWN0
ID0gcGFydGlhbFN3YXBUcmFja2VyLT5wYXJ0aWFsU3dhcFJlY3QoKTsKICAgICBleHBlY3RlZFN3
YXBSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCA1MDAtMjgpLCBJbnRTaXplKDI2LCAyOCkpOwpA
QCAtMTE2OSw4ICsxNjEyLDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYXJ0
aWFsU3dhcFJlY2VpdmVzRGFtYWdlUmVjdCkKICAgICBsYXllclRyZWVIb3N0SW1wbC0+c2V0Vmll
d3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CiAgICAgcm9vdC0+c2V0T3BhY2l0eSgwLjdmKTsg
Ly8gdGhpcyB3aWxsIGRhbWFnZSBldmVyeXRoaW5nCiAgICAgRVhQRUNUX1RSVUUobGF5ZXJUcmVl
SG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBsYXllclRyZWVIb3N0SW1wbC0+
ZHJhd0xheWVycyhmcmFtZSk7Ci0gICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFt
ZSk7CisgICAgbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKmZyYW1lKTsKKyAgICBtX2hv
c3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAgICAgbGF5ZXJUcmVlSG9zdEltcGwt
PnN3YXBCdWZmZXJzKCk7CiAgICAgYWN0dWFsU3dhcFJlY3QgPSBwYXJ0aWFsU3dhcFRyYWNrZXIt
PnBhcnRpYWxTd2FwUmVjdCgpOwogICAgIGV4cGVjdGVkU3dhcFJlY3QgPSBJbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIEludFNpemUoMTAsIDEwKSk7CkBAIC0xMjg1LDEwICsxNzI4LDEwIEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9QYXJ0aWFsU3dhcCkKICAgICAvLyBSdW4g
dGVzdCBjYXNlCiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBj
cmVhdGVMYXllclRyZWVIb3N0KGZhbHNlLCBjb250ZXh0LCBGYWtlTGF5ZXJXaXRoUXVhZHM6OmNy
ZWF0ZSgxKSk7CiAKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7Cisg
ICAgUmVmUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YT4gZnJhbWU7CiAgICAgRVhQ
RUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOwotICAgIG15SG9zdElt
cGwtPmRyYXdMYXllcnMoZnJhbWUpOwotICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
ZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoKmZyYW1lKTsKKyAgICBteUhvc3RJ
bXBsLT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJF
eHBlY3RhdGlvbnMoJm1vY2tDb250ZXh0KTsKIH0KIApAQCAtMTMwMywxMCArMTc0NiwxMCBAQCBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwKQogCiAgICAgT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0KHRy
dWUsIGNvbnRleHQsIEZha2VMYXllcldpdGhRdWFkczo6Y3JlYXRlKDEpKTsKIAotICAgIENDTGF5
ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBSZWZQdHI8Q0NMYXllclRyZWVI
b3N0SW1wbDo6RnJhbWVEYXRhPiBmcmFtZTsKICAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5w
cmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7
Ci0gICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1w
bC0+ZHJhd0xheWVycygqZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
KmZyYW1lKTsKICAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0NvbnRl
eHQpOwogfQogCkBAIC0xMzI0LDEwICsxNzY3LDEwIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgcGFydGlhbFN3YXBOb1VwZGF0ZSkKICAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gbXlIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3QodHJ1ZSwgY29udGV4dCwgRmFr
ZUxheWVyV2l0aFF1YWRzOjpjcmVhdGUoMSkpOwogICAgIAogICAgIC8vIERyYXcgb25jZSB0byBt
YWtlIHN1cmUgbGF5ZXIgaXMgbm90IG5ldwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1l
RGF0YSBmcmFtZTsKKyAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhPiBm
cmFtZTsKICAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7
Ci0gICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7Ci0gICAgbXlIb3N0SW1wbC0+ZGlk
RHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUp
OworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoKmZyYW1lKTsKIAogICAgIC8vIEdl
bmVyYXRlIHVwZGF0ZSBpbiBsYXllcgogICAgIENDTGF5ZXJJbXBsKiByb290ID0gbXlIb3N0SW1w
bC0+cm9vdExheWVyKCk7CkBAIC0xMzM1LDggKzE3NzgsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHBhcnRpYWxTd2FwTm9VcGRhdGUpCiAKICAgICAvLyBUaGlzIGRyYXcgc2hv
dWxkIGdlbmVyYXRlIG5vIG5ldyB1ZHBhdGVzCiAgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+
cHJlcGFyZVRvRHJhdyhmcmFtZSkpOwotICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUp
OwotICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOworICAgIG15SG9zdElt
cGwtPmRyYXdMYXllcnMoKmZyYW1lKTsKKyAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJz
KCpmcmFtZSk7CiAKICAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0Nv
bnRleHQpOwogfQpAQCAtMTQyOCwxOSArMTg3MSwxOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIGNvbnRyaWJ1dGluZ0xheWVyRW1wdHlTY2lzc29yUGFydGlhbFN3YXApCiAgICAg
T3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBzZXR1cExheWVyc0Zvck9w
YWNpdHkodHJ1ZSwgdGhpcyk7CiAKICAgICB7Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6
OkZyYW1lRGF0YSBmcmFtZTsKKyAgICAgICAgUmVmUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw6OkZy
YW1lRGF0YT4gZnJhbWU7CiAgICAgICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVU
b0RyYXcoZnJhbWUpKTsKIAogICAgICAgICAvLyBKdXN0IGZvciBjb25zaXN0ZW5jeSwgdGhlIG1v
c3QgaW50ZXJlc3Rpbmcgc3R1ZmYgYWxyZWFkeSBoYXBwZW5lZAotICAgICAgICBteUhvc3RJbXBs
LT5kcmF3TGF5ZXJzKGZyYW1lKTsKLSAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVy
cyhmcmFtZSk7CisgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoKmZyYW1lKTsKKyAgICAg
ICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygqZnJhbWUpOwogCiAgICAgICAgIC8vIFZl
cmlmeSBhbGwgcXVhZHMgaGF2ZSBiZWVuIGNvbXB1dGVkCi0gICAgICAgIEFTU0VSVF9FUSgyVSwg
ZnJhbWUucmVuZGVyUGFzc2VzLnNpemUoKSk7Ci0gICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUu
cmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7Ci0gICAgICAgIEFTU0VSVF9FUSgx
VSwgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpLnNpemUoKSk7Ci0gICAgICAgIEVY
UEVDVF9FUShDQ0RyYXdRdWFkOjpTb2xpZENvbG9yLCBmcmFtZS5yZW5kZXJQYXNzZXNbMF0tPnF1
YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOwotICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6
UmVuZGVyUGFzcywgZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLT5tYXRlcmlh
bCgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDJVLCBmcmFtZS0+cmVuZGVyUGFzc2VzLnNpemUoKSk7
CisgICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUtPnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3Qo
KS5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMVUsIGZyYW1lLT5yZW5kZXJQYXNzZXNbMV0t
PnF1YWRMaXN0KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKENDRHJhd1F1YWQ6OlNvbGlk
Q29sb3IsIGZyYW1lLT5yZW5kZXJQYXNzZXNbMF0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkp
OworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgZnJhbWUtPnJlbmRl
clBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CiAgICAgfQogfQogCkBAIC0x
NDQ5LDE5ICsxODkyLDE5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgY29udHJp
YnV0aW5nTGF5ZXJFbXB0eVNjaXNzb3JOb1BhcnRpYWxTd2FwKQogICAgIE93blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsPiBteUhvc3RJbXBsID0gc2V0dXBMYXllcnNGb3JPcGFjaXR5KGZhbHNlLCB0
aGlzKTsKIAogICAgIHsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZy
YW1lOworICAgICAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhPiBmcmFt
ZTsKICAgICAgICAgRVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkp
OwogCiAgICAgICAgIC8vIEp1c3QgZm9yIGNvbnNpc3RlbmN5LCB0aGUgbW9zdCBpbnRlcmVzdGlu
ZyBzdHVmZiBhbHJlYWR5IGhhcHBlbmVkCi0gICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMo
ZnJhbWUpOwotICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAg
ICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOworICAgICAgICBteUhvc3RJbXBs
LT5kaWREcmF3QWxsTGF5ZXJzKCpmcmFtZSk7CiAKICAgICAgICAgLy8gVmVyaWZ5IGFsbCBxdWFk
cyBoYXZlIGJlZW4gY29tcHV0ZWQKLSAgICAgICAgQVNTRVJUX0VRKDJVLCBmcmFtZS5yZW5kZXJQ
YXNzZXMuc2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFtZS5yZW5kZXJQYXNzZXNb
MF0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUX0VRKDFVLCBmcmFtZS5yZW5k
ZXJQYXNzZXNbMV0tPnF1YWRMaXN0KCkuc2l6ZSgpKTsKLSAgICAgICAgRVhQRUNUX0VRKENDRHJh
d1F1YWQ6OlNvbGlkQ29sb3IsIGZyYW1lLnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS0+
bWF0ZXJpYWwoKSk7Ci0gICAgICAgIEVYUEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBm
cmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0tPm1hdGVyaWFsKCkpOworICAgICAg
ICBBU1NFUlRfRVEoMlUsIGZyYW1lLT5yZW5kZXJQYXNzZXMuc2l6ZSgpKTsKKyAgICAgICAgQVNT
RVJUX0VRKDFVLCBmcmFtZS0+cmVuZGVyUGFzc2VzWzBdLT5xdWFkTGlzdCgpLnNpemUoKSk7Cisg
ICAgICAgIEFTU0VSVF9FUSgxVSwgZnJhbWUtPnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKS5z
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgZnJhbWUt
PnJlbmRlclBhc3Nlc1swXS0+cXVhZExpc3QoKVswXS0+bWF0ZXJpYWwoKSk7CisgICAgICAgIEVY
UEVDVF9FUShDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBmcmFtZS0+cmVuZGVyUGFzc2VzWzFdLT5x
dWFkTGlzdCgpWzBdLT5tYXRlcmlhbCgpKTsKICAgICB9CiB9CiAKQEAgLTE0ODIsNyArMTkyNSw3
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZGlkRHJhd05vdENhbGxlZE9uU2Np
c3NvcmVkTGF5ZXIpCiAgICAgcm9vdC0+YWRkQ2hpbGQoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0
ZSgyKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIGxheWVyID0gc3RhdGljX2Nhc3Q8RGlkRHJh
d0NoZWNrTGF5ZXIqPihyb290LT5jaGlsZHJlbigpWzBdLmdldCgpKTsKIAotICAgIENDTGF5ZXJU
cmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0
SW1wbDo6RnJhbWVEYXRhPiBmcmFtZTsKIAogICAgIEVYUEVDVF9GQUxTRShyb290LT53aWxsRHJh
d0NhbGxlZCgpKTsKICAgICBFWFBFQ1RfRkFMU0Uocm9vdC0+ZGlkRHJhd0NhbGxlZCgpKTsKQEAg
LTE0OTEsOCArMTkzNCw4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZGlkRHJh
d05vdENhbGxlZE9uU2Npc3NvcmVkTGF5ZXIpCiAKICAgICAvLyBXZSBzaG91bGQgZHJhdyBldmVy
eXRoaW5nIHRoZSBmaXJzdCBmcmFtZS4KICAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVw
YXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7Ci0g
ICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+
ZHJhd0xheWVycygqZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoKmZy
YW1lKTsKIAogICAgIEVYUEVDVF9UUlVFKHJvb3QtPndpbGxEcmF3Q2FsbGVkKCkpOwogICAgIEVY
UEVDVF9UUlVFKHJvb3QtPmRpZERyYXdDYWxsZWQoKSk7CkBAIC0xNTA5LDggKzE5NTIsOCBAQCBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRpZERyYXdOb3RDYWxsZWRPblNjaXNzb3Jl
ZExheWVyKQogCiAgICAgLy8gRHJhd2luZyBhZ2Fpbiwgd2Ugc2hvdWxkIHNjaXNzb3Igb3V0IGV2
ZXJ5dGhpbmcgc2luY2UgdGhlcmUgaXMgbm8gZGFtYWdlLgogICAgIEVYUEVDVF9UUlVFKG15SG9z
dEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJz
KGZyYW1lKTsKLSAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBt
eUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCpmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0Fs
bExheWVycygqZnJhbWUpOwogCiAgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPndpbGxEcmF3Q2FsbGVk
KCkpOwogICAgIEVYUEVDVF9GQUxTRShyb290LT5kaWREcmF3Q2FsbGVkKCkpOwpAQCAtMTc5Miwx
OCArMjIzNSwxOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRS
ZXNvdXJjZXNBZnRlckxvc3RDb250ZXh0KQogCiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3RMYXllci5yZWxlYXNlKCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVE
YXRhIGZyYW1lOworICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGE+IGZy
YW1lOwogICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsK
LSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKLSAgICBtX2hvc3RJbXBsLT5kaWRE
cmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKCpmcmFtZSk7
CisgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygqZnJhbWUpOwogICAgIG1faG9zdElt
cGwtPnN3YXBCdWZmZXJzKCk7CiAKICAgICAvLyBMb3NlIHRoZSBjb250ZXh0LCByZXBsYWNpbmcg
aXQgd2l0aCBhIFN0cmljdFdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aElPU3VyZmFjZSwKICAgICAv
LyB0aGF0IHdpbGwgd2FybiBpZiBhbnkgcmVzb3VyY2UgZnJvbSB0aGUgcHJldmlvdXMgY29udGV4
dCBnZXRzIHVzZWQuCiAgICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NH
cmFwaGljc0NvbnRleHQ6OmNyZWF0ZTNEKFN0cmljdFdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aElP
U3VyZmFjZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsK
ICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAg
bV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7Ci0gICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0Fs
bExheWVycyhmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygqZnJhbWUpOworICAg
IG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoKmZyYW1lKTsKICAgICBtX2hvc3RJbXBsLT5z
d2FwQnVmZmVycygpOwogfQogCkBAIC0xOTA3LDEwICsyMzUwLDEwIEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgbGF5ZXJzRnJlZVRleHR1cmVzKQogCiAgICAgbV9ob3N0SW1wbC0+
c2V0Um9vdExheWVyKHJvb3RMYXllci5yZWxlYXNlKCkpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0
SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsOjpG
cmFtZURhdGE+IGZyYW1lOwogICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0Ry
YXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKLSAgICBtX2hv
c3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBtX2hvc3RJbXBsLT5kcmF3TGF5
ZXJzKCpmcmFtZSk7CisgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycygqZnJhbWUpOwog
ICAgIG1faG9zdEltcGwtPnN3YXBCdWZmZXJzKCk7CiAKICAgICBFWFBFQ1RfR1QodHJhY2tpbmdX
ZWJHcmFwaGljc0NvbnRleHQtPm51bVRleHR1cmVzKCksIDB1KTsKQEAgLTE5NDQsMTcgKzIzODcs
MTcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBoYXNUcmFuc3BhcmVudEJhY2tn
cm91bmQpCiAgICAgICAgIC5UaW1lcygxKTsKICAgICBFWFBFQ1RfQ0FMTCgqbW9ja0NvbnRleHQs
IGRyYXdFbGVtZW50cyhfLCBfLCBfLCBfKSkKICAgICAgICAgLlRpbWVzKDEpOwotICAgIENDTGF5
ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBSZWZQdHI8Q0NMYXllclRyZWVI
b3N0SW1wbDo6RnJhbWVEYXRhPiBmcmFtZTsKICAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5w
cmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7
Ci0gICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1w
bC0+ZHJhd0xheWVycygqZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
KmZyYW1lKTsKICAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0NvbnRl
eHQpOwogCiAgICAgLy8gVmVyaWZ5IG5vIHF1YWRzIGFyZSBkcmF3biB3aGVuIHRyYW5zcGFyZW50
IGJhY2tncm91bmQgaXMgc2V0LgogICAgIG15SG9zdEltcGwtPnNldEhhc1RyYW5zcGFyZW50QmFj
a2dyb3VuZCh0cnVlKTsKICAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBsLT5wcmVwYXJlVG9EcmF3
KGZyYW1lKSk7Ci0gICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7Ci0gICAgbXlIb3N0
SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVy
cygqZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoKmZyYW1lKTsKICAg
ICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbW9ja0NvbnRleHQpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcAppbmRleCBhYWNkOWE1ZDY5MGYzMjE3NGIxZTJlOWEyZTIxYmJjOTdlYTZkMGM2Li45Y2Nl
NzYzNTM2ZWUwZDU3MDBiZjYzNDM1ZDMzMDQ3ZGI4MmZiOTFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTEyNDQs
NyArMTI0NCw3IEBAIGNsYXNzIE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBDb250
ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgTU9DS19DT05TVF9NRVRIT0QwKHByZXNlcnZlczNELCBi
b29sKCkpOwotICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJ
bnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYpIHsgfQogICAgIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKCkg
eyB9CiB9OwogCkBAIC0yMjAwLDQgKzIyMDAsNzAgQEAgcHJpdmF0ZToKIAogU0lOR0xFX0FORF9N
VUxUSV9USFJFQURfVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllckFkZGVkV2l0aEFuaW1h
dGlvbikKIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJs
aWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXIoKQorICAgICAgICA6IG1fc2Nyb2xsQW1vdW50KDIsIDEpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAg
ICAgbV9yb290U2Nyb2xsTGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX21v
Y2tEZWxlZ2F0ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRCb3VuZHMoSW50U2l6
ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldElzRHJhd2FibGUodHJ1
ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAg
ICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAs
IDEwMCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZCht
X3Jvb3RTY3JvbGxMYXllcik7CisgICAgICAgIG1fY2hpbGRMYXllciA9IENvbnRlbnRMYXllckNo
cm9taXVtOjpjcmVhdGUoJm1fbW9ja0RlbGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5z
ZXRCb3VuZHMoSW50U2l6ZSg1MCwgNTApKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRJc0Ry
YXdhYmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7
CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAs
IDEwMCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+YWRkQ2hpbGQobV9jaGlsZExheWVy
KTsKKyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGZsb2F0KQorICAgIHsKKyAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBtX3Jvb3RT
Y3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXIt
PnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uICsgc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCog
aW1wbCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUShtX3Jvb3RTY3JvbGxMYXllci0+c2Nyb2xs
UG9zaXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5m
cmFtZU51bWJlcigpKQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xs
UG9zaXRpb24oKSwgSW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVD
VF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkgKyBtX3Njcm9s
bEFtb3VudCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBpZiAoaW1wbC0+ZnJh
bWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1wbC0+c2Nyb2xsQmVn
aW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEJ5
KG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGltcGwtPnNjcm9sbEVuZCgpOworICAgICAg
ICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMikKKyAgICAgICAgICAgIGVuZFRl
c3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAg
fQorCitwcml2YXRlOgorICAgIGNvbnN0IEludFNpemUgbV9zY3JvbGxBbW91bnQ7CisgICAgTW9j
a0NvbnRlbnRMYXllckRlbGVnYXRlIG1fbW9ja0RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBtX2NoaWxkTGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNj
cm9sbExheWVyOworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyLCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0KHRydWUpOworfQorCiB9IC8vIG5h
bWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVh
ZGVkVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0
LmNwcAppbmRleCBjOWViYmExMjJmZmFlY2FiNGMwYzIwOTdlZmY3MDI4MDk0YTU2MTI2Li44ODk2
ZmFkODZmOTllYTRjZWJlNTBhMWI0OGViZDM1M2RiM2JhNGZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmNwcApAQCAtMTMwLDcgKzEzMCw3IEBA
IHZvaWQgTW9ja0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSgpCiAgICAgbV90ZXN0
SG9va3MtPmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCh0aGlzKTsKIH0KIAotYm9vbCBNb2NrTGF5
ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKK2Jvb2wgTW9j
a0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KFJlZlB0cjxGcmFtZURhdGE+JiBmcmFt
ZSkKIHsKICAgICBib29sIHJlc3VsdCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0Ry
YXcoZnJhbWUpOwogICAgIG1fdGVzdEhvb2tzLT5wcmVwYXJlVG9EcmF3T25DQ1RocmVhZCh0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRlZFRl
c3QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRlZFRlc3QuaAppbmRl
eCA3ZjM1ODE2MGE2ZDY1YjU5MjUwMWYzN2U4ZDA4YWIyODgzNjFlOGY3Li5lZTM4MjVlYTc1OGE5
YjRkZDhhMDBlZjhkZjVmM2ExNTYyM2FlMWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5oCkBAIC0xNjksNyArMTY5LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENv
bXBsZXRlKCk7Ci0gICAgdmlydHVhbCBib29sIHByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJik7Cisg
ICAgdmlydHVhbCBib29sIHByZXBhcmVUb0RyYXcoUmVmUHRyPEZyYW1lRGF0YT4mKTsKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmKTsKIAogICAgIC8vIE1ha2Ug
dGhlc2UgcHVibGljLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9X
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCmluZGV4IDky
ZjAwNjE4NDE0Nzk1NmUxMDE5ZmM2OTAxNWY2MzllNDg5NGYzMzEuLmQ1YjY4YTg2N2Y3ODJjYzY3
ZmQxYjdiYzI5NjIwNTI5MzRmZDcwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVz
dC5jcHAKQEAgLTIwMiwxNCArMjAyLDE0IEBAIFRFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxTdGFydGVkKQogICAgIG1faW5wdXRIYW5kbGVyLT5o
YW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogfQogCi1URVNUX0YoV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlU2Nyb2xsRmFpbGVkKQorVEVTVF9GKFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNjcm9sbE9uTWFpblRocmVhZCkKIHsKICAg
ICAvLyBXZSBzaG91bGQgc2VuZCBhbGwgZXZlbnRzIHRvIHRoZSB3aWRnZXQgZm9yIHRoaXMgZ2Vz
dHVyZS4KICAgICBtX2V4cGVjdGVkRGlzcG9zaXRpb24gPSBEaWROb3RIYW5kbGU7CiAgICAgVkVS
SUZZX0FORF9SRVNFVF9NT0NLUygpOwogCiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhh
bmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKDo6dGVzdGluZzo6XywgOjp0ZXN0aW5nOjpfKSkKLSAg
ICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4o
V2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCkpOwogCiAg
ICAgZ2VzdHVyZS50eXBlID0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOwogICAg
IG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwpAQCAtMzA2LDcgKzMw
Niw3IEBAIFRFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVG
bGluZ0ZhaWxlZCkKICAgICBWRVJJRllfQU5EX1JFU0VUX01PQ0tTKCk7CiAKICAgICBFWFBFQ1Rf
Q0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4odGVzdGluZzo6Xywg
dGVzdGluZzo6XykpCi0gICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkpOworICAgICAgICAuV2lsbE9uY2Uo
dGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1h
aW5UaHJlYWQpKTsKIAogICAgIGdlc3R1cmUudHlwZSA9IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVG
bGluZ1N0YXJ0OwogICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUp
OwpAQCAtMzg3LDcgKzM4Nyw3IEBAIFRFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bFRlc3QsIGdlc3R1cmVGbGluZ0FuaW1hdGVzKQogICAgIC8vIHRyYW5zZmVycmVkIHRvIHRoZSBt
YWluIHRocmVhZC4KICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwg
c2NoZWR1bGVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRs
ZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rpbmc6Ol8pKQotICAgICAgICAu
V2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxGYWlsZWQpKTsKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3Jl
OjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKSk7CiAgICAgRVhQRUNU
X0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJ5KHRlc3Rpbmc6Ol8pKS5U
aW1lcygwKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Ny
b2xsRW5kKCkpLlRpbWVzKDApOwogCkBAIC00NjksNyArNDY5LDcgQEAgVEVTVF9GKFdlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZUZsaW5nVHJhbnNmZXJSZXNldHMpCiAg
ICAgLy8gdHJhbnNmZXJyZWQgdG8gdGhlIG1haW4gdGhyZWFkLgogICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY2hlZHVsZUFuaW1hdGlvbigpKTsKICAgICBFWFBF
Q1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4odGVzdGluZzo6
XywgdGVzdGluZzo6XykpCi0gICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29y
ZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkpOworICAgICAgICAuV2lsbE9u
Y2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxP
bk1haW5UaHJlYWQpKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVu
dCwgc2Nyb2xsQnkodGVzdGluZzo6XykpLlRpbWVzKDApOwogICAgIEVYUEVDVF9DQUxMKG1fbW9j
a0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxFbmQoKSkuVGltZXMoMCk7CiAKQEAgLTU0Niw3
ICs1NDYsNyBAQCBURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0
dXJlRmxpbmdUcmFuc2ZlclJlc2V0cykKICAgICAvLyBUaGVuIGFib3J0IHRoZSBzZWNvbmQgZmxp
bmcuCiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50
LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKLSAgICAgICAgLldpbGxPbmNl
KHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFp
bGVkKSk7CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCkpOwogICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCeSh0ZXN0aW5nOjpfKSkuVGltZXMoMCk7
CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEVuZCgp
KS5UaW1lcygwKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147607</attachid>
            <date>2012-06-14 09:51:18 -0700</date>
            <delta_ts>2012-06-14 10:50:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120614175117.patch</filename>
            <type>text/plain</type>
            <size>84745</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmViNmVhZjI4Y2UzMTVm
OGU4ZjJlYjlmMzI2NzczNDFmM2Y0YTIxNC4uOTQ2YzcxNDBmODBmNjZiYWEyYzA3NTk5NjhlM2Rm
ODg2YjkyOTE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAxMi0wNi0xNCAgU2Ft
aSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEFsbG93IHNjcm9sbGluZyBub24tcm9vdCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZC4KKyAgICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xs
ZWQgQ0NMYXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgbWFpbiB0aHJl
YWQuCisKKyAgICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZl
biBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9s
bGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgTGF5ZXIgaGl0IHRlc3RpbmcgY29k
ZSBieSBTaGF3biBTaW5naC4KKworICAgICAgICBBZGRlZCBuZXcgdW5pdCB0ZXN0cyB0byB2ZXJp
ZnkgbGF5ZXIgc2Nyb2xsaW5nIGJlaGF2aW9yOgorCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LnZlcmlmeVN1YnRyZWVTZWFyY2gKKyAgICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNsZWFyUm9vdFJlbmRlclN1cmZhY2VBbmRTY3JvbGwKKyAgICAgICAgICAg
IENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVz
V2hpbGVBbmltYXRpbmdQYWdlU2NhbGUKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVzV2hpbGVQaW5jaFpvb21pbmcKKyAg
ICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnJlcGxhY2VUcmVlV2hpbGVTY3JvbGxp
bmcKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbEJlZm9yZVJlZHJh
dworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQmxvY2tlZEJ5Q29u
dGVudExheWVyCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxDaGls
ZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZAorICAgICAgICAgICAgQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdAorICAgICAgICAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsRXZlbnRCdWJibGluZworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkCisg
ICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxNaXNzZXNDaGlsZAorICAg
ICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QK
KyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RBbmRDaGFuZ2VQ
YWdlU2NhbGVPbkltcGxUaHJlYWQKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LnNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQKKyAgICAgICAgICAgIEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RJZ25vcmVkCisgICAgICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxXaXRob3V0Um9vdExheWVyCisgICAgICAgICAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcgorICAgICAgICAgICAgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGxUZXN0Lmdlc3R1cmVTY3JvbGxPbk1haW5UaHJlYWQKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbEJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZTo6fkxheWVyQ2hyb21pdW1T
Y3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJTY3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6c29ydExheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbEFuZFNjYWxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVySW5TdWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVu
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRv
RHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRldGFjaExheWVyVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNj
YWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRl
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6ZW5zdXJlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzY3JvbGxFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6cGluY2hHZXN0dXJlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6bWFrZVNjcm9sbEFuZFNjYWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbGxlY3RTY3JvbGxEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjphbmltYXRlUGFnZVNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6Y2xlYXJSZW5kZXJTdXJmYWNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoRnJhbWVE
YXRhKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6cm9vdFNjcm9sbExheWVyKToKKwogMjAxMi0wNi0xMyAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdvcmtlciB0
ZWFyLWRvd24gY2FuIHJlLWVudGVyIEpTQyBkdXJpbmcgR0MgZmluYWxpemF0aW9uIHB0LiAyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZjYmY2ODM1NGM0MDYwMjhmY2VkZTVhYjI4NTcy
MDU4NGM5ZGZlYjcuLjY2MThhYmZhYjk4NzM2NjZjMmI0NDFhODY1MjA5M2M3MTVkNThlZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDYtMTQgIFNh
bWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVt
XSBBbGxvdyBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNTAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5p
dCB0ZXN0cyB0byB2ZXJpZnkgbGF5ZXIgc2Nyb2xsaW5nIGJlaGF2aW9yIGFuZCB0aGUgYXNzb2Np
YXRlZAorICAgICAgICB1dGlsaXR5IGZ1bmN0aW9ucy4KKworICAgICAgICAqIHNyYy9XZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50SW50ZXJuYWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5n
KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoKKyAgICAg
ICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6Ok1vY2tDb250ZW50TGF5ZXJE
ZWxlZ2F0ZTo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllcik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcik6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpiZWdpblRlc3QpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YXBwbHlT
Y3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyOjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YWZ0ZXJUZXN0
KToKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgICogdGVz
dHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6VEVTVF9GKToKKwogMjAxMi0wNi0xNCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCwgYnVpbGQgZml4IGZv
ciBNYWMgMTAuNQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCBiYzgyZmViMGRmNDNmN2I0ODVm
MDIxOTc2YjIyNzYxY2Q2MWQxODI1Li42NTE5N2YwOGVkOWM3YTNiNzAwM2Q1ZTk1MDFiODlkZjRm
ODRmYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtOTMsNiArOTMsNyBAQCBMYXllckNo
cm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICAsIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1Jc0Fu
aW1hdGluZyhmYWxzZSkKICAgICAsIG1fY29udGVudHNTY2FsZSgxLjApCiAgICAgLCBtX2xheWVy
QW5pbWF0aW9uRGVsZWdhdGUoMCkKKyAgICAsIG1fbGF5ZXJTY3JvbGxEZWxlZ2F0ZSgwKQogewog
fQogCkBAIC0zOTQsNiArMzk1LDE0IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0U2Nyb2xsUG9z
aXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogICAgIHNldE5lZWRzQ29tbWl0
KCk7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pCit7CisgICAgaWYgKG1fbWF4U2Nyb2xsUG9zaXRp
b24gPT0gbWF4U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBtX21heFNjcm9s
bFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30K
Kwogdm9pZCBMYXllckNocm9taXVtOjpzZXRTY3JvbGxhYmxlKGJvb2wgc2Nyb2xsYWJsZSkKIHsK
ICAgICBpZiAobV9zY3JvbGxhYmxlID09IHNjcm9sbGFibGUpCkBAIC00MjcsNiArNDM2LDEzIEBA
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVn
aW9uJiByZWdpb24pCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAordm9pZCBMYXllckNocm9t
aXVtOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBzZXRTY3Jv
bGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsRGVsdGEpOworICAgIGlmIChtX2xh
eWVyU2Nyb2xsRGVsZWdhdGUpCisgICAgICAgIG1fbGF5ZXJTY3JvbGxEZWxlZ2F0ZS0+ZGlkU2Ny
b2xsKHNjcm9sbERlbHRhKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXREcmF3Q2hlY2tl
cmJvYXJkRm9yTWlzc2luZ1RpbGVzKGJvb2wgY2hlY2tlcmJvYXJkKQogewogICAgIGlmIChtX2Ry
YXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMgPT0gY2hlY2tlcmJvYXJkKQpAQCAtNTEzLDYg
KzUyOSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1w
bCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0
KG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOwogICAgIGxheWVyLT5zZXRQcmVz
ZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9z
Y3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKG1fbWF4U2Ny
b2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVy
VHJhbnNmb3JtKTsKICAgICBpZiAoIXRyYW5zZm9ybUlzQW5pbWF0aW5nKCkpCiAgICAgICAgIGxh
eWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGUz
M2MyZmRhODhhNzg0ZjU1MzM2MWFiYzNmOGUxNWJlOTg3NWMwYTUuLjQ5N2E0MDMxOTUxNzM3YzFm
NzVmOTg1MDQwMDg2YTg1NTkzOTY3MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTY1LDYgKzY1
LDE1IEBAIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBj
bGFzcyBTY3JvbGxiYXJMYXllckNocm9taXVtOwogCisvLyBEZWxlZ2F0ZSBmb3IgaGFuZGxpbmcg
c2Nyb2xsIGlucHV0IGZvciBhIExheWVyQ2hyb21pdW0uCitjbGFzcyBMYXllckNocm9taXVtU2Ny
b2xsRGVsZWdhdGUgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGwoY29uc3Qg
SW50U2l6ZSYpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkxheWVyQ2hyb21pdW1T
Y3JvbGxEZWxlZ2F0ZSgpIHsgfQorfTsKKwogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBs
YXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFz
cy4KIGNsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllckNocm9taXVt
PiwgcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IHsKQEAgLTE1MSwxMiAr
MTYwLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBv
aW50Jik7CiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihj
b25zdCBJbnRTaXplJik7CisgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX21heFNjcm9sbFBvc2l0aW9uOyB9CisKICAgICB2b2lkIHNldFNjcm9s
bGFibGUoYm9vbCk7CisgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxhYmxlOyB9CiAgICAgdm9pZCBzZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoYm9vbCk7CiAg
ICAgdm9pZCBzZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKGJvb2wpOwogICAgIGNvbnN0IFJlZ2lv
biYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKSB7IHJldHVybiBtX25vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uOyB9CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdp
b24mKTsKICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCgpIHsgbV9u
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRMYXll
clNjcm9sbERlbGVnYXRlKExheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZSogbGF5ZXJTY3JvbGxE
ZWxlZ2F0ZSkgeyBtX2xheWVyU2Nyb2xsRGVsZWdhdGUgPSBsYXllclNjcm9sbERlbGVnYXRlOyB9
CisgICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJik7CiAKICAgICB2b2lkIHNldERyYXdD
aGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoYm9vbCk7CiAgICAgYm9vbCBkcmF3Q2hlY2tlcmJv
YXJkRm9yTWlzc2luZ1RpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3Q2hlY2tlcmJvYXJkRm9y
TWlzc2luZ1RpbGVzOyB9CkBAIC0zMjUsNiArMzQwLDcgQEAgcHJpdmF0ZToKICAgICAvLyBVc2Vz
IHRhcmdldCBzdXJmYWNlJ3Mgc3BhY2UuCiAgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwogICAg
IEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0
aW9uOwogICAgIGJvb2wgbV9zY3JvbGxhYmxlOwogICAgIGJvb2wgbV9zaG91bGRTY3JvbGxPbk1h
aW5UaHJlYWQ7CiAgICAgYm9vbCBtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnM7CkBAIC0zNzcsNiAr
MzkzLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CiAKICAgICBDQ0xh
eWVyQW5pbWF0aW9uRGVsZWdhdGUqIG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZTsKKyAgICBMYXll
ckNocm9taXVtU2Nyb2xsRGVsZWdhdGUqIG1fbGF5ZXJTY3JvbGxEZWxlZ2F0ZTsKIH07CiAKIHZv
aWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJhdG9yLCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJhdG9yLCB2b2lkKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NJbnB1dEhhbmRsZXIuaAppbmRleCA3NjYwOGQ5ZmMxZDBkYTEzOWE0OTMwYmM1MDQ3YzA4YWVi
OGIyZGY0Li43N2RkMmRiY2Y3NGI3N2Y4MDI3MWNlYzRmMjViYTcxYzA1MGZmMmJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmgKQEAgLTQ1LDEyICs0NSwxMiBAQCBjbGFzcyBJbnRTaXplOwog
Y2xhc3MgQ0NJbnB1dEhhbmRsZXJDbGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEND
SW5wdXRIYW5kbGVyQ2xpZW50KTsKIHB1YmxpYzoKLSAgICBlbnVtIFNjcm9sbFN0YXR1cyB7IFNj
cm9sbEZhaWxlZCwgU2Nyb2xsU3RhcnRlZCwgU2Nyb2xsSWdub3JlZCB9OworICAgIGVudW0gU2Ny
b2xsU3RhdHVzIHsgU2Nyb2xsT25NYWluVGhyZWFkLCBTY3JvbGxTdGFydGVkLCBTY3JvbGxJZ25v
cmVkIH07CiAgICAgZW51bSBTY3JvbGxJbnB1dFR5cGUgeyBHZXN0dXJlLCBXaGVlbCB9OwogCiAg
ICAgLy8gQXR0ZW1wdCB0byBzdGFydCBzY3JvbGxpbmcgYSBsYXllciBhdCBhIGdpdmVuIHBvaW50
IGluIHdpbmRvdwogICAgIC8vIGNvb3JkaW5hdGVzLiBSZXR1cm5zIFNjcm9sbFN0YXJ0ZWQgaWYg
dGhlIGxheWVyIGF0IHRoZSBjb29yZGluYXRlcyBjYW4KLSAgICAvLyBiZSBzY3JvbGxlZCwgU2Ny
b2xsRmFpbGVkIGlmIHRoZSBzY3JvbGwgZXZlbnQgc2hvdWxkIGluc3RlYWQgYmUKKyAgICAvLyBi
ZSBzY3JvbGxlZCwgU2Nyb2xsT25NYWluVGhyZWFkIGlmIHRoZSBzY3JvbGwgZXZlbnQgc2hvdWxk
IGluc3RlYWQgYmUKICAgICAvLyBkZWxlZ2F0ZWQgdG8gdGhlIG1haW4gdGhyZWFkLCBvciBTY3Jv
bGxJZ25vcmVkIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8KICAgICAvLyBiZSBzY3JvbGxlZCBhdCB0
aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuCiAgICAgdmlydHVhbCBTY3JvbGxTdGF0dXMgc2Nyb2xsQmVn
aW4oY29uc3QgSW50UG9pbnQmLCBTY3JvbGxJbnB1dFR5cGUpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcAppbmRleCBjMTU1YTQ4MGIxNjc0YTUyZWE4MmRmZDY3YzBkYTI1YjhlMjMwYTk3Li5i
ZjIxMWI0YTBlMTM1NjE4MzI0NDk4Y2M2MGY1YjQzMTI4M2RhYzRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllclNvcnRlci5oIgorI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRl
ICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMTg2LDYgKzE4Nyw0MCBAQCB2
b2lkIENDTGF5ZXJJbXBsOjpzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIHNjcm9sbCkKICAgICBu
b3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK0NDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllckltcGw6OnRyeVNjcm9sbChjb25zdCBJbnRQb2lu
dCYgdmlld3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSB0
eXBlKSBjb25zdAoreworICAgIGlmIChzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQoKSkgeworICAg
ICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJJbXBsOjp0cnlTY3JvbGw6IEZhaWxlZCBz
aG91bGRTY3JvbGxPbk1haW5UaHJlYWQiKTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ7CisgICAgfQorCisgICAgaWYgKCFzY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiQ0NMYXllckltcGw6OnRyeVNjcm9sbDogSWdub3JlZCBub25JbnZlcnRpYmxlVHJhbnNmb3Jt
Iik7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsK
KyAgICB9CisKKyAgICBpZiAoIW5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOworICAgICAgICBGbG9hdFBvaW50IGhpdFRl
c3RQb2ludEluTG9jYWxTcGFjZSA9IENDTWF0aFV0aWw6OnByb2plY3RQb2ludChzY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLmludmVyc2UoKSwgRmxvYXRQb2ludCh2aWV3cG9ydFBvaW50KSwgY2xpcHBl
ZCk7CisgICAgICAgIGlmICghY2xpcHBlZCAmJiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpLmNv
bnRhaW5zKGZsb29yZWRJbnRQb2ludChoaXRUZXN0UG9pbnRJbkxvY2FsU3BhY2UpKSkgeworICAg
ICAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsOiBGYWls
ZWQgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24iKTsKKyAgICAgICAgICAgIHJldHVybiBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHR5cGUgPT0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsICYmIGhhdmVXaGVlbEV2
ZW50SGFuZGxlcnMoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJJbXBs
Ojp0cnlTY3JvbGw6IEZhaWxlZCB3aGVlbEV2ZW50SGFuZGxlcnMiKTsKKyAgICAgICAgcmV0dXJu
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ7CisgICAgfQorCisgICAg
aWYgKCFzY3JvbGxhYmxlKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVy
SW1wbDo6dHJ5U2Nyb2xsOiBJZ25vcmVkIG5vdCBzY3JvbGxhYmxlIik7CisgICAgICAgIHJldHVy
biBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDsKKyAgICB9CisKKyAgICByZXR1
cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ7Cit9CisKIGNvbnN0IEludFJl
Y3QgQ0NMYXllckltcGw6OmdldERyYXdSZWN0KCkgY29uc3QKIHsKICAgICAvLyBGb3JtIHRoZSBt
YXRyaXggdXNlZCBieSB0aGUgc2hhZGVyIHRvIG1hcCB0aGUgY29ybmVycyBvZiB0aGUgbGF5ZXIn
cwpAQCAtMjM4LDcgKzI3Myw3IEBAIHZvaWQgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRp
ZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiAKIHZvaWQgc29ydExheWVycyhW
ZWN0b3I8Q0NMYXllckltcGwqPjo6aXRlcmF0b3IgZmlyc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+
OjppdGVyYXRvciBlbmQsIENDTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyKQogewotICAgIFRSQUNF
X0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnNvcnRMYXllcnMiLCAwLCAwKTsKKyAgICBU
UkFDRV9FVkVOVDAoImNjIiwgIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c29ydExheWVycyIpOwog
ICAgIGxheWVyU29ydGVyLT5zb3J0KGZpcnN0LCBlbmQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAppbmRleCA3MTg5OTYzYTA0M2ZmMmFlNjg3YzhjNzAxNDZiYjU3M2JiMGY5ZjgzLi5iZGIyYjcw
ZDU5YTliOGQ4MGE5OTkwZjQ2NjIyOTNiZGJkMWM1OWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUmVnaW9u
LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVy
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5o
IgpAQCAtMjE4LDYgKzIxOSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERyYXdDaGVja2VyYm9h
cmRGb3JNaXNzaW5nVGlsZXMoYm9vbCBjaGVja2VyYm9hcmQpIHsgbV9kcmF3Q2hlY2tlcmJvYXJk
Rm9yTWlzc2luZ1RpbGVzID0gY2hlY2tlcmJvYXJkOyB9CiAgICAgYm9vbCBkcmF3Q2hlY2tlcmJv
YXJkRm9yTWlzc2luZ1RpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3Q2hlY2tlcmJvYXJkRm9y
TWlzc2luZ1RpbGVzOyB9CiAKKyAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVz
IHRyeVNjcm9sbChjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbElucHV0VHlwZSkgY29uc3Q7CisKICAgICBjb25zdCBJbnRSZWN0JiB2aXNp
YmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0OyB9CiAgICAg
dm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3Qp
IHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdDsgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBhYmE0NTQ0Nzk1NTFiN2QxMGJmYTFiNWRhNmIxYjQy
ODQxZWZlMjFhLi4yOTkwYzczOWZlZGI1ZDdhNmJhNWM1ZWI0N2UzMGEzNmNhODk4YjY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdElt
cGwqIGhvc3RJbXBsKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAK
LSAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yZWxlYXNlUm9vdExheWVyKCksIGhvc3RJbXBs
KSk7CisgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJv
bml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0SW1wbC0+ZGV0YWNoTGF5ZXJUcmVlKCksIGhvc3RJ
bXBsKSk7CiAKICAgICAvLyBXZSBtYXkgaGF2ZSBhZGRlZCBhbiBhbmltYXRpb24gZHVyaW5nIHRo
ZSB0cmVlIHN5bmMuIFRoaXMgd2lsbCBjYXVzZSBib3RoIGxheWVyIHRyZWUgaG9zdHMKICAgICAv
LyB0byB2aXNpdCB0aGVpciBjb250cm9sbGVycy4KQEAgLTYxOCwxNSArNjE4LDQyIEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3Mo
KS5yZWNvcmRNZXRyaWNzKHRoaXMpOwogfQogCitzdGF0aWMgTGF5ZXJDaHJvbWl1bSogZmluZEZp
cnN0U2Nyb2xsYWJsZUxheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIGlmICghbGF5
ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVyLT5zY3JvbGxhYmxlKCkpCisg
ICAgICAgIHJldHVybiBsYXllcjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXIt
PmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogZm91bmQg
PSBmaW5kRmlyc3RTY3JvbGxhYmxlTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwor
ICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbEFuZFNj
YWxlKGNvbnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmIGluZm8pCiB7Ci0gICAgLy8gRklYTUU6IHB1
c2hpbmcgc2Nyb2xsIG9mZnNldHMgdG8gbm9uLXJvb3QgbGF5ZXJzIG5vdCBpbXBsZW1lbnRlZAot
ICAgIGlmICghaW5mby5zY3JvbGxzLnNpemUoKSkKKyAgICBpZiAoIW1fcm9vdExheWVyKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaW5mby5zY3JvbGxzLnNpemUoKSA9PSAxKTsKLSAg
ICBJbnRTaXplIHNjcm9sbERlbHRhID0gaW5mby5zY3JvbGxzWzBdLnNjcm9sbERlbHRhOwotICAg
IG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKHNjcm9sbERlbHRhLCBpbmZvLnBhZ2VTY2Fs
ZURlbHRhKTsKKyAgICBMYXllckNocm9taXVtKiByb290U2Nyb2xsTGF5ZXIgPSBmaW5kRmlyc3RT
Y3JvbGxhYmxlTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIEludFNpemUgcm9vdFNjcm9s
bERlbHRhOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmZvLnNjcm9sbHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmZpbmRMYXllckluU3VidHJlZShtX3Jvb3RMYXllci5nZXQoKSwgaW5mby5zY3JvbGxz
W2ldLmxheWVySWQpOworICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChsYXllciA9PSByb290U2Nyb2xsTGF5ZXIpCisgICAgICAgICAgICByb290
U2Nyb2xsRGVsdGEgKz0gaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRhOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBsYXllci0+c2Nyb2xsQnkoaW5mby5zY3JvbGxzW2ldLnNjcm9sbERlbHRh
KTsKKyAgICB9CisgICAgaWYgKCFyb290U2Nyb2xsRGVsdGEuaXNaZXJvKCkgfHwgaW5mby5wYWdl
U2NhbGVEZWx0YSAhPSAxKQorICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxBbmRTY2FsZShy
b290U2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxlRGVsdGEpOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRleCBlNWU0
ZmQ5YTJjMjM4MmI5ZTkyNWNhNzk0OTg1OTM3NzE2ODIyOWQ5Li5lNWE0ZmVjOWMxNTZlNGY1MTAx
OWU2ZjY2YmY2YTE4Yzg2MDYzYjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uaApAQCAtNTIsNiArNTIsMTAgQEAgcHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9vbCByZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rhcmdl
dChMYXllclR5cGUqLCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpOwogCisgICAgLy8gUmV0dXJu
cyBhIGxheWVyIHdpdGggdGhlIGdpdmVuIGlkIGlmIG9uZSBleGlzdHMgaW4gdGhlIHN1YnRyZWUg
c3RhcnRpbmcKKyAgICAvLyBmcm9tIHRoZSBnaXZlbiByb290IGxheWVyIChpbmNsdWRpbmcgbWFz
ayBhbmQgcmVwbGljYSBsYXllcnMpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4g
c3RhdGljIExheWVyVHlwZSogZmluZExheWVySW5TdWJ0cmVlKExheWVyVHlwZSogcm9vdExheWVy
LCBpbnQgbGF5ZXJJZCk7CisKICAgICBzdHJ1Y3QgU2Nyb2xsVXBkYXRlSW5mbyB7CiAgICAgICAg
IGludCBsYXllcklkOwogICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhOwpAQCAtNzcsNiArODEs
MjUgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRl
c1RvVGFyZ2V0KExheWVyVHlwZSogbGF5ZXIsIGkKICAgICByZXR1cm4gbGF5ZXItPnJlbmRlclN1
cmZhY2UoKSAmJiBsYXllci0+aWQoKSAhPSB0YXJnZXRTdXJmYWNlTGF5ZXJJRDsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorTGF5ZXJUeXBlKiBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmZpbmRMYXllckluU3VidHJlZShMYXllclR5cGUqIHJvb3RMYXllciwgaW50IGxheWVySWQp
Cit7CisgICAgaWYgKHJvb3RMYXllci0+aWQoKSA9PSBsYXllcklkKQorICAgICAgICByZXR1cm4g
cm9vdExheWVyOworCisgICAgaWYgKHJvb3RMYXllci0+bWFza0xheWVyKCkgJiYgcm9vdExheWVy
LT5tYXNrTGF5ZXIoKS0+aWQoKSA9PSBsYXllcklkKQorICAgICAgICByZXR1cm4gcm9vdExheWVy
LT5tYXNrTGF5ZXIoKTsKKworICAgIGlmIChyb290TGF5ZXItPnJlcGxpY2FMYXllcigpICYmIHJv
b3RMYXllci0+cmVwbGljYUxheWVyKCktPmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAgICAgcmV0dXJu
IHJvb3RMYXllci0+cmVwbGljYUxheWVyKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHJvb3RMYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoTGF5ZXJU
eXBlKiBmb3VuZCA9IGZpbmRMYXllckluU3VidHJlZShyb290TGF5ZXItPmNoaWxkcmVuKClbaV0u
Z2V0KCksIGxheWVySWQpKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNjVmODVmZmZhZjQyZDQ0MzQ3YTc0
Y2UzNjdlNDNlMWJhZTJiMDNlYi4uOTIyMWYwZGJlNDYxMTEwMGY4Y2FhMWZjMjA4ZDZkZDQxMTNj
ZmFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTExNCw3
ICsxMTQsOSBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0
IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgIDogbV9jbGllbnQoY2xpZW50
KQogICAgICwgbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkK
LSAgICAsIG1fc2Nyb2xsTGF5ZXJJbXBsKDApCisgICAgLCBtX3Jvb3RTY3JvbGxMYXllckltcGwo
MCkKKyAgICAsIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKDApCisgICAgLCBtX3Njcm9s
bGluZ0xheWVySWRGcm9tUHJldmlvdXNUcmVlKC0xKQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5n
cykKICAgICAsIG1fdmlzaWJsZSh0cnVlKQogICAgICwgbV9zb3VyY2VGcmFtZUNhbkJlRHJhd24o
dHJ1ZSkKQEAgLTEzNyw3ICsxMzksNyBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogQ0NMYXll
clRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKQogewogICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVDAo
ImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkiKTsKIAog
ICAgIGlmIChtX3Jvb3RMYXllckltcGwpCiAgICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXMoKTsK
QEAgLTE4MSwxMCArMTgzLDEwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZShk
b3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFy
Z2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0
YXJ0VGltZSwgZG91YmxlIGR1cmF0aW9uKQogewotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwp
CisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+
c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAg
ICBJbnRTaXplIHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xsTGF5ZXJJ
bXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0
YSgpKTsKICAgICBzY3JvbGxUb3RhbC5zY2FsZShtX3BhZ2VTY2FsZURlbHRhKTsKICAgICBmbG9h
dCBzY2FsZVRvdGFsID0gbV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhOwogICAgIEludFNp
emUgc2NhbGVkQ29udGVudFNpemUgPSBjb250ZW50U2l6ZSgpOwpAQCAtMjM0LDYgKzIzNiw3IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xh
eWVySW1wbCogcm9vdERyYXdMYXllciwKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3Vs
YXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCkKIHsKICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5pc0VtcHR5KCkpOwor
ICAgIEFTU0VSVChtX3Jvb3RMYXllckltcGwpOwogCiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKIApAQCAtMjQ1LDcgKzI0OCw3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChD
Q0xheWVyTGlzdCYgcmVuZGVyU3VyCiAgICAgbV9yb290TGF5ZXJJbXBsLT5zZXRDbGlwUmVjdChJ
bnRSZWN0KEludFBvaW50KCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKSk7CiAKICAgICB7Ci0gICAg
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjRHJhd0V0YyIsIHRoaXMs
IDApOworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGNEcmF3RXRjIik7CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OwogICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VTY2FsZVRyYW5zZm9y
bTsKICAgICAgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2NhbGUobV9zZXR0aW5ncy5kZXZpY2VT
Y2FsZUZhY3Rvcik7CkBAIC0yNjgsNyArMjcxLDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUK
IAogICAgIGNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CiAKLSAgICBUUkFDRV9FVkVOVDEoIndlYmtpdCIsICJDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMiLCAicmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCki
LCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpKSk7CisgICAgVFJBQ0VfRVZFTlQxKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
YWxjdWxhdGVSZW5kZXJQYXNzZXMiLCAicmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkiLCBz
dGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6
ZSgpKSk7CiAKICAgICBtX3Jvb3RMYXllckltcGwtPnNldFNjaXNzb3JSZWN0KGVuY2xvc2luZ0lu
dFJlY3QobV9yb290U2Npc3NvclJlY3QpKTsKIApAQCAtMzczLDIxICszNzYsMjIgQEAgSW50U2l6
ZSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gVE9E
TyhhZWxpYXMpOiBIYXJkY29kaW5nIHRoZSBmaXJzdCBjaGlsZCBoZXJlIGlzIHdlaXJkLiBUaGlu
ayBvZgogICAgIC8vIGEgY2xlYW5lciB3YXkgdG8gZ2V0IHRoZSBjb250ZW50Qm91bmRzIG9uIHRo
ZSBJbXBsIHNpZGUuCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCBtX3Njcm9sbExheWVy
SW1wbC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllcklt
cGwgfHwgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKLSAgICByZXR1cm4gbV9zY3JvbGxMYXllckltcGwtPmNoaWxk
cmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsKKyAgICByZXR1cm4gbV9yb290U2Nyb2xsTGF5ZXJJ
bXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCk7CiB9CiAKIGJvb2wgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQogewotICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3IiwgdGhpcywgMCk7Cisg
ICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3
Iik7CiAgICAgQVNTRVJUKGNhbkRyYXcoKSk7CiAKKyAgICBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0ID0gJm1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICBmcmFtZS5yZW5kZXJQYXNz
ZXMuY2xlYXIoKTsKLSAgICBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7Cisg
ICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdC0+Y2xlYXIoKTsKICAgICBmcmFtZS53aWxs
RHJhd0xheWVycy5jbGVhcigpOwogCi0gICAgaWYgKCFjYWxjdWxhdGVSZW5kZXJQYXNzZXMoZnJh
bWUucmVuZGVyUGFzc2VzLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBmcmFtZS53aWxs
RHJhd0xheWVycykpCisgICAgaWYgKCFjYWxjdWxhdGVSZW5kZXJQYXNzZXMoZnJhbWUucmVuZGVy
UGFzc2VzLCAqZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZnJhbWUud2lsbERyYXdMYXll
cnMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwg
dGhlbiB3ZSBleHBlY3QgZHJhd0xheWVycygpIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgYWdhaW4uCkBAIC00MDEsNyArNDA1LDcgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRDb250ZW50c01lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKHNpemVfdCBi
eXRlcykKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1l
RGF0YSYgZnJhbWUpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRy
YXdMYXllcnMiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmRyYXdMYXllcnMiKTsKICAgICBBU1NFUlQoY2FuRHJhdygpKTsKICAgICBBU1NF
UlQoIWZyYW1lLnJlbmRlclBhc3Nlcy5pc0VtcHR5KCkpOwogCkBAIC00MjUsNyArNDI5LDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0YSYgZnJh
bWUpCiAgICAgfQogCiAgICAgaWYgKG1fZGVidWdSZWN0SGlzdG9yeS0+ZW5hYmxlZChzZXR0aW5n
cygpKSkKLSAgICAgICAgbV9kZWJ1Z1JlY3RIaXN0b3J5LT5zYXZlRGVidWdSZWN0c0ZvckN1cnJl
bnRGcmFtZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHNldHRpbmdzKCkpOworICAgICAgICBtX2RlYnVnUmVjdEhpc3RvcnktPnNhdmVEZWJ1Z1Jl
Y3RzRm9yQ3VycmVudEZyYW1lKG1fcm9vdExheWVySW1wbC5nZXQoKSwgKmZyYW1lLnJlbmRlclN1
cmZhY2VMYXllckxpc3QsIHNldHRpbmdzKCkpOwogCiAgICAgaWYgKG1faGVhZHNVcERpc3BsYXkt
PmVuYWJsZWQoc2V0dGluZ3MoKSkpCiAgICAgICAgIG1faGVhZHNVcERpc3BsYXktPmRyYXcodGhp
cyk7CkBAIC00ODksNyArNDkzLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZWFkYmFj
ayh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgbV9sYXllclJlbmRlcmVy
LT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOwogfQogCi1zdGF0aWMgQ0NMYXll
ckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCitzdGF0aWMgQ0NMYXll
ckltcGwqIGZpbmRSb290U2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogewogICAgIGlm
ICghbGF5ZXIpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDk4LDcgKzUwMiw3IEBAIHN0YXRpYyBD
Q0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAg
cmV0dXJuIGxheWVyOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRy
ZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICBDQ0xheWVySW1wbCogZm91bmQgPSBmaW5kU2Ny
b2xsTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAgICAgICBDQ0xheWVySW1w
bCogZm91bmQgPSBmaW5kUm9vdFNjcm9sbExheWVyKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgp
KTsKICAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgIH0K
QEAgLTUwNiwxMiArNTEwLDQzIEBAIHN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVy
KENDTGF5ZXJJbXBsKiBsYXllcikKICAgICByZXR1cm4gMDsKIH0KIAorLy8gQ29udGVudCBsYXll
cnMgY2FuIGJlIGVpdGhlciBkaXJlY3RseSBzY3JvbGxhYmxlIG9yIGNvbnRhaW5lZCBpbiBhbiBv
dXRlcgorLy8gc2Nyb2xsaW5nIGxheWVyIHdoaWNoIGFwcGxpZXMgdGhlIHNjcm9sbCB0cmFuc2Zv
cm0uIEdpdmVuIGEgY29udGVudCBsYXllciwKKy8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUg
YXNzb2NpYXRlZCBzY3JvbGwgbGF5ZXIgaWYgYW55Lgorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5k
U2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIoQ0NMYXllckltcGwqIGxheWVySW1wbCkKK3sKKyAg
ICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXJJbXBs
LT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllckltcGw7CisKKyAgICBpZiAobGF5
ZXJJbXBsLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllckltcGwtPnBhcmVudCgpICYmIGxheWVySW1w
bC0+cGFyZW50KCktPnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVySW1wbC0+cGFy
ZW50KCk7CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRSb290TGF5ZXIoUGFzc093blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7CiAgICAgbV9yb290
TGF5ZXJJbXBsID0gbGF5ZXI7CisgICAgbV9yb290U2Nyb2xsTGF5ZXJJbXBsID0gZmluZFJvb3RT
Y3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOworICAgIG1fY3VycmVudGx5U2Nyb2xs
aW5nTGF5ZXJJbXBsID0gMDsKIAotICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHRoaXMgb25seSBm
aW5kcyB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBsYXllci4KLSAgICBtX3Njcm9sbExheWVySW1wbCA9
IGZpbmRTY3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkpOworICAgIGlmIChtX3Jvb3RM
YXllckltcGwgJiYgbV9zY3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSAhPSAtMSkKKyAg
ICAgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmZpbmRMYXllckluU3VidHJlZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1fc2Nyb2xsaW5n
TGF5ZXJJZEZyb21QcmV2aW91c1RyZWUpOworCisgICAgbV9zY3JvbGxpbmdMYXllcklkRnJvbVBy
ZXZpb3VzVHJlZSA9IC0xOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpkZXRhY2hMYXllclRyZWUoKQoreworICAgIC8vIENsZWFyIGFsbCBkYXRhIHN0
cnVjdHVyZXMgdGhhdCBoYXZlIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBsYXllciB0cmVlLgor
ICAgIG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1RyZWUgPSBtX2N1cnJlbnRseVNjcm9s
bGluZ0xheWVySW1wbCA/IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsLT5pZCgpIDogLTE7
CisgICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSAwOworICAgIG1fcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5jbGVhcigpOworCisgICAgcmV0dXJuIG1fcm9vdExheWVySW1wbC5yZWxl
YXNlKCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZp
c2libGUpCkBAIC01NzUsNiArNjEwLDM0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0
Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKICAgICAgICAgbV9sYXll
clJlbmRlcmVyLT52aWV3cG9ydENoYW5nZWQoKTsKIH0KIAorc3RhdGljIHZvaWQgYWRqdXN0U2Ny
b2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdl
U2NhbGVDaGFuZ2UpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRv
IGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFnZVNjYWxlIHNwYWNlLgorICAg
ICAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCk7Cisg
ICAgICAgIHNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7CisgICAgICAgIGxheWVy
SW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAg
ICBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGxheWVySW1wbC0+Y2hpbGRyZW4oKVtp
XS5nZXQoKSwgcGFnZVNjYWxlQ2hhbmdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwbHlQYWdlU2Nh
bGVEZWx0YVRvU2Nyb2xsTGF5ZXJzKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGZsb2F0IHBhZ2VT
Y2FsZURlbHRhKQoreworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobGF5ZXJJbXBsLT5zY3JvbGxhYmxlKCkpCisgICAgICAgIGxheWVySW1wbC0+c2V0UGFn
ZVNjYWxlRGVsdGEocGFnZVNjYWxlRGVsdGEpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFwcGx5UGFnZVNj
YWxlRGVsdGFUb1Njcm9sbExheWVycyhsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCksIHBh
Z2VTY2FsZURlbHRhKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2Nh
bGVGYWN0b3JBbmRMaW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW5QYWdlU2NhbGUsIGZs
b2F0IG1heFBhZ2VTY2FsZSkKIHsKICAgICBpZiAoIXBhZ2VTY2FsZSkKQEAgLTU4OSwyNSArNjUy
LDEzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGlt
aXRzKGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgbWluCiAgICAgZmxvYXQgcGFnZVNjYWxlQ2hhbmdl
ID0gcGFnZVNjYWxlIC8gbV9wYWdlU2NhbGU7CiAgICAgbV9wYWdlU2NhbGUgPSBwYWdlU2NhbGU7
CiAKLSAgICBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKHBhZ2VTY2FsZUNoYW5nZSk7
CisgICAgaWYgKHBhZ2VTY2FsZUNoYW5nZSAhPSAxKQorICAgICAgICBhZGp1c3RTY3JvbGxzRm9y
UGFnZVNjYWxlQ2hhbmdlKG1fcm9vdFNjcm9sbExheWVySW1wbCwgcGFnZVNjYWxlQ2hhbmdlKTsK
IAogICAgIC8vIENsYW1wIGRlbHRhIHRvIGxpbWl0cyBhbmQgcmVmcmVzaCBkaXNwbGF5IG1hdHJp
eC4KICAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZURlbHRhIC8gbV9zZW50UGFnZVNj
YWxlRGVsdGEpOwogICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gMTsKLSAgICBhcHBseVBhZ2VT
Y2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQgcGFnZVNjYWxlQ2hhbmdlKQot
ewotICAgIGlmIChwYWdlU2NhbGVDaGFuZ2UgPT0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gV2UgYWxzbyBuZWVkIHRvIGNvbnZlcnQgaW1wbC1zaWRlIHNjcm9sbCBkZWx0YXMgdG8gcGFn
ZVNjYWxlIHNwYWNlLgotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkgewotICAgICAgICBGbG9h
dFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKLSAg
ICAgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKLSAgICAgICAgbV9zY3Jv
bGxMYXllckltcGwtPnNldFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKLSAgICB9CisgICAgYXBw
bHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXJzKG1fcm9vdFNjcm9sbExheWVySW1wbCwgbV9w
YWdlU2NhbGVEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNj
YWxlRGVsdGEoZmxvYXQgZGVsdGEpCkBAIC02MjUsMjIgKzY3NiwxNiBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZURlbHRhKGZsb2F0IGRlbHRhKQogICAgIG1fcGFnZVNj
YWxlRGVsdGEgPSBkZWx0YTsKIAogICAgIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7Ci0gICAg
YXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjphcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpCi17Ci0gICAgaWYg
KG1fc2Nyb2xsTGF5ZXJJbXBsKQotICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0UGFnZVNj
YWxlRGVsdGEobV9wYWdlU2NhbGVEZWx0YSk7CisgICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Ny
b2xsTGF5ZXJzKG1fcm9vdFNjcm9sbExheWVySW1wbCwgbV9wYWdlU2NhbGVEZWx0YSk7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogewot
ICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJl
bigpLnNpemUoKSkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCB8fCAhbV9yb290U2Ny
b2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
RmxvYXRTaXplIHZpZXdCb3VuZHMgPSBtX3ZpZXdwb3J0U2l6ZTsKLSAgICBpZiAoQ0NMYXllcklt
cGwqIGNsaXBMYXllciA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgIGlmIChD
Q0xheWVySW1wbCogY2xpcExheWVyID0gbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkg
ewogICAgICAgICBpZiAoY2xpcExheWVyLT5tYXNrc1RvQm91bmRzKCkpCiAgICAgICAgICAgICB2
aWV3Qm91bmRzID0gY2xpcExheWVyLT5ib3VuZHMoKTsKICAgICB9CkBAIC02NTQsOSArNjk5LDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiAg
ICAgLy8gaGF2aW5nIGEgdmVydGljYWwgc2Nyb2xsYmFyIGJ1dCBubyBob3Jpem9udGFsIG92ZXJm
bG93LgogICAgIG1heFNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKLSAgICBtX3Njcm9s
bExheWVySW1wbC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKLQotICAgIC8vIFRP
RE8oYWVsaWFzKTogQWxzbyB1cGRhdGUgc3VibGF5ZXJzLgorICAgIG1fcm9vdFNjcm9sbExheWVy
SW1wbC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKIH0KIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCkBAIC02NjQsNTEgKzcwNywxMDMgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCiAgICAgbV9jbGllbnQtPnNl
dE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CiAKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1w
bDo6ZW5zdXJlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCgpCit7CisgICAgaWYgKCFtX3Jvb3RMYXll
ckltcGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG5lZWQgYm90aCBhIG5v
bi1lbXB0eSByZW5kZXIgc3VyZmFjZSBsYXllciBsaXN0IGFuZCBhIHJvb3QgcmVuZGVyCisgICAg
Ly8gc3VyZmFjZSB0byBiZSBhYmxlIHRvIGl0ZXJhdGUgb3ZlciB0aGUgdmlzaWJsZSBsYXllcnMu
CisgICAgaWYgKG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgJiYgbV9yb290TGF5ZXJJ
bXBsLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWYg
d2UgYXJlIGNhbGxlZCBhZnRlciBzZXRSb290TGF5ZXIoKSBidXQgYmVmb3JlIHByZXBhcmVUb0Ry
YXcoKSwgd2UgbmVlZAorICAgIC8vIHRvIHJlY2FsY3VsYXRlIHRoZSB2aXNpYmxlIGxheWVycy4g
VGhpcyBwcmV2ZW50cyBiZWluZyB1bmFibGUgdG8gc2Nyb2xsCisgICAgLy8gZHVyaW5nIHBhcnQg
b2YgYSBjb21taXQuCisgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CisgICAg
Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChtX3JlbmRlclN1cmZhY2VMYXllckxpc3Qp
OworCisgICAgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCk7Cit9CisKIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Ny
b2xsQmVnaW4oY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJbnB1dFR5cGUgdHlwZSkKIHsKLSAgICAvLyBUT0RPOiBDaGVjayBmb3Igc2Ny
b2xsYWJsZSBzdWJsYXllcnMuCi0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCAhbV9zY3Jv
bGxMYXllckltcGwtPnNjcm9sbGFibGUoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xs
QmVnaW4gSWdub3JlZCBubyBzY3JvbGxhYmxlIiwgdGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBT
Y3JvbGxJZ25vcmVkOwotICAgIH0KKyAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnNjcm9sbEJlZ2luIik7CiAKLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwtPnNo
b3VsZFNjcm9sbE9uTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxC
ZWdpbiBGYWlsZWQgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgICAg
IHJldHVybiBTY3JvbGxGYWlsZWQ7Ci0gICAgfQorICAgIHNjcm9sbEVuZCgpOworCisgICAgaWYg
KCFlbnN1cmVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KCkpCisgICAgICAgIHJldHVybiBTY3JvbGxJ
Z25vcmVkOwogCiAgICAgSW50UG9pbnQgZGV2aWNlVmlld3BvcnRQb2ludCA9IHZpZXdwb3J0UG9p
bnQ7CiAgICAgZGV2aWNlVmlld3BvcnRQb2ludC5zY2FsZShtX3NldHRpbmdzLmRldmljZVNjYWxl
RmFjdG9yLCBtX3NldHRpbmdzLmRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgIC8vIFRoZSBpbnZl
cnNlIG9mIHRoZSBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtIHRha2VzIHVzIGZyb20gcGh5c2ljYWwg
cGl4ZWxzIHRvIGxheW91dCBwaXhlbHMuCi0gICAgSW50UG9pbnQgc2Nyb2xsTGF5ZXJQb2ludCht
X3Njcm9sbExheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9p
bnQoZGV2aWNlVmlld3BvcnRQb2ludCkpOworICAgIC8vIEZpcnN0IGZpbmQgb3V0IHdoaWNoIGxh
eWVyIHdhcyBoaXQgZnJvbSB0aGUgc2F2ZWQgbGlzdCBvZiB2aXNpYmxlIGxheWVycworICAgIC8v
IGluIHRoZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsID0g
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHZpZXdwb3J0
UG9pbnQsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKLSAgICBpZiAobV9zY3JvbGxMYXll
ckltcGwtPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29udGFpbnMoc2Nyb2xsTGF5ZXJQb2lu
dCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJlZ2luIEZhaWxlZCBub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbiIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOwot
ICAgIH0KKyAgICAvLyBXYWxrIHVwIHRoZSBoaWVyYXJjaHkgYW5kIGxvb2sgZm9yIGEgc2Nyb2xs
YWJsZSBsYXllci4KKyAgICBDQ0xheWVySW1wbCogcG90ZW50aWFsbHlTY3JvbGxpbmdMYXllcklt
cGwgPSAwOworICAgIGZvciAoOyBsYXllckltcGw7IGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFy
ZW50KCkpIHsKKyAgICAgICAgLy8gVGhlIGNvbnRlbnQgbGF5ZXIgY2FuIGFsc28gYmxvY2sgYXR0
ZW1wdHMgdG8gc2Nyb2xsIG91dHNpZGUgdGhlIG1haW4gdGhyZWFkLgorICAgICAgICBpZiAobGF5
ZXJJbXBsLT50cnlTY3JvbGwoZGV2aWNlVmlld3BvcnRQb2ludCwgdHlwZSkgPT0gU2Nyb2xsT25N
YWluVGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbE9uTWFpblRocmVhZDsKKworICAg
ICAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNjcm9sbExheWVyRm9yQ29u
dGVudExheWVyKGxheWVySW1wbCk7CisgICAgICAgIGlmICghc2Nyb2xsTGF5ZXJJbXBsKQorICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICBpZiAodHlwZSA9PSBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6V2hlZWwgJiYgbV9zY3JvbGxMYXllckltcGwtPmhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoKSkg
ewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIHdoZWVsRXZlbnRIYW5k
bGVycyIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOworICAgICAgICBT
Y3JvbGxTdGF0dXMgc3RhdHVzID0gc2Nyb2xsTGF5ZXJJbXBsLT50cnlTY3JvbGwodmlld3BvcnRQ
b2ludCwgdHlwZSk7CisKKyAgICAgICAgLy8gSWYgYW55IGxheWVyIHdhbnRzIHRvIGRpdmVydCB0
aGUgc2Nyb2xsIGV2ZW50IHRvIHRoZSBtYWluIHRocmVhZCwgYWJvcnQuCisgICAgICAgIGlmIChz
dGF0dXMgPT0gU2Nyb2xsT25NYWluVGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbE9u
TWFpblRocmVhZDsKKworICAgICAgICBpZiAoc3RhdHVzID09IFNjcm9sbFN0YXJ0ZWQgJiYgIXBv
dGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQorICAgICAgICAgICAgcG90ZW50aWFsbHlTY3Jv
bGxpbmdMYXllckltcGwgPSBzY3JvbGxMYXllckltcGw7CiAgICAgfQogCi0gICAgcmV0dXJuIFNj
cm9sbFN0YXJ0ZWQ7CisgICAgaWYgKHBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKSB7Cisg
ICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gcG90ZW50aWFsbHlTY3JvbGxp
bmdMYXllckltcGw7CisgICAgICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIH0KKyAgICBy
ZXR1cm4gU2Nyb2xsSWdub3JlZDsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3Jv
bGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAoIW1fc2Nyb2xs
TGF5ZXJJbXBsKQorICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2Nyb2xsQnkiKTsKKyAgICBpZiAoIW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVs
dGEpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIG1f
Y2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIEZsb2F0U2l6ZSBwZW5k
aW5nRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIHBlbmRpbmdEZWx0YS5zY2FsZSgxIC8gbV9wYWdl
U2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBtX2N1cnJl
bnRseVNjcm9sbGluZ0xheWVySW1wbDsgbGF5ZXJJbXBsICYmICFwZW5kaW5nRGVsdGEuaXNaZXJv
KCk7IGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKCFsYXll
ckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBGbG9h
dFNpemUgcHJldmlvdXNEZWx0YShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgICAgICBs
YXllckltcGwtPnNjcm9sbEJ5KHBlbmRpbmdEZWx0YSk7CisgICAgICAgIC8vIFJlc2V0IHRoZSBw
ZW5kaW5nIHNjcm9sbCBkZWx0YSB0byB6ZXJvIGlmIHRoZSBsYXllciB3YXMgYWJsZSB0byBtb3Zl
IGFsb25nIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgLy8gYXhpcy4gVGhpcyBpcyB0byBlbnN1cmUg
aXQgaXMgcG9zc2libGUgdG8gc2Nyb2xsIGV4YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQg
b2YgYQorICAgICAgICAvLyBzY3JvbGwgYXJlYSByZWdhcmRsZXNzIG9mIHRoZSBzY3JvbGwgc3Rl
cC4gRm9yIGRpYWdvbmFsIHNjcm9sbHMgdGhpcyBhbHNvIGF2b2lkcyBhcHBseWluZworICAgICAg
ICAvLyB0aGUgc2Nyb2xsIG9uIG9uZSBheGlzIHRvIG11bHRpcGxlIGxheWVycy4KKyAgICAgICAg
aWYgKHByZXZpb3VzRGVsdGEud2lkdGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkud2lk
dGgoKSkKKyAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAgICAgaWYg
KHByZXZpb3VzRGVsdGEuaGVpZ2h0KCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmhlaWdo
dCgpKQorICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICB9CisKKyAg
ICBpZiAoIXNjcm9sbERlbHRhLmlzWmVybygpICYmIHBlbmRpbmdEZWx0YS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgICAg
IG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIH0KIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxFbmQoKQogeworICAgIG1fY3VycmVudGx5U2Ny
b2xsaW5nTGF5ZXJJbXBsID0gMDsKKyAgICBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlvdXNU
cmVlID0gLTE7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlQmVn
aW4oKQpAQCAtNzIwLDkgKzgxNSw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hH
ZXN0dXJlQmVnaW4oKQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRh
dGUoZmxvYXQgbWFnbmlmeURlbHRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIGFuY2hvcikKIHsKLSAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlIiwgdGhpcywgMCk7CisgICAg
VFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRh
dGUiKTsKIAotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3Jv
bGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3ByZXZpb3VzUGluY2hB
bmNob3IgPT0gSW50UG9pbnQ6Onplcm8oKSkKQEAgLTczNyw3ICs4MzIsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCBtYWduaWZ5RGVsdGEsCiAK
ICAgICBtX3ByZXZpb3VzUGluY2hBbmNob3IgPSBhbmNob3I7CiAKLSAgICBtX3Njcm9sbExheWVy
SW1wbC0+c2Nyb2xsQnkocm91bmRlZEludFNpemUobW92ZSkpOworICAgIG1fcm9vdFNjcm9sbExh
eWVySW1wbC0+c2Nyb2xsQnkocm91bmRlZEludFNpemUobW92ZSkpOwogICAgIG1fY2xpZW50LT5z
ZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJh
d09uSW1wbFRocmVhZCgpOwogfQpAQCAtNzU5LDcgKzg1NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6Y29tcHV0ZURvdWJsZVRhcFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCog
c2Nyb2xsCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRh
cyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvKQogewotICAgIGlmICghbV9zY3JvbGxM
YXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIE9ubHkgc2VuZCBmYWtlIHNjcm9sbC96b29tIGRlbHRhcyBpZiB3ZSdyZSBw
aW5jaCB6b29taW5nIG91dCBieSBhCkBAIC03NzEsNyArODY2LDcgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29tRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNj
cm9sbEluZm8KIAogICAgIC8vIENvbXB1dGUgd2hlcmUgdGhlIHNjcm9sbCBvZmZzZXQvcGFnZSBz
Y2FsZSB3b3VsZCBiZSBpZiBmdWxseSBwaW5jaC16b29tZWQKICAgICAvLyBvdXQgZnJvbSB0aGUg
YW5jaG9yIHBvaW50LgotICAgIEludFNpemUgc2Nyb2xsQmVnaW4gPSBmbG9vcmVkSW50U2l6ZSht
X3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXplIHNjcm9sbEJlZ2luID0gZmxvb3JlZEludFNpemUo
bV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9yb290U2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKICAgICBzY3JvbGxCZWdpbi5zY2FsZShtX3BhZ2VTY2Fs
ZURlbHRhKTsKICAgICBmbG9hdCBzY2FsZUJlZ2luID0gbV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2Fs
ZURlbHRhOwogICAgIGZsb2F0IHBhZ2VTY2FsZURlbHRhVG9TZW5kID0gbV9taW5QYWdlU2NhbGUg
LyBtX3BhZ2VTY2FsZTsKQEAgLTc5MSwyMiArODg2LDQwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJ
bmZvCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6bWFrZVNjcm9sbEFuZFNjYWxlU2V0KEND
U2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNl
dCwgZmxvYXQgcGFnZVNjYWxlKQogewotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAg
aWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAogICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxh
eWVySWQgPSBtX3Njcm9sbExheWVySW1wbC0+aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEg
PSBzY3JvbGxPZmZzZXQgLSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9u
KCkpOworICAgIHNjcm9sbC5sYXllcklkID0gbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOwor
ICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNjcm9sbE9mZnNldCAtIHRvU2l6ZShtX3Jvb3RTY3Jv
bGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIHNjcm9sbEluZm8tPnNjcm9sbHMu
YXBwZW5kKHNjcm9sbCk7Ci0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0
YShzY3JvbGwuc2Nyb2xsRGVsdGEpOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2V0U2Vu
dFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVs
dGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSA9IHBhZ2VTY2FsZSAvIG1fcGFnZVNjYWxl
OwogfQogCitzdGF0aWMgdm9pZCBjb2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVT
ZXQqIHNjcm9sbEluZm8sIENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgaWYgKCFsYXll
ckltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0
YSgpLmlzWmVybygpKSB7CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBmbG9vcmVkSW50
U2l6ZShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOworICAgICAgICBzY3JvbGwubGF5ZXJJZCA9
IGxheWVySW1wbC0+aWQoKTsKKyAgICAgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsRGVs
dGE7CisgICAgICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7CisgICAgICAg
IGxheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsr
aSkKKyAgICAgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLCBsYXllckltcGwtPmNo
aWxkcmVuKClbaV0uZ2V0KCkpOworfQorCiBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogewogICAgIE93blB0
cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gYWRvcHRQdHIobmV3IENDU2Nyb2xs
QW5kU2NhbGVTZXQoKSk7Ci0gICAgYm9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYg
KCFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSB8fCBtX3BhZ2VTY2Fs
ZURlbHRhICE9IDEuMGYpOwotICAgIGlmICghZGlkTW92ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2
ZSB8fCBtX3BhZ2VTY2FsZUFuaW1hdGlvbikgeworCisgICAgaWYgKG1fcGluY2hHZXN0dXJlQWN0
aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9uKSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURl
bHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSAxOwogICAgICAgICBpZiAobV9waW5j
aEdlc3R1cmVBY3RpdmUpCiAgICAgICAgICAgICBjb21wdXRlUGluY2hab29tRGVsdGFzKHNjcm9s
bEluZm8uZ2V0KCkpOwpAQCAtODE1LDE2ICs5MjgsOSBAQCBQYXNzT3duUHRyPENDU2Nyb2xsQW5k
U2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogICAg
ICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiAgICAgfQogCisgICAgY29sbGVjdFNj
cm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgpLCBtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogICAg
IG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSBtX3Bh
Z2VTY2FsZURlbHRhOwogCi0gICAgLy8gRklYTUU6IHRyYWNrIHNjcm9sbHMgZnJvbSBsYXllcnMg
b3RoZXIgdGhhbiB0aGUgcm9vdAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBk
YXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9sbExheWVySW1wbC0+
aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7Ci0gICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQo
c2Nyb2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Ny
b2xsLnNjcm9sbERlbHRhKTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0K
IApAQCAtODM5LDE1ICs5NDUsMTUgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRGdWxs
Um9vdExheWVyRGFtYWdlKCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlUGFn
ZVNjYWxlKGRvdWJsZSBtb25vdG9uaWNUaW1lKQogewotICAgIGlmICghbV9wYWdlU2NhbGVBbmlt
YXRpb24gfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRp
b24gfHwgIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50
U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIElu
dFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwt
PnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkp
OwogCiAgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2Fs
ZUF0VGltZShtb25vdG9uaWNUaW1lKSAvIG1fcGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5leHRT
Y3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKG1vbm90b25p
Y1RpbWUpOwogICAgIG5leHRTY3JvbGwuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOwotICAg
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOwor
ICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRv
dGFsKTsKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIAogICAg
IGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+aXNBbmltYXRpb25Db21wbGV0ZUF0VGltZShtb25v
dG9uaWNUaW1lKSkgewpAQCAtODYxLDcgKzk2Nyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6YW5pbWF0ZUxheWVycyhkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1Rp
CiAgICAgaWYgKCFtX3NldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCB8fCAhbV9uZWVk
c0FuaW1hdGVMYXllcnMgfHwgIW1fcm9vdExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiLCB0aGlz
LCAwKTsKKyAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1h
dGVMYXllcnMiKTsKIAogICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRz
KGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogCkBAIC05MDUsNyArMTAx
MSw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJz
aXZlKENDTGF5ZXJJbXBsKiBjdXJyZW50KQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVh
clJlbmRlclN1cmZhY2VzKCkKIHsKICAgICBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1w
bFJlY3Vyc2l2ZShtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwotICAgIC8vIEZJWE1FOiBJZiB3ZSBo
YXZlIGFueSBSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0IHNhdmVkLCB0aGVuIG1ha2UgdGhlIGxpc3Qg
ZW1wdHkgaGVyZS4KKyAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKIH0KIAog
U3RyaW5nIENDTGF5ZXJUcmVlSG9zdEltcGw6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggOTE5NDJiZmViZmYxNjc1YjQyOTRl
MjE2NzkyM2EzYWRmZDZmNzI0Ni4uNzFkODEzZDkxOGMyMzZlN2I5ZTFkMzcwMTQ1NDJjZDEzYTYz
MGRhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtODYsNyArODYs
NyBAQCBwdWJsaWM6CiAKICAgICBzdHJ1Y3QgRnJhbWVEYXRhIHsKICAgICAgICAgQ0NSZW5kZXJQ
YXNzTGlzdCByZW5kZXJQYXNzZXM7Ci0gICAgICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgICAgIENDTGF5ZXJMaXN0KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owog
ICAgICAgICBDQ0xheWVyTGlzdCB3aWxsRHJhd0xheWVyczsKICAgICB9OwogCkBAIC0xMzMsMTAg
KzEzMywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NPd25QdHI8Q0NMYXllcklt
cGw+KTsKLSAgICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZWxlYXNlUm9vdExheWVyKCkgeyBy
ZXR1cm4gbV9yb290TGF5ZXJJbXBsLnJlbGVhc2UoKTsgfQogICAgIENDTGF5ZXJJbXBsKiByb290
TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllckltcGwuZ2V0KCk7IH0KIAotICAgIENDTGF5ZXJJ
bXBsKiBzY3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJbXBsOyB9Cisg
ICAgLy8gUmVsZWFzZSBvd25lcnNoaXAgb2YgdGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBhbmQgcmVw
bGFjZSBpdCB3aXRoIGFuIGVtcHR5CisgICAgLy8gdHJlZS4gUmV0dXJucyB0aGUgcm9vdCBsYXll
ciBvZiB0aGUgZGV0YWNoZWQgdHJlZS4KKyAgICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBkZXRh
Y2hMYXllclRyZWUoKTsKKworICAgIENDTGF5ZXJJbXBsKiByb290U2Nyb2xsTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RTY3JvbGxMYXllckltcGw7IH0KIAogICAgIGJvb2wgdmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZTsgfQogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsK
QEAgLTE5Niw4ICsxOTksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgbWFrZVNjcm9sbEFuZFNjYWxl
U2V0KENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIGNvbnN0IEludFNpemUmIHNjcm9s
bE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlKTsKIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRGVsdGEo
ZmxvYXQpOwotICAgIHZvaWQgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLSAg
ICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQg
dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3Vy
ZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIApAQCAtMjEwLDEzICsyMTEsMTYgQEAgcHJpdmF0ZToKICAg
ICBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Q7CiAgICAgdm9pZCBzZW5kRGlkTG9zZUNvbnRl
eHRSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKICAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZXMo
KTsKKyAgICBib29sIGVuc3VyZVJlbmRlclN1cmZhY2VMYXllckxpc3QoKTsKIAogICAgIHZvaWQg
ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25zdCBDQ0xheWVy
SW1wbCopIGNvbnN0OwogCiAgICAgUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7
CiAgICAgT3duUHRyPENDUmVuZGVyZXI+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBPd25QdHI8Q0NM
YXllckltcGw+IG1fcm9vdExheWVySW1wbDsKLSAgICBDQ0xheWVySW1wbCogbV9zY3JvbGxMYXll
ckltcGw7CisgICAgQ0NMYXllckltcGwqIG1fcm9vdFNjcm9sbExheWVySW1wbDsKKyAgICBDQ0xh
eWVySW1wbCogbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGw7CisgICAgaW50IG1fc2Nyb2xs
aW5nTGF5ZXJJZEZyb21QcmV2aW91c1RyZWU7CiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwog
ICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgSW50U2l6ZSBtX2RldmljZVZpZXdwb3J0
U2l6ZTsKQEAgLTI0OCw2ICsyNTIsMTAgQEAgcHJpdmF0ZToKIAogICAgIEZsb2F0UmVjdCBtX3Jv
b3RTY2lzc29yUmVjdDsKIAorICAgIC8vIExpc3Qgb2YgdmlzaWJsZSBsYXllcnMgZm9yIHRoZSBt
b3N0IHJlY2VudGx5IHByZXBhcmVkIGZyYW1lLiBVc2VkIGZvcgorICAgIC8vIHJlbmRlcmluZyBh
bmQgaW5wdXQgZXZlbnQgaGl0IHRlc3RpbmcuCisgICAgQ0NMYXllckxpc3QgbV9yZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0OworCiAgICAgT3duUHRyPENDRnJhbWVSYXRlQ291bnRlcj4gbV9mcHNDb3Vu
dGVyOwogICAgIE93blB0cjxDQ0RlYnVnUmVjdEhpc3Rvcnk+IG1fZGVidWdSZWN0SGlzdG9yeTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKaW5kZXggOGUwYzYxM2E0MmEzOTY2N2VhNjNlNjVl
OTI1YTIyYTdhMzRiMTQ5ZC4uNjNiZjI3MGZlMDIyNjQzNjBmNDI3YTJlMjNjNjI4Y2FlYTExMmM5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIFdlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9uIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsOjpoCiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgRHJv
cEV2ZW50LCBidXQgaW4gY2FzZXMgd2hlcmUgd2UgZmFpbCB0byBwcm9wZXJseSBzeW5jIHNjcm9s
bGFiaWxpdHkgaXQncyBzYWZlciB0byBzZW5kIHRoZQogICAgICAgICAgICAgLy8gZXZlbnQgdG8g
dGhlIG1haW4gdGhyZWFkLiBDaGFuZ2UgYmFjayB0byBEcm9wRXZlbnQgb25jZSB3ZSBoYXZlIHN5
bmNocm9uaXphdGlvbiBidWdzIHNvcnRlZCBvdXQuCiAgICAgICAgICAgICByZXR1cm4gRGlkTm90
SGFuZGxlOyAKLSAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVk
OgorICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ6
CiAgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOwogICAgICAgICB9CiAgICAgfSBlbHNl
IGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbikgewpA
QCAtMjA2LDcgKzIwNiw3IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVudERp
c3Bvc2l0aW9uIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoCiAgICAgICAgIGNhc2Ug
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ6CiAgICAgICAgICAgICBtX2dlc3R1
cmVTY3JvbGxTdGFydGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBEaWRIYW5kbGU7Ci0g
ICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDoKKyAgICAgICAg
Y2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkOgogICAgICAgICAg
ICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsSWdub3JlZDoKICAgICAgICAgICAgIHJldHVybiBEcm9wRXZlbnQ7CkBAIC0yNzgs
OCArMjc4LDggQEAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OkV2ZW50RGlzcG9zaXRp
b24gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmgKICAgICAgICAgbV9pbnB1dEhhbmRs
ZXJDbGllbnQtPnNjaGVkdWxlQW5pbWF0aW9uKCk7CiAgICAgICAgIHJldHVybiBEaWRIYW5kbGU7
CiAgICAgfQotICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDogewot
ICAgICAgICBUUkFDRV9FVkVOVF9JTlNUQU5UMCgiY2MiLCAiV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw6OmhhbmRsZUdlc3R1cmVGbGluZzo6ZmFpbGVkIik7CisgICAgY2FzZSBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkOiB7CisgICAgICAgIFRSQUNFX0VWRU5U
X0lOU1RBTlQwKCJjYyIsICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2Vz
dHVyZUZsaW5nOjpzY3JvbGxPbk1haW5UaHJlYWQiKTsKICAgICAgICAgcmV0dXJuIERpZE5vdEhh
bmRsZTsKICAgICB9CiAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3Jl
ZDogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggZGMwYTE3Nzc2MjAyODI4ZWM1ZWQ4ZWNiMmY0
YjU2YTgzZDE1OTlhZS4uODI4MWNhNWE5MWFmMDQ2ZWZhOGZiODhjZTU1YWVmNGZhMDYyYjhjOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0zNTgxLDYgKzM1ODEsMjcgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yTXVsdGlwbGVMYXllckxpc3Rz
KQogICAgIEVYUEVDVF9FUSg0LCByZXN1bHRMYXllci0+aWQoKSk7CiB9CiAKK1RFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5U3VidHJlZVNlYXJjaCkKK3sKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1hc2tMYXllciA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhTGF5ZXIgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldFJlcGxpY2FMYXllcihyZXBs
aWNhTGF5ZXIuZ2V0KCkpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLmdldCgpKTsK
KyAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1hc2tMYXllci5nZXQoKSk7CisgICAgcm9vdC0+YWRk
Q2hpbGQoY2hpbGQuZ2V0KCkpOworCisgICAgaW50IG5vbmV4aXN0ZW50SWQgPSAtMTsKKyAgICBF
WFBFQ1RfRVEocm9vdCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUo
cm9vdC5nZXQoKSwgcm9vdC0+aWQoKSkpOworICAgIEVYUEVDVF9FUShjaGlsZCwgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgY2hpbGQtPmlkKCkp
KTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGlsZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5k
TGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgZ3JhbmRDaGlsZC0+aWQoKSkpOworICAgIEVYUEVD
VF9FUShtYXNrTGF5ZXIsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVl
KHJvb3QuZ2V0KCksIG1hc2tMYXllci0+aWQoKSkpOworICAgIEVYUEVDVF9FUShyZXBsaWNhTGF5
ZXIsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCks
IHJlcGxpY2FMYXllci0+aWQoKSkpOworICAgIEVYUEVDVF9FUSgwLCBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmZpbmRMYXllckluU3VidHJlZShyb290LmdldCgpLCBub25leGlzdGVudElkKSk7Cit9
CiAKIC8vIEZJWE1FOgogLy8gY29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggYTYxZGQ4MTJk
Mzg3NmY0NzczNWQ2OTVkM2ZjZTA3ZmVmNDliYjQ0NS4uMDVmMzI3NjZmNzdkZjI1MmQwZjE2ZmFi
OTYzZWI2NDExMDU5YzIwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTEzOCw2ICsxMzgsMjcgQEAg
cHVibGljOgogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkp
OwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVTY3Jv
bGxhYmxlTGF5ZXIoaW50IGlkLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKGlkKTsKKyAgICAgICAgbGF5ZXItPnNldFNjcm9sbGFibGUodHJ1
ZSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGxheWVy
LT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGxheWVyLT5zZXRCb3VuZHMoc2l6ZSk7
CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50Qm91bmRzKHNpemUpOworICAgICAgICBsYXllci0+
c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXplLmhlaWdo
dCgpICogMikpOworICAgICAgICByZXR1cm4gbGF5ZXIucmVsZWFzZSgpOworICAgIH0KKworICAg
IHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKQorICAgIHsKKyAgICAg
ICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY3JlYXRlQ29udGV4dCgpLCBV
bnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVE
YXRhIGZyYW1lOworICAgICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3
KGZyYW1lKSk7CisgICAgICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgICAg
ICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICB9CisKIHByb3RlY3Rl
ZDoKICAgICBQYXNzUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjcmVhdGVDb250ZXh0KCkKICAg
ICB7CkBAIC0yMjEsMTMgKzI0Miw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c2Nyb2xsRGVsdGFSZXBlYXRlZFNjcm9sbHMpCiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0QW5kUmVkcmF3KQogewotICAgIHsKLSAgICAgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICAg
ICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKLSAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9z
aXRpb24oSW50UG9pbnQoMCwgMCkpOwotICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlv
bihJbnRTaXplKDEwMCwgMTAwKSk7Ci0gICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihy
b290LnJlbGVhc2UoKSk7Ci0gICAgfQorICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMo
SW50U2l6ZSgxMDAsIDEwMCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRT
aXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7
CiAKICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGFydGVkKTsKICAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CkBA
IC0yMzYsMjAgKzI1Myw1NyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9s
bFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJhdykKICAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RD
b21taXQpOwogfQogCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFdpdGhv
dXRSb290TGF5ZXIpCit7CisgICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmFzaCB3aGVuIHRyeWluZyB0
byBzY3JvbGwgYW4gZW1wdHkgbGF5ZXIgdHJlZS4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKK30KKworVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCByZXBsYWNlVHJlZVdoaWxlU2Nyb2xsaW5nKQoreworICAgIGNv
bnN0IGludCBzY3JvbGxMYXllcklkID0gMDsKKworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNM
YXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6
ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CisKKyAgICAvLyBXZSBzaG91bGQgbm90IGNyYXNoIGlmIHRoZSB0cmVlIGlzIHJlcGxh
Y2VkIHdoaWxlIHdlIGFyZSBzY3JvbGxpbmcuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNj
cm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+ZGV0
YWNoTGF5ZXJUcmVlKCk7CisKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNp
emUoMTAwLCAxMDApKTsKKworICAgIC8vIFdlIHNob3VsZCBzdGlsbCBiZSBzY3JvbGxpbmcsIGJl
Y2F1c2UgdGhlIHNjcm9sbGVkIGxheWVyIGFsc28gZXhpc3RzIGluIHRoZSBuZXcgdHJlZS4KKyAg
ICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShz
Y3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xs
RGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVySWQs
IHNjcm9sbERlbHRhKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBjbGVh
clJvb3RSZW5kZXJTdXJmYWNlQW5kU2Nyb2xsKQoreworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVu
dHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0
U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJh
d0ZyYW1lKCk7CisKKyAgICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBzY3JvbGwgZXZlbiBpZiB0
aGUgcm9vdCBsYXllciBsb3NlcyBpdHMgcmVuZGVyIHN1cmZhY2UgYWZ0ZXIgdGhlIG1vc3QKKyAg
ICAvLyByZWNlbnQgcmVuZGVyLgorICAgIG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5jbGVhclJl
bmRlclN1cmZhY2UoKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGFydGVkKTsKK30KKwogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiB7Ci0gICAgewotICAgICAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwotICAgICAgICByb290LT5zZXRT
Y3JvbGxhYmxlKHRydWUpOwotICAgICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCgwLCAwKSk7Ci0gICAgICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAw
LCAxMDApKTsKLSAgICAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgp
KTsKLSAgICB9CisgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwg
MTAwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7
CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKICAgICBDQ0xheWVy
SW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpOwogCiAgICAgcm9vdC0+c2V0SGF2
ZVdoZWVsRXZlbnRIYW5kbGVycyh0cnVlKTsKKwogICAgIC8vIFdpdGggcmVnaXN0ZXJlZCBldmVu
dCBoYW5kbGVycywgd2hlZWwgc2Nyb2xscyBoYXZlIHRvIGdvIHRvIHRoZSBtYWluIHRocmVhZC4K
LSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxG
YWlsZWQpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgw
LCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbE9uTWFpblRocmVhZCk7CiAKICAgICAvLyBCdXQgZ2VzdHVyZSBzY3JvbGxzIGNhbiBz
dGlsbCBiZSBoYW5kbGVkLgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJ
bnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0yNTcsMjcgKzMxMSwyOSBAQCBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHdoZWVsRXZlbnRIYW5kbGVycykKIAogVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQpCiB7Ci0gICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICBy
b290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwotICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKElu
dFBvaW50KDAsIDApKTsKLSAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEw
MCwgMTAwKSk7CisgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwg
MTAwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7
CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBDQ0xheWVy
SW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpOworCiAgICAgcm9vdC0+c2V0U2hv
dWxkU2Nyb2xsT25NYWluVGhyZWFkKHRydWUpOwotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXll
cihyb290LnJlbGVhc2UoKSk7Ci0gICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2lu
KEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CisKKyAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOworICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25N
YWluVGhyZWFkKTsKIH0KIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbkJhc2ljKQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsK
LSAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7Ci0gICAgcm9vdC0+
c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIHNldHVwU2Nyb2xs
QW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgyMDAsIDIwMCkpOworICAgIG1faG9zdEltcGwtPnNl
dFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwt
PnJvb3RMYXllcigpOworCiAgICAgcm9vdC0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oSW50
UmVjdCgwLCAwLCA1MCwgNTApKTsKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5y
ZWxlYXNlKCkpOworCiAgICAgLy8gQWxsIHNjcm9sbCB0eXBlcyBpbnNpZGUgdGhlIG5vbi1mYXN0
IHNjcm9sbGFibGUgcmVnaW9uIHNob3VsZCBmYWlsLgotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBs
LT5zY3JvbGxCZWdpbihJbnRQb2ludCgyNSwgMjUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hl
ZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKLSAgICBFWFBFQ1RfRVEo
bV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKKyAg
ICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9u
TWFpblRocmVhZCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7CiAKICAgICAvLyBBbGwgc2Nyb2xsIHR5cGVz
IG91dHNpZGUgdGhpcyByZWdpb24gc2hvdWxkIHN1Y2NlZWQuCiAgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDc1LCA3NSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKQEAgLTI5MCwx
NiArMzQ2LDEzIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9s
bGFibGVSZWdpb25CYXNpYykKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbldpdGhPZmZzZXQpCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICByb290LT5zZXRTY3JvbGxhYmxl
KHRydWUpOwotICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsKLSAg
ICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgc2V0
dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDIwMCwgMjAwKSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBDQ0xheWVySW1w
bCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpOworCiAgICAgcm9vdC0+c2V0Tm9uRmFz
dFNjcm9sbGFibGVSZWdpb24oSW50UmVjdCgwLCAwLCA1MCwgNTApKTsKICAgICByb290LT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KC0yNSwgMCkpOwotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXll
cihyb290LnJlbGVhc2UoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZy
YW1lOwotICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsK
LSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsgLy8gVXBkYXRlIGRyYXcgdHJhbnNm
b3JtcyBzbyB3ZSBjYW4gY29ycmVjdGx5IG1hcCBwb2ludHMgaW50byBsYXllciBzcGFjZS4KKyAg
ICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogCiAgICAgLy8gVGhpcyBw
b2ludCB3b3VsZCBmYWxsIGludG8gdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uIGV4Y2Vw
dCB0aGF0IHdlJ3ZlIG1vdmVkIHRoZSBsYXllciBkb3duIGJ5IDI1IHBpeGVscy4KICAgICBFWFBF
Q1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNDAsIDEwKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQp
OwpAQCAtMzA3LDE1ICszNjAsMTYgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbldpdGhPZmZzZXQpCiAgICAgbV9ob3N0SW1wbC0+c2Nyb2xs
RW5kKCk7CiAKICAgICAvLyBUaGlzIHBvaW50IGlzIHN0aWxsIGluc2lkZSB0aGUgbm9uLWZhc3Qg
cmVnaW9uLgotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgx
MCwgMTApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsRmFpbGVkKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoMTAsIDEwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7CiB9CiAKIFRFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgcGluY2hHZXN0dXJlKQogewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVu
dHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0
U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJh
d0ZyYW1lKCk7CiAKLSAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5z
Y3JvbGxMYXllcigpOworICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwt
PnJvb3RTY3JvbGxMYXllcigpOwogICAgIEFTU0VSVChzY3JvbGxMYXllcik7CiAKICAgICBjb25z
dCBmbG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUsIG1heFBhZ2VTY2FsZSA9IDQ7CkBAIC0zOTQsOCAr
NDQ4LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYWdlU2NhbGVBbmltYXRp
b24pCiB7CiAgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAw
KSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7Cisg
ICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAotICAgIENDTGF5ZXJJ
bXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnNjcm9sbExheWVyKCk7CisgICAgQ0NMYXll
ckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7CiAgICAg
QVNTRVJUKHNjcm9sbExheWVyKTsKIAogICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VTY2FsZSA9IDAu
NSwgbWF4UGFnZVNjYWxlID0gNDsKQEAgLTQzOSw2ICs0OTQsMTAxIEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgIH0KIH0KIAorVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBpbmhpYml0U2Nyb2xsQW5kUGFnZVNjYWxlVXBkYXRl
c1doaWxlUGluY2hab29taW5nKQoreworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMo
SW50U2l6ZSgxMDAsIDEwMCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRT
aXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7
CisKKyAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290U2Nyb2xs
TGF5ZXIoKTsKKyAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOworCisgICAgY29uc3QgZmxvYXQgbWlu
UGFnZVNjYWxlID0gMC41LCBtYXhQYWdlU2NhbGUgPSA0OworCisgICAgLy8gUGluY2ggem9vbSBp
bi4KKyAgICB7CisgICAgICAgIC8vIFN0YXJ0IGEgcGluY2ggaW4gZ2VzdHVyZSBhdCB0aGUgYm90
dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgdmlld3BvcnQuCisgICAgICAgIGNvbnN0IGZsb2F0IHpv
b21JbkRlbHRhID0gMjsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5k
TGltaXRzKDEsIG1pblBhZ2VTY2FsZSwgbWF4UGFnZVNjYWxlKTsKKyAgICAgICAgbV9ob3N0SW1w
bC0+cGluY2hHZXN0dXJlQmVnaW4oKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJl
VXBkYXRlKHpvb21JbkRlbHRhLCBJbnRQb2ludCg1MCwgNTApKTsKKworICAgICAgICAvLyBCZWNh
dXNlIHdlIGFyZSBwaW5jaCB6b29taW5nIGluLCB3ZSBzaG91bGRuJ3QgZ2V0IGFueSBzY3JvbGwg
b3IgcGFnZQorICAgICAgICAvLyBzY2FsZSBkZWx0YXMuCisgICAgICAgIE93blB0cjxDQ1Njcm9s
bEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRh
cygpOworICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIDEpOwor
ICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDB1KTsKKworICAg
ICAgICAvLyBPbmNlIHRoZSBnZXN0dXJlIGVuZHMsIHdlIGdldCB0aGUgZmluYWwgc2Nyb2xsIGFu
ZCBwYWdlIHNjYWxlIHZhbHVlcy4KKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlRW5k
KCk7CisgICAgICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFz
KCk7CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgem9vbUlu
RGVsdGEpOworICAgICAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xsTGF5ZXIt
PmlkKCksIEludFNpemUoMjUsIDI1KSk7CisgICAgfQorCisgICAgLy8gUGluY2ggem9vbSBvdXQu
CisgICAgeworICAgICAgICAvLyBTdGFydCBhIHBpbmNoIG91dCBnZXN0dXJlIGF0IHRoZSBib3R0
b20gcmlnaHQgY29ybmVyIG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgICAgY29uc3QgZmxvYXQgem9v
bU91dERlbHRhID0gMC43NTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9y
QW5kTGltaXRzKDEsIG1pblBhZ2VTY2FsZSwgbWF4UGFnZVNjYWxlKTsKKyAgICAgICAgbV9ob3N0
SW1wbC0+cGluY2hHZXN0dXJlQmVnaW4oKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0
dXJlVXBkYXRlKHpvb21PdXREZWx0YSwgSW50UG9pbnQoNTAsIDUwKSk7CisKKyAgICAgICAgLy8g
U2luY2Ugd2UgYXJlIHBpbmNoIHpvb21pbmcgb3V0LCB3ZSBzaG91bGQgZ2V0IGFuIHVwZGF0ZSB0
byB6b29tIGFsbAorICAgICAgICAvLyB0aGUgd2F5IG91dCB0byB0aGUgbWluaW11bSBwYWdlIHNj
YWxlLgorICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1f
aG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNjcm9s
bEluZm8tPnBhZ2VTY2FsZURlbHRhLCBtaW5QYWdlU2NhbGUpOworICAgICAgICBleHBlY3RDb250
YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xsTGF5ZXItPmlkKCksIEludFNpemUoMCwgMCkpOworCisg
ICAgICAgIC8vIE9uY2UgdGhlIGdlc3R1cmUgZW5kcywgd2UgZ2V0IHRoZSBmaW5hbCBzY3JvbGwg
YW5kIHBhZ2Ugc2NhbGUgdmFsdWVzLgorICAgICAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVF
bmQoKTsKKyAgICAgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0
YXMoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCB6b29t
T3V0RGVsdGEpOworICAgICAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xsTGF5
ZXItPmlkKCksIEludFNpemUoOCwgOCkpOworICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBpbmhpYml0U2Nyb2xsQW5kUGFnZVNjYWxlVXBkYXRlc1doaWxlQW5pbWF0
aW5nUGFnZVNjYWxlKQoreworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6
ZSgxMDAsIDEwMCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUw
LCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAg
ICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290U2Nyb2xsTGF5ZXIo
KTsKKyAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOworCisgICAgY29uc3QgZmxvYXQgbWluUGFnZVNj
YWxlID0gMC41LCBtYXhQYWdlU2NhbGUgPSA0OworICAgIGNvbnN0IGRvdWJsZSBzdGFydFRpbWUg
PSAxOworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDAuMTsKKyAgICBjb25zdCBkb3VibGUg
aGFsZndheVRocm91Z2hBbmltYXRpb24gPSBzdGFydFRpbWUgKyBkdXJhdGlvbiAvIDI7CisgICAg
Y29uc3QgZG91YmxlIGVuZFRpbWUgPSBzdGFydFRpbWUgKyBkdXJhdGlvbjsKKworICAgIC8vIFN0
YXJ0IGEgcGFnZSBzY2FsZSBhbmltYXRpb24uCisgICAgY29uc3QgZmxvYXQgcGFnZVNjYWxlRGVs
dGEgPSAyOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCBt
aW5QYWdlU2NhbGUsIG1heFBhZ2VTY2FsZSk7CisgICAgbV9ob3N0SW1wbC0+c3RhcnRQYWdlU2Nh
bGVBbmltYXRpb24oSW50U2l6ZSg1MCwgNTApLCBmYWxzZSwgcGFnZVNjYWxlRGVsdGEsIHN0YXJ0
VGltZSwgZHVyYXRpb24pOworCisgICAgLy8gV2Ugc2hvdWxkIGltbWVkaWF0ZWx5IGdldCB0aGUg
ZmluYWwgem9vbSBhbmQgc2Nyb2xsIHZhbHVlcyBmb3IgdGhlCisgICAgLy8gYW5pbWF0aW9uLgor
ICAgIG1faG9zdEltcGwtPmFuaW1hdGUoaGFsZndheVRocm91Z2hBbmltYXRpb24sIGhhbGZ3YXlU
aHJvdWdoQW5pbWF0aW9uKTsKKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xs
SW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBFWFBFQ1RfRVEo
c2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIHBhZ2VTY2FsZURlbHRhKTsKKyAgICBleHBlY3RD
b250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xsTGF5ZXItPmlkKCksIEludFNpemUoMjUsIDI1KSk7
CisKKyAgICAvLyBTY3JvbGxpbmcgZHVyaW5nIHRoZSBhbmltYXRpb24gaXMgaWdub3JlZC4KKyAg
ICBjb25zdCBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9z
dEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQo
KTsKKworICAgIC8vIFRoZSBmaW5hbCBwYWdlIHNjYWxlIGFuZCBzY3JvbGwgZGVsdGFzIHNob3Vs
ZCBtYXRjaCB3aGF0IHdlIGdvdAorICAgIC8vIGVhcmxpZXIuCisgICAgbV9ob3N0SW1wbC0+YW5p
bWF0ZShlbmRUaW1lLCBlbmRUaW1lKTsKKyAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJv
Y2Vzc1Njcm9sbERlbHRhcygpOworICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVE
ZWx0YSwgcGFnZVNjYWxlRGVsdGEpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLCBz
Y3JvbGxMYXllci0+aWQoKSwgSW50U2l6ZSgyNSwgMjUpKTsKK30KKwogY2xhc3MgRGlkRHJhd0No
ZWNrTGF5ZXIgOiBwdWJsaWMgQ0NUaWxlZExheWVySW1wbCB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8RGlkRHJhd0NoZWNrTGF5ZXI+IGNyZWF0ZShpbnQgaWQpIHsgcmV0dXJuIGFk
b3B0UHRyKG5ldyBEaWREcmF3Q2hlY2tMYXllcihpZCkpOyB9CkBAIC02NTUsNiArODA1LDI5OSBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1doZW5B
bmltYXRpb25Vc2VzQ2hlY2tlcmJvYXJkKQogICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXll
cnMoZnJhbWUpOwogfQogCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJv
b3RJZ25vcmVkKQoreworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8gU2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQg
YmVjYXVzZSBsYXllciBpcyBub3Qgc2Nyb2xsYWJsZS4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1w
bC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVl
bCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFM
U0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29t
bWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxOb25Db21w
b3NpdGVkUm9vdCkKK3sKKyAgICAvLyBUZXN0IHRoZSBjb25maWd1cmF0aW9uIHdoZXJlIGEgbm9u
LWNvbXBvc2l0ZWQgcm9vdCBsYXllciBpcyBlbWJlZGRlZCBpbiBhCisgICAgLy8gc2Nyb2xsYWJs
ZSBvdXRlciBsYXllci4KKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IGNvbnRlbnRMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7
CisgICAgY29udGVudExheWVyLT5zZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUpOworICAg
IGNvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNvbnRlbnRMYXllci0+
c2V0UG9zaXRpb24oSW50UG9pbnQoNSwgNSkpOworICAgIGNvbnRlbnRMYXllci0+c2V0Qm91bmRz
KHN1cmZhY2VTaXplKTsKKyAgICBjb250ZW50TGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6
ZShzdXJmYWNlU2l6ZS53aWR0aCgpICogMiwgc3VyZmFjZVNpemUuaGVpZ2h0KCkgKiAyKSk7CisK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgwKTsKKyAgICBzY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBzY3JvbGxM
YXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oc3VyZmFjZVNpemUpOworICAgIHNjcm9sbExheWVy
LT5hZGRDaGlsZChjb250ZW50TGF5ZXIucmVsZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNl
dFJvb3RMYXllcihzY3JvbGxMYXllci5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZp
ZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmRE
cmF3RnJhbWUoKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQ
b2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUo
MCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRSht
X2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7
Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0Nv
bW1pdEFuZFJlZHJhdykKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBy
b290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwg
c3VyZmFjZVNpemUpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNl
KCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEVYUEVDVF9FUSht
X2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1f
aG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3Jv
bGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVD
VF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hpbGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgx
MCwgMTApOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVh
dGUoMCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0
UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFj
ZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAg
ICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBpbnB1dCBjb29yZGluYXRl
IGlzIG91dHNpZGUgdGhlIGxheWVyIGJvdW5kYXJpZXMuCisgICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Oldo
ZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9G
QUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RD
b21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nl
c0JhY2tmYWNpbmdDaGlsZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7Cisg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoc3VyZmFjZVNpemUpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
OworICAgIG1hdHJpeC5yb3RhdGUzZCgxODAsIDAsIDApOworICAgIGNoaWxkLT5zZXRUcmFuc2Zv
cm0obWF0cml4KTsKKyAgICBjaGlsZC0+c2V0RG91YmxlU2lkZWQoZmFsc2UpOworCisgICAgcm9v
dC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5
ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CisKKyAgICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBzY3Jv
bGxhYmxlIGxheWVyIGlzIG5vdCBmYWNpbmcgdGhlIHZpZXdlciBhbmQgdGhlcmUgaXMKKyAgICAv
LyBub3RoaW5nIHNjcm9sbGFibGUgYmVoaW5kIGl0LgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBs
LT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVs
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxT
RShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21t
aXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJsb2NrZWRC
eUNvbnRlbnRMYXllcikKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiBjb250ZW50TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIo
MCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIGNvbnRlbnRMYXllci0+c2V0
U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2Ny
b2xsYWJsZShmYWxzZSk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0g
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsK
KyAgICBzY3JvbGxMYXllci0+YWRkQ2hpbGQoY29udGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBt
X2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVM
YXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGxpbmcgZmFpbHMgYmVj
YXVzZSB0aGUgY29udGVudCBsYXllciBpcyBhc2tpbmcgdG8gYmUgc2Nyb2xsZWQgb24gdGhlIG1h
aW4gdGhyZWFkLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2lu
dCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKK3sKKyAgICBJ
bnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXll
cihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZh
Y2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisg
ICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBleHBlY3RlZFNjcm9s
bERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9z
dEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEo
bV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBt
X2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xs
RW5kKCk7CisKKyAgICAvLyBTZXQgbmV3IHBhZ2Ugc2NhbGUgZnJvbSBtYWluIHRocmVhZC4KKyAg
ICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCBwYWdl
U2NhbGUsIHBhZ2VTY2FsZSk7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRo
ZSBzY3JvbGwgZGVsdGEuCisgICAgZXhwZWN0ZWRTY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGUp
OworICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1w
bC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZv
LmdldCgpLCAwLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFu
Z2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9sbCk7
CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBkZWx0YSByZW1haW5zIGNvbnN0YW50IGJlY2F1c2Ug
dGhlIGltcGwgdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnJvb3RMYXllcigpLT5wYWdlU2NhbGVEZWx0YSgpLCAxKTsKK30KKworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFk
KQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBmbG9hdCBwYWdlU2Nh
bGUgPSAyOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVM
YXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+
c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoc3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFu
ZExpbWl0cygxLCAxLCBwYWdlU2NhbGUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5k
RHJhd0ZyYW1lKCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBJbnRT
aXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIEludFNpemUgZXhwZWN0
ZWRNYXhTY3JvbGwobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCkp
OworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBt
X2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgIC8vIFNldCBuZXcgcGFnZSBzY2FsZSBvbiBp
bXBsIHRocmVhZCBieSBwaW5jaGluZy4KKyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVCZWdp
bigpOworICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZVVwZGF0ZShwYWdlU2NhbGUsIEludFBv
aW50KCkpOworICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZUVuZCgpOworCisgICAgLy8gVGhl
IHNjcm9sbCBkZWx0YSBpcyBub3Qgc2NhbGVkIGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIGRpZCBu
b3Qgc2NhbGUuCisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBt
X2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNj
cm9sbEluZm8uZ2V0KCksIDAsIGV4cGVjdGVkU2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNj
cm9sbCByYW5nZSBzaG91bGQgYWxzbyBoYXZlIGJlZW4gdXBkYXRlZC4KKyAgICBFWFBFQ1RfRVEo
bV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4
U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxlIGRlbHRhIHNob3VsZCBtYXRjaCB0aGUg
bmV3IHNjYWxlIG9uIHRoZSBpbXBsIHNpZGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJv
b3RMYXllcigpLT5wYWdlU2NhbGVEZWx0YSgpLCBwYWdlU2NhbGUpOworfQorCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlT25NYWlu
VGhyZWFkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIC8vIEFsc28g
bWFyayB0aGUgcm9vdCBzY3JvbGxhYmxlIHNvIGl0IGJlY29tZXMgdGhlIHJvb3Qgc2Nyb2xsIGxh
eWVyLgorICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hv
c3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIEludFNpemUg
c2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3Jv
bGxEZWx0YSk7CisgICAgSW50U2l6ZSBleHBlY3RlZE1heFNjcm9sbChjaGlsZC0+bWF4U2Nyb2xs
UG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVs
dGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworCisgICAgZmxvYXQgcGFnZVNjYWxl
ID0gMjsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNj
YWxlLCAxLCBwYWdlU2NhbGUpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0
aGUgc2Nyb2xsIGRlbHRhLgorICAgIGV4cGVjdGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxl
KTsKKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdElt
cGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5m
by5nZXQoKSwgMSwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJh
bmdlIHNob3VsZCBub3QgaGF2ZSBjaGFuZ2VkLgorICAgIEVYUEVDVF9FUShjaGlsZC0+bWF4U2Ny
b2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ugc2Nh
bGUgZGVsdGEgcmVtYWlucyBjb25zdGFudCBiZWNhdXNlIHRoZSBpbXBsIHRocmVhZCBkaWQgbm90
IHNjYWxlLgorICAgIEVYUEVDVF9FUShjaGlsZC0+cGFnZVNjYWxlRGVsdGEoKSwgMSk7Cit9CisK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdCkK
K3sKKyAgICAvLyBTY3JvbGwgYSBjaGlsZCBsYXllciBiZXlvbmQgaXRzIG1heGltdW0gc2Nyb2xs
IHJhbmdlIGFuZCBtYWtlIHN1cmUgdGhlCisgICAgLy8gcGFyZW50IGxheWVyIGlzIHNjcm9sbGVk
IG9uIHRoZSBheGlzIG9uIHdoaWNoIHRoZSBjaGlsZCB3YXMgdW5hYmxlIHRvCisgICAgLy8gc2Ny
b2xsLgorICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwg
c3VyZmFjZVNpemUpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gY3Jl
YXRlU2Nyb2xsYWJsZUxheWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAg
ICBncmFuZENoaWxkLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCA1KSk7CisKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0
UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24o
SW50UG9pbnQoMywgMCkpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2Uo
KSk7CisKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmll
d3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERy
YXdGcmFtZSgpOworICAgIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgtMywgLTcpOwor
ICAgICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGFydGVkKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwor
ICAgICAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgICAgICBPd25QdHI8Q0NTY3Jv
bGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0
YXMoKTsKKworICAgICAgICAvLyBUaGUgZ3JhbmQgY2hpbGQgc2hvdWxkIGhhdmUgc2Nyb2xsZWQg
dXAgdG8gaXRzIGxpbWl0LgorICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBs
LT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgQ0NMYXllckltcGwq
IGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgZXhwZWN0
Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGdyYW5kQ2hpbGQtPmlkKCksIEludFNpemUoMCwg
LTUpKTsKKworICAgICAgICAvLyBUaGUgY2hpbGQgc2hvdWxkIGhhdmUgb25seSBzY3JvbGxlZCBv
biB0aGUgb3RoZXIgYXhpcy4KKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0
KCksIGNoaWxkLT5pZCgpLCBJbnRTaXplKC0zLCAwKSk7CisgICAgfQorfQorCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEV2ZW50QnViYmxpbmcpCit7CisgICAgLy8gV2hl
biB3ZSB0cnkgdG8gc2Nyb2xsIGEgbm9uLXNjcm9sbGFibGUgY2hpbGQgbGF5ZXIsIHRoZSBzY3Jv
bGwgZGVsdGEKKyAgICAvLyBzaG91bGQgYmUgYXBwbGllZCB0byBvbmUgb2YgaXRzIGFuY2VzdG9y
cyBpZiBwb3NzaWJsZS4KKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9p
bnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0g
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsK
KworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICByb290LT5hZGRDaGlsZChj
aGlsZC5yZWxlYXNlKCkpOworCisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVs
ZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwor
ICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgeworICAgICAg
ICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDQpOworICAgICAgICBFWFBFQ1RfRVEobV9ob3N0SW1w
bC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVl
bCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgICAgICBtX2hvc3RJbXBsLT5zY3JvbGxF
bmQoKTsKKworICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9
IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKworICAgICAgICAvLyBPbmx5IHRo
ZSByb290IHNob3VsZCBoYXZlIHNjcm9sbGVkLgorICAgICAgICBBU1NFUlRfRVEoc2Nyb2xsSW5m
by0+c2Nyb2xscy5zaXplKCksIDF1KTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbElu
Zm8uZ2V0KCksIG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5pZCgpLCBzY3JvbGxEZWx0YSk7Cisg
ICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJlZm9yZVJl
ZHJhdykKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUp
LCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNl
U2l6ZSk7CisKKyAgICAvLyBEcmF3IG9uZSBmcmFtZSBhbmQgdGhlbiBpbW1lZGlhdGVseSByZWJ1
aWxkIHRoZSBsYXllciB0cmVlIHRvIG1pbWljIGEgdHJlZSBzeW5jaHJvbml6YXRpb24uCisgICAg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBtX2hvc3RJbXBsLT5k
ZXRhY2hMYXllclRyZWUoKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoY3JlYXRlU2Ny
b2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisKKyAgICAv
LyBTY3JvbGxpbmcgc2hvdWxkIHN0aWxsIHdvcmsgZXZlbiB0aG91Z2ggd2UgZGlkIG5vdCBkcmF3
IHlldC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwg
NSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGFydGVkKTsKK30KKwogY2xhc3MgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0OiBwdWJs
aWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKICAgICBCbGVuZFN0YXRlVHJh
Y2tlckNvbnRleHQoKSA6IG1fYmxlbmQoZmFsc2UpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggYWFjZDlhNWQ2
OTBmMzIxNzRiMWUyZTlhMmUyMWJiYzk3ZWE2ZDBjNi4uYTY1N2FiYjU3NmZkNTEzMDJlNGJlOTE2
ODM0ZTczYjFkOTRhMjM5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yMjAwLDQgKzIyMDAsNzggQEAgcHJpdmF0
ZToKIAogU0lOR0xFX0FORF9NVUxUSV9USFJFQURfVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RM
YXllckFkZGVkV2l0aEFuaW1hdGlvbikKIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9s
bENoaWxkTGF5ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCwgcHVibGljIExheWVyQ2hy
b21pdW1TY3JvbGxEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNj
cm9sbENoaWxkTGF5ZXIoKQorICAgICAgICA6IG1fc2Nyb2xsQW1vdW50KDIsIDEpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKSBPVkVSUklERQorICAgIHsKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsK
KyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZtX21vY2tEZWxlZ2F0ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRCb3VuZHMo
SW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldElzRHJhd2Fi
bGUodHJ1ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUp
OworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6
ZSgxMDAsIDEwMCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRD
aGlsZChtX3Jvb3RTY3JvbGxMYXllcik7CisgICAgICAgIG1fY2hpbGRMYXllciA9IENvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGUoJm1fbW9ja0RlbGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZExh
eWVyLT5zZXRMYXllclNjcm9sbERlbGVnYXRlKHRoaXMpOworICAgICAgICBtX2NoaWxkTGF5ZXIt
PnNldEJvdW5kcyhJbnRTaXplKDUwLCA1MCkpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldElz
RHJhd2FibGUodHJ1ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEw
MCwgMTAwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5
ZXIpOworICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKSBP
VkVSUklERQorICAgIHsKKyAgICAgICAgbV9yZXBvcnRlZFNjcm9sbEFtb3VudCA9IHNjcm9sbERl
bHRhOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIElu
dFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7Cisg
ICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiArIHNj
cm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpIE9WRVJSSURFCisgICAgeworICAgICAgICBF
WFBFQ1RfRVEobV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkp
OworICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3Jv
bGxQb3NpdGlvbigpLCBJbnRQb2ludCgpICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBp
bXBsKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0g
MSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKGltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUs
IDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3Vu
dCk7CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChp
bXBsLT5mcmFtZU51bWJlcigpID09IDIpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpIE9WRVJSSURFCisgICAgeworICAgICAgICBF
WFBFQ1RfRVEobV9zY3JvbGxBbW91bnQsIG1fcmVwb3J0ZWRTY3JvbGxBbW91bnQpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50OworICAgIEludFNp
emUgbV9yZXBvcnRlZFNjcm9sbEFtb3VudDsKKyAgICBNb2NrQ29udGVudExheWVyRGVsZWdhdGUg
bV9tb2NrRGVsZWdhdGU7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290U2Nyb2xsTGF5ZXI7Cit9OworCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQor
eworICAgIHJ1blRlc3QodHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsVGVzdC5jcHAKaW5kZXggOTJmMDA2MTg0MTQ3OTU2ZTEwMTlmYzY5MDE1ZjYz
OWU0ODk0ZjMzMS4uZDViNjhhODY3Zjc4MmNjNjdmZDFiN2JjMjk2MjA1MjkzNGZkNzA5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcApAQCAtMjAyLDE0ICsyMDIsMTQgQEAg
VEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNjcm9sbFN0
YXJ0ZWQpCiAgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CiB9
CiAKLVRFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVTY3Jv
bGxGYWlsZWQpCitURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0
dXJlU2Nyb2xsT25NYWluVGhyZWFkKQogewogICAgIC8vIFdlIHNob3VsZCBzZW5kIGFsbCBldmVu
dHMgdG8gdGhlIHdpZGdldCBmb3IgdGhpcyBnZXN0dXJlLgogICAgIG1fZXhwZWN0ZWREaXNwb3Np
dGlvbiA9IERpZE5vdEhhbmRsZTsKICAgICBWRVJJRllfQU5EX1JFU0VUX01PQ0tTKCk7CiAKICAg
ICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4oOjp0
ZXN0aW5nOjpfLCA6OnRlc3Rpbmc6Ol8pKQotICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0
dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAg
ICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsT25NYWluVGhyZWFkKSk7CiAKICAgICBnZXN0dXJlLnR5cGUgPSBXZWJJbnB1dEV2
ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW47CiAgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0
RXZlbnQoZ2VzdHVyZSk7CkBAIC0zMDYsNyArMzA2LDcgQEAgVEVTVF9GKFdlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZUZsaW5nRmFpbGVkKQogICAgIFZFUklGWV9BTkRf
UkVTRVRfTU9DS1MoKTsKIAogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xp
ZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKLSAgICAgICAgLldpbGxP
bmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
RmFpbGVkKSk7CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCkpOwogCiAgICAgZ2VzdHVyZS50
eXBlID0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nU3RhcnQ7CiAgICAgbV9pbnB1dEhhbmRs
ZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CkBAIC0zODcsNyArMzg3LDcgQEAgVEVTVF9G
KFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZUZsaW5nQW5pbWF0ZXMp
CiAgICAgLy8gdHJhbnNmZXJyZWQgdG8gdGhlIG1haW4gdGhyZWFkLgogICAgIEVYUEVDVF9DQUxM
KG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY2hlZHVsZUFuaW1hdGlvbigpKTsKICAgICBF
WFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4odGVzdGlu
Zzo6XywgdGVzdGluZzo6XykpCi0gICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2Vi
Q29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkpOworICAgICAgICAuV2ls
bE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxPbk1haW5UaHJlYWQpKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNs
aWVudCwgc2Nyb2xsQnkodGVzdGluZzo6XykpLlRpbWVzKDApOwogICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxFbmQoKSkuVGltZXMoMCk7CiAKQEAgLTQ2
OSw3ICs0NjksNyBAQCBURVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBn
ZXN0dXJlRmxpbmdUcmFuc2ZlclJlc2V0cykKICAgICAvLyB0cmFuc2ZlcnJlZCB0byB0aGUgbWFp
biB0aHJlYWQuCiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNj
aGVkdWxlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVy
Q2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKLSAgICAgICAgLldp
bGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsRmFpbGVkKSk7CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCkpOwogICAgIEVYUEVDVF9D
QUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCeSh0ZXN0aW5nOjpfKSkuVGlt
ZXMoMCk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9s
bEVuZCgpKS5UaW1lcygwKTsKIApAQCAtNTQ2LDcgKzU0Niw3IEBAIFRFU1RfRihXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVGbGluZ1RyYW5zZmVyUmVzZXRzKQogICAg
IC8vIFRoZW4gYWJvcnQgdGhlIHNlY29uZCBmbGluZy4KICAgICBFWFBFQ1RfQ0FMTChtX21vY2tD
Q0lucHV0SGFuZGxlckNsaWVudCwgc2NoZWR1bGVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0NB
TEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRl
c3Rpbmc6Ol8pKQotICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAgICAgLldpbGxPbmNlKHRl
c3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWlu
VGhyZWFkKSk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNj
cm9sbEJ5KHRlc3Rpbmc6Ol8pKS5UaW1lcygwKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lu
cHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsRW5kKCkpLlRpbWVzKDApOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147615</attachid>
            <date>2012-06-14 10:50:55 -0700</date>
            <delta_ts>2012-06-14 14:25:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120614185054.patch</filename>
            <type>text/plain</type>
            <size>85025</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmViNmVhZjI4Y2UzMTVm
OGU4ZjJlYjlmMzI2NzczNDFmM2Y0YTIxNC4uMmQxNDk4YjBmMjlmZDE4NjBmMWZhNjlkYjc0ODk1
ZDMzNjQ0ZjEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0wNi0xNCAgU2Ft
aSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEFsbG93IHNjcm9sbGluZyBub24tcm9vdCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZC4KKyAgICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xs
ZWQgQ0NMYXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgbWFpbiB0aHJl
YWQuCisKKyAgICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZl
biBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9s
bGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgTGF5ZXIgaGl0IHRlc3RpbmcgY29k
ZSBieSBTaGF3biBTaW5naC4KKworICAgICAgICBBZGRlZCBuZXcgdW5pdCB0ZXN0cyB0byB2ZXJp
ZnkgbGF5ZXIgc2Nyb2xsaW5nIGJlaGF2aW9yOgorCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LnZlcmlmeVN1YnRyZWVTZWFyY2gKKyAgICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNsZWFyUm9vdFJlbmRlclN1cmZhY2VBbmRTY3JvbGwKKyAgICAgICAgICAg
IENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVz
V2hpbGVBbmltYXRpbmdQYWdlU2NhbGUKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVzV2hpbGVQaW5jaFpvb21pbmcKKyAg
ICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnJlcGxhY2VUcmVlV2hpbGVTY3JvbGxp
bmcKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbEJlZm9yZVJlZHJh
dworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQmxvY2tlZEJ5Q29u
dGVudExheWVyCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxDaGls
ZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZAorICAgICAgICAgICAgQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdAorICAgICAgICAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsRXZlbnRCdWJibGluZworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkCisg
ICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxNaXNzZXNDaGlsZAorICAg
ICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QK
KyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RBbmRDaGFuZ2VQ
YWdlU2NhbGVPbkltcGxUaHJlYWQKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LnNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQKKyAgICAgICAgICAgIEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RJZ25vcmVkCisgICAgICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxXaXRob3V0Um9vdExheWVyCisgICAgICAgICAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcgorICAgICAgICAgICAgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGxUZXN0Lmdlc3R1cmVTY3JvbGxPbk1haW5UaHJlYWQKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbEJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZTo6fkxheWVyQ2hyb21pdW1T
Y3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJTY3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6c29ydExheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbEFuZFNjYWxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVySW5TdWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVu
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRv
RHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRldGFjaExheWVyVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNj
YWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRl
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6ZW5zdXJlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjbGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjptYWtlU2Nyb2xsQW5kU2NhbGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sbGVjdFNjcm9sbERlbHRhcyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVQYWdlU2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhclJlbmRlclN1cmZhY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6Cisg
ICAgICAgIChGcmFtZURhdGEpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290U2Nyb2xsTGF5ZXIpOgorCiAy
MDEyLTA2LTEzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgV29ya2VyIHRlYXItZG93biBjYW4gcmUtZW50ZXIgSlNDIGR1cmluZyBHQyBmaW5hbGl6
YXRpb24gcHQuIDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNmNiZjY4MzU0YzQwNjAy
OGZjZWRlNWFiMjg1NzIwNTg0YzlkZmViNy4uNjYxOGFiZmFiOTg3MzY2NmMyYjQ0MWE4NjUyMDkz
YzcxNWQ1OGVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAor
MjAxMi0wNi0xNCAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIEFsbG93IHNjcm9sbGluZyBub24tcm9vdCBsYXllcnMgaW4gdGhlIGNv
bXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MzM1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5ldyB1bml0IHRlc3RzIHRvIHZlcmlmeSBsYXllciBzY3JvbGxpbmcgYmVoYXZpb3Ig
YW5kIHRoZSBhc3NvY2lhdGVkCisgICAgICAgIHV0aWxpdHkgZnVuY3Rpb25zLgorCisgICAgICAg
ICogc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnRJbnRlcm5h
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5k
bGVHZXN0dXJlRmxpbmcpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QuY3BwOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6TW9j
a0NvbnRlbnRMYXllckRlbGVnYXRlOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6
OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGls
ZExheWVyOjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpkcmF3TGF5ZXJzT25D
Q1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExh
eWVyOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToK
KyAgICAgICAgKiB0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpURVNUX0YpOgorCiAyMDEyLTA2LTE0ICBBbGV4YW5kZXIgUGF2bG92
ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBVbnJldmlld2Vk
LCBidWlsZCBmaXggZm9yIE1hYyAxMC41CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGJjODJm
ZWIwZGY0M2Y3YjQ4NWYwMjE5NzZiMjI3NjFjZDYxZDE4MjUuLjY1MTk3ZjA4ZWQ5YzdhM2I3MDAz
ZDVlOTUwMWI4OWRmNGY4NGZiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC05Myw2ICs5
Myw3IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwgbV9zY3JlZW5TcGFj
ZVRyYW5zZm9ybUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEuMCkK
ICAgICAsIG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKQorICAgICwgbV9sYXllclNjcm9sbERl
bGVnYXRlKDApCiB7CiB9CiAKQEAgLTM5NCw2ICszOTUsMTQgQEAgdm9pZCBMYXllckNocm9taXVt
OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAg
c2V0TmVlZHNDb21taXQoKTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQ
b3NpdGlvbihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikKK3sKKyAgICBpZiAobV9t
YXhTY3JvbGxQb3NpdGlvbiA9PSBtYXhTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsKKyAgICBzZXROZWVk
c0NvbW1pdCgpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbGFibGUoYm9vbCBz
Y3JvbGxhYmxlKQogewogICAgIGlmIChtX3Njcm9sbGFibGUgPT0gc2Nyb2xsYWJsZSkKQEAgLTQy
Nyw2ICs0MzYsMTMgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbihjb25zdCBSZWdpb24mIHJlZ2lvbikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2
b2lkIExheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQor
eworICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7
CisgICAgaWYgKG1fbGF5ZXJTY3JvbGxEZWxlZ2F0ZSkKKyAgICAgICAgbV9sYXllclNjcm9sbERl
bGVnYXRlLT5kaWRTY3JvbGwoc2Nyb2xsRGVsdGEpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06
OnNldERyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoYm9vbCBjaGVja2VyYm9hcmQpCiB7
CiAgICAgaWYgKG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyA9PSBjaGVja2VyYm9h
cmQpCkBAIC01MTMsNiArNTI5LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxh
eWVyVmlzaWJsZVJlY3QobV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk7CiAgICAg
bGF5ZXItPnNldFByZXNlcnZlczNEKHByZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3Jv
bGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9z
aXRpb24obV9tYXhTY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNm
b3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwogICAgIGlmICghdHJhbnNmb3JtSXNBbmltYXRpbmco
KSkKICAgICAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmgKaW5kZXggZTMzYzJmZGE4OGE3ODRmNTUzMzYxYWJjM2Y4ZTE1YmU5ODc1YzBhNS4uNDk3
YTQwMzE5NTE3MzdjMWY3NWY5ODUwNDAwODZhODU1OTM5NjcxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aApAQCAtNjUsNiArNjUsMTUgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NUZXh0
dXJlVXBkYXRlcjsKIGNsYXNzIFNjcm9sbGJhckxheWVyQ2hyb21pdW07CiAKKy8vIERlbGVnYXRl
IGZvciBoYW5kbGluZyBzY3JvbGwgaW5wdXQgZm9yIGEgTGF5ZXJDaHJvbWl1bS4KK2NsYXNzIExh
eWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRp
ZFNjcm9sbChjb25zdCBJbnRTaXplJikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+
TGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRlKCkgeyB9Cit9OworCiAvLyBCYXNlIGNsYXNzIGZv
ciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9t
CiAvLyB0aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVk
PExheWVyQ2hyb21pdW0+LCBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQg
ewpAQCAtMTUxLDEyICsxNjAsMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRp
b24oY29uc3QgSW50UG9pbnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldE1heFNj
cm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3Jv
bGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKwogICAg
IHZvaWQgc2V0U2Nyb2xsYWJsZShib29sKTsKKyAgICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGFibGU7IH0KICAgICB2b2lkIHNldFNob3VsZFNjcm9sbE9uTWFpblRo
cmVhZChib29sKTsKICAgICB2b2lkIHNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoYm9vbCk7CiAg
ICAgY29uc3QgUmVnaW9uJiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpIHsgcmV0dXJuIG1fbm9u
RmFzdFNjcm9sbGFibGVSZWdpb247IH0KICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKGNvbnN0IFJlZ2lvbiYpOwogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25D
aGFuZ2VkKCkgeyBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCA9IHRydWU7IH0KKyAg
ICB2b2lkIHNldExheWVyU2Nyb2xsRGVsZWdhdGUoTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRl
KiBsYXllclNjcm9sbERlbGVnYXRlKSB7IG1fbGF5ZXJTY3JvbGxEZWxlZ2F0ZSA9IGxheWVyU2Ny
b2xsRGVsZWdhdGU7IH0KKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKIAogICAg
IHZvaWQgc2V0RHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyhib29sKTsKICAgICBib29s
IGRyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX2RyYXdD
aGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXM7IH0KQEAgLTMyNSw2ICszNDAsNyBAQCBwcml2YXRl
OgogICAgIC8vIFVzZXMgdGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fc2Np
c3NvclJlY3Q7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1f
bWF4U2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAgICAgYm9vbCBtX3No
b3VsZFNjcm9sbE9uTWFpblRocmVhZDsKICAgICBib29sIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVy
czsKQEAgLTM3Nyw2ICszOTMsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fY29udGVudHNTY2Fs
ZTsKIAogICAgIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSogbV9sYXllckFuaW1hdGlvbkRlbGVn
YXRlOworICAgIExheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZSogbV9sYXllclNjcm9sbERlbGVn
YXRlOwogfTsKIAogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Pjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZv
aWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCmluZGV4IDc2NjA4ZDlmYzFkMGRhMTM5YTQ5
MzBiYzUwNDdjMDhhZWI4YjJkZjQuLjc3ZGQyZGJjZjc0Yjc3ZjgwMjcxY2VjNGYyNWJhNzFjMDUw
ZmYyYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaApAQCAtNDUsMTIgKzQ1LDEyIEBAIGNs
YXNzIEludFNpemU7CiBjbGFzcyBDQ0lucHV0SGFuZGxlckNsaWVudCB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ0NJbnB1dEhhbmRsZXJDbGllbnQpOwogcHVibGljOgotICAgIGVudW0gU2Ny
b2xsU3RhdHVzIHsgU2Nyb2xsRmFpbGVkLCBTY3JvbGxTdGFydGVkLCBTY3JvbGxJZ25vcmVkIH07
CisgICAgZW51bSBTY3JvbGxTdGF0dXMgeyBTY3JvbGxPbk1haW5UaHJlYWQsIFNjcm9sbFN0YXJ0
ZWQsIFNjcm9sbElnbm9yZWQgfTsKICAgICBlbnVtIFNjcm9sbElucHV0VHlwZSB7IEdlc3R1cmUs
IFdoZWVsIH07CiAKICAgICAvLyBBdHRlbXB0IHRvIHN0YXJ0IHNjcm9sbGluZyBhIGxheWVyIGF0
IGEgZ2l2ZW4gcG9pbnQgaW4gd2luZG93CiAgICAgLy8gY29vcmRpbmF0ZXMuIFJldHVybnMgU2Ny
b2xsU3RhcnRlZCBpZiB0aGUgbGF5ZXIgYXQgdGhlIGNvb3JkaW5hdGVzIGNhbgotICAgIC8vIGJl
IHNjcm9sbGVkLCBTY3JvbGxGYWlsZWQgaWYgdGhlIHNjcm9sbCBldmVudCBzaG91bGQgaW5zdGVh
ZCBiZQorICAgIC8vIGJlIHNjcm9sbGVkLCBTY3JvbGxPbk1haW5UaHJlYWQgaWYgdGhlIHNjcm9s
bCBldmVudCBzaG91bGQgaW5zdGVhZCBiZQogICAgIC8vIGRlbGVnYXRlZCB0byB0aGUgbWFpbiB0
aHJlYWQsIG9yIFNjcm9sbElnbm9yZWQgaWYgdGhlcmUgaXMgbm90aGluZyB0bwogICAgIC8vIGJl
IHNjcm9sbGVkIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4KICAgICB2aXJ0dWFsIFNjcm9sbFN0
YXR1cyBzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYsIFNjcm9sbElucHV0VHlwZSkgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IGMxNTVhNDgwYjE2NzRhNTJlYTgyZGZkNjdjMGRh
MjViOGUyMzBhOTcuLmJmMjExYjRhMGUxMzU2MTgzMjQ0OThjYzYwZjViNDMxMjgzZGFjNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NNYXRoVXRp
bC5oIgogI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDU29saWRD
b2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0xODYs
NiArMTg3LDQwIEBAIHZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYg
c2Nyb2xsKQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRyZWUoKTsKIH0KIAor
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVySW1wbDo6dHJ5U2Nyb2xs
KGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsSW5wdXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgaWYgKHNob3VsZFNjcm9sbE9uTWFpblRo
cmVhZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllckltcGw6OnRyeVNj
cm9sbDogRmFpbGVkIHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCIpOworICAgICAgICByZXR1cm4g
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDsKKyAgICB9CisKKyAgICBp
ZiAoIXNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQwKCJjYyIsICJDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsOiBJZ25vcmVkIG5vbkludmVy
dGlibGVUcmFuc2Zvcm0iKTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJZ25vcmVkOworICAgIH0KKworICAgIGlmICghbm9uRmFzdFNjcm9sbGFibGVSZWdpb24o
KS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYm9vbCBjbGlwcGVkID0gZmFsc2U7CisgICAgICAgIEZs
b2F0UG9pbnQgaGl0VGVzdFBvaW50SW5Mb2NhbFNwYWNlID0gQ0NNYXRoVXRpbDo6cHJvamVjdFBv
aW50KHNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLCBGbG9hdFBvaW50KHZpZXdwb3J0
UG9pbnQpLCBjbGlwcGVkKTsKKyAgICAgICAgaWYgKCFjbGlwcGVkICYmIG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uKCkuY29udGFpbnMoZmxvb3JlZEludFBvaW50KGhpdFRlc3RQb2ludEluTG9jYWxT
cGFjZSkpKSB7CisgICAgICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJJbXBsOjp0
cnlTY3JvbGw6IEZhaWxlZCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiIpOworICAgICAgICAgICAg
cmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwg
JiYgaGF2ZVdoZWVsRXZlbnRIYW5kbGVycygpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiQ0NMYXllckltcGw6OnRyeVNjcm9sbDogRmFpbGVkIHdoZWVsRXZlbnRIYW5kbGVycyIpOwor
ICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDsK
KyAgICB9CisKKyAgICBpZiAoIXNjcm9sbGFibGUoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAo
ImNjIiwgIkNDTGF5ZXJJbXBsOjp0cnlTY3JvbGw6IElnbm9yZWQgbm90IHNjcm9sbGFibGUiKTsK
KyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworICAg
IH0KKworICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDsKK30K
KwogY29uc3QgSW50UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogewogICAg
IC8vIEZvcm0gdGhlIG1hdHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJz
IG9mIHRoZSBsYXllcidzCkBAIC0yMzgsNyArMjczLDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6ZHVt
cExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKIAogdm9p
ZCBzb3J0TGF5ZXJzKFZlY3RvcjxDQ0xheWVySW1wbCo+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9y
PENDTGF5ZXJJbXBsKj46Oml0ZXJhdG9yIGVuZCwgQ0NMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIp
CiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c29ydExheWVycyIs
IDAsIDApOworICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpz
b3J0TGF5ZXJzIik7CiAgICAgbGF5ZXJTb3J0ZXItPnNvcnQoZmlyc3QsIGVuZCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCmluZGV4IDcxODk5NjNhMDQzZmYyYWU2ODdjOGM3MDE0NmJiNTczYmIw
ZjlmODMuLmJkYjJiNzBkNTlhOWI4ZDgwYTk5OTBmNDY2MjI5M2JkYmQxYzU5Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiY2Mv
Q0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgImNjL0NDU2hh
cmVkUXVhZFN0YXRlLmgiCkBAIC0yMTgsNiArMjE5LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0
RHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyhib29sIGNoZWNrZXJib2FyZCkgeyBtX2Ry
YXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMgPSBjaGVja2VyYm9hcmQ7IH0KICAgICBib29s
IGRyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX2RyYXdD
aGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXM7IH0KIAorICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxTdGF0dXMgdHJ5U2Nyb2xsKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlKSBjb25zdDsKKwogICAgIGNvbnN0
IEludFJlY3QmIHZpc2libGVMYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVMYXll
clJlY3Q7IH0KICAgICB2b2lkIHNldFZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdmlz
aWJsZUxheWVyUmVjdCkgeyBtX3Zpc2libGVMYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0OyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGFiYTQ1NDQ3OTU1MWI3ZDEw
YmZhMWI1ZGE2YjFiNDI4NDFlZmUyMWEuLjI5OTBjNzM5ZmVkYjVkN2E2YmE1YzVlYjQ3ZTMwYTM2
Y2E4OThiNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjQyLDcgKzI0
Miw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQoQ0NM
YXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKIAotICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJlbGVhc2VSb290TGF5
ZXIoKSwgaG9zdEltcGwpKTsKKyAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5kZXRhY2hMYXll
clRyZWUoKSwgaG9zdEltcGwpKTsKIAogICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1h
dGlvbiBkdXJpbmcgdGhlIHRyZWUgc3luYy4gVGhpcyB3aWxsIGNhdXNlIGJvdGggbGF5ZXIgdHJl
ZSBob3N0cwogICAgIC8vIHRvIHZpc2l0IHRoZWlyIGNvbnRyb2xsZXJzLgpAQCAtNjE4LDE1ICs2
MTgsNDIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICBvY2NsdXNpb25UcmFja2VyLm92
ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhpcyk7CiB9CiAKK3N0YXRpYyBMYXllckNo
cm9taXVtKiBmaW5kRmlyc3RTY3JvbGxhYmxlTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7
CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPnNj
cm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNo
cm9taXVtKiBmb3VuZCA9IGZpbmRGaXJzdFNjcm9sbGFibGVMYXllcihsYXllci0+Y2hpbGRyZW4o
KVtpXS5nZXQoKSk7CisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3Vu
ZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAg
ICAvLyBGSVhNRTogcHVzaGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90
IGltcGxlbWVudGVkCi0gICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQorICAgIGlmICghbV9y
b290TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6
ZSgpID09IDEpOwotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Ny
b2xsRGVsdGE7Ci0gICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEs
IGluZm8ucGFnZVNjYWxlRGVsdGEpOworICAgIExheWVyQ2hyb21pdW0qIHJvb3RTY3JvbGxMYXll
ciA9IGZpbmRGaXJzdFNjcm9sbGFibGVMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgSW50
U2l6ZSByb290U2Nyb2xsRGVsdGE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZm8u
c2Nyb2xscy5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKG1fcm9vdExheWVyLmdldCgp
LCBpbmZvLnNjcm9sbHNbaV0ubGF5ZXJJZCk7CisgICAgICAgIGlmICghbGF5ZXIpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGxheWVyID09IHJvb3RTY3JvbGxMYXllcikKKyAg
ICAgICAgICAgIHJvb3RTY3JvbGxEZWx0YSArPSBpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGE7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyLT5zY3JvbGxCeShpbmZvLnNjcm9sbHNb
aV0uc2Nyb2xsRGVsdGEpOworICAgIH0KKyAgICBpZiAoIXJvb3RTY3JvbGxEZWx0YS5pc1plcm8o
KSB8fCBpbmZvLnBhZ2VTY2FsZURlbHRhICE9IDEpCisgICAgICAgIG1fY2xpZW50LT5hcHBseVNj
cm9sbEFuZFNjYWxlKHJvb3RTY3JvbGxEZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVMaW1pdGVyKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oCmluZGV4IGU1ZTRmZDlhMmMyMzgyYjllOTI1Y2E3OTQ5ODU5Mzc3MTY4MjI5ZDkuLmU1YTRm
ZWM5YzE1NmU0ZjUxMDE5ZTZmNjZiZjZhMThjODYwNjNiMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC01Miw2ICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBib29sIHJlbmRlclN1cmZhY2VDb250
cmlidXRlc1RvVGFyZ2V0KExheWVyVHlwZSosIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CiAK
KyAgICAvLyBSZXR1cm5zIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgaWYgb25lIGV4aXN0cyBp
biB0aGUgc3VidHJlZSBzdGFydGluZworICAgIC8vIGZyb20gdGhlIGdpdmVuIHJvb3QgbGF5ZXIg
KGluY2x1ZGluZyBtYXNrIGFuZCByZXBsaWNhIGxheWVycykuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlPiBzdGF0aWMgTGF5ZXJUeXBlKiBmaW5kTGF5ZXJJblN1YnRyZWUoTGF5ZXJU
eXBlKiByb290TGF5ZXIsIGludCBsYXllcklkKTsKKwogICAgIHN0cnVjdCBTY3JvbGxVcGRhdGVJ
bmZvIHsKICAgICAgICAgaW50IGxheWVySWQ7CiAgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGE7
CkBAIC03Nyw2ICs4MSwyNSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3Vy
ZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiBsYXllciwgaQogICAgIHJldHVybiBs
YXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5pZCgpICE9IHRhcmdldFN1cmZhY2VMYXll
cklEOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CitMYXllclR5cGUqIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKExheWVyVHlwZSogcm9vdExheWVy
LCBpbnQgbGF5ZXJJZCkKK3sKKyAgICBpZiAocm9vdExheWVyLT5pZCgpID09IGxheWVySWQpCisg
ICAgICAgIHJldHVybiByb290TGF5ZXI7CisKKyAgICBpZiAocm9vdExheWVyLT5tYXNrTGF5ZXIo
KSAmJiByb290TGF5ZXItPm1hc2tMYXllcigpLT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJl
dHVybiByb290TGF5ZXItPm1hc2tMYXllcigpOworCisgICAgaWYgKHJvb3RMYXllci0+cmVwbGlj
YUxheWVyKCkgJiYgcm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKS0+aWQoKSA9PSBsYXllcklkKQor
ICAgICAgICByZXR1cm4gcm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChMYXllclR5cGUqIGZvdW5kID0gZmluZExheWVySW5TdWJ0cmVlKHJvb3RMYXllci0+
Y2hpbGRyZW4oKVtpXS5nZXQoKSwgbGF5ZXJJZCkpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA2NWY4NWZm
ZmFmNDJkNDQzNDdhNzRjZTM2N2U0M2UxYmFlMmIwM2ViLi40MmYzNzRmNTgyZWNlNmJiODI3YTIy
ZjNiMTA5NjFkYWVkNzc2Y2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcApAQCAtMTE0LDcgKzExNCw5IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVl
SG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlCiAgICAgOiBt
X2NsaWVudChjbGllbnQpCiAgICAgLCBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9m
cmFtZU51bWJlcigwKQotICAgICwgbV9zY3JvbGxMYXllckltcGwoMCkKKyAgICAsIG1fcm9vdFNj
cm9sbExheWVySW1wbCgwKQorICAgICwgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwoMCkK
KyAgICAsIG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1RyZWUoLTEpCiAgICAgLCBtX3Nl
dHRpbmdzKHNldHRpbmdzKQogICAgICwgbV92aXNpYmxlKHRydWUpCiAgICAgLCBtX3NvdXJjZUZy
YW1lQ2FuQmVEcmF3bih0cnVlKQpAQCAtMTM3LDcgKzEzOSw3IEBAIENDTGF5ZXJUcmVlSG9zdElt
cGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5
ZXJUcmVlCiBDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpCiB7CiAg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKSIsIHRoaXMsIDApOworICAg
IFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9z
dEltcGwoKSIpOwogCiAgICAgaWYgKG1fcm9vdExheWVySW1wbCkKICAgICAgICAgY2xlYXJSZW5k
ZXJTdXJmYWNlcygpOwpAQCAtMTgxLDEwICsxODMsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjphbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSkK
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25z
dCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNj
YWxlLCBkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgaWYgKCFtX3Nj
cm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9s
bERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jv
b3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPnNjcm9sbERlbHRhKCkpOwogICAgIHNjcm9sbFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVs
dGEpOwogICAgIGZsb2F0IHNjYWxlVG90YWwgPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVs
dGE7CiAgICAgSW50U2l6ZSBzY2FsZWRDb250ZW50U2l6ZSA9IGNvbnRlbnRTaXplKCk7CkBAIC0y
MzQsNiArMjM2LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFs
bFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLAogdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fcm9vdExheWVySW1wbCk7CiAKICAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogCkBAIC0yNDUs
NyArMjQ4LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXIKICAgICBtX3Jvb3RMYXllckltcGwt
PnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgZGV2aWNlVmlld3BvcnRTaXplKCkpKTsK
IAogICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGNE
cmF3RXRjIiwgdGhpcywgMCk7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y2FsY0RyYXdFdGMiKTsKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmlj
ZVNjYWxlVHJhbnNmb3JtOwogICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3Nl
dHRpbmdzLmRldmljZVNjYWxlRmFjdG9yKTsKQEAgLTI2OCw3ICsyNzEsNyBAQCBib29sIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBw
YXNzZXMsIENDTGF5ZQogCiAgICAgY2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAotICAgIFRSQUNFX0VWRU5UMSgid2Via2l0IiwgIkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyIsICJyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LnNpemUoKSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4ocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5zaXplKCkpKTsKKyAgICBUUkFDRV9FVkVOVDEoImNjIiwgIkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyIsICJyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LnNpemUoKSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4ocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkpKTsKIAogICAgIG1fcm9vdExheWVySW1wbC0+c2V0U2Npc3NvclJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtX3Jvb3RTY2lzc29yUmVjdCkpOwogCkBAIC0zNzMsMjEgKzM3
NiwyMiBAQCBJbnRTaXplIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRTaXplKCkgY29uc3QK
IHsKICAgICAvLyBUT0RPKGFlbGlhcyk6IEhhcmRjb2RpbmcgdGhlIGZpcnN0IGNoaWxkIGhlcmUg
aXMgd2VpcmQuIFRoaW5rIG9mCiAgICAgLy8gYSBjbGVhbmVyIHdheSB0byBnZXQgdGhlIGNvbnRl
bnRCb3VuZHMgb24gdGhlIEltcGwgc2lkZS4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fcm9v
dFNjcm9sbExheWVySW1wbCB8fCBtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotICAgIHJldHVybiBtX3Njcm9sbExh
eWVySW1wbC0+Y2hpbGRyZW4oKVswXS0+Y29udGVudEJvdW5kcygpOworICAgIHJldHVybiBtX3Jv
b3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsKIH0KIAog
Ym9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZyYW1lRGF0YSYgZnJhbWUp
CiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0RyYXci
LCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6
OnByZXBhcmVUb0RyYXciKTsKICAgICBBU1NFUlQoY2FuRHJhdygpKTsKIAorICAgIGZyYW1lLnJl
bmRlclN1cmZhY2VMYXllckxpc3QgPSAmbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIGZy
YW1lLnJlbmRlclBhc3Nlcy5jbGVhcigpOwotICAgIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxp
c3QuY2xlYXIoKTsKKyAgICBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LT5jbGVhcigpOwog
ICAgIGZyYW1lLndpbGxEcmF3TGF5ZXJzLmNsZWFyKCk7CiAKLSAgICBpZiAoIWNhbGN1bGF0ZVJl
bmRlclBhc3NlcyhmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGZyYW1lLndpbGxEcmF3TGF5ZXJzKSkKKyAgICBpZiAoIWNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyhmcmFtZS5yZW5kZXJQYXNzZXMsICpmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBmcmFt
ZS53aWxsRHJhd0xheWVycykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHdl
IHJldHVybiB0cnVlLCB0aGVuIHdlIGV4cGVjdCBkcmF3TGF5ZXJzKCkgdG8gYmUgY2FsbGVkIGJl
Zm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZ2Fpbi4KQEAgLTQwMSw3ICs0MDUsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldENvbnRlbnRzTWVtb3J5QWxsb2NhdGlvbkxpbWl0
Qnl0ZXMoc2l6ZV90IGJ5dGVzKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnMoY29uc3QgRnJhbWVEYXRhJiBmcmFtZSkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOworICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIpOwogICAgIEFTU0VSVChjYW5EcmF3
KCkpOwogICAgIEFTU0VSVCghZnJhbWUucmVuZGVyUGFzc2VzLmlzRW1wdHkoKSk7CiAKQEAgLTQy
NSw3ICs0MjksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3Qg
RnJhbWVEYXRhJiBmcmFtZSkKICAgICB9CiAKICAgICBpZiAobV9kZWJ1Z1JlY3RIaXN0b3J5LT5l
bmFibGVkKHNldHRpbmdzKCkpKQotICAgICAgICBtX2RlYnVnUmVjdEhpc3RvcnktPnNhdmVEZWJ1
Z1JlY3RzRm9yQ3VycmVudEZyYW1lKG1fcm9vdExheWVySW1wbC5nZXQoKSwgZnJhbWUucmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgc2V0dGluZ3MoKSk7CisgICAgICAgIG1fZGVidWdSZWN0SGlzdG9y
eS0+c2F2ZURlYnVnUmVjdHNGb3JDdXJyZW50RnJhbWUobV9yb290TGF5ZXJJbXBsLmdldCgpLCAq
ZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgc2V0dGluZ3MoKSk7CiAKICAgICBpZiAobV9o
ZWFkc1VwRGlzcGxheS0+ZW5hYmxlZChzZXR0aW5ncygpKSkKICAgICAgICAgbV9oZWFkc1VwRGlz
cGxheS0+ZHJhdyh0aGlzKTsKQEAgLTQ4OSw3ICs0OTMsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnJlYWRiYWNrKHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBt
X2xheWVyUmVuZGVyZXItPmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CiB9CiAK
LXN0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikK
K3N0YXRpYyBDQ0xheWVySW1wbCogZmluZFJvb3RTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5
ZXIpCiB7CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC00OTgsNyArNTAy
LDcgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxh
eWVyKQogICAgICAgICByZXR1cm4gbGF5ZXI7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiBm
b3VuZCA9IGZpbmRTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisgICAg
ICAgIENDTGF5ZXJJbXBsKiBmb3VuZCA9IGZpbmRSb290U2Nyb2xsTGF5ZXIobGF5ZXItPmNoaWxk
cmVuKClbaV0uZ2V0KCkpOwogICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICByZXR1cm4g
Zm91bmQ7CiAgICAgfQpAQCAtNTA2LDEyICs1MTAsNDMgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBm
aW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogICAgIHJldHVybiAwOwogfQogCisv
LyBDb250ZW50IGxheWVycyBjYW4gYmUgZWl0aGVyIGRpcmVjdGx5IHNjcm9sbGFibGUgb3IgY29u
dGFpbmVkIGluIGFuIG91dGVyCisvLyBzY3JvbGxpbmcgbGF5ZXIgd2hpY2ggYXBwbGllcyB0aGUg
c2Nyb2xsIHRyYW5zZm9ybS4gR2l2ZW4gYSBjb250ZW50IGxheWVyLAorLy8gdGhpcyBmdW5jdGlv
biByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIHNjcm9sbCBsYXllciBpZiBhbnkuCitzdGF0aWMgQ0NM
YXllckltcGwqIGZpbmRTY3JvbGxMYXllckZvckNvbnRlbnRMYXllcihDQ0xheWVySW1wbCogbGF5
ZXJJbXBsKQoreworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVySW1wbDsK
KworICAgIGlmIChsYXllckltcGwtPmRyYXdzQ29udGVudCgpICYmIGxheWVySW1wbC0+cGFyZW50
KCkgJiYgbGF5ZXJJbXBsLT5wYXJlbnQoKS0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1cm4g
bGF5ZXJJbXBsLT5wYXJlbnQoKTsKKworICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBsYXllcikK
IHsKICAgICBtX3Jvb3RMYXllckltcGwgPSBsYXllcjsKKyAgICBtX3Jvb3RTY3JvbGxMYXllcklt
cGwgPSBmaW5kUm9vdFNjcm9sbExheWVyKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisgICAgbV9j
dXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSAwOworCisgICAgaWYgKG1fcm9vdExheWVySW1w
bCAmJiBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlvdXNUcmVlICE9IC0xKQorICAgICAgICBt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Zmlu
ZExheWVySW5TdWJ0cmVlKG1fcm9vdExheWVySW1wbC5nZXQoKSwgbV9zY3JvbGxpbmdMYXllcklk
RnJvbVByZXZpb3VzVHJlZSk7CisKKyAgICBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlvdXNU
cmVlID0gLTE7Cit9CisKK1Bhc3NPd25QdHI8Q0NMYXllckltcGw+IENDTGF5ZXJUcmVlSG9zdElt
cGw6OmRldGFjaExheWVyVHJlZSgpCit7CisgICAgLy8gQ2xlYXIgYWxsIGRhdGEgc3RydWN0dXJl
cyB0aGF0IGhhdmUgZGlyZWN0IHJlZmVyZW5jZXMgdG8gdGhlIGxheWVyIHRyZWUuCisgICAgbV9z
Y3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSA9IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsID8gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwtPmlkKCkgOiAtMTsKKyAgICBt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisgICAgbV9yZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmNsZWFyKCk7CiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmlu
ZHMgdGhlIGZpcnN0IHNjcm9sbGFibGUgbGF5ZXIuCi0gICAgbV9zY3JvbGxMYXllckltcGwgPSBm
aW5kU2Nyb2xsTGF5ZXIobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKKyAgICByZXR1cm4gbV9yb290
TGF5ZXJJbXBsLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRW
aXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTU3NSw2ICs2MTAsMzQgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQog
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwogfQogCitzdGF0aWMg
dm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKENDTGF5ZXJJbXBsKiBsYXllcklt
cGwsIGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7CisgICAgICAg
IC8vIFdlIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2Nh
bGUgc3BhY2UuCisgICAgICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGxheWVySW1wbC0+c2Ny
b2xsRGVsdGEoKTsKKyAgICAgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsK
KyAgICAgICAgbGF5ZXJJbXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgfQor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCisgICAgICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UobGF5ZXJJbXBs
LT5jaGlsZHJlbigpW2ldLmdldCgpLCBwYWdlU2NhbGVDaGFuZ2UpOworfQorCitzdGF0aWMgdm9p
ZCBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMoQ0NMYXllckltcGwqIGxheWVySW1w
bCwgZmxvYXQgcGFnZVNjYWxlRGVsdGEpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgbGF5
ZXJJbXBsLT5zZXRQYWdlU2NhbGVEZWx0YShwYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAg
ICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXJzKGxheWVySW1wbC0+Y2hpbGRyZW4o
KVtpXS5nZXQoKSwgcGFnZVNjYWxlRGVsdGEpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IG1p
blBhZ2VTY2FsZSwgZmxvYXQgbWF4UGFnZVNjYWxlKQogewogICAgIGlmICghcGFnZVNjYWxlKQpA
QCAtNTg5LDI1ICs2NTIsMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2Nh
bGVGYWN0b3JBbmRMaW1pdHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KICAgICBmbG9hdCBw
YWdlU2NhbGVDaGFuZ2UgPSBwYWdlU2NhbGUgLyBtX3BhZ2VTY2FsZTsKICAgICBtX3BhZ2VTY2Fs
ZSA9IHBhZ2VTY2FsZTsKIAotICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UocGFn
ZVNjYWxlQ2hhbmdlKTsKKyAgICBpZiAocGFnZVNjYWxlQ2hhbmdlICE9IDEpCisgICAgICAgIGFk
anVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBwYWdl
U2NhbGVDaGFuZ2UpOwogCiAgICAgLy8gQ2xhbXAgZGVsdGEgdG8gbGltaXRzIGFuZCByZWZyZXNo
IGRpc3BsYXkgbWF0cml4LgogICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlRGVsdGEg
LyBtX3NlbnRQYWdlU2NhbGVEZWx0YSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSAxOwot
ICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCk7Ci19Ci0KLXZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdl
U2NhbGVDaGFuZ2UpCi17Ci0gICAgaWYgKHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xs
IGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2UuCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7
Ci0gICAgICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpOwotICAgICAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwot
ICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwot
ICAgIH0KKyAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMobV9yb290U2Nyb2xs
TGF5ZXJJbXBsLCBtX3BhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCBkZWx0YSkKQEAgLTYyNSwyMiArNjc2LDE2IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEp
CiAgICAgbV9wYWdlU2NhbGVEZWx0YSA9IGRlbHRhOwogCiAgICAgdXBkYXRlTWF4U2Nyb2xsUG9z
aXRpb24oKTsKLSAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwotfQotCi12
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVy
KCkKLXsKLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZURlbHRhKTsKKyAgICBhcHBseVBhZ2VT
Y2FsZURlbHRhVG9TY3JvbGxMYXllcnMobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2Fs
ZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQ
b3NpdGlvbigpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCAhbV9zY3JvbGxMYXll
ckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBs
IHx8ICFtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBGbG9hdFNpemUgdmlld0JvdW5kcyA9IG1fdmlld3BvcnRTaXplOwotICAg
IGlmIChDQ0xheWVySW1wbCogY2xpcExheWVyID0gbV9zY3JvbGxMYXllckltcGwtPnBhcmVudCgp
KSB7CisgICAgaWYgKENDTGF5ZXJJbXBsKiBjbGlwTGF5ZXIgPSBtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPnBhcmVudCgpKSB7CiAgICAgICAgIGlmIChjbGlwTGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkK
ICAgICAgICAgICAgIHZpZXdCb3VuZHMgPSBjbGlwTGF5ZXItPmJvdW5kcygpOwogICAgIH0KQEAg
LTY1NCw5ICs2OTksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9s
bFBvc2l0aW9uKCkKICAgICAvLyBoYXZpbmcgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgYnV0IG5vIGhv
cml6b250YWwgb3ZlcmZsb3cuCiAgICAgbWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsK
IAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwp
OwotCi0gICAgLy8gVE9ETyhhZWxpYXMpOiBBbHNvIHVwZGF0ZSBzdWJsYXllcnMuCisgICAgbV9y
b290U2Nyb2xsTGF5ZXJJbXBsLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwogfQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKQEAgLTY2NCw1MSAr
NzA3LDEwOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAorYm9vbCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjplbnN1cmVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KCkKK3sKKyAgICBp
ZiAoIW1fcm9vdExheWVySW1wbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2Ug
bmVlZCBib3RoIGEgbm9uLWVtcHR5IHJlbmRlciBzdXJmYWNlIGxheWVyIGxpc3QgYW5kIGEgcm9v
dCByZW5kZXIKKyAgICAvLyBzdXJmYWNlIHRvIGJlIGFibGUgdG8gaXRlcmF0ZSBvdmVyIHRoZSB2
aXNpYmxlIGxheWVycy4KKyAgICBpZiAobV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAm
JiBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGFmdGVyIHNldFJvb3RMYXllcigpIGJ1dCBiZWZv
cmUgcHJlcGFyZVRvRHJhdygpLCB3ZSBuZWVkCisgICAgLy8gdG8gcmVjYWxjdWxhdGUgdGhlIHZp
c2libGUgbGF5ZXJzLiBUaGlzIHByZXZlbnRzIGJlaW5nIHVuYWJsZSB0byBzY3JvbGwKKyAgICAv
LyBkdXJpbmcgcGFydCBvZiBhIGNvbW1pdC4KKyAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3Qu
Y2xlYXIoKTsKKyAgICBjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KG1fcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CisKKyAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNp
emUoKTsKK30KKwogQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzY3JvbGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlwZSB0eXBlKQogewotICAgIC8vIFRPRE86
IENoZWNrIGZvciBzY3JvbGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJ
bXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7Ci0gICAgICAgIFRSQUNF
X0VWRU5UKCJzY3JvbGxCZWdpbiBJZ25vcmVkIG5vIHNjcm9sbGFibGUiLCB0aGlzLCAwKTsKLSAg
ICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7Ci0gICAgfQorICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQmVnaW4iKTsKIAotICAgIGlmIChtX3Njcm9s
bExheWVySW1wbC0+c2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKCkpIHsKLSAgICAgICAgVFJBQ0Vf
RVZFTlQoInNjcm9sbEJlZ2luIEZhaWxlZCBzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQiLCB0aGlz
LCAwKTsKLSAgICAgICAgcmV0dXJuIFNjcm9sbEZhaWxlZDsKLSAgICB9CisgICAgQVNTRVJUKCFt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCk7CisgICAgY2xlYXJDdXJyZW50bHlTY3JvbGxp
bmdMYXllcigpOworCisgICAgaWYgKCFlbnN1cmVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KCkpCisg
ICAgICAgIHJldHVybiBTY3JvbGxJZ25vcmVkOwogCiAgICAgSW50UG9pbnQgZGV2aWNlVmlld3Bv
cnRQb2ludCA9IHZpZXdwb3J0UG9pbnQ7CiAgICAgZGV2aWNlVmlld3BvcnRQb2ludC5zY2FsZSht
X3NldHRpbmdzLmRldmljZVNjYWxlRmFjdG9yLCBtX3NldHRpbmdzLmRldmljZVNjYWxlRmFjdG9y
KTsKIAotICAgIC8vIFRoZSBpbnZlcnNlIG9mIHRoZSBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtIHRh
a2VzIHVzIGZyb20gcGh5c2ljYWwgcGl4ZWxzIHRvIGxheW91dCBwaXhlbHMuCi0gICAgSW50UG9p
bnQgc2Nyb2xsTGF5ZXJQb2ludChtX3Njcm9sbExheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKS5pbnZlcnNlKCkubWFwUG9pbnQoZGV2aWNlVmlld3BvcnRQb2ludCkpOworICAgIC8vIEZp
cnN0IGZpbmQgb3V0IHdoaWNoIGxheWVyIHdhcyBoaXQgZnJvbSB0aGUgc2F2ZWQgbGlzdCBvZiB2
aXNpYmxlIGxheWVycworICAgIC8vIGluIHRoZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICBDQ0xh
eWVySW1wbCogbGF5ZXJJbXBsID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0
SXNIaXRCeVBvaW50KHZpZXdwb3J0UG9pbnQsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAK
LSAgICBpZiAobV9zY3JvbGxMYXllckltcGwtPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29u
dGFpbnMoc2Nyb2xsTGF5ZXJQb2ludCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJl
Z2luIEZhaWxlZCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiIsIHRoaXMsIDApOwotICAgICAgICBy
ZXR1cm4gU2Nyb2xsRmFpbGVkOwotICAgIH0KKyAgICAvLyBXYWxrIHVwIHRoZSBoaWVyYXJjaHkg
YW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBsYXllci4KKyAgICBDQ0xheWVySW1wbCogcG90ZW50
aWFsbHlTY3JvbGxpbmdMYXllckltcGwgPSAwOworICAgIGZvciAoOyBsYXllckltcGw7IGxheWVy
SW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCkpIHsKKyAgICAgICAgLy8gVGhlIGNvbnRlbnQgbGF5
ZXIgY2FuIGFsc28gYmxvY2sgYXR0ZW1wdHMgdG8gc2Nyb2xsIG91dHNpZGUgdGhlIG1haW4gdGhy
ZWFkLgorICAgICAgICBpZiAobGF5ZXJJbXBsLT50cnlTY3JvbGwoZGV2aWNlVmlld3BvcnRQb2lu
dCwgdHlwZSkgPT0gU2Nyb2xsT25NYWluVGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIFNjcm9s
bE9uTWFpblRocmVhZDsKKworICAgICAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXJJbXBsID0g
ZmluZFNjcm9sbExheWVyRm9yQ29udGVudExheWVyKGxheWVySW1wbCk7CisgICAgICAgIGlmICgh
c2Nyb2xsTGF5ZXJJbXBsKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU2Nyb2xs
U3RhdHVzIHN0YXR1cyA9IHNjcm9sbExheWVySW1wbC0+dHJ5U2Nyb2xsKHZpZXdwb3J0UG9pbnQs
IHR5cGUpOwogCi0gICAgaWYgKHR5cGUgPT0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsICYm
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5oYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkpIHsKLSAgICAgICAg
VFJBQ0VfRVZFTlQoInNjcm9sbEJlZ2luIEZhaWxlZCB3aGVlbEV2ZW50SGFuZGxlcnMiLCB0aGlz
LCAwKTsKLSAgICAgICAgcmV0dXJuIFNjcm9sbEZhaWxlZDsKKyAgICAgICAgLy8gSWYgYW55IGxh
eWVyIHdhbnRzIHRvIGRpdmVydCB0aGUgc2Nyb2xsIGV2ZW50IHRvIHRoZSBtYWluIHRocmVhZCwg
YWJvcnQuCisgICAgICAgIGlmIChzdGF0dXMgPT0gU2Nyb2xsT25NYWluVGhyZWFkKQorICAgICAg
ICAgICAgcmV0dXJuIFNjcm9sbE9uTWFpblRocmVhZDsKKworICAgICAgICBpZiAoc3RhdHVzID09
IFNjcm9sbFN0YXJ0ZWQgJiYgIXBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQorICAgICAg
ICAgICAgcG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGwgPSBzY3JvbGxMYXllckltcGw7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgaWYgKHBvdGVudGlhbGx5U2Ny
b2xsaW5nTGF5ZXJJbXBsKSB7CisgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBs
ID0gcG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGw7CisgICAgICAgIHJldHVybiBTY3JvbGxT
dGFydGVkOworICAgIH0KKyAgICByZXR1cm4gU2Nyb2xsSWdub3JlZDsKIH0KIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsK
LSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAw
KTsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAi
Q0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiKTsKKyAgICBpZiAoIW1fY3VycmVudGx5U2Ny
b2xsaW5nTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9u
SW1wbFRocmVhZCgpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgp
OworICAgIEZsb2F0U2l6ZSBwZW5kaW5nRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIHBlbmRpbmdE
ZWx0YS5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKENDTGF5ZXJJbXBs
KiBsYXllckltcGwgPSBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsgbGF5ZXJJbXBsICYm
ICFwZW5kaW5nRGVsdGEuaXNaZXJvKCk7IGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCkp
IHsKKyAgICAgICAgaWYgKCFsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBGbG9hdFNpemUgcHJldmlvdXNEZWx0YShsYXllckltcGwtPnNjcm9s
bERlbHRhKCkpOworICAgICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHBlbmRpbmdEZWx0YSk7Cisg
ICAgICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIHNjcm9sbCBkZWx0YSB0byB6ZXJvIGlmIHRoZSBs
YXllciB3YXMgYWJsZSB0byBtb3ZlIGFsb25nIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgLy8gYXhp
cy4gVGhpcyBpcyB0byBlbnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xsIGV4YWN0bHkgdG8g
dGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYQorICAgICAgICAvLyBzY3JvbGwgYXJlYSByZWdhcmRs
ZXNzIG9mIHRoZSBzY3JvbGwgc3RlcC4gRm9yIGRpYWdvbmFsIHNjcm9sbHMgdGhpcyBhbHNvIGF2
b2lkcyBhcHBseWluZworICAgICAgICAvLyB0aGUgc2Nyb2xsIG9uIG9uZSBheGlzIHRvIG11bHRp
cGxlIGxheWVycy4KKyAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEud2lkdGgoKSAhPSBsYXllcklt
cGwtPnNjcm9sbERlbHRhKCkud2lkdGgoKSkKKyAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRX
aWR0aCgwKTsKKyAgICAgICAgaWYgKHByZXZpb3VzRGVsdGEuaGVpZ2h0KCkgIT0gbGF5ZXJJbXBs
LT5zY3JvbGxEZWx0YSgpLmhlaWdodCgpKQorICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhl
aWdodCgwKTsKKyAgICB9CisKKyAgICBpZiAoIXNjcm9sbERlbHRhLmlzWmVybygpICYmIHBlbmRp
bmdEZWx0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpOworICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhckN1cnJlbnRs
eVNjcm9sbGluZ0xheWVyKCkKK3sKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9
IDA7CisgICAgbV9zY3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSA9IC0xOwogfQogCiB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCgpCiB7CisgICAgY2xlYXJDdXJyZW50
bHlTY3JvbGxpbmdMYXllcigpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNo
R2VzdHVyZUJlZ2luKCkKQEAgLTcyMCw5ICs4MjEsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnBpbmNoR2VzdHVyZUJlZ2luKCkKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hH
ZXN0dXJlVXBkYXRlKGZsb2F0IG1hZ25pZnlEZWx0YSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBhbmNob3IpCiB7Ci0gICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSIsIHRoaXMs
IDApOworICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hH
ZXN0dXJlVXBkYXRlIik7CiAKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICgh
bV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wcmV2
aW91c1BpbmNoQW5jaG9yID09IEludFBvaW50Ojp6ZXJvKCkpCkBAIC03MzcsNyArODM4LDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQgbWFnbmlm
eURlbHRhLAogCiAgICAgbV9wcmV2aW91c1BpbmNoQW5jaG9yID0gYW5jaG9yOwogCi0gICAgbV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHJvdW5kZWRJbnRTaXplKG1vdmUpKTsKKyAgICBtX3Jv
b3RTY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KHJvdW5kZWRJbnRTaXplKG1vdmUpKTsKICAgICBt
X2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKICAgICBtX2NsaWVudC0+c2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KQEAgLTc1OSw3ICs4NjAsNyBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVEb3VibGVUYXBab29tRGVsdGFzKENDU2Nyb2xsQW5k
U2NhbGVTZXQqIHNjcm9sbAogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5j
aFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbykKIHsKLSAgICBpZiAo
IW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBPbmx5IHNlbmQgZmFrZSBzY3JvbGwvem9vbSBkZWx0YXMg
aWYgd2UncmUgcGluY2ggem9vbWluZyBvdXQgYnkgYQpAQCAtNzcxLDcgKzg3Miw3IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNj
YWxlU2V0KiBzY3JvbGxJbmZvCiAKICAgICAvLyBDb21wdXRlIHdoZXJlIHRoZSBzY3JvbGwgb2Zm
c2V0L3BhZ2Ugc2NhbGUgd291bGQgYmUgaWYgZnVsbHkgcGluY2gtem9vbWVkCiAgICAgLy8gb3V0
IGZyb20gdGhlIGFuY2hvciBwb2ludC4KLSAgICBJbnRTaXplIHNjcm9sbEJlZ2luID0gZmxvb3Jl
ZEludFNpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxCZWdpbiA9IGZsb29y
ZWRJbnRTaXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fcm9v
dFNjcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAgICAgc2Nyb2xsQmVnaW4uc2NhbGUo
bV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVCZWdpbiA9IG1fcGFnZVNjYWxlICog
bV9wYWdlU2NhbGVEZWx0YTsKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0YVRvU2VuZCA9IG1fbWlu
UGFnZVNjYWxlIC8gbV9wYWdlU2NhbGU7CkBAIC03OTEsMjIgKzg5Miw0MCBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNl
dCogc2Nyb2xsSW5mbwogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRT
Y2FsZVNldChDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBjb25zdCBJbnRTaXplJiBz
Y3JvbGxPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSkKIHsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJ
bXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAK
ICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAg
IHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNj
cm9sbERlbHRhID0gc2Nyb2xsT2Zmc2V0IC0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpKTsKKyAgICBzY3JvbGwubGF5ZXJJZCA9IG1fcm9vdFNjcm9sbExheWVySW1w
bC0+aWQoKTsKKyAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxPZmZzZXQgLSB0b1NpemUo
bV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICBzY3JvbGxJbmZv
LT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50
U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKKyAgICBtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOwogICAgIG1fc2VudFBh
Z2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSBwYWdlU2NhbGUgLyBt
X3BhZ2VTY2FsZTsKIH0KIAorc3RhdGljIHZvaWQgY29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9s
bEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQoreworICAg
IGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0g
Zmxvb3JlZEludFNpemUobGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgc2Nyb2xs
LmxheWVySWQgPSBsYXllckltcGwtPmlkKCk7CisgICAgICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9
IHNjcm9sbERlbHRhOworICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwp
OworICAgICAgICBsYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Cisg
ICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpCisgICAgICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mbywgbGF5
ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKK30KKwogUGFzc093blB0cjxDQ1Njcm9sbEFu
ZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKIHsK
ICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0UHRyKG5l
dyBDQ1Njcm9sbEFuZFNjYWxlU2V0KCkpOwotICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Nyb2xsTGF5
ZXJJbXBsICYmICghbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkgfHwg
bV9wYWdlU2NhbGVEZWx0YSAhPSAxLjBmKTsKLSAgICBpZiAoIWRpZE1vdmUgfHwgbV9waW5jaEdl
c3R1cmVBY3RpdmUgfHwgbV9wYWdlU2NhbGVBbmltYXRpb24pIHsKKworICAgIGlmIChtX3BpbmNo
R2VzdHVyZUFjdGl2ZSB8fCBtX3BhZ2VTY2FsZUFuaW1hdGlvbikgewogICAgICAgICBtX3NlbnRQ
YWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gMTsKICAgICAgICAg
aWYgKG1fcGluY2hHZXN0dXJlQWN0aXZlKQogICAgICAgICAgICAgY29tcHV0ZVBpbmNoWm9vbURl
bHRhcyhzY3JvbGxJbmZvLmdldCgpKTsKQEAgLTgxNSwxNiArOTM0LDkgQEAgUGFzc093blB0cjxD
Q1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVs
dGFzKCkKICAgICAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgpOwogICAgIH0KIAorICAg
IGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mby5nZXQoKSwgbV9yb290TGF5ZXJJbXBsLmdl
dCgpKTsKICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURl
bHRhID0gbV9wYWdlU2NhbGVEZWx0YTsKIAotICAgIC8vIEZJWE1FOiB0cmFjayBzY3JvbGxzIGZy
b20gbGF5ZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxM
YXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gZmxvb3JlZEludFNpemUo
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwotICAgIHNjcm9sbEluZm8tPnNjcm9s
bHMuYXBwZW5kKHNjcm9sbCk7Ci0KLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9s
bERlbHRhKHNjcm9sbC5zY3JvbGxEZWx0YSk7Ci0KICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxl
YXNlKCk7CiB9CiAKQEAgLTgzOSwxNSArOTUxLDE1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6c2V0RnVsbFJvb3RMYXllckRhbWFnZSgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
YW5pbWF0ZVBhZ2VTY2FsZShkb3VibGUgbW9ub3RvbmljVGltZSkKIHsKLSAgICBpZiAoIW1fcGFn
ZVNjYWxlQW5pbWF0aW9uIHx8ICFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcGFnZVNj
YWxlQW5pbWF0aW9uIHx8ICFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVy
SW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgp
KTsKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xs
TGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxEZWx0YSgpKTsKIAogICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9u
LT5wYWdlU2NhbGVBdFRpbWUobW9ub3RvbmljVGltZSkgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50
U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGlt
ZShtb25vdG9uaWNUaW1lKTsKICAgICBuZXh0U2Nyb2xsLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURl
bHRhKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9s
bFRvdGFsKTsKKyAgICBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwg
LSBzY3JvbGxUb3RhbCk7CiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFk
KCk7CiAKICAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24tPmlzQW5pbWF0aW9uQ29tcGxldGVB
dFRpbWUobW9ub3RvbmljVGltZSkpIHsKQEAgLTg2MSw3ICs5NzMsNyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3
YWxsQ2xvY2tUaQogICAgIGlmICghbV9zZXR0aW5ncy50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQg
fHwgIW1fbmVlZHNBbmltYXRlTGF5ZXJzIHx8ICFtX3Jvb3RMYXllckltcGwpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5
ZXJzIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJ
bXBsOjphbmltYXRlTGF5ZXJzIik7CiAKICAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0
b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKIApAQCAt
OTA1LDcgKzEwMTcsNyBAQCBzdGF0aWMgdm9pZCBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVy
SW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1wbCogY3VycmVudCkKIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6Y2xlYXJSZW5kZXJTdXJmYWNlcygpCiB7CiAgICAgY2xlYXJSZW5kZXJTdXJmYWNlc09u
Q0NMYXllckltcGxSZWN1cnNpdmUobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKLSAgICAvLyBGSVhN
RTogSWYgd2UgaGF2ZSBhbnkgUmVuZGVyU3VyZmFjZUxheWVyTGlzdCBzYXZlZCwgdGhlbiBtYWtl
IHRoZSBsaXN0IGVtcHR5IGhlcmUuCisgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFy
KCk7CiB9CiAKIFN0cmluZyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpsYXllclRyZWVBc1RleHQoKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDkxOTQyYmZlYmZm
MTY3NWI0Mjk0ZTIxNjc5MjNhM2FkZmQ2ZjcyNDYuLmQ2MGYyNmEwYjNmY2QwOWViMmQ5YzU3MDI1
Y2IwMDcyM2I1NDAzODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAg
LTg2LDcgKzg2LDcgQEAgcHVibGljOgogCiAgICAgc3RydWN0IEZyYW1lRGF0YSB7CiAgICAgICAg
IENDUmVuZGVyUGFzc0xpc3QgcmVuZGVyUGFzc2VzOwotICAgICAgICBDQ0xheWVyTGlzdCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgICAgICBDQ0xheWVyTGlzdCogcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKICAgICAgICAgQ0NMYXllckxpc3Qgd2lsbERyYXdMYXllcnM7CiAgICAgfTsKIApA
QCAtMTMzLDEwICsxMzMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgcmVhZGJhY2sodm9pZCogcGl4
ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzT3duUHRy
PENDTGF5ZXJJbXBsPik7Ci0gICAgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcmVsZWFzZVJvb3RM
YXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5yZWxlYXNlKCk7IH0KICAgICBDQ0xheWVy
SW1wbCogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CiAKLSAg
ICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExheWVy
SW1wbDsgfQorICAgIC8vIFJlbGVhc2Ugb3duZXJzaGlwIG9mIHRoZSBjdXJyZW50IGxheWVyIHRy
ZWUgYW5kIHJlcGxhY2UgaXQgd2l0aCBhbiBlbXB0eQorICAgIC8vIHRyZWUuIFJldHVybnMgdGhl
IHJvb3QgbGF5ZXIgb2YgdGhlIGRldGFjaGVkIHRyZWUuCisgICAgUGFzc093blB0cjxDQ0xheWVy
SW1wbD4gZGV0YWNoTGF5ZXJUcmVlKCk7CisKKyAgICBDQ0xheWVySW1wbCogcm9vdFNjcm9sbExh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290U2Nyb2xsTGF5ZXJJbXBsOyB9CiAKICAgICBib29s
IHZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAgICB2b2lkIHNldFZpc2li
bGUoYm9vbCk7CkBAIC0xOTYsOCArMTk5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1ha2VTY3Jv
bGxBbmRTY2FsZVNldChDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBjb25zdCBJbnRT
aXplJiBzY3JvbGxPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSk7CiAKICAgICB2b2lkIHNldFBhZ2VT
Y2FsZURlbHRhKGZsb2F0KTsKLSAgICB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExh
eWVyKCk7Ci0gICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsK
ICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0cmFja0RhbWFn
ZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKQEAgLTIxMCwxMyArMjExLDE3IEBAIHBy
aXZhdGU6CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogICAgIHZvaWQgc2VuZERp
ZExvc2VDb250ZXh0UmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7CiAgICAgdm9pZCBjbGVhclJlbmRl
clN1cmZhY2VzKCk7CisgICAgYm9vbCBlbnN1cmVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KCk7Cisg
ICAgdm9pZCBjbGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKCk7CiAKICAgICB2b2lkIGR1bXBS
ZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCwgY29uc3QgQ0NMYXllckltcGwq
KSBjb25zdDsKIAogICAgIFJlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwogICAg
IE93blB0cjxDQ1JlbmRlcmVyPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBtX3Jvb3RMYXllckltcGw7Ci0gICAgQ0NMYXllckltcGwqIG1fc2Nyb2xsTGF5ZXJJbXBs
OworICAgIENDTGF5ZXJJbXBsKiBtX3Jvb3RTY3JvbGxMYXllckltcGw7CisgICAgQ0NMYXllcklt
cGwqIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsOworICAgIGludCBtX3Njcm9sbGluZ0xh
eWVySWRGcm9tUHJldmlvdXNUcmVlOwogICAgIENDU2V0dGluZ3MgbV9zZXR0aW5nczsKICAgICBJ
bnRTaXplIG1fdmlld3BvcnRTaXplOwogICAgIEludFNpemUgbV9kZXZpY2VWaWV3cG9ydFNpemU7
CkBAIC0yNDgsNiArMjUzLDEwIEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFJlY3QgbV9yb290U2Np
c3NvclJlY3Q7CiAKKyAgICAvLyBMaXN0IG9mIHZpc2libGUgbGF5ZXJzIGZvciB0aGUgbW9zdCBy
ZWNlbnRseSBwcmVwYXJlZCBmcmFtZS4gVXNlZCBmb3IKKyAgICAvLyByZW5kZXJpbmcgYW5kIGlu
cHV0IGV2ZW50IGhpdCB0ZXN0aW5nLgorICAgIENDTGF5ZXJMaXN0IG1fcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKKwogICAgIE93blB0cjxDQ0ZyYW1lUmF0ZUNvdW50ZXI+IG1fZnBzQ291bnRlcjsK
ICAgICBPd25QdHI8Q0NEZWJ1Z1JlY3RIaXN0b3J5PiBtX2RlYnVnUmVjdEhpc3Rvcnk7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwuY3BwCmluZGV4IDhlMGM2MTNhNDJhMzk2NjdlYTYzZTY1ZTkyNWEy
MmE3YTM0YjE0OWQuLjYzYmYyNzBmZTAyMjY0MzYwZjQyN2EyZTIzYzYyOGNhZWExMTJjOTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6aAogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIERyb3BFdmVu
dCwgYnV0IGluIGNhc2VzIHdoZXJlIHdlIGZhaWwgdG8gcHJvcGVybHkgc3luYyBzY3JvbGxhYmls
aXR5IGl0J3Mgc2FmZXIgdG8gc2VuZCB0aGUKICAgICAgICAgICAgIC8vIGV2ZW50IHRvIHRoZSBt
YWluIHRocmVhZC4gQ2hhbmdlIGJhY2sgdG8gRHJvcEV2ZW50IG9uY2Ugd2UgaGF2ZSBzeW5jaHJv
bml6YXRpb24gYnVncyBzb3J0ZWQgb3V0LgogICAgICAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRs
ZTsgCi0gICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDoKKyAg
ICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkOgogICAg
ICAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
ZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW4pIHsKQEAgLTIw
Niw3ICsyMDYsNyBAQCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3Np
dGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aAogICAgICAgICBjYXNlIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOgogICAgICAgICAgICAgbV9nZXN0dXJlU2Ny
b2xsU3RhcnRlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwotICAgICAg
ICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6CisgICAgICAgIGNhc2Ug
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDoKICAgICAgICAgICAgIHJl
dHVybiBEaWROb3RIYW5kbGU7CiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbElnbm9yZWQ6CiAgICAgICAgICAgICByZXR1cm4gRHJvcEV2ZW50OwpAQCAtMjc4LDggKzI3
OCw4IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9uIFdl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoCiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xp
ZW50LT5zY2hlZHVsZUFuaW1hdGlvbigpOwogICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAg
IH0KLSAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6IHsKLSAgICAg
ICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNjIiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OmZhaWxlZCIpOworICAgIGNhc2UgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDogeworICAgICAgICBUUkFDRV9FVkVOVF9JTlNU
QU5UMCgiY2MiLCAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUdlc3R1cmVG
bGluZzo6c2Nyb2xsT25NYWluVGhyZWFkIik7CiAgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7
CiAgICAgfQogICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGRjMGExNzc3NjIwMjgyOGVjNWVkOGVjYjJmNGI1NmE4
M2QxNTk5YWUuLjgyODFjYTVhOTFhZjA0NmVmYThmYjg4Y2U1NWFlZjRmYTA2MmI4YzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcApAQCAtMzU4MSw2ICszNTgxLDI3IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJMaXN0cykKICAg
ICBFWFBFQ1RfRVEoNCwgcmVzdWx0TGF5ZXItPmlkKCkpOwogfQogCitURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeVN1YnRyZWVTZWFyY2gpCit7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IHJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBtYXNrTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcmVwbGljYUxheWVyID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisKKyAgICBncmFuZENoaWxkLT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxh
eWVyLmdldCgpKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5nZXQoKSk7CisgICAg
Y2hpbGQtPnNldE1hc2tMYXllcihtYXNrTGF5ZXIuZ2V0KCkpOworICAgIHJvb3QtPmFkZENoaWxk
KGNoaWxkLmdldCgpKTsKKworICAgIGludCBub25leGlzdGVudElkID0gLTE7CisgICAgRVhQRUNU
X0VRKHJvb3QsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3Qu
Z2V0KCksIHJvb3QtPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQsIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIGNoaWxkLT5pZCgpKSk7Cisg
ICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGQsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVy
SW5TdWJ0cmVlKHJvb3QuZ2V0KCksIGdyYW5kQ2hpbGQtPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEo
bWFza0xheWVyLCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShyb290
LmdldCgpLCBtYXNrTGF5ZXItPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEocmVwbGljYUxheWVyLCBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShyb290LmdldCgpLCByZXBs
aWNhTGF5ZXItPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEoMCwgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgbm9uZXhpc3RlbnRJZCkpOworfQogCiAv
LyBGSVhNRToKIC8vIGNvbnRpbnVlIHdvcmtpbmcgb24gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY4OTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGE2MWRkODEyZDM4NzZm
NDc3MzVkNjk1ZDNmY2UwN2ZlZjQ5YmI0NDUuLjA1ZjMyNzY2Zjc3ZGYyNTJkMGYxNmZhYjk2M2Vi
NjQxMTA1OWMyMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xMzgsNiArMTM4LDI3IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlU2Nyb2xsYWJs
ZUxheWVyKGludCBpZCwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUm
IHNpemUpCisgICAgeworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGxheWVyID0gQ0NMYXll
ckltcGw6OmNyZWF0ZShpZCk7CisgICAgICAgIGxheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOwor
ICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICBsYXllci0+c2V0
UG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBsYXllci0+c2V0Qm91bmRzKHNpemUpOworICAg
ICAgICBsYXllci0+c2V0Q29udGVudEJvdW5kcyhzaXplKTsKKyAgICAgICAgbGF5ZXItPnNldE1h
eFNjcm9sbFBvc2l0aW9uKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSAq
IDIpKTsKKyAgICAgICAgcmV0dXJuIGxheWVyLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB2b2lk
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCkKKyAgICB7CisgICAgICAgIG1f
aG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNyZWF0ZUNvbnRleHQoKSwgVW50aHJv
dHRsZWRVcGxvYWRlcik7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBm
cmFtZTsKKyAgICAgICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFt
ZSkpOworICAgICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICAgICAgbV9o
b3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgUGFzc1JlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY3JlYXRlQ29udGV4dCgpCiAgICAgewpA
QCAtMjIxLDEzICsyNDIsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9s
bERlbHRhUmVwZWF0ZWRTY3JvbGxzKQogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHNjcm9sbFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJhdykKIHsKLSAgICB7Ci0gICAgICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgICAgIHJv
b3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7Ci0gICAgICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9u
KEludFBvaW50KDAsIDApKTsKLSAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50
U2l6ZSgxMDAsIDEwMCkpOwotICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5y
ZWxlYXNlKCkpOwotICAgIH0KKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNp
emUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1
MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogCiAg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZCk7CiAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOwpAQCAtMjM2
LDIwICsyNTMsNTcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290
Q2FsbHNDb21taXRBbmRSZWRyYXcpCiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0
KTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxXaXRob3V0Um9v
dExheWVyKQoreworICAgIC8vIFdlIHNob3VsZCBub3QgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gc2Ny
b2xsIGFuIGVtcHR5IGxheWVyIHRyZWUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgcmVwbGFjZVRyZWVXaGlsZVNjcm9sbGluZykKK3sKKyAgICBjb25zdCBp
bnQgc2Nyb2xsTGF5ZXJJZCA9IDA7CisKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJz
KEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50
U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgp
OworCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmFzaCBpZiB0aGUgdHJlZSBpcyByZXBsYWNlZCB3
aGlsZSB3ZSBhcmUgc2Nyb2xsaW5nLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxC
ZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPmRldGFjaExh
eWVyVHJlZSgpOworCisgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEw
MCwgMTAwKSk7CisKKyAgICAvLyBXZSBzaG91bGQgc3RpbGwgYmUgc2Nyb2xsaW5nLCBiZWNhdXNl
IHRoZSBzY3JvbGxlZCBsYXllciBhbHNvIGV4aXN0cyBpbiB0aGUgbmV3IHRyZWUuCisgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xs
RGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIE93blB0cjxDQ1Njcm9s
bEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRh
cygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLCBzY3JvbGxMYXllcklkLCBzY3Jv
bGxEZWx0YSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgY2xlYXJSb290
UmVuZGVyU3VyZmFjZUFuZFNjcm9sbCkKK3sKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5
ZXJzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
SW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpOworCisgICAgLy8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gc2Nyb2xsIGV2ZW4gaWYgdGhlIHJv
b3QgbGF5ZXIgbG9zZXMgaXRzIHJlbmRlciBzdXJmYWNlIGFmdGVyIHRoZSBtb3N0CisgICAgLy8g
cmVjZW50IHJlbmRlci4KKyAgICBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2xlYXJSZW5kZXJT
dXJmYWNlKCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7Cit9CisKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
d2hlZWxFdmVudEhhbmRsZXJzKQogewotICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICAgICAgcm9vdC0+c2V0U2Nyb2xs
YWJsZSh0cnVlKTsKLSAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwg
MCkpOwotICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAw
KSk7Ci0gICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0g
ICAgfQorICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgQ0NMYXllckltcGwq
IHJvb3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKIAogICAgIHJvb3QtPnNldEhhdmVXaGVl
bEV2ZW50SGFuZGxlcnModHJ1ZSk7CisKICAgICAvLyBXaXRoIHJlZ2lzdGVyZWQgZXZlbnQgaGFu
ZGxlcnMsIHdoZWVsIHNjcm9sbHMgaGF2ZSB0byBnbyB0byB0aGUgbWFpbiB0aHJlYWQuCi0gICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVk
KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxPbk1haW5UaHJlYWQpOwogCiAgICAgLy8gQnV0IGdlc3R1cmUgc2Nyb2xscyBjYW4gc3RpbGwg
YmUgaGFuZGxlZC4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMjU3LDI3ICszMTEsMjkgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiAKIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKQogewotICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+
c2V0U2Nyb2xsYWJsZSh0cnVlKTsKLSAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCgwLCAwKSk7Ci0gICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgQ0NMYXllckltcGwq
IHJvb3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKKwogICAgIHJvb3QtPnNldFNob3VsZFNj
cm9sbE9uTWFpblRocmVhZCh0cnVlKTsKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dC5yZWxlYXNlKCkpOwotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQ
b2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbEZhaWxlZCk7Ci0gICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJl
Z2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6R2VzdHVyZSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworCisgICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hl
ZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKTsKKyAgICBFWFBF
Q1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRo
cmVhZCk7CiB9CiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9s
bGFibGVSZWdpb25CYXNpYykKIHsKLSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDApOwotICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7Ci0gICAg
cm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwotICAgIHJvb3QtPnNldE1h
eFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBzZXR1cFNjcm9sbEFuZENv
bnRlbnRzTGF5ZXJzKEludFNpemUoMjAwLCAyMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3
cG9ydFNpemUoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CisgICAgQ0NMYXllckltcGwqIHJvb3QgPSBtX2hvc3RJbXBsLT5yb290
TGF5ZXIoKTsKKwogICAgIHJvb3QtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKEludFJlY3Qo
MCwgMCwgNTAsIDUwKSk7Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFz
ZSgpKTsKKwogICAgIC8vIEFsbCBzY3JvbGwgdHlwZXMgaW5zaWRlIHRoZSBub24tZmFzdCBzY3Jv
bGxhYmxlIHJlZ2lvbiBzaG91bGQgZmFpbC4KLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7Ci0gICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CisgICAgRVhQ
RUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5U
aHJlYWQpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgy
NSwgMjUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6R2VzdHVyZSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOwogCiAgICAgLy8gQWxsIHNjcm9sbCB0eXBlcyBvdXRz
aWRlIHRoaXMgcmVnaW9uIHNob3VsZCBzdWNjZWVkLgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBs
LT5zY3JvbGxCZWdpbihJbnRQb2ludCg3NSwgNzUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hl
ZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0yOTAsMTYgKzM0
NiwxMyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIG5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uQmFzaWMpCiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNj
cm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKLSAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7Ci0gICAgcm9v
dC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIHNldHVwU2Ny
b2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgyMDAsIDIwMCkpOworICAgIG1faG9zdEltcGwt
PnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgQ0NMYXllckltcGwqIHJv
b3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKKwogICAgIHJvb3QtPnNldE5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uKEludFJlY3QoMCwgMCwgNTAsIDUwKSk7CiAgICAgcm9vdC0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludCgtMjUsIDApKTsKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dC5yZWxlYXNlKCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsK
LSAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAg
bV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7IC8vIFVwZGF0ZSBkcmF3IHRyYW5zZm9ybXMg
c28gd2UgY2FuIGNvcnJlY3RseSBtYXAgcG9pbnRzIGludG8gbGF5ZXIgc3BhY2UuCisgICAgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAogICAgIC8vIFRoaXMgcG9pbnQg
d291bGQgZmFsbCBpbnRvIHRoZSBub24tZmFzdCBzY3JvbGxhYmxlIHJlZ2lvbiBleGNlcHQgdGhh
dCB3ZSd2ZSBtb3ZlZCB0aGUgbGF5ZXIgZG93biBieSAyNSBwaXhlbHMuCiAgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDQwLCAxMCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKQEAg
LTMwNywxNSArMzYwLDE2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFz
dFNjcm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQogICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgp
OwogCiAgICAgLy8gVGhpcyBwb2ludCBpcyBzdGlsbCBpbnNpZGUgdGhlIG5vbi1mYXN0IHJlZ2lv
bi4KLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTAsIDEw
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbEZhaWxlZCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDEwLCAxMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOwogfQogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHBpbmNoR2VzdHVyZSkKIHsKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5
ZXJzKEludFNpemUoMTAwLCAxMDApKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
SW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpOwogCi0gICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+c2Nyb2xs
TGF5ZXIoKTsKKyAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290
U2Nyb2xsTGF5ZXIoKTsKICAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOwogCiAgICAgY29uc3QgZmxv
YXQgbWluUGFnZVNjYWxlID0gMC41LCBtYXhQYWdlU2NhbGUgPSA0OwpAQCAtMzk0LDggKzQ0OCw5
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFnZVNjYWxlQW5pbWF0aW9uKQog
ewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwog
ICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKLSAgICBDQ0xheWVySW1wbCog
c2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5zY3JvbGxMYXllcigpOworICAgIENDTGF5ZXJJbXBs
KiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnJvb3RTY3JvbGxMYXllcigpOwogICAgIEFTU0VS
VChzY3JvbGxMYXllcik7CiAKICAgICBjb25zdCBmbG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUsIG1h
eFBhZ2VTY2FsZSA9IDQ7CkBAIC00MzksNiArNDk0LDEwMSBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikKICAgICB9CiB9CiAKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgaW5oaWJpdFNjcm9sbEFuZFBhZ2VTY2FsZVVwZGF0ZXNXaGls
ZVBpbmNoWm9vbWluZykKK3sKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNp
emUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1
MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisg
ICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVy
KCk7CisgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKworICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VT
Y2FsZSA9IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKKworICAgIC8vIFBpbmNoIHpvb20gaW4uCisg
ICAgeworICAgICAgICAvLyBTdGFydCBhIHBpbmNoIGluIGdlc3R1cmUgYXQgdGhlIGJvdHRvbSBy
aWdodCBjb3JuZXIgb2YgdGhlIHZpZXdwb3J0LgorICAgICAgICBjb25zdCBmbG9hdCB6b29tSW5E
ZWx0YSA9IDI7CisgICAgICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0
cygxLCBtaW5QYWdlU2NhbGUsIG1heFBhZ2VTY2FsZSk7CisgICAgICAgIG1faG9zdEltcGwtPnBp
bmNoR2VzdHVyZUJlZ2luKCk7CisgICAgICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZVVwZGF0
ZSh6b29tSW5EZWx0YSwgSW50UG9pbnQoNTAsIDUwKSk7CisKKyAgICAgICAgLy8gQmVjYXVzZSB3
ZSBhcmUgcGluY2ggem9vbWluZyBpbiwgd2Ugc2hvdWxkbid0IGdldCBhbnkgc2Nyb2xsIG9yIHBh
Z2UKKyAgICAgICAgLy8gc2NhbGUgZGVsdGFzLgorICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRT
Y2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsK
KyAgICAgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCAxKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7CisKKyAgICAgICAg
Ly8gT25jZSB0aGUgZ2VzdHVyZSBlbmRzLCB3ZSBnZXQgdGhlIGZpbmFsIHNjcm9sbCBhbmQgcGFn
ZSBzY2FsZSB2YWx1ZXMuCisgICAgICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZUVuZCgpOwor
ICAgICAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwor
ICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIHpvb21JbkRlbHRh
KTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5pZCgp
LCBJbnRTaXplKDI1LCAyNSkpOworICAgIH0KKworICAgIC8vIFBpbmNoIHpvb20gb3V0LgorICAg
IHsKKyAgICAgICAgLy8gU3RhcnQgYSBwaW5jaCBvdXQgZ2VzdHVyZSBhdCB0aGUgYm90dG9tIHJp
Z2h0IGNvcm5lciBvZiB0aGUgdmlld3BvcnQuCisgICAgICAgIGNvbnN0IGZsb2F0IHpvb21PdXRE
ZWx0YSA9IDAuNzU7CisgICAgICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExp
bWl0cygxLCBtaW5QYWdlU2NhbGUsIG1heFBhZ2VTY2FsZSk7CisgICAgICAgIG1faG9zdEltcGwt
PnBpbmNoR2VzdHVyZUJlZ2luKCk7CisgICAgICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZVVw
ZGF0ZSh6b29tT3V0RGVsdGEsIEludFBvaW50KDUwLCA1MCkpOworCisgICAgICAgIC8vIFNpbmNl
IHdlIGFyZSBwaW5jaCB6b29taW5nIG91dCwgd2Ugc2hvdWxkIGdldCBhbiB1cGRhdGUgdG8gem9v
bSBhbGwKKyAgICAgICAgLy8gdGhlIHdheSBvdXQgdG8gdGhlIG1pbmltdW0gcGFnZSBzY2FsZS4K
KyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJ
bXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZv
LT5wYWdlU2NhbGVEZWx0YSwgbWluUGFnZVNjYWxlKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMo
KnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKDAsIDApKTsKKworICAgICAg
ICAvLyBPbmNlIHRoZSBnZXN0dXJlIGVuZHMsIHdlIGdldCB0aGUgZmluYWwgc2Nyb2xsIGFuZCBw
YWdlIHNjYWxlIHZhbHVlcy4KKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlRW5kKCk7
CisgICAgICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7
CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgem9vbU91dERl
bHRhKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5p
ZCgpLCBJbnRTaXplKDgsIDgpKTsKKyAgICB9Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgaW5oaWJpdFNjcm9sbEFuZFBhZ2VTY2FsZVVwZGF0ZXNXaGlsZUFuaW1hdGluZ1Bh
Z2VTY2FsZSkKK3sKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAw
LCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1MCwgNTAp
KTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgQ0NM
YXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7Cisg
ICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKworICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VTY2FsZSA9
IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKKyAgICBjb25zdCBkb3VibGUgc3RhcnRUaW1lID0gMTsK
KyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAwLjE7CisgICAgY29uc3QgZG91YmxlIGhhbGZ3
YXlUaHJvdWdoQW5pbWF0aW9uID0gc3RhcnRUaW1lICsgZHVyYXRpb24gLyAyOworICAgIGNvbnN0
IGRvdWJsZSBlbmRUaW1lID0gc3RhcnRUaW1lICsgZHVyYXRpb247CisKKyAgICAvLyBTdGFydCBh
IHBhZ2Ugc2NhbGUgYW5pbWF0aW9uLgorICAgIGNvbnN0IGZsb2F0IHBhZ2VTY2FsZURlbHRhID0g
MjsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMSwgbWluUGFn
ZVNjYWxlLCBtYXhQYWdlU2NhbGUpOworICAgIG1faG9zdEltcGwtPnN0YXJ0UGFnZVNjYWxlQW5p
bWF0aW9uKEludFNpemUoNTAsIDUwKSwgZmFsc2UsIHBhZ2VTY2FsZURlbHRhLCBzdGFydFRpbWUs
IGR1cmF0aW9uKTsKKworICAgIC8vIFdlIHNob3VsZCBpbW1lZGlhdGVseSBnZXQgdGhlIGZpbmFs
IHpvb20gYW5kIHNjcm9sbCB2YWx1ZXMgZm9yIHRoZQorICAgIC8vIGFuaW1hdGlvbi4KKyAgICBt
X2hvc3RJbXBsLT5hbmltYXRlKGhhbGZ3YXlUaHJvdWdoQW5pbWF0aW9uLCBoYWxmd2F5VGhyb3Vn
aEFuaW1hdGlvbik7CisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8g
PSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgRVhQRUNUX0VRKHNjcm9s
bEluZm8tPnBhZ2VTY2FsZURlbHRhLCBwYWdlU2NhbGVEZWx0YSk7CisgICAgZXhwZWN0Q29udGFp
bnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKDI1LCAyNSkpOworCisg
ICAgLy8gU2Nyb2xsaW5nIGR1cmluZyB0aGUgYW5pbWF0aW9uIGlzIGlnbm9yZWQuCisgICAgY29u
c3QgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVl
bCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBs
LT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisK
KyAgICAvLyBUaGUgZmluYWwgcGFnZSBzY2FsZSBhbmQgc2Nyb2xsIGRlbHRhcyBzaG91bGQgbWF0
Y2ggd2hhdCB3ZSBnb3QKKyAgICAvLyBlYXJsaWVyLgorICAgIG1faG9zdEltcGwtPmFuaW1hdGUo
ZW5kVGltZSwgZW5kVGltZSk7CisgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NT
Y3JvbGxEZWx0YXMoKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEs
IHBhZ2VTY2FsZURlbHRhKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xs
TGF5ZXItPmlkKCksIEludFNpemUoMjUsIDI1KSk7Cit9CisKIGNsYXNzIERpZERyYXdDaGVja0xh
eWVyIDogcHVibGljIENDVGlsZWRMYXllckltcGwgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPERpZERyYXdDaGVja0xheWVyPiBjcmVhdGUoaW50IGlkKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgRGlkRHJhd0NoZWNrTGF5ZXIoaWQpKTsgfQpAQCAtNjU1LDYgKzgwNSwyOTkgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwcmVwYXJlVG9EcmF3RmFpbHNXaGVuQW5pbWF0
aW9uVXNlc0NoZWNrZXJib2FyZCkKICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZy
YW1lKTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdu
b3JlZCkKK3sKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIG1faG9zdEltcGwt
PnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJBbmREcmF3RnJhbWUoKTsKKworICAgIC8vIFNjcm9sbCBldmVudCBpcyBpZ25vcmVkIGJlY2F1
c2UgbGF5ZXIgaXMgbm90IHNjcm9sbGFibGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNj
cm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1f
ZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7
Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTm9uQ29tcG9zaXRl
ZFJvb3QpCit7CisgICAgLy8gVGVzdCB0aGUgY29uZmlndXJhdGlvbiB3aGVyZSBhIG5vbi1jb21w
b3NpdGVkIHJvb3QgbGF5ZXIgaXMgZW1iZWRkZWQgaW4gYQorICAgIC8vIHNjcm9sbGFibGUgb3V0
ZXIgbGF5ZXIuCisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworCisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBjb250ZW50TGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAg
IGNvbnRlbnRMYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKTsKKyAgICBjb250
ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFBv
c2l0aW9uKEludFBvaW50KDUsIDUpKTsKKyAgICBjb250ZW50TGF5ZXItPnNldEJvdW5kcyhzdXJm
YWNlU2l6ZSk7CisgICAgY29udGVudExheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoc3Vy
ZmFjZVNpemUud2lkdGgoKSAqIDIsIHN1cmZhY2VTaXplLmhlaWdodCgpICogMikpOworCisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7
CisgICAgc2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgc2Nyb2xsTGF5ZXIt
PnNldE1heFNjcm9sbFBvc2l0aW9uKHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+YWRk
Q2hpbGQoY29udGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
NSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEw
KSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRS
ZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOworfQor
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRB
bmRSZWRyYXcpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+
YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsK
KyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRp
YWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpX
aGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJ
bXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5k
KCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfVFJV
RShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbE1pc3Nlc0NoaWxkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEw
KTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDAp
OworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290
LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXpl
KTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8g
U2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgaW5wdXQgY29vcmRpbmF0ZSBpcyBv
dXRzaWRlIHRoZSBsYXllciBib3VuZGFyaWVzLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5z
Y3JvbGxCZWdpbihJbnRQb2ludCgxNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
bV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0
KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNr
ZmFjaW5nQ2hpbGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBv
aW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXpl
KHN1cmZhY2VTaXplKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAg
ICBtYXRyaXgucm90YXRlM2QoMTgwLCAwLCAwKTsKKyAgICBjaGlsZC0+c2V0VHJhbnNmb3JtKG1h
dHJpeCk7CisgICAgY2hpbGQtPnNldERvdWJsZVNpZGVkKGZhbHNlKTsKKworICAgIHJvb3QtPmFk
ZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJv
b3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgp
OworCisgICAgLy8gU2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgc2Nyb2xsYWJs
ZSBsYXllciBpcyBub3QgZmFjaW5nIHRoZSB2aWV3ZXIgYW5kIHRoZXJlIGlzCisgICAgLy8gbm90
aGluZyBzY3JvbGxhYmxlIGJlaGluZCBpdC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9k
aWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsK
K30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCbG9ja2VkQnlDb250
ZW50TGF5ZXIpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gY29udGVudExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFNob3Vs
ZFNjcm9sbE9uTWFpblRocmVhZCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFNjcm9sbGFi
bGUoZmFsc2UpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IGNyZWF0
ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAg
c2Nyb2xsTGF5ZXItPmFkZENoaWxkKGNvbnRlbnRMYXllci5yZWxlYXNlKCkpOworCisgICAgbV9o
b3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9sbExheWVyLnJlbGVhc2UoKSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8gU2Nyb2xsaW5nIGZhaWxzIGJlY2F1c2Ug
dGhlIGNvbnRlbnQgbGF5ZXIgaXMgYXNraW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRoZSBtYWluIHRo
cmVhZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwg
NSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxPbk1haW5UaHJlYWQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCit7CisgICAgSW50U2l6
ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9p
bnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6
ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0
YShzY3JvbGxEZWx0YSk7CisgICAgSW50U2l6ZSBleHBlY3RlZE1heFNjcm9sbChtX2hvc3RJbXBs
LT5yb290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgp
OworCisgICAgLy8gU2V0IG5ldyBwYWdlIHNjYWxlIGZyb20gbWFpbiB0aHJlYWQuCisgICAgbV9o
b3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwgcGFnZVNjYWxl
LCBwYWdlU2NhbGUpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Ny
b2xsIGRlbHRhLgorICAgIGV4cGVjdGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAg
ICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnBy
b2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQo
KSwgMCwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNo
b3VsZCBhbHNvIGhhdmUgYmVlbiB1cGRhdGVkLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5y
b290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOworCisg
ICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZGVsdGEgcmVtYWlucyBjb25zdGFudCBiZWNhdXNlIHRoZSBp
bXBsIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290
TGF5ZXIoKS0+cGFnZVNjYWxlRGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKK3sK
KyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0g
MjsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIo
MCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJv
b3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXpl
KHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1p
dHMoMSwgMSwgcGFnZVNjYWxlKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdG
cmFtZSgpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBl
eHBlY3RlZFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4
U2Nyb2xsKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFy
dGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAvLyBTZXQgbmV3IHBhZ2Ugc2NhbGUgb24gaW1wbCB0
aHJlYWQgYnkgcGluY2hpbmcuCisgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlQmVnaW4oKTsK
KyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVVcGRhdGUocGFnZVNjYWxlLCBJbnRQb2ludCgp
KTsKKyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVFbmQoKTsKKworICAgIC8vIFRoZSBzY3Jv
bGwgZGVsdGEgaXMgbm90IHNjYWxlZCBiZWNhdXNlIHRoZSBtYWluIHRocmVhZCBkaWQgbm90IHNj
YWxlLgorICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0
SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJ
bmZvLmdldCgpLCAwLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwg
cmFuZ2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9s
bCk7CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBkZWx0YSBzaG91bGQgbWF0Y2ggdGhlIG5ldyBz
Y2FsZSBvbiB0aGUgaW1wbCBzaWRlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5
ZXIoKS0+cGFnZVNjYWxlRGVsdGEoKSwgcGFnZVNjYWxlKTsKK30KKworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVh
ZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICAvLyBBbHNvIG1hcmsg
dGhlIHJvb3Qgc2Nyb2xsYWJsZSBzbyBpdCBiZWNvbWVzIHRoZSByb290IHNjcm9sbCBsYXllci4K
KyAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0
ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAg
IG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gbV9ob3N0SW1w
bC0+cm9vdExheWVyKCktPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBJbnRTaXplIHNjcm9s
bERlbHRhKDAsIDEwKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xsRGVs
dGEpOworICAgIEludFNpemUgZXhwZWN0ZWRNYXhTY3JvbGwoY2hpbGQtPm1heFNjcm9sbFBvc2l0
aW9uKCkpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1
LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsK
KyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7
CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwg
MSwgcGFnZVNjYWxlKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHNj
cm9sbCBkZWx0YS4KKyAgICBleHBlY3RlZFNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZSk7Cisg
ICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5w
cm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0
KCksIDEsIGV4cGVjdGVkU2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBz
aG91bGQgbm90IGhhdmUgY2hhbmdlZC4KKyAgICBFWFBFQ1RfRVEoY2hpbGQtPm1heFNjcm9sbFBv
c2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxlIGRl
bHRhIHJlbWFpbnMgY29uc3RhbnQgYmVjYXVzZSB0aGUgaW1wbCB0aHJlYWQgZGlkIG5vdCBzY2Fs
ZS4KKyAgICBFWFBFQ1RfRVEoY2hpbGQtPnBhZ2VTY2FsZURlbHRhKCksIDEpOworfQorCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQmV5b25kTGltaXQpCit7Cisg
ICAgLy8gU2Nyb2xsIGEgY2hpbGQgbGF5ZXIgYmV5b25kIGl0cyBtYXhpbXVtIHNjcm9sbCByYW5n
ZSBhbmQgbWFrZSBzdXJlIHRoZQorICAgIC8vIHBhcmVudCBsYXllciBpcyBzY3JvbGxlZCBvbiB0
aGUgYXhpcyBvbiB3aGljaCB0aGUgY2hpbGQgd2FzIHVuYWJsZSB0bworICAgIC8vIHNjcm9sbC4K
KyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IGNyZWF0ZVNj
cm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgZ3Jh
bmRDaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgNSkpOworCisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgY2hpbGQtPnNldFNjcm9sbFBvc2l0aW9uKEludFBv
aW50KDMsIDApKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOwor
CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5z
ZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0
U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJh
bWUoKTsKKyAgICB7CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEoLTMsIC03KTsKKyAgICAg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZCk7CisgICAgICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICAg
ICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5k
U2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7
CisKKyAgICAgICAgLy8gVGhlIGdyYW5kIGNoaWxkIHNob3VsZCBoYXZlIHNjcm9sbGVkIHVwIHRv
IGl0cyBsaW1pdC4KKyAgICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gbV9ob3N0SW1wbC0+cm9v
dExheWVyKCktPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgIENDTGF5ZXJJbXBsKiBncmFu
ZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgIGV4cGVjdENvbnRh
aW5zKCpzY3JvbGxJbmZvLmdldCgpLCBncmFuZENoaWxkLT5pZCgpLCBJbnRTaXplKDAsIC01KSk7
CisKKyAgICAgICAgLy8gVGhlIGNoaWxkIHNob3VsZCBoYXZlIG9ubHkgc2Nyb2xsZWQgb24gdGhl
IG90aGVyIGF4aXMuCisgICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBj
aGlsZC0+aWQoKSwgSW50U2l6ZSgtMywgMCkpOworICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxFdmVudEJ1YmJsaW5nKQoreworICAgIC8vIFdoZW4gd2Ug
dHJ5IHRvIHNjcm9sbCBhIG5vbi1zY3JvbGxhYmxlIGNoaWxkIGxheWVyLCB0aGUgc2Nyb2xsIGRl
bHRhCisgICAgLy8gc2hvdWxkIGJlIGFwcGxpZWQgdG8gb25lIG9mIGl0cyBhbmNlc3RvcnMgaWYg
cG9zc2libGUuCisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUs
IDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0
ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisKKyAg
ICBjaGlsZC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQu
cmVsZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2Uo
KSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIHsKKyAgICAgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YSgwLCA0KTsKKyAgICAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNj
cm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgIG1faG9zdEltcGwt
PnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7
CisKKyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hv
c3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisKKyAgICAgICAgLy8gT25seSB0aGUgcm9v
dCBzaG91bGQgaGF2ZSBzY3JvbGxlZC4KKyAgICAgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNj
cm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdl
dCgpLCBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+aWQoKSwgc2Nyb2xsRGVsdGEpOworICAgIH0K
K30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCZWZvcmVSZWRyYXcp
Cit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIG1faG9zdEltcGwtPnNl
dFJvb3RMYXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUp
OworCisgICAgLy8gRHJhdyBvbmUgZnJhbWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVidWlsZCB0
aGUgbGF5ZXIgdHJlZSB0byBtaW1pYyBhIHRyZWUgc3luY2hyb25pemF0aW9uLgorICAgIGluaXRp
YWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgbV9ob3N0SW1wbC0+ZGV0YWNo
TGF5ZXJUcmVlKCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFi
bGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworCisgICAgLy8gU2Ny
b2xsaW5nIHNob3VsZCBzdGlsbCB3b3JrIGV2ZW4gdGhvdWdoIHdlIGRpZCBub3QgZHJhdyB5ZXQu
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7Cit9CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIEZh
a2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJD
b250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGFhY2Q5YTVkNjkwZjMy
MTc0YjFlMmU5YTJlMjFiYmM5N2VhNmQwYzYuLmE2NTdhYmI1NzZmZDUxMzAyZTRiZTkxNjgzNGU3
M2IxZDk0YTIzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjIwMCw0ICsyMjAwLDc4IEBAIHByaXZhdGU6CiAK
IFNJTkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJB
ZGRlZFdpdGhBbmltYXRpb24pCiAKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGls
ZExheWVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QsIHB1YmxpYyBMYXllckNocm9taXVt
U2Nyb2xsRGVsZWdhdGUgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyKCkKKyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAxKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyID0gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9t
b2NrRGVsZWdhdGUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0Qm91bmRzKEludFNp
emUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRJc0RyYXdhYmxlKHRy
dWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAg
ICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAw
LCAxMDApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQ2hpbGQo
bV9yb290U2Nyb2xsTGF5ZXIpOworICAgICAgICBtX2NoaWxkTGF5ZXIgPSBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+
c2V0TGF5ZXJTY3JvbGxEZWxlZ2F0ZSh0aGlzKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRC
b3VuZHMoSW50U2l6ZSg1MCwgNTApKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRJc0RyYXdh
YmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7Cisg
ICAgICAgIG1fY2hpbGRMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+YWRkQ2hpbGQobV9jaGlsZExheWVyKTsK
KyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkgT1ZFUlJJ
REUKKyAgICB7CisgICAgICAgIG1fcmVwb3J0ZWRTY3JvbGxBbW91bnQgPSBzY3JvbGxEZWx0YTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSwgZmxvYXQpIE9WRVJSSURFCisgICAgeworICAgICAgICBJbnRQb2lu
dCBwb3NpdGlvbiA9IG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAg
ICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxE
ZWx0YSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChD
Q0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgRVhQRUNU
X0VRKG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAg
ICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBF
WFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9z
aXRpb24oKSwgSW50UG9pbnQoKSArIG1fc2Nyb2xsQW1vdW50KTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkg
T1ZFUlJJREUKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsK
KyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOwor
ICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+
ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgRVhQRUNU
X0VRKG1fc2Nyb2xsQW1vdW50LCBtX3JlcG9ydGVkU2Nyb2xsQW1vdW50KTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKKyAgICBJbnRTaXplIG1f
cmVwb3J0ZWRTY3JvbGxBbW91bnQ7CisgICAgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIG1fbW9j
a0RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NoaWxkTGF5ZXI7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOworfTsKKworVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5NdWx0aVRocmVhZCkKK3sKKyAg
ICBydW5UZXN0KHRydWUpOworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbFRlc3QuY3BwCmluZGV4IDkyZjAwNjE4NDE0Nzk1NmUxMDE5ZmM2OTAxNWY2MzllNDg5
NGYzMzEuLmQ1YjY4YTg2N2Y3ODJjYzY3ZmQxYjdiYzI5NjIwNTI5MzRmZDcwOWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKQEAgLTIwMiwxNCArMjAyLDE0IEBAIFRFU1Rf
RihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxTdGFydGVk
KQogICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogfQogCi1U
RVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlU2Nyb2xsRmFp
bGVkKQorVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNj
cm9sbE9uTWFpblRocmVhZCkKIHsKICAgICAvLyBXZSBzaG91bGQgc2VuZCBhbGwgZXZlbnRzIHRv
IHRoZSB3aWRnZXQgZm9yIHRoaXMgZ2VzdHVyZS4KICAgICBtX2V4cGVjdGVkRGlzcG9zaXRpb24g
PSBEaWROb3RIYW5kbGU7CiAgICAgVkVSSUZZX0FORF9SRVNFVF9NT0NLUygpOwogCiAgICAgRVhQ
RUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKDo6dGVzdGlu
Zzo6XywgOjp0ZXN0aW5nOjpfKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihX
ZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5X
aWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbE9uTWFpblRocmVhZCkpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViSW5wdXRFdmVudDo6
R2VzdHVyZVNjcm9sbEJlZ2luOwogICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50
KGdlc3R1cmUpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIFRFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbFRlc3QsIGdlc3R1cmVGbGluZ0ZhaWxlZCkKICAgICBWRVJJRllfQU5EX1JFU0VU
X01PQ0tTKCk7CiAKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwg
c2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCi0gICAgICAgIC5XaWxsT25jZSh0
ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxl
ZCkpOworICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpKTsKIAogICAgIGdlc3R1cmUudHlwZSA9
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0OwogICAgIG1faW5wdXRIYW5kbGVyLT5o
YW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwpAQCAtMzg3LDcgKzM4Nyw3IEBAIFRFU1RfRihXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVGbGluZ0FuaW1hdGVzKQogICAg
IC8vIHRyYW5zZmVycmVkIHRvIHRoZSBtYWluIHRocmVhZC4KICAgICBFWFBFQ1RfQ0FMTChtX21v
Y2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2NoZWR1bGVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8s
IHRlc3Rpbmc6Ol8pKQotICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6
OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAgICAgLldpbGxPbmNl
KHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25N
YWluVGhyZWFkKSk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQs
IHNjcm9sbEJ5KHRlc3Rpbmc6Ol8pKS5UaW1lcygwKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tD
Q0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsRW5kKCkpLlRpbWVzKDApOwogCkBAIC00NjksNyAr
NDY5LDcgQEAgVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVy
ZUZsaW5nVHJhbnNmZXJSZXNldHMpCiAgICAgLy8gdHJhbnNmZXJyZWQgdG8gdGhlIG1haW4gdGhy
ZWFkLgogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY2hlZHVs
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVu
dCwgc2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCi0gICAgICAgIC5XaWxsT25j
ZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZh
aWxlZCkpOworICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpKTsKICAgICBFWFBFQ1RfQ0FMTCht
X21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQnkodGVzdGluZzo6XykpLlRpbWVzKDAp
OwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxFbmQo
KSkuVGltZXMoMCk7CiAKQEAgLTU0Niw3ICs1NDYsNyBAQCBURVNUX0YoV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdUcmFuc2ZlclJlc2V0cykKICAgICAvLyBU
aGVuIGFib3J0IHRoZSBzZWNvbmQgZmxpbmcuCiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1
dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5n
OjpfKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5n
OjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVh
ZCkpOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxC
eSh0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhh
bmRsZXJDbGllbnQsIHNjcm9sbEVuZCgpKS5UaW1lcygwKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147654</attachid>
            <date>2012-06-14 14:25:31 -0700</date>
            <delta_ts>2012-06-14 18:40:38 -0700</delta_ts>
            <desc>Exact same patch rebased to tip of tree</desc>
            <filename>bug-73350-20120614142531.patch</filename>
            <type>text/plain</type>
            <size>85015</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZjZjgzOGEzMDUzOGUz
OGY4OTc2OTcxNGQwNjU3ZjQ2NzdhMjBmYi4uYzRjMzBmODdjYjQyOWU2ZDU4ZWMwNGY0ZDIzZGIx
NjRjOTVhMWU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0wNi0xNCAgU2Ft
aSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEFsbG93IHNjcm9sbGluZyBub24tcm9vdCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAor
CisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZC4KKyAgICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xs
ZWQgQ0NMYXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgbWFpbiB0aHJl
YWQuCisKKyAgICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZl
biBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9s
bGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgTGF5ZXIgaGl0IHRlc3RpbmcgY29k
ZSBieSBTaGF3biBTaW5naC4KKworICAgICAgICBBZGRlZCBuZXcgdW5pdCB0ZXN0cyB0byB2ZXJp
ZnkgbGF5ZXIgc2Nyb2xsaW5nIGJlaGF2aW9yOgorCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LnZlcmlmeVN1YnRyZWVTZWFyY2gKKyAgICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNsZWFyUm9vdFJlbmRlclN1cmZhY2VBbmRTY3JvbGwKKyAgICAgICAgICAg
IENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVz
V2hpbGVBbmltYXRpbmdQYWdlU2NhbGUKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVzV2hpbGVQaW5jaFpvb21pbmcKKyAg
ICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnJlcGxhY2VUcmVlV2hpbGVTY3JvbGxp
bmcKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbEJlZm9yZVJlZHJh
dworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQmxvY2tlZEJ5Q29u
dGVudExheWVyCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxDaGls
ZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZAorICAgICAgICAgICAgQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdAorICAgICAgICAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsRXZlbnRCdWJibGluZworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkCisg
ICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxNaXNzZXNDaGlsZAorICAg
ICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QK
KyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RBbmRDaGFuZ2VQ
YWdlU2NhbGVPbkltcGxUaHJlYWQKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LnNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQKKyAgICAgICAgICAgIEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RJZ25vcmVkCisgICAgICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxXaXRob3V0Um9vdExheWVyCisgICAgICAgICAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcgorICAgICAgICAgICAgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGxUZXN0Lmdlc3R1cmVTY3JvbGxPbk1haW5UaHJlYWQKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbEJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZTo6fkxheWVyQ2hyb21pdW1T
Y3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJTY3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6c29ydExheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbEFuZFNjYWxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVySW5TdWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVu
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRv
RHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRldGFjaExheWVyVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNj
YWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRl
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6ZW5zdXJlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjbGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjptYWtlU2Nyb2xsQW5kU2NhbGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sbGVjdFNjcm9sbERlbHRhcyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVQYWdlU2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhclJlbmRlclN1cmZhY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6Cisg
ICAgICAgIChGcmFtZURhdGEpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290U2Nyb2xsTGF5ZXIpOgorCiAy
MDEyLTA2LTE0ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gQ2VydGFpbiBzZXR0aW5ncyBpbiBDQ1NldHRpbmdzIGNvdWxkIGJlIGdsb2Jh
bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzNjkyOTFmMzEzYjA2NTU2NDNmNGY1YzZk
ZGQzOGY4YjJjOTE4N2M5Li5mNTcyNmUxMzExY2Y1M2QzZTE4YzdhZjlkNThmNGU2NGQ2OWQyY2Uz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA2LTE0
ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gQWxsb3cgc2Nyb2xsaW5nIG5vbi1yb290IGxheWVycyBpbiB0aGUgY29tcG9zaXRvciB0
aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcz
MzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3
IHVuaXQgdGVzdHMgdG8gdmVyaWZ5IGxheWVyIHNjcm9sbGluZyBiZWhhdmlvciBhbmQgdGhlIGFz
c29jaWF0ZWQKKyAgICAgICAgdXRpbGl0eSBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBzcmMvV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5wdXRFdmVudEludGVybmFsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUdlc3R1cmVG
bGluZyk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6Cisg
ICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpNb2NrQ29udGVudExh
eWVyRGVsZWdhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllcjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6YmVnaW5UZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFw
cGx5U2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsQ2hpbGRMYXllcjo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmFmdGVy
VGVzdCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpURVNUX0YpOgorICAgICAgICAq
IHRlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRFU1RfRik6CisKIDIwMTItMDYtMTQgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDZXJ0YWluIHNldHRpbmdzIGluIENDU2V0
dGluZ3MgY291bGQgYmUgZ2xvYmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDdlNGEwNGRj
ODQ5YTVmYTIzMmJhYzNkNjcyM2UyOWI3YjY1NTRhNDMuLjFkMWJiMTQxMzQzMDhjNmI4MTZlNzky
MTNhZjA5ZjkyOTk3NmI1MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC05NCw2ICs5NCw3
IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwgbV9zY3JlZW5TcGFjZVRy
YW5zZm9ybUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEuMCkKICAg
ICAsIG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKQorICAgICwgbV9sYXllclNjcm9sbERlbGVn
YXRlKDApCiB7CiB9CiAKQEAgLTM5NSw2ICszOTYsMTQgQEAgdm9pZCBMYXllckNocm9taXVtOjpz
ZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgc2V0
TmVlZHNDb21taXQoKTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3Np
dGlvbihjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikKK3sKKyAgICBpZiAobV9tYXhT
Y3JvbGxQb3NpdGlvbiA9PSBtYXhTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsKKyAgICBzZXROZWVkc0Nv
bW1pdCgpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbGFibGUoYm9vbCBzY3Jv
bGxhYmxlKQogewogICAgIGlmIChtX3Njcm9sbGFibGUgPT0gc2Nyb2xsYWJsZSkKQEAgLTQyOCw2
ICs0MzcsMTMgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bihjb25zdCBSZWdpb24mIHJlZ2lvbikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lk
IExheWVyQ2hyb21pdW06OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQorewor
ICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7Cisg
ICAgaWYgKG1fbGF5ZXJTY3JvbGxEZWxlZ2F0ZSkKKyAgICAgICAgbV9sYXllclNjcm9sbERlbGVn
YXRlLT5kaWRTY3JvbGwoc2Nyb2xsRGVsdGEpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNl
dERyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoYm9vbCBjaGVja2VyYm9hcmQpCiB7CiAg
ICAgaWYgKG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyA9PSBjaGVja2VyYm9hcmQp
CkBAIC01NDUsNiArNTYxLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1Rv
KENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVy
KG1fZml4ZWRUb0NvbnRhaW5lckxheWVyKTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJl
c2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRp
b24pOworICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNjcm9sbFBvc2l0aW9u
KTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7
CiAgICAgaWYgKCF0cmFuc2Zvcm1Jc0FuaW1hdGluZygpKQogICAgICAgICBsYXllci0+c2V0VHJh
bnNmb3JtKG1fdHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBlYzkzODczNTA2ZDY1
OTQ2Nzk4YzcwNjYwNjBlOWEzMzQyZjJjMDYxLi40YTVmMWFlNzNhMDNiMjlhZTM5MWNlNGNjMDJi
NjMwYjJhOTkyNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC02NSw2ICs2NSwxNSBAQCBjbGFz
cyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwogY2xhc3MgU2Nyb2xs
YmFyTGF5ZXJDaHJvbWl1bTsKIAorLy8gRGVsZWdhdGUgZm9yIGhhbmRsaW5nIHNjcm9sbCBpbnB1
dCBmb3IgYSBMYXllckNocm9taXVtLgorY2xhc3MgTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRl
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKSA9
IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5MYXllckNocm9taXVtU2Nyb2xsRGVsZWdh
dGUoKSB7IH0KK307CisKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVj
aWFsIGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCiBjbGFzcyBM
YXllckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4sIHB1YmxpYyBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCB7CkBAIC0xNTEsMTIgKzE2MCwxOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAg
IGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
UG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6
ZSYpOworICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorCiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wp
OworICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQog
ICAgIHZvaWQgc2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKGJvb2wpOwogICAgIHZvaWQgc2V0
SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyhib29sKTsKICAgICBjb25zdCBSZWdpb24mIG5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKCkgeyByZXR1cm4gbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsgfQog
ICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJik7CiAgICAg
dm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQoKSB7IG1fbm9uRmFzdFNjcm9s
bGFibGVSZWdpb25DaGFuZ2VkID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0TGF5ZXJTY3JvbGxEZWxl
Z2F0ZShMYXllckNocm9taXVtU2Nyb2xsRGVsZWdhdGUqIGxheWVyU2Nyb2xsRGVsZWdhdGUpIHsg
bV9sYXllclNjcm9sbERlbGVnYXRlID0gbGF5ZXJTY3JvbGxEZWxlZ2F0ZTsgfQorICAgIHZvaWQg
c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgdm9pZCBzZXREcmF3Q2hlY2tlcmJvYXJk
Rm9yTWlzc2luZ1RpbGVzKGJvb2wpOwogICAgIGJvb2wgZHJhd0NoZWNrZXJib2FyZEZvck1pc3Np
bmdUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxl
czsgfQpAQCAtMzI2LDYgKzM0MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVXNlcyB0YXJnZXQgc3Vy
ZmFjZSdzIHNwYWNlLgogICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKICAgICBJbnRQb2ludCBt
X3Njcm9sbFBvc2l0aW9uOworICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBi
b29sIG1fc2Nyb2xsYWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwog
ICAgIGJvb2wgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzOwpAQCAtMzc4LDYgKzM5NCw3IEBAIHBy
aXZhdGU6CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwogCiAgICAgQ0NMYXllckFuaW1hdGlv
bkRlbGVnYXRlKiBtX2xheWVyQW5pbWF0aW9uRGVsZWdhdGU7CisgICAgTGF5ZXJDaHJvbWl1bVNj
cm9sbERlbGVnYXRlKiBtX2xheWVyU2Nyb2xsRGVsZWdhdGU7CiB9OwogCiB2b2lkIHNvcnRMYXll
cnMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5k
bGVyLmgKaW5kZXggNzY2MDhkOWZjMWQwZGExMzlhNDkzMGJjNTA0N2MwOGFlYjhiMmRmNC4uNzdk
ZDJkYmNmNzRiNzdmODAyNzFjZWM0ZjI1YmE3MWMwNTBmZjJiYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oCkBAIC00NSwxMiArNDUsMTIgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIENDSW5w
dXRIYW5kbGVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0lucHV0SGFuZGxl
ckNsaWVudCk7CiBwdWJsaWM6Ci0gICAgZW51bSBTY3JvbGxTdGF0dXMgeyBTY3JvbGxGYWlsZWQs
IFNjcm9sbFN0YXJ0ZWQsIFNjcm9sbElnbm9yZWQgfTsKKyAgICBlbnVtIFNjcm9sbFN0YXR1cyB7
IFNjcm9sbE9uTWFpblRocmVhZCwgU2Nyb2xsU3RhcnRlZCwgU2Nyb2xsSWdub3JlZCB9OwogICAg
IGVudW0gU2Nyb2xsSW5wdXRUeXBlIHsgR2VzdHVyZSwgV2hlZWwgfTsKIAogICAgIC8vIEF0dGVt
cHQgdG8gc3RhcnQgc2Nyb2xsaW5nIGEgbGF5ZXIgYXQgYSBnaXZlbiBwb2ludCBpbiB3aW5kb3cK
ICAgICAvLyBjb29yZGluYXRlcy4gUmV0dXJucyBTY3JvbGxTdGFydGVkIGlmIHRoZSBsYXllciBh
dCB0aGUgY29vcmRpbmF0ZXMgY2FuCi0gICAgLy8gYmUgc2Nyb2xsZWQsIFNjcm9sbEZhaWxlZCBp
ZiB0aGUgc2Nyb2xsIGV2ZW50IHNob3VsZCBpbnN0ZWFkIGJlCisgICAgLy8gYmUgc2Nyb2xsZWQs
IFNjcm9sbE9uTWFpblRocmVhZCBpZiB0aGUgc2Nyb2xsIGV2ZW50IHNob3VsZCBpbnN0ZWFkIGJl
CiAgICAgLy8gZGVsZWdhdGVkIHRvIHRoZSBtYWluIHRocmVhZCwgb3IgU2Nyb2xsSWdub3JlZCBp
ZiB0aGVyZSBpcyBub3RoaW5nIHRvCiAgICAgLy8gYmUgc2Nyb2xsZWQgYXQgdGhlIGdpdmVuIGNv
b3JkaW5hdGVzLgogICAgIHZpcnR1YWwgU2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNvbnN0IElu
dFBvaW50JiwgU2Nyb2xsSW5wdXRUeXBlKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5k
ZXggOGE1Mzg5OWY2NzZhZmNlZGUyZmU1YTM0ODdjM2RjZGEwNDUyYzJhNC4uZTYxYmY5MWQwNmM1
Y2EyNWM1YzNiYTZiNGYzYmU0NjlhMWI5Y2QwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJT
b3J0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCiAjaW5jbHVkZSAiY2MvQ0NRdWFk
Q3VsbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTE4Niw2ICsxODcsNDAgQEAgdm9pZCBDQ0xheWVy
SW1wbDo6c2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpCiAgICAgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsU3RhdHVzIENDTGF5ZXJJbXBsOjp0cnlTY3JvbGwoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0
UG9pbnQsIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUgdHlwZSkgY29uc3QK
K3sKKyAgICBpZiAoc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKCkpIHsKKyAgICAgICAgVFJBQ0Vf
RVZFTlQwKCJjYyIsICJDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsOiBGYWlsZWQgc2hvdWxkU2Nyb2xs
T25NYWluVGhyZWFkIik7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsT25NYWluVGhyZWFkOworICAgIH0KKworICAgIGlmICghc2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJJ
bXBsOjp0cnlTY3JvbGw6IElnbm9yZWQgbm9uSW52ZXJ0aWJsZVRyYW5zZm9ybSIpOworICAgICAg
ICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisgICAgfQorCisg
ICAgaWYgKCFub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpLmlzRW1wdHkoKSkgeworICAgICAgICBi
b29sIGNsaXBwZWQgPSBmYWxzZTsKKyAgICAgICAgRmxvYXRQb2ludCBoaXRUZXN0UG9pbnRJbkxv
Y2FsU3BhY2UgPSBDQ01hdGhVdGlsOjpwcm9qZWN0UG9pbnQoc2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KS5pbnZlcnNlKCksIEZsb2F0UG9pbnQodmlld3BvcnRQb2ludCksIGNsaXBwZWQpOworICAgICAg
ICBpZiAoIWNsaXBwZWQgJiYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKS5jb250YWlucyhmbG9v
cmVkSW50UG9pbnQoaGl0VGVzdFBvaW50SW5Mb2NhbFNwYWNlKSkpIHsKKyAgICAgICAgICAgIFRS
QUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllckltcGw6OnRyeVNjcm9sbDogRmFpbGVkIG5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uIik7CisgICAgICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbE9uTWFpblRocmVhZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBl
ID09IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCAmJiBoYXZlV2hlZWxFdmVudEhhbmRsZXJz
KCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVySW1wbDo6dHJ5U2Nyb2xs
OiBGYWlsZWQgd2hlZWxFdmVudEhhbmRsZXJzIik7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkOworICAgIH0KKworICAgIGlmICghc2Nyb2xs
YWJsZSgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllckltcGw6OnRyeVNj
cm9sbDogSWdub3JlZCBub3Qgc2Nyb2xsYWJsZSIpOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisgICAgfQorCisgICAgcmV0dXJuIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOworfQorCiBjb25zdCBJbnRSZWN0IENDTGF5ZXJJ
bXBsOjpnZXREcmF3UmVjdCgpIGNvbnN0CiB7CiAgICAgLy8gRm9ybSB0aGUgbWF0cml4IHVzZWQg
YnkgdGhlIHNoYWRlciB0byBtYXAgdGhlIGNvcm5lcnMgb2YgdGhlIGxheWVyJ3MKQEAgLTIzOCw3
ICsyNzMsNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogCiB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPENDTGF5
ZXJJbXBsKj46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0b3I8Q0NMYXllckltcGwqPjo6aXRlcmF0b3Ig
ZW5kLCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlcikKIHsKLSAgICBUUkFDRV9FVkVOVCgiTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpzb3J0TGF5ZXJzIiwgMCwgMCk7CisgICAgVFJBQ0VfRVZFTlQw
KCJjYyIsICJMYXllclJlbmRlcmVyQ2hyb21pdW06OnNvcnRMYXllcnMiKTsKICAgICBsYXllclNv
cnRlci0+c29ydChmaXJzdCwgZW5kKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMGEy
M2NkODgzZWEwYzhjNTMzMDExZDFmMzEwZTc4MGMxNmNhNTExNy4uNDkyOTA2MDY2OGQzMDUzYmE3
OGU1NjNiODU5ZWU5Mjg2ODg2MzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5k
ZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKQEAgLTIxOCw2
ICsyMTksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2lu
Z1RpbGVzKGJvb2wgY2hlY2tlcmJvYXJkKSB7IG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdU
aWxlcyA9IGNoZWNrZXJib2FyZDsgfQogICAgIGJvb2wgZHJhd0NoZWNrZXJib2FyZEZvck1pc3Np
bmdUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxl
czsgfQogCisgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyB0cnlTY3JvbGwo
Y29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxJbnB1dFR5cGUpIGNvbnN0OworCiAgICAgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUxheWVyUmVjdDsgfQogICAgIHZvaWQgc2V0Vmlz
aWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KSB7IG1fdmlzaWJs
ZUxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3Q7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKaW5kZXggOGYyNDZkM2M1OWJmNThkMzc0NGE3YTU1YmNhZDZlOWNkMWM2M2M1Zi4u
NGE1ZmNmM2MzZDQzOGRmOTdjZmNhNDE4M2FhMmI2ZDM4YjJlMTc1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1w
bCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgaG9zdElt
cGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RM
YXllcigpLCBob3N0SW1wbC0+cmVsZWFzZVJvb3RMYXllcigpLCBob3N0SW1wbCkpOworICAgIGhv
c3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhy
b290TGF5ZXIoKSwgaG9zdEltcGwtPmRldGFjaExheWVyVHJlZSgpLCBob3N0SW1wbCkpOwogCiAg
ICAgLy8gV2UgbWF5IGhhdmUgYWRkZWQgYW4gYW5pbWF0aW9uIGR1cmluZyB0aGUgdHJlZSBzeW5j
LiBUaGlzIHdpbGwgY2F1c2UgYm90aCBsYXllciB0cmVlIGhvc3RzCiAgICAgLy8gdG8gdmlzaXQg
dGhlaXIgY29udHJvbGxlcnMuCkBAIC02MTgsMTUgKzYxOCw0MiBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdAogICAgIG9jY2x1c2lvblRyYWNrZXIub3ZlcmRyYXdNZXRyaWNzKCkucmVjb3JkTWV0
cmljcyh0aGlzKTsKIH0KIAorc3RhdGljIExheWVyQ2hyb21pdW0qIGZpbmRGaXJzdFNjcm9sbGFi
bGVMYXllcihMYXllckNocm9taXVtKiBsYXllcikKK3sKKyAgICBpZiAoIWxheWVyKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmIChsYXllci0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1
cm4gbGF5ZXI7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJlbigp
LnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGZvdW5kID0gZmluZEZpcnN0
U2Nyb2xsYWJsZUxheWVyKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKKyAgICAgICAgaWYg
KGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBD
Q1Njcm9sbEFuZFNjYWxlU2V0JiBpbmZvKQogewotICAgIC8vIEZJWE1FOiBwdXNoaW5nIHNjcm9s
bCBvZmZzZXRzIHRvIG5vbi1yb290IGxheWVycyBub3QgaW1wbGVtZW50ZWQKLSAgICBpZiAoIWlu
Zm8uc2Nyb2xscy5zaXplKCkpCisgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQVNTRVJUKGluZm8uc2Nyb2xscy5zaXplKCkgPT0gMSk7Ci0gICAgSW50U2l6ZSBz
Y3JvbGxEZWx0YSA9IGluZm8uc2Nyb2xsc1swXS5zY3JvbGxEZWx0YTsKLSAgICBtX2NsaWVudC0+
YXBwbHlTY3JvbGxBbmRTY2FsZShzY3JvbGxEZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7Cisg
ICAgTGF5ZXJDaHJvbWl1bSogcm9vdFNjcm9sbExheWVyID0gZmluZEZpcnN0U2Nyb2xsYWJsZUxh
eWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICBJbnRTaXplIHJvb3RTY3JvbGxEZWx0YTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zY3JvbGxzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5k
TGF5ZXJJblN1YnRyZWUobV9yb290TGF5ZXIuZ2V0KCksIGluZm8uc2Nyb2xsc1tpXS5sYXllcklk
KTsKKyAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAobGF5ZXIgPT0gcm9vdFNjcm9sbExheWVyKQorICAgICAgICAgICAgcm9vdFNjcm9sbERlbHRh
ICs9IGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbGF5ZXItPnNjcm9sbEJ5KGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YSk7CisgICAgfQor
ICAgIGlmICghcm9vdFNjcm9sbERlbHRhLmlzWmVybygpIHx8IGluZm8ucGFnZVNjYWxlRGVsdGEg
IT0gMSkKKyAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUocm9vdFNjcm9sbERl
bHRhLCBpbmZvLnBhZ2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0
YXJ0UmF0ZUxpbWl0ZXIoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKaW5kZXggZTVlNGZkOWEyYzIzODJi
OWU5MjVjYTc5NDk4NTkzNzcxNjgyMjlkOS4uZTVhNGZlYzljMTU2ZTRmNTEwMTllNmY2NmJmNmEx
OGM4NjA2M2IyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKQEAg
LTUyLDYgKzUyLDEwIEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZT4gc3RhdGljIGJvb2wgcmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQoTGF5ZXJUeXBl
KiwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKTsKIAorICAgIC8vIFJldHVybnMgYSBsYXllciB3
aXRoIHRoZSBnaXZlbiBpZCBpZiBvbmUgZXhpc3RzIGluIHRoZSBzdWJ0cmVlIHN0YXJ0aW5nCisg
ICAgLy8gZnJvbSB0aGUgZ2l2ZW4gcm9vdCBsYXllciAoaW5jbHVkaW5nIG1hc2sgYW5kIHJlcGxp
Y2EgbGF5ZXJzKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBMYXll
clR5cGUqIGZpbmRMYXllckluU3VidHJlZShMYXllclR5cGUqIHJvb3RMYXllciwgaW50IGxheWVy
SWQpOworCiAgICAgc3RydWN0IFNjcm9sbFVwZGF0ZUluZm8gewogICAgICAgICBpbnQgbGF5ZXJJ
ZDsKICAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTsKQEAgLTc3LDYgKzgxLDI1IEBAIGJvb2wg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChM
YXllclR5cGUqIGxheWVyLCBpCiAgICAgcmV0dXJuIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYg
bGF5ZXItPmlkKCkgIT0gdGFyZ2V0U3VyZmFjZUxheWVySUQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIExheWVyVHlwZT4KK0xheWVyVHlwZSogQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5
ZXJJblN1YnRyZWUoTGF5ZXJUeXBlKiByb290TGF5ZXIsIGludCBsYXllcklkKQoreworICAgIGlm
IChyb290TGF5ZXItPmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAgICAgcmV0dXJuIHJvb3RMYXllcjsK
KworICAgIGlmIChyb290TGF5ZXItPm1hc2tMYXllcigpICYmIHJvb3RMYXllci0+bWFza0xheWVy
KCktPmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAgICAgcmV0dXJuIHJvb3RMYXllci0+bWFza0xheWVy
KCk7CisKKyAgICBpZiAocm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiByb290TGF5ZXItPnJl
cGxpY2FMYXllcigpLT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiByb290TGF5ZXIt
PnJlcGxpY2FMYXllcigpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290TGF5ZXIt
PmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKExheWVyVHlwZSogZm91bmQg
PSBmaW5kTGF5ZXJJblN1YnRyZWUocm9vdExheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBsYXll
cklkKSkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGE5ODVjM2Y2MmEyMWU3MDE3YmE4YjBhMjViYWQwODVk
NmQ1MTIzYjguLjcyMjYxMTZhZWJjMmViMjk1ZDc0NjkzZjQ4MGI2YzJjOWFiNjM0YTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xMTUsNyArMTE1LDkgQEAg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ0xheWVyVHJl
ZVNldHRpbmdzJiBzZXR0aW5ncywgQ0MKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1f
c291cmNlRnJhbWVOdW1iZXIoLTEpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCi0gICAgLCBtX3Nj
cm9sbExheWVySW1wbCgwKQorICAgICwgbV9yb290U2Nyb2xsTGF5ZXJJbXBsKDApCisgICAgLCBt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCgwKQorICAgICwgbV9zY3JvbGxpbmdMYXllcklk
RnJvbVByZXZpb3VzVHJlZSgtMSkKICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBt
X3Zpc2libGUodHJ1ZSkKICAgICAsIG1fc291cmNlRnJhbWVDYW5CZURyYXduKHRydWUpCkBAIC0x
MzgsNyArMTQwLDcgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChj
b25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJiBzZXR0aW5ncywgQ0MKIENDTGF5ZXJUcmVlSG9zdElt
cGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXll
clRyZWVIb3N0SW1wbCgpIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xh
eWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpIik7CiAKICAgICBpZiAobV9y
b290TGF5ZXJJbXBsKQogICAgICAgICBjbGVhclJlbmRlclN1cmZhY2VzKCk7CkBAIC0xODIsMTAg
KzE4NCwxMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIG1vbm90
b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9u
LCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWUsIGRv
dWJsZSBkdXJhdGlvbikKIHsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICgh
bV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNj
cm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0
aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBz
Y3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xs
UG9zaXRpb24oKSArIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAgICAg
c2Nyb2xsVG90YWwuc2NhbGUobV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVUb3Rh
bCA9IG1fcGFnZVNjYWxlICogbV9wYWdlU2NhbGVEZWx0YTsKICAgICBJbnRTaXplIHNjYWxlZENv
bnRlbnRTaXplID0gY29udGVudFNpemUoKTsKQEAgLTIzNSw2ICsyMzcsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJv
b3REcmF3TGF5ZXIsCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1
cmZhY2VMYXllckxpc3QoQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAg
ICAgQVNTRVJUKHJlbmRlclN1cmZhY2VMYXllckxpc3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
bV9yb290TGF5ZXJJbXBsKTsKIAogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKG1f
cm9vdExheWVySW1wbC5nZXQoKSk7CiAKQEAgLTI0Niw3ICsyNDksNyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXllckxpc3Qm
IHJlbmRlclN1cgogICAgIG1fcm9vdExheWVySW1wbC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSkpOwogCiAgICAgewotICAgICAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKKyAgICAg
ICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjRHJhd0V0YyIp
OwogICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlU2NhbGVUcmFuc2Zvcm07CiAgICAgICAg
IGRldmljZVNjYWxlVHJhbnNmb3JtLnNjYWxlKG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3Ip
OwpAQCAtMjY5LDcgKzI3Miw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRl
UmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAgICBjYWxj
dWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCi0g
ICAgVFJBQ0VfRVZFTlQxKCJ3ZWJraXQiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRl
UmVuZGVyUGFzc2VzIiwgInJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIiwgc3RhdGljX2Nh
c3Q8bG9uZyBsb25nIHVuc2lnbmVkPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkpOwor
ICAgIFRSQUNFX0VWRU5UMSgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVu
ZGVyUGFzc2VzIiwgInJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIiwgc3RhdGljX2Nhc3Q8
bG9uZyBsb25nIHVuc2lnbmVkPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkpOwogCiAg
ICAgbV9yb290TGF5ZXJJbXBsLT5zZXRTY2lzc29yUmVjdChlbmNsb3NpbmdJbnRSZWN0KG1fcm9v
dFNjaXNzb3JSZWN0KSk7CiAKQEAgLTM3NCwyMSArMzc3LDIyIEBAIEludFNpemUgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y29udGVudFNpemUoKSBjb25zdAogewogICAgIC8vIFRPRE8oYWVsaWFzKTog
SGFyZGNvZGluZyB0aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4gVGhpbmsgb2YKICAgICAv
LyBhIGNsZWFuZXIgd2F5IHRvIGdldCB0aGUgY29udGVudEJvdW5kcyBvbiB0aGUgSW1wbCBzaWRl
LgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgbV9zY3JvbGxMYXllckltcGwtPmNoaWxk
cmVuKCkuaXNFbXB0eSgpKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsIHx8IG1fcm9v
dFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBJ
bnRTaXplKCk7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5j
b250ZW50Qm91bmRzKCk7CisgICAgcmV0dXJuIG1fcm9vdFNjcm9sbExheWVySW1wbC0+Y2hpbGRy
ZW4oKVswXS0+Y29udGVudEJvdW5kcygpOwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyIsIHRoaXMsIDApOworICAgIFRSQUNFX0VW
RU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyIpOwogICAgIEFT
U0VSVChjYW5EcmF3KCkpOwogCisgICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9ICZt
X3JlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmNsZWFyKCk7
Ci0gICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOworICAgIGZyYW1lLnJl
bmRlclN1cmZhY2VMYXllckxpc3QtPmNsZWFyKCk7CiAgICAgZnJhbWUud2lsbERyYXdMYXllcnMu
Y2xlYXIoKTsKIAotICAgIGlmICghY2FsY3VsYXRlUmVuZGVyUGFzc2VzKGZyYW1lLnJlbmRlclBh
c3NlcywgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZnJhbWUud2lsbERyYXdMYXllcnMp
KQorICAgIGlmICghY2FsY3VsYXRlUmVuZGVyUGFzc2VzKGZyYW1lLnJlbmRlclBhc3NlcywgKmZy
YW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QsIGZyYW1lLndpbGxEcmF3TGF5ZXJzKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gSWYgd2UgcmV0dXJuIHRydWUsIHRoZW4gd2UgZXhw
ZWN0IGRyYXdMYXllcnMoKSB0byBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGFnYWluLgpAQCAtNDAyLDcgKzQwNiw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0Q29udGVudHNNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhzaXplX3QgYnl0ZXMpCiAKIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1l
KQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIiwg
dGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpk
cmF3TGF5ZXJzIik7CiAgICAgQVNTRVJUKGNhbkRyYXcoKSk7CiAgICAgQVNTRVJUKCFmcmFtZS5y
ZW5kZXJQYXNzZXMuaXNFbXB0eSgpKTsKIApAQCAtNDI2LDcgKzQzMCw3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQogICAgIH0K
IAogICAgIGlmIChtX2RlYnVnUmVjdEhpc3RvcnktPmVuYWJsZWQoc2V0dGluZ3MoKSkpCi0gICAg
ICAgIG1fZGVidWdSZWN0SGlzdG9yeS0+c2F2ZURlYnVnUmVjdHNGb3JDdXJyZW50RnJhbWUobV9y
b290TGF5ZXJJbXBsLmdldCgpLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBzZXR0aW5n
cygpKTsKKyAgICAgICAgbV9kZWJ1Z1JlY3RIaXN0b3J5LT5zYXZlRGVidWdSZWN0c0ZvckN1cnJl
bnRGcmFtZShtX3Jvb3RMYXllckltcGwuZ2V0KCksICpmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBzZXR0aW5ncygpKTsKIAogICAgIGlmIChtX2hlYWRzVXBEaXNwbGF5LT5lbmFibGVkKHNl
dHRpbmdzKCkpKQogICAgICAgICBtX2hlYWRzVXBEaXNwbGF5LT5kcmF3KHRoaXMpOwpAQCAtNDkw
LDcgKzQ5NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVi
dWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5k
U2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5k
Um9vdFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyKQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTQ5OSw3ICs1MDMsNyBAQCBzdGF0aWMgQ0NMYXllckltcGwq
IGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJldHVybiBsYXll
cjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFNjcm9sbExheWVyKGxh
eWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0g
ZmluZFJvb3RTY3JvbGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiAgICAgICAg
IGlmIChmb3VuZCkKICAgICAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CkBAIC01MDcsMTIg
KzUxMSw0MyBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1w
bCogbGF5ZXIpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIENvbnRlbnQgbGF5ZXJzIGNhbiBiZSBl
aXRoZXIgZGlyZWN0bHkgc2Nyb2xsYWJsZSBvciBjb250YWluZWQgaW4gYW4gb3V0ZXIKKy8vIHNj
cm9sbGluZyBsYXllciB3aGljaCBhcHBsaWVzIHRoZSBzY3JvbGwgdHJhbnNmb3JtLiBHaXZlbiBh
IGNvbnRlbnQgbGF5ZXIsCisvLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFzc29jaWF0ZWQg
c2Nyb2xsIGxheWVyIGlmIGFueS4KK3N0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVy
Rm9yQ29udGVudExheWVyKENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgaWYgKCFsYXll
ckltcGwpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xsYWJs
ZSgpKQorICAgICAgICByZXR1cm4gbGF5ZXJJbXBsOworCisgICAgaWYgKGxheWVySW1wbC0+ZHJh
d3NDb250ZW50KCkgJiYgbGF5ZXJJbXBsLT5wYXJlbnQoKSAmJiBsYXllckltcGwtPnBhcmVudCgp
LT5zY3JvbGxhYmxlKCkpCisgICAgICAgIHJldHVybiBsYXllckltcGwtPnBhcmVudCgpOworCisg
ICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVy
KFBhc3NPd25QdHI8Q0NMYXllckltcGw+IGxheWVyKQogewogICAgIG1fcm9vdExheWVySW1wbCA9
IGxheWVyOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbCA9IGZpbmRSb290U2Nyb2xsTGF5ZXIo
bV9yb290TGF5ZXJJbXBsLmdldCgpKTsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1w
bCA9IDA7CisKKyAgICBpZiAobV9yb290TGF5ZXJJbXBsICYmIG1fc2Nyb2xsaW5nTGF5ZXJJZEZy
b21QcmV2aW91c1RyZWUgIT0gLTEpCisgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJ
bXBsID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUobV9yb290TGF5
ZXJJbXBsLmdldCgpLCBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlvdXNUcmVlKTsKKworICAg
IG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1RyZWUgPSAtMTsKK30KKworUGFzc093blB0
cjxDQ0xheWVySW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6ZGV0YWNoTGF5ZXJUcmVlKCkKK3sK
KyAgICAvLyBDbGVhciBhbGwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSBkaXJlY3QgcmVmZXJl
bmNlcyB0byB0aGUgbGF5ZXIgdHJlZS4KKyAgICBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlv
dXNUcmVlID0gbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPyBtX2N1cnJlbnRseVNjcm9s
bGluZ0xheWVySW1wbC0+aWQoKSA6IC0xOworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJ
bXBsID0gMDsKKyAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKIAotICAgIC8v
IEZJWE1FOiBDdXJyZW50bHksIHRoaXMgb25seSBmaW5kcyB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBs
YXllci4KLSAgICBtX3Njcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllcihtX3Jvb3RMYXll
ckltcGwuZ2V0KCkpOworICAgIHJldHVybiBtX3Jvb3RMYXllckltcGwucmVsZWFzZSgpOwogfQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAt
NTc2LDYgKzYxMSwzNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpZXdwb3J0U2l6
ZShjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
dmlld3BvcnRDaGFuZ2VkKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdl
U2NhbGVDaGFuZ2UoQ0NMYXllckltcGwqIGxheWVySW1wbCwgZmxvYXQgcGFnZVNjYWxlQ2hhbmdl
KQoreworICAgIGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGF5
ZXJJbXBsLT5zY3JvbGxhYmxlKCkpIHsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBjb252ZXJ0IGlt
cGwtc2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAgICAgICAgRmxvYXRT
aXplIHNjcm9sbERlbHRhID0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOworICAgICAgICBzY3Jv
bGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOworICAgICAgICBsYXllckltcGwtPnNldFNj
cm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgYWRqdXN0U2Ny
b2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCksIHBh
Z2VTY2FsZUNoYW5nZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Nj
cm9sbExheWVycyhDQ0xheWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVEZWx0YSkK
K3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxheWVy
SW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICBsYXllckltcGwtPnNldFBhZ2VTY2FsZURlbHRh
KHBhZ2VTY2FsZURlbHRhKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBs
LT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9T
Y3JvbGxMYXllcnMobGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpLCBwYWdlU2NhbGVEZWx0
YSk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5k
TGltaXRzKGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgbWluUGFnZVNjYWxlLCBmbG9hdCBtYXhQYWdl
U2NhbGUpCiB7CiAgICAgaWYgKCFwYWdlU2NhbGUpCkBAIC01OTAsMjUgKzY1MywxMyBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhmbG9hdCBw
YWdlU2NhbGUsIGZsb2F0IG1pbgogICAgIGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSA9IHBhZ2VTY2Fs
ZSAvIG1fcGFnZVNjYWxlOwogICAgIG1fcGFnZVNjYWxlID0gcGFnZVNjYWxlOwogCi0gICAgYWRq
dXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShwYWdlU2NhbGVDaGFuZ2UpOworICAgIGlmIChw
YWdlU2NhbGVDaGFuZ2UgIT0gMSkKKyAgICAgICAgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNo
YW5nZShtX3Jvb3RTY3JvbGxMYXllckltcGwsIHBhZ2VTY2FsZUNoYW5nZSk7CiAKICAgICAvLyBD
bGFtcCBkZWx0YSB0byBsaW1pdHMgYW5kIHJlZnJlc2ggZGlzcGxheSBtYXRyaXguCiAgICAgc2V0
UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVEZWx0YSAvIG1fc2VudFBhZ2VTY2FsZURlbHRhKTsK
ICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9IDE7Ci0gICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRv
U2Nyb2xsTGF5ZXIoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphZGp1c3RTY3Jv
bGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKLXsKLSAgICBpZiAo
cGFnZVNjYWxlQ2hhbmdlID09IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGFsc28g
bmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBzcGFj
ZS4KLSAgICBpZiAobV9zY3JvbGxMYXllckltcGwpIHsKLSAgICAgICAgRmxvYXRTaXplIHNjcm9s
bERlbHRhID0gbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgICAgIHNjcm9s
bERlbHRhLnNjYWxlKHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIGFwcGx5UGFnZVNjYWxl
RGVsdGFUb1Njcm9sbExheWVycyhtX3Jvb3RTY3JvbGxMYXllckltcGwsIG1fcGFnZVNjYWxlRGVs
dGEpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZURlbHRhKGZs
b2F0IGRlbHRhKQpAQCAtNjI2LDIyICs2NzcsMTYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCBkZWx0YSkKICAgICBtX3BhZ2VTY2FsZURlbHRhID0g
ZGVsdGE7CiAKICAgICB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwotICAgIGFwcGx5UGFnZVNj
YWxlRGVsdGFUb1Njcm9sbExheWVyKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
YXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKQotewotICAgIGlmIChtX3Njcm9sbExh
eWVySW1wbCkKLSAgICAgICAgbV9zY3JvbGxMYXllckltcGwtPnNldFBhZ2VTY2FsZURlbHRhKG1f
cGFnZVNjYWxlRGVsdGEpOworICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyht
X3Jvb3RTY3JvbGxMYXllckltcGwsIG1fcGFnZVNjYWxlRGVsdGEpOwogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKIHsKLSAgICBpZiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCkp
CisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwgfHwgIW1fcm9vdFNjcm9sbExheWVySW1w
bC0+Y2hpbGRyZW4oKS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0U2l6ZSB2
aWV3Qm91bmRzID0gbV92aWV3cG9ydFNpemU7Ci0gICAgaWYgKENDTGF5ZXJJbXBsKiBjbGlwTGF5
ZXIgPSBtX3Njcm9sbExheWVySW1wbC0+cGFyZW50KCkpIHsKKyAgICBpZiAoQ0NMYXllckltcGwq
IGNsaXBMYXllciA9IG1fcm9vdFNjcm9sbExheWVySW1wbC0+cGFyZW50KCkpIHsKICAgICAgICAg
aWYgKGNsaXBMYXllci0+bWFza3NUb0JvdW5kcygpKQogICAgICAgICAgICAgdmlld0JvdW5kcyA9
IGNsaXBMYXllci0+Ym91bmRzKCk7CiAgICAgfQpAQCAtNjU1LDkgKzcwMCw3IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogICAgIC8vIGhhdmlu
ZyBhIHZlcnRpY2FsIHNjcm9sbGJhciBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdy4KICAgICBt
YXhTY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwt
PnNldE1heFNjcm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6
IEFsc28gdXBkYXRlIHN1YmxheWVycy4KKyAgICBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNldE1h
eFNjcm9sbFBvc2l0aW9uKG1heFNjcm9sbCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6c2V0TmVlZHNSZWRyYXcoKQpAQCAtNjY1LDUxICs3MDgsMTA5IEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJh
d09uSW1wbFRocmVhZCgpOwogfQogCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmVuc3VyZVJl
bmRlclN1cmZhY2VMYXllckxpc3QoKQoreworICAgIGlmICghbV9yb290TGF5ZXJJbXBsKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBuZWVkIGJvdGggYSBub24tZW1wdHkgcmVu
ZGVyIHN1cmZhY2UgbGF5ZXIgbGlzdCBhbmQgYSByb290IHJlbmRlcgorICAgIC8vIHN1cmZhY2Ug
dG8gYmUgYWJsZSB0byBpdGVyYXRlIG92ZXIgdGhlIHZpc2libGUgbGF5ZXJzLgorICAgIGlmICht
X3JlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpICYmIG1fcm9vdExheWVySW1wbC0+cmVuZGVy
U3VyZmFjZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIHdlIGFyZSBjYWxs
ZWQgYWZ0ZXIgc2V0Um9vdExheWVyKCkgYnV0IGJlZm9yZSBwcmVwYXJlVG9EcmF3KCksIHdlIG5l
ZWQKKyAgICAvLyB0byByZWNhbGN1bGF0ZSB0aGUgdmlzaWJsZSBsYXllcnMuIFRoaXMgcHJldmVu
dHMgYmVpbmcgdW5hYmxlIHRvIHNjcm9sbAorICAgIC8vIGR1cmluZyBwYXJ0IG9mIGEgY29tbWl0
LgorICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOworICAgIGNhbGN1bGF0ZVJl
bmRlclN1cmZhY2VMYXllckxpc3QobV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIHJl
dHVybiBtX3JlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpOworfQorCiBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6U2Nyb2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKGNv
bnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
SW5wdXRUeXBlIHR5cGUpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHNjcm9sbGFibGUgc3Vi
bGF5ZXJzLgotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JvbGxhYmxlKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJlZ2luIElnbm9y
ZWQgbm8gc2Nyb2xsYWJsZSIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsSWdub3Jl
ZDsKLSAgICB9CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
Y3JvbGxCZWdpbiIpOwogCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zaG91bGRTY3JvbGxP
bk1haW5UaHJlYWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVk
IHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Ny
b2xsRmFpbGVkOwotICAgIH0KKyAgICBBU1NFUlQoIW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJ
bXBsKTsKKyAgICBjbGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKCk7CisKKyAgICBpZiAoIWVu
c3VyZVJlbmRlclN1cmZhY2VMYXllckxpc3QoKSkKKyAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9y
ZWQ7CiAKICAgICBJbnRQb2ludCBkZXZpY2VWaWV3cG9ydFBvaW50ID0gdmlld3BvcnRQb2ludDsK
ICAgICBkZXZpY2VWaWV3cG9ydFBvaW50LnNjYWxlKG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0
b3IsIG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgLy8gVGhlIGludmVyc2Ug
b2YgdGhlIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0gdGFrZXMgdXMgZnJvbSBwaHlzaWNhbCBwaXhl
bHMgdG8gbGF5b3V0IHBpeGVscy4KLSAgICBJbnRQb2ludCBzY3JvbGxMYXllclBvaW50KG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChk
ZXZpY2VWaWV3cG9ydFBvaW50KSk7CisgICAgLy8gRmlyc3QgZmluZCBvdXQgd2hpY2ggbGF5ZXIg
d2FzIGhpdCBmcm9tIHRoZSBzYXZlZCBsaXN0IG9mIHZpc2libGUgbGF5ZXJzCisgICAgLy8gaW4g
dGhlIG1vc3QgcmVjZW50IGZyYW1lLgorICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodmlld3BvcnRQb2lu
dCwgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAotICAgIGlmIChtX3Njcm9sbExheWVySW1w
bC0+bm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKS5jb250YWlucyhzY3JvbGxMYXllclBvaW50KSkg
ewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uIiwgdGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7Ci0gICAg
fQorICAgIC8vIFdhbGsgdXAgdGhlIGhpZXJhcmNoeSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxl
IGxheWVyLgorICAgIENDTGF5ZXJJbXBsKiBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCA9
IDA7CisgICAgZm9yICg7IGxheWVySW1wbDsgbGF5ZXJJbXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQo
KSkgeworICAgICAgICAvLyBUaGUgY29udGVudCBsYXllciBjYW4gYWxzbyBibG9jayBhdHRlbXB0
cyB0byBzY3JvbGwgb3V0c2lkZSB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIGlmIChsYXllcklt
cGwtPnRyeVNjcm9sbChkZXZpY2VWaWV3cG9ydFBvaW50LCB0eXBlKSA9PSBTY3JvbGxPbk1haW5U
aHJlYWQpCisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsT25NYWluVGhyZWFkOworCisgICAgICAg
IENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50
TGF5ZXIobGF5ZXJJbXBsKTsKKyAgICAgICAgaWYgKCFzY3JvbGxMYXllckltcGwpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBTY3JvbGxTdGF0dXMgc3RhdHVzID0gc2Nyb2xsTGF5
ZXJJbXBsLT50cnlTY3JvbGwodmlld3BvcnRQb2ludCwgdHlwZSk7CiAKLSAgICBpZiAodHlwZSA9
PSBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwgJiYgbV9zY3JvbGxMYXllckltcGwtPmhhdmVX
aGVlbEV2ZW50SGFuZGxlcnMoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4g
RmFpbGVkIHdoZWVsRXZlbnRIYW5kbGVycyIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Ny
b2xsRmFpbGVkOworICAgICAgICAvLyBJZiBhbnkgbGF5ZXIgd2FudHMgdG8gZGl2ZXJ0IHRoZSBz
Y3JvbGwgZXZlbnQgdG8gdGhlIG1haW4gdGhyZWFkLCBhYm9ydC4KKyAgICAgICAgaWYgKHN0YXR1
cyA9PSBTY3JvbGxPbk1haW5UaHJlYWQpCisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsT25NYWlu
VGhyZWFkOworCisgICAgICAgIGlmIChzdGF0dXMgPT0gU2Nyb2xsU3RhcnRlZCAmJiAhcG90ZW50
aWFsbHlTY3JvbGxpbmdMYXllckltcGwpCisgICAgICAgICAgICBwb3RlbnRpYWxseVNjcm9sbGlu
Z0xheWVySW1wbCA9IHNjcm9sbExheWVySW1wbDsKICAgICB9CiAKLSAgICByZXR1cm4gU2Nyb2xs
U3RhcnRlZDsKKyAgICBpZiAocG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGwpIHsKKyAgICAg
ICAgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPSBwb3RlbnRpYWxseVNjcm9sbGluZ0xh
eWVySW1wbDsKKyAgICAgICAgcmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgfQorICAgIHJldHVy
biBTY3JvbGxJZ25vcmVkOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXll
ckltcGwpCisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3Jv
bGxCeSIpOworICAgIGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7
Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0gICAgbV9jbGll
bnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgRmxvYXRTaXplIHBlbmRpbmdE
ZWx0YShzY3JvbGxEZWx0YSk7CisgICAgcGVuZGluZ0RlbHRhLnNjYWxlKDEgLyBtX3BhZ2VTY2Fs
ZURlbHRhKTsKKworICAgIGZvciAoQ0NMYXllckltcGwqIGxheWVySW1wbCA9IG1fY3VycmVudGx5
U2Nyb2xsaW5nTGF5ZXJJbXBsOyBsYXllckltcGwgJiYgIXBlbmRpbmdEZWx0YS5pc1plcm8oKTsg
bGF5ZXJJbXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoIWxheWVySW1w
bC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEZsb2F0U2l6
ZSBwcmV2aW91c0RlbHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgICAgIGxheWVy
SW1wbC0+c2Nyb2xsQnkocGVuZGluZ0RlbHRhKTsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHBlbmRp
bmcgc2Nyb2xsIGRlbHRhIHRvIHplcm8gaWYgdGhlIGxheWVyIHdhcyBhYmxlIHRvIG1vdmUgYWxv
bmcgdGhlIHJlcXVlc3RlZAorICAgICAgICAvLyBheGlzLiBUaGlzIGlzIHRvIGVuc3VyZSBpdCBp
cyBwb3NzaWJsZSB0byBzY3JvbGwgZXhhY3RseSB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBh
CisgICAgICAgIC8vIHNjcm9sbCBhcmVhIHJlZ2FyZGxlc3Mgb2YgdGhlIHNjcm9sbCBzdGVwLiBG
b3IgZGlhZ29uYWwgc2Nyb2xscyB0aGlzIGFsc28gYXZvaWRzIGFwcGx5aW5nCisgICAgICAgIC8v
IHRoZSBzY3JvbGwgb24gb25lIGF4aXMgdG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICBpZiAo
cHJldmlvdXNEZWx0YS53aWR0aCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgp
KQorICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldFdpZHRoKDApOworICAgICAgICBpZiAocHJl
dmlvdXNEZWx0YS5oZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkp
CisgICAgICAgICAgICBwZW5kaW5nRGVsdGEuc2V0SGVpZ2h0KDApOworICAgIH0KKworICAgIGlm
ICghc2Nyb2xsRGVsdGEuaXNaZXJvKCkgJiYgcGVuZGluZ0RlbHRhLmlzRW1wdHkoKSkgeworICAg
ICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgbV9j
bGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgfQorfQorCit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmNsZWFyQ3VycmVudGx5U2Nyb2xsaW5nTGF5ZXIoKQoreworICAg
IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKKyAgICBtX3Njcm9sbGluZ0xheWVy
SWRGcm9tUHJldmlvdXNUcmVlID0gLTE7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2Nyb2xsRW5kKCkKIHsKKyAgICBjbGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKCk7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlQmVnaW4oKQpAQCAtNzIxLDkg
KzgyMiw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlQmVnaW4oKQog
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQgbWFnbmlm
eURlbHRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW50UG9pbnQmIGFuY2hvcikKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUiKTsKIAotICAgIGlm
ICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3ByZXZpb3VzUGluY2hBbmNob3IgPT0gSW50UG9p
bnQ6Onplcm8oKSkKQEAgLTczOCw3ICs4MzksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCBtYWduaWZ5RGVsdGEsCiAKICAgICBtX3ByZXZpb3Vz
UGluY2hBbmNob3IgPSBhbmNob3I7CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnko
cm91bmRlZEludFNpemUobW92ZSkpOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xs
Qnkocm91bmRlZEludFNpemUobW92ZSkpOwogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9u
SW1wbFRocmVhZCgpOwogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgp
OwogfQpAQCAtNzYwLDcgKzg2MSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0
ZURvdWJsZVRhcFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsCiAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNj
YWxlU2V0KiBzY3JvbGxJbmZvKQogewotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAg
aWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE9u
bHkgc2VuZCBmYWtlIHNjcm9sbC96b29tIGRlbHRhcyBpZiB3ZSdyZSBwaW5jaCB6b29taW5nIG91
dCBieSBhCkBAIC03NzIsNyArODczLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21w
dXRlUGluY2hab29tRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8KIAogICAg
IC8vIENvbXB1dGUgd2hlcmUgdGhlIHNjcm9sbCBvZmZzZXQvcGFnZSBzY2FsZSB3b3VsZCBiZSBp
ZiBmdWxseSBwaW5jaC16b29tZWQKICAgICAvLyBvdXQgZnJvbSB0aGUgYW5jaG9yIHBvaW50Lgot
ICAgIEludFNpemUgc2Nyb2xsQmVnaW4gPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsK
KyAgICBJbnRTaXplIHNjcm9sbEJlZ2luID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxE
ZWx0YSgpKTsKICAgICBzY3JvbGxCZWdpbi5zY2FsZShtX3BhZ2VTY2FsZURlbHRhKTsKICAgICBm
bG9hdCBzY2FsZUJlZ2luID0gbV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhOwogICAgIGZs
b2F0IHBhZ2VTY2FsZURlbHRhVG9TZW5kID0gbV9taW5QYWdlU2NhbGUgLyBtX3BhZ2VTY2FsZTsK
QEAgLTc5MiwyMiArODkzLDQwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBp
bmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvCiAKIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6bWFrZVNjcm9sbEFuZFNjYWxlU2V0KENDU2Nyb2xsQW5kU2NhbGVT
ZXQqIHNjcm9sbEluZm8sIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCwgZmxvYXQgcGFnZVNj
YWxlKQogewotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3Jv
bGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9s
bExheWVySW1wbC0+aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxPZmZzZXQg
LSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNjcm9s
bC5sYXllcklkID0gbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOworICAgIHNjcm9sbC5zY3Jv
bGxEZWx0YSA9IHNjcm9sbE9mZnNldCAtIHRvU2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNj
cm9sbFBvc2l0aW9uKCkpOwogICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7
Ci0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xs
RGVsdGEpOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNj
cm9sbC5zY3JvbGxEZWx0YSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZv
LT5wYWdlU2NhbGVEZWx0YSA9IHBhZ2VTY2FsZSAvIG1fcGFnZVNjYWxlOwogfQogCitzdGF0aWMg
dm9pZCBjb2xsZWN0U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8s
IENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7
CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBmbG9vcmVkSW50U2l6ZShsYXllckltcGwt
PnNjcm9sbERlbHRhKCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVw
ZGF0ZUluZm8gc2Nyb2xsOworICAgICAgICBzY3JvbGwubGF5ZXJJZCA9IGxheWVySW1wbC0+aWQo
KTsKKyAgICAgICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAgIHNj
cm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7CisgICAgICAgIGxheWVySW1wbC0+c2V0
U2VudFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY29s
bGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLCBsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0
KCkpOworfQorCiBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9z
dEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogewogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNj
YWxlU2V0PiBzY3JvbGxJbmZvID0gYWRvcHRQdHIobmV3IENDU2Nyb2xsQW5kU2NhbGVTZXQoKSk7
Ci0gICAgYm9vbCBkaWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKCFtX3Njcm9sbExheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDEuMGYp
OwotICAgIGlmICghZGlkTW92ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2ZSB8fCBtX3BhZ2VTY2Fs
ZUFuaW1hdGlvbikgeworCisgICAgaWYgKG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNj
YWxlQW5pbWF0aW9uKSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5m
by0+cGFnZVNjYWxlRGVsdGEgPSAxOwogICAgICAgICBpZiAobV9waW5jaEdlc3R1cmVBY3RpdmUp
CiAgICAgICAgICAgICBjb21wdXRlUGluY2hab29tRGVsdGFzKHNjcm9sbEluZm8uZ2V0KCkpOwpA
QCAtODE2LDE2ICs5MzUsOSBAQCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5
ZXJUcmVlSG9zdEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogICAgICAgICByZXR1cm4gc2Ny
b2xsSW5mby5yZWxlYXNlKCk7CiAgICAgfQogCisgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3Jv
bGxJbmZvLmdldCgpLCBtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogICAgIG1fc2VudFBhZ2VTY2Fs
ZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSBtX3BhZ2VTY2FsZURlbHRhOwog
Ci0gICAgLy8gRklYTUU6IHRyYWNrIHNjcm9sbHMgZnJvbSBsYXllcnMgb3RoZXIgdGhhbiB0aGUg
cm9vdAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7
Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9sbExheWVySW1wbC0+aWQoKTsKLSAgICBzY3Jv
bGwuc2Nyb2xsRGVsdGEgPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xs
RGVsdGEoKSk7Ci0gICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLQotICAg
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRh
KTsKLQogICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0KIApAQCAtODQwLDE1ICs5
NTIsMTUgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRGdWxsUm9vdExheWVyRGFtYWdl
KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlUGFnZVNjYWxlKGRvdWJsZSBt
b25vdG9uaWNUaW1lKQogewotICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24gfHwgIW1fc2Ny
b2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24gfHwgIW1fcm9vdFNj
cm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3Rh
bCA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsg
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsVG90
YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9u
KCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwogCiAgICAgc2V0UGFn
ZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShtb25vdG9u
aWNUaW1lKSAvIG1fcGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VT
Y2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKG1vbm90b25pY1RpbWUpOwogICAgIG5l
eHRTY3JvbGwuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOwotICAgIG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOworICAgIG1fcm9vdFNjcm9s
bExheWVySW1wbC0+c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKICAgICBtX2Ns
aWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIAogICAgIGlmIChtX3BhZ2VTY2Fs
ZUFuaW1hdGlvbi0+aXNBbmltYXRpb25Db21wbGV0ZUF0VGltZShtb25vdG9uaWNUaW1lKSkgewpA
QCAtODYyLDcgKzk3NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVy
cyhkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpCiAgICAgaWYgKCFDQ1Nl
dHRpbmdzOjphY2NlbGVyYXRlZEFuaW1hdGlvbkVuYWJsZWQoKSB8fCAhbV9uZWVkc0FuaW1hdGVM
YXllcnMgfHwgIW1fcm9vdExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAg
ICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMi
KTsKIAogICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRy
KG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogCkBAIC05MDYsNyArMTAxOCw3IEBAIHN0
YXRpYyB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5
ZXJJbXBsKiBjdXJyZW50KQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhclJlbmRlclN1
cmZhY2VzKCkKIHsKICAgICBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2
ZShtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwotICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGFueSBS
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0IHNhdmVkLCB0aGVuIG1ha2UgdGhlIGxpc3QgZW1wdHkgaGVy
ZS4KKyAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKIH0KIAogU3RyaW5nIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggNGRiOTAxZjczNzEyOTE0MDQxYTgyMjgxNmMwZGQy
ZGJlYTkxMzBjNy4uNjMwZTc5OGIwOThiOWMyOTVlYTE5MTJkZThiNTM0YjIzYjRhYzlhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtODYsNyArODYsNyBAQCBwdWJs
aWM6CiAKICAgICBzdHJ1Y3QgRnJhbWVEYXRhIHsKICAgICAgICAgQ0NSZW5kZXJQYXNzTGlzdCBy
ZW5kZXJQYXNzZXM7Ci0gICAgICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CisgICAgICAgIENDTGF5ZXJMaXN0KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgICAgICBD
Q0xheWVyTGlzdCB3aWxsRHJhd0xheWVyczsKICAgICB9OwogCkBAIC0xMzMsMTAgKzEzMywxMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3Qm
KTsKIAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKLSAg
ICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZWxlYXNlUm9vdExheWVyKCkgeyByZXR1cm4gbV9y
b290TGF5ZXJJbXBsLnJlbGVhc2UoKTsgfQogICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSB7
IHJldHVybiBtX3Jvb3RMYXllckltcGwuZ2V0KCk7IH0KIAotICAgIENDTGF5ZXJJbXBsKiBzY3Jv
bGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJbXBsOyB9CisgICAgLy8gUmVs
ZWFzZSBvd25lcnNoaXAgb2YgdGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBhbmQgcmVwbGFjZSBpdCB3
aXRoIGFuIGVtcHR5CisgICAgLy8gdHJlZS4gUmV0dXJucyB0aGUgcm9vdCBsYXllciBvZiB0aGUg
ZGV0YWNoZWQgdHJlZS4KKyAgICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBkZXRhY2hMYXllclRy
ZWUoKTsKKworICAgIENDTGF5ZXJJbXBsKiByb290U2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RTY3JvbGxMYXllckltcGw7IH0KIAogICAgIGJvb2wgdmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmlzaWJsZTsgfQogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKQEAgLTE5Niw4
ICsxOTksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgbWFrZVNjcm9sbEFuZFNjYWxlU2V0KENDU2Ny
b2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCwg
ZmxvYXQgcGFnZVNjYWxlKTsKIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwot
ICAgIHZvaWQgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLSAgICB2b2lkIGFk
anVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBkYXRlTWF4
U2Nyb2xsUG9zaXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NM
YXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKIApAQCAtMjEwLDEzICsyMTEsMTcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXpl
IGNvbnRlbnRTaXplKCkgY29uc3Q7CiAgICAgdm9pZCBzZW5kRGlkTG9zZUNvbnRleHRSZWN1cnNp
dmUoQ0NMYXllckltcGwqKTsKICAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZXMoKTsKKyAgICBi
b29sIGVuc3VyZVJlbmRlclN1cmZhY2VMYXllckxpc3QoKTsKKyAgICB2b2lkIGNsZWFyQ3VycmVu
dGx5U2Nyb2xsaW5nTGF5ZXIoKTsKIAogICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRT
dHJlYW0mLCBpbnQgaW5kZW50LCBjb25zdCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgUmVm
UHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPENDUmVuZGVyZXI+
IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1w
bDsKLSAgICBDQ0xheWVySW1wbCogbV9zY3JvbGxMYXllckltcGw7CisgICAgQ0NMYXllckltcGwq
IG1fcm9vdFNjcm9sbExheWVySW1wbDsKKyAgICBDQ0xheWVySW1wbCogbV9jdXJyZW50bHlTY3Jv
bGxpbmdMYXllckltcGw7CisgICAgaW50IG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1Ry
ZWU7CiAgICAgQ0NMYXllclRyZWVTZXR0aW5ncyBtX3NldHRpbmdzOwogICAgIEludFNpemUgbV92
aWV3cG9ydFNpemU7CiAgICAgSW50U2l6ZSBtX2RldmljZVZpZXdwb3J0U2l6ZTsKQEAgLTI0OCw2
ICsyNTMsMTAgQEAgcHJpdmF0ZToKIAogICAgIEZsb2F0UmVjdCBtX3Jvb3RTY2lzc29yUmVjdDsK
IAorICAgIC8vIExpc3Qgb2YgdmlzaWJsZSBsYXllcnMgZm9yIHRoZSBtb3N0IHJlY2VudGx5IHBy
ZXBhcmVkIGZyYW1lLiBVc2VkIGZvcgorICAgIC8vIHJlbmRlcmluZyBhbmQgaW5wdXQgZXZlbnQg
aGl0IHRlc3RpbmcuCisgICAgQ0NMYXllckxpc3QgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
CiAgICAgT3duUHRyPENDRnJhbWVSYXRlQ291bnRlcj4gbV9mcHNDb3VudGVyOwogICAgIE93blB0
cjxDQ0RlYnVnUmVjdEhpc3Rvcnk+IG1fZGVidWdSZWN0SGlzdG9yeTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbC5jcHAKaW5kZXggOGUwYzYxM2E0MmEzOTY2N2VhNjNlNjVlOTI1YTIyYTdhMzRiMTQ5
ZC4uNjNiZjI3MGZlMDIyNjQzNjBmNDI3YTJlMjNjNjI4Y2FlYTExMmM5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9uIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpo
CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgRHJvcEV2ZW50LCBidXQgaW4g
Y2FzZXMgd2hlcmUgd2UgZmFpbCB0byBwcm9wZXJseSBzeW5jIHNjcm9sbGFiaWxpdHkgaXQncyBz
YWZlciB0byBzZW5kIHRoZQogICAgICAgICAgICAgLy8gZXZlbnQgdG8gdGhlIG1haW4gdGhyZWFk
LiBDaGFuZ2UgYmFjayB0byBEcm9wRXZlbnQgb25jZSB3ZSBoYXZlIHN5bmNocm9uaXphdGlvbiBi
dWdzIHNvcnRlZCBvdXQuCiAgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOyAKLSAgICAg
ICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgorICAgICAgICBjYXNl
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ6CiAgICAgICAgICAgICBy
ZXR1cm4gRGlkTm90SGFuZGxlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldmVudC50eXBl
ID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbikgewpAQCAtMjA2LDcgKzIwNiw3
IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9uIFdlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoCiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQ6CiAgICAgICAgICAgICBtX2dlc3R1cmVTY3JvbGxTdGFydGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBEaWRIYW5kbGU7Ci0gICAgICAgIGNhc2UgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDoKKyAgICAgICAgY2FzZSBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkOgogICAgICAgICAgICAgcmV0dXJuIERpZE5v
dEhhbmRsZTsKICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3Jl
ZDoKICAgICAgICAgICAgIHJldHVybiBEcm9wRXZlbnQ7CkBAIC0yNzgsOCArMjc4LDggQEAgV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OkV2ZW50RGlzcG9zaXRpb24gV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGw6OmgKICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjaGVk
dWxlQW5pbWF0aW9uKCk7CiAgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfQotICAgIGNh
c2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDogewotICAgICAgICBUUkFDRV9F
VkVOVF9JTlNUQU5UMCgiY2MiLCAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRs
ZUdlc3R1cmVGbGluZzo6ZmFpbGVkIik7CisgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsT25NYWluVGhyZWFkOiB7CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIs
ICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nOjpzY3Jv
bGxPbk1haW5UaHJlYWQiKTsKICAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKICAgICB9CiAg
ICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAKaW5kZXggMGFhZDcwZjkxNmY5NzgyMzhhMjVmMmIzNjBiNWU5YzM3MjVkZDE2NC4u
NmUxYjY1Yzk1NmMzMzc5MTEyM2FiYmUxYTAyMTc2NmIyZjgzY2YyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QuY3BwCkBAIC0zNTgxLDYgKzM1ODEsMjcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yTXVsdGlwbGVMYXllckxpc3RzKQogICAgIEVYUEVDVF9F
USg0LCByZXN1bHRMYXllci0+aWQoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5U3VidHJlZVNlYXJjaCkKK3sKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IG1hc2tMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKworICAgIGdyYW5kQ2hpbGQtPnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIuZ2V0KCkp
OworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLmdldCgpKTsKKyAgICBjaGlsZC0+c2V0
TWFza0xheWVyKG1hc2tMYXllci5nZXQoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQuZ2V0
KCkpOworCisgICAgaW50IG5vbmV4aXN0ZW50SWQgPSAtMTsKKyAgICBFWFBFQ1RfRVEocm9vdCwg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgcm9v
dC0+aWQoKSkpOworICAgIEVYUEVDVF9FUShjaGlsZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpm
aW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgY2hpbGQtPmlkKCkpKTsKKyAgICBFWFBFQ1Rf
RVEoZ3JhbmRDaGlsZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUo
cm9vdC5nZXQoKSwgZ3JhbmRDaGlsZC0+aWQoKSkpOworICAgIEVYUEVDVF9FUShtYXNrTGF5ZXIs
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIG1h
c2tMYXllci0+aWQoKSkpOworICAgIEVYUEVDVF9FUShyZXBsaWNhTGF5ZXIsIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIHJlcGxpY2FMYXllci0+
aWQoKSkpOworICAgIEVYUEVDVF9FUSgwLCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXll
ckluU3VidHJlZShyb290LmdldCgpLCBub25leGlzdGVudElkKSk7Cit9CiAKIC8vIEZJWE1FOgog
Ly8gY29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njg5NDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggN2Q2ZGNmNzllZTRmYzAxZTRjYTdmMGVk
MGJmMjlhOWVjYThmNTNkMS4uMzUwOTM3NmFmOGNlZWVlOGJlMzYwZjg4NjJhYzJmYWMxNTVkYTM2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTEzOSw2ICsxMzksMjcgQEAgcHVibGljOgogICAgICAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIH0KIAorICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoaW50
IGlkLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAg
ICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKGlkKTsKKyAgICAgICAgbGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIGxh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihw
b3NpdGlvbik7CisgICAgICAgIGxheWVyLT5zZXRCb3VuZHMoc2l6ZSk7CisgICAgICAgIGxheWVy
LT5zZXRDb250ZW50Qm91bmRzKHNpemUpOworICAgICAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9z
aXRpb24oSW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpICogMikpOworICAg
ICAgICByZXR1cm4gbGF5ZXIucmVsZWFzZSgpOworICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKQorICAgIHsKKyAgICAgICAgbV9ob3N0SW1wbC0+
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY3JlYXRlQ29udGV4dCgpLCBVbnRocm90dGxlZFVwbG9h
ZGVyKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAg
ICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAg
ICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgICAgICBtX2hvc3RJbXBsLT5k
aWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBQYXNzUmVm
UHRyPENDR3JhcGhpY3NDb250ZXh0PiBjcmVhdGVDb250ZXh0KCkKICAgICB7CkBAIC0yMjMsMTMg
KzI0NCw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFSZXBl
YXRlZFNjcm9sbHMpCiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9v
dENhbGxzQ29tbWl0QW5kUmVkcmF3KQogewotICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICAgICAgcm9vdC0+c2V0U2Ny
b2xsYWJsZSh0cnVlKTsKLSAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQo
MCwgMCkpOwotICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwg
MTAwKSk7Ci0gICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7
Ci0gICAgfQorICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOwor
ICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKICAgICBFWFBFQ1Rf
RVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKICAg
ICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CkBAIC0yMzgsMjAgKzI1NSw1
NyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RDYWxsc0NvbW1p
dEFuZFJlZHJhdykKICAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOwogfQogCitU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFdpdGhvdXRSb290TGF5ZXIpCit7
CisgICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmFzaCB3aGVuIHRyeWluZyB0byBzY3JvbGwgYW4gZW1w
dHkgbGF5ZXIgdHJlZS4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCByZXBsYWNlVHJlZVdoaWxlU2Nyb2xsaW5nKQoreworICAgIGNvbnN0IGludCBzY3JvbGxM
YXllcklkID0gMDsKKworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgx
MDAsIDEwMCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1
MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAv
LyBXZSBzaG91bGQgbm90IGNyYXNoIGlmIHRoZSB0cmVlIGlzIHJlcGxhY2VkIHdoaWxlIHdlIGFy
ZSBzY3JvbGxpbmcuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+ZGV0YWNoTGF5ZXJUcmVlKCk7
CisKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsK
KworICAgIC8vIFdlIHNob3VsZCBzdGlsbCBiZSBzY3JvbGxpbmcsIGJlY2F1c2UgdGhlIHNjcm9s
bGVkIGxheWVyIGFsc28gZXhpc3RzIGluIHRoZSBuZXcgdHJlZS4KKyAgICBJbnRTaXplIHNjcm9s
bERlbHRhKDAsIDEwKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Cisg
ICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVT
ZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAg
ZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVySWQsIHNjcm9sbERlbHRhKTsK
K30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBjbGVhclJvb3RSZW5kZXJTdXJm
YWNlQW5kU2Nyb2xsKQoreworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6
ZSgxMDAsIDEwMCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUw
LCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAg
ICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBzY3JvbGwgZXZlbiBpZiB0aGUgcm9vdCBsYXllciBs
b3NlcyBpdHMgcmVuZGVyIHN1cmZhY2UgYWZ0ZXIgdGhlIG1vc3QKKyAgICAvLyByZWNlbnQgcmVu
ZGVyLgorICAgIG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5jbGVhclJlbmRlclN1cmZhY2UoKTsK
KyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxT
dGFydGVkKTsKK30KKwogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50
SGFuZGxlcnMpCiB7Ci0gICAgewotICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDApOwotICAgICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUp
OwotICAgICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7Ci0gICAg
ICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKLSAgICAg
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKLSAgICB9CisgICAg
c2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgbV9o
b3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKICAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1f
aG9zdEltcGwtPnJvb3RMYXllcigpOwogCiAgICAgcm9vdC0+c2V0SGF2ZVdoZWVsRXZlbnRIYW5k
bGVycyh0cnVlKTsKKwogICAgIC8vIFdpdGggcmVnaXN0ZXJlZCBldmVudCBoYW5kbGVycywgd2hl
ZWwgc2Nyb2xscyBoYXZlIHRvIGdvIHRvIHRoZSBtYWluIHRocmVhZC4KLSAgICBFWFBFQ1RfRVEo
bV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworICAgIEVY
UEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRo
cmVhZCk7CiAKICAgICAvLyBCdXQgZ2VzdHVyZSBzY3JvbGxzIGNhbiBzdGlsbCBiZSBoYW5kbGVk
LgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsU3RhcnRlZCk7CkBAIC0yNTksMjcgKzMxMywyOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHdoZWVsRXZlbnRIYW5kbGVycykKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQpCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICByb290LT5zZXRTY3JvbGxh
YmxlKHRydWUpOwotICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsK
LSAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAg
c2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgbV9o
b3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1f
aG9zdEltcGwtPnJvb3RMYXllcigpOworCiAgICAgcm9vdC0+c2V0U2hvdWxkU2Nyb2xsT25NYWlu
VGhyZWFkKHRydWUpOwotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2Uo
KSk7Ci0gICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDAp
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsRmFpbGVkKTsKLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbEZhaWxlZCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xs
QmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOworICAgIEVYUEVDVF9FUShtX2hv
c3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
Okdlc3R1cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKTsKIH0K
IAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bkJhc2ljKQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7Ci0gICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKLSAgICByb290LT5zZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7Ci0gICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9z
aXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXll
cnMoSW50U2l6ZSgyMDAsIDIwMCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJ
bnRTaXplKDEwMCwgMTAwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJh
bWUoKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpOwor
CiAgICAgcm9vdC0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oSW50UmVjdCgwLCAwLCA1MCwg
NTApKTsKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworCiAg
ICAgLy8gQWxsIHNjcm9sbCB0eXBlcyBpbnNpZGUgdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVn
aW9uIHNob3VsZCBmYWlsLgotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJ
bnRQb2ludCgyNSwgMjUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUp
LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKKyAgICBFWFBFQ1RfRVEobV9o
b3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7Cisg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bE9uTWFpblRocmVhZCk7CiAKICAgICAvLyBBbGwgc2Nyb2xsIHR5cGVzIG91dHNpZGUgdGhpcyBy
ZWdpb24gc2hvdWxkIHN1Y2NlZWQuCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJl
Z2luKEludFBvaW50KDc1LCA3NSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKQEAgLTI5MiwxNiArMzQ4LDEzIEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25CYXNp
YykKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbldpdGhPZmZzZXQpCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgwKTsKLSAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwotICAgIHJv
b3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsKLSAgICByb290LT5zZXRNYXhT
Y3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgc2V0dXBTY3JvbGxBbmRDb250
ZW50c0xheWVycyhJbnRTaXplKDIwMCwgMjAwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3Bv
cnRTaXplKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9z
dEltcGwtPnJvb3RMYXllcigpOworCiAgICAgcm9vdC0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdp
b24oSW50UmVjdCgwLCAwLCA1MCwgNTApKTsKICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KC0yNSwgMCkpOwotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2Uo
KSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOwotICAgIEVYUEVD
VF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBs
LT5kcmF3TGF5ZXJzKGZyYW1lKTsgLy8gVXBkYXRlIGRyYXcgdHJhbnNmb3JtcyBzbyB3ZSBjYW4g
Y29ycmVjdGx5IG1hcCBwb2ludHMgaW50byBsYXllciBzcGFjZS4KKyAgICBpbml0aWFsaXplTGF5
ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogCiAgICAgLy8gVGhpcyBwb2ludCB3b3VsZCBmYWxs
IGludG8gdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uIGV4Y2VwdCB0aGF0IHdlJ3ZlIG1v
dmVkIHRoZSBsYXllciBkb3duIGJ5IDI1IHBpeGVscy4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1w
bC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNDAsIDEwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Oldo
ZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMzA5LDE1ICsz
NjIsMTYgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbldpdGhPZmZzZXQpCiAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CiAKICAgICAv
LyBUaGlzIHBvaW50IGlzIHN0aWxsIGluc2lkZSB0aGUgbm9uLWZhc3QgcmVnaW9uLgotICAgIEVY
UEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxMCwgMTApLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVk
KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTAsIDEw
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbE9uTWFpblRocmVhZCk7CiB9CiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
cGluY2hHZXN0dXJlKQogewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6
ZSgxMDAsIDEwMCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUw
LCA1MCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKLSAg
ICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5zY3JvbGxMYXllcigpOwor
ICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnJvb3RTY3JvbGxMYXll
cigpOwogICAgIEFTU0VSVChzY3JvbGxMYXllcik7CiAKICAgICBjb25zdCBmbG9hdCBtaW5QYWdl
U2NhbGUgPSAwLjUsIG1heFBhZ2VTY2FsZSA9IDQ7CkBAIC0zOTYsOCArNDUwLDkgQEAgVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYWdlU2NhbGVBbmltYXRpb24pCiB7CiAgICAgc2V0
dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAotICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXll
ciA9IG1faG9zdEltcGwtPnNjcm9sbExheWVyKCk7CisgICAgQ0NMYXllckltcGwqIHNjcm9sbExh
eWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7CiAgICAgQVNTRVJUKHNjcm9sbExh
eWVyKTsKIAogICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VTY2FsZSA9IDAuNSwgbWF4UGFnZVNjYWxl
ID0gNDsKQEAgLTQ0MSw2ICs0OTYsMTAxIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgcGFnZVNjYWxlQW5pbWF0aW9uKQogICAgIH0KIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBpbmhpYml0U2Nyb2xsQW5kUGFnZVNjYWxlVXBkYXRlc1doaWxlUGluY2hab29t
aW5nKQoreworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOwor
ICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBDQ0xheWVy
SW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290U2Nyb2xsTGF5ZXIoKTsKKyAgICBB
U1NFUlQoc2Nyb2xsTGF5ZXIpOworCisgICAgY29uc3QgZmxvYXQgbWluUGFnZVNjYWxlID0gMC41
LCBtYXhQYWdlU2NhbGUgPSA0OworCisgICAgLy8gUGluY2ggem9vbSBpbi4KKyAgICB7CisgICAg
ICAgIC8vIFN0YXJ0IGEgcGluY2ggaW4gZ2VzdHVyZSBhdCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5l
ciBvZiB0aGUgdmlld3BvcnQuCisgICAgICAgIGNvbnN0IGZsb2F0IHpvb21JbkRlbHRhID0gMjsK
KyAgICAgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDEsIG1pblBh
Z2VTY2FsZSwgbWF4UGFnZVNjYWxlKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJl
QmVnaW4oKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlVXBkYXRlKHpvb21JbkRl
bHRhLCBJbnRQb2ludCg1MCwgNTApKTsKKworICAgICAgICAvLyBCZWNhdXNlIHdlIGFyZSBwaW5j
aCB6b29taW5nIGluLCB3ZSBzaG91bGRuJ3QgZ2V0IGFueSBzY3JvbGwgb3IgcGFnZQorICAgICAg
ICAvLyBzY2FsZSBkZWx0YXMuCisgICAgICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBz
Y3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgICAgICBF
WFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIDEpOworICAgICAgICBFWFBFQ1Rf
RVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDB1KTsKKworICAgICAgICAvLyBPbmNlIHRo
ZSBnZXN0dXJlIGVuZHMsIHdlIGdldCB0aGUgZmluYWwgc2Nyb2xsIGFuZCBwYWdlIHNjYWxlIHZh
bHVlcy4KKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlRW5kKCk7CisgICAgICAgIHNj
cm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgICAgIEVY
UEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgem9vbUluRGVsdGEpOworICAgICAg
ICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xsTGF5ZXItPmlkKCksIEludFNpemUo
MjUsIDI1KSk7CisgICAgfQorCisgICAgLy8gUGluY2ggem9vbSBvdXQuCisgICAgeworICAgICAg
ICAvLyBTdGFydCBhIHBpbmNoIG91dCBnZXN0dXJlIGF0IHRoZSBib3R0b20gcmlnaHQgY29ybmVy
IG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgICAgY29uc3QgZmxvYXQgem9vbU91dERlbHRhID0gMC43
NTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDEsIG1p
blBhZ2VTY2FsZSwgbWF4UGFnZVNjYWxlKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0
dXJlQmVnaW4oKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlVXBkYXRlKHpvb21P
dXREZWx0YSwgSW50UG9pbnQoNTAsIDUwKSk7CisKKyAgICAgICAgLy8gU2luY2Ugd2UgYXJlIHBp
bmNoIHpvb21pbmcgb3V0LCB3ZSBzaG91bGQgZ2V0IGFuIHVwZGF0ZSB0byB6b29tIGFsbAorICAg
ICAgICAvLyB0aGUgd2F5IG91dCB0byB0aGUgbWluaW11bSBwYWdlIHNjYWxlLgorICAgICAgICBP
d25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nl
c3NTY3JvbGxEZWx0YXMoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2Fs
ZURlbHRhLCBtaW5QYWdlU2NhbGUpOworICAgICAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5m
bywgc2Nyb2xsTGF5ZXItPmlkKCksIEludFNpemUoMCwgMCkpOworCisgICAgICAgIC8vIE9uY2Ug
dGhlIGdlc3R1cmUgZW5kcywgd2UgZ2V0IHRoZSBmaW5hbCBzY3JvbGwgYW5kIHBhZ2Ugc2NhbGUg
dmFsdWVzLgorICAgICAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVFbmQoKTsKKyAgICAgICAg
c2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICAgICAg
RVhQRUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCB6b29tT3V0RGVsdGEpOworICAg
ICAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xsTGF5ZXItPmlkKCksIEludFNp
emUoOCwgOCkpOworICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBp
bmhpYml0U2Nyb2xsQW5kUGFnZVNjYWxlVXBkYXRlc1doaWxlQW5pbWF0aW5nUGFnZVNjYWxlKQor
eworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwor
ICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBDQ0xheWVySW1wbCog
c2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290U2Nyb2xsTGF5ZXIoKTsKKyAgICBBU1NFUlQo
c2Nyb2xsTGF5ZXIpOworCisgICAgY29uc3QgZmxvYXQgbWluUGFnZVNjYWxlID0gMC41LCBtYXhQ
YWdlU2NhbGUgPSA0OworICAgIGNvbnN0IGRvdWJsZSBzdGFydFRpbWUgPSAxOworICAgIGNvbnN0
IGRvdWJsZSBkdXJhdGlvbiA9IDAuMTsKKyAgICBjb25zdCBkb3VibGUgaGFsZndheVRocm91Z2hB
bmltYXRpb24gPSBzdGFydFRpbWUgKyBkdXJhdGlvbiAvIDI7CisgICAgY29uc3QgZG91YmxlIGVu
ZFRpbWUgPSBzdGFydFRpbWUgKyBkdXJhdGlvbjsKKworICAgIC8vIFN0YXJ0IGEgcGFnZSBzY2Fs
ZSBhbmltYXRpb24uCisgICAgY29uc3QgZmxvYXQgcGFnZVNjYWxlRGVsdGEgPSAyOworICAgIG1f
aG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCBtaW5QYWdlU2NhbGUsIG1h
eFBhZ2VTY2FsZSk7CisgICAgbV9ob3N0SW1wbC0+c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oSW50
U2l6ZSg1MCwgNTApLCBmYWxzZSwgcGFnZVNjYWxlRGVsdGEsIHN0YXJ0VGltZSwgZHVyYXRpb24p
OworCisgICAgLy8gV2Ugc2hvdWxkIGltbWVkaWF0ZWx5IGdldCB0aGUgZmluYWwgem9vbSBhbmQg
c2Nyb2xsIHZhbHVlcyBmb3IgdGhlCisgICAgLy8gYW5pbWF0aW9uLgorICAgIG1faG9zdEltcGwt
PmFuaW1hdGUoaGFsZndheVRocm91Z2hBbmltYXRpb24sIGhhbGZ3YXlUaHJvdWdoQW5pbWF0aW9u
KTsKKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdElt
cGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFn
ZVNjYWxlRGVsdGEsIHBhZ2VTY2FsZURlbHRhKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xs
SW5mbywgc2Nyb2xsTGF5ZXItPmlkKCksIEludFNpemUoMjUsIDI1KSk7CisKKyAgICAvLyBTY3Jv
bGxpbmcgZHVyaW5nIHRoZSBhbmltYXRpb24gaXMgaWdub3JlZC4KKyAgICBjb25zdCBJbnRTaXpl
IHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVn
aW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5
KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgIC8vIFRo
ZSBmaW5hbCBwYWdlIHNjYWxlIGFuZCBzY3JvbGwgZGVsdGFzIHNob3VsZCBtYXRjaCB3aGF0IHdl
IGdvdAorICAgIC8vIGVhcmxpZXIuCisgICAgbV9ob3N0SW1wbC0+YW5pbWF0ZShlbmRUaW1lLCBl
bmRUaW1lKTsKKyAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRh
cygpOworICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgcGFnZVNjYWxl
RGVsdGEpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLCBzY3JvbGxMYXllci0+aWQo
KSwgSW50U2l6ZSgyNSwgMjUpKTsKK30KKwogY2xhc3MgRGlkRHJhd0NoZWNrTGF5ZXIgOiBwdWJs
aWMgQ0NUaWxlZExheWVySW1wbCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RGlk
RHJhd0NoZWNrTGF5ZXI+IGNyZWF0ZShpbnQgaWQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBEaWRE
cmF3Q2hlY2tMYXllcihpZCkpOyB9CkBAIC02NTcsNiArODA3LDI5OSBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1doZW5BbmltYXRpb25Vc2VzQ2hl
Y2tlcmJvYXJkKQogICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwogfQog
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RJZ25vcmVkKQorewor
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Cisg
ICAgcm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExh
eWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdG
cmFtZSgpOworCisgICAgLy8gU2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSBsYXllciBp
cyBub3Qgc2Nyb2xsYWJsZS4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0
UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxOb25Db21wb3NpdGVkUm9vdCkKK3sK
KyAgICAvLyBUZXN0IHRoZSBjb25maWd1cmF0aW9uIHdoZXJlIGEgbm9uLWNvbXBvc2l0ZWQgcm9v
dCBsYXllciBpcyBlbWJlZGRlZCBpbiBhCisgICAgLy8gc2Nyb2xsYWJsZSBvdXRlciBsYXllci4K
KyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGNvbnRlbnRMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgY29udGVudExh
eWVyLT5zZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUpOworICAgIGNvbnRlbnRMYXllci0+
c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oSW50
UG9pbnQoNSwgNSkpOworICAgIGNvbnRlbnRMYXllci0+c2V0Qm91bmRzKHN1cmZhY2VTaXplKTsK
KyAgICBjb250ZW50TGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZShzdXJmYWNlU2l6ZS53
aWR0aCgpICogMiwgc3VyZmFjZVNpemUuaGVpZ2h0KCkgKiAyKSk7CisKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IHNjcm9sbExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBzY3Jv
bGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBzY3JvbGxMYXllci0+c2V0TWF4U2Ny
b2xsUG9zaXRpb24oc3VyZmFjZVNpemUpOworICAgIHNjcm9sbExheWVyLT5hZGRDaGlsZChjb250
ZW50TGF5ZXIucmVsZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3Jv
bGxMYXllci5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJm
YWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKwor
ICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0
YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBt
X2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRy
YXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykK
K3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5hZGRDaGlsZChj
cmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsK
KyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9z
dEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9s
bEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBF
WFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVx
dWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
TWlzc2VzQ2hpbGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9v
dC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1
cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgp
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGwgZXZl
bnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBpbnB1dCBjb29yZGluYXRlIGlzIG91dHNpZGUgdGhl
IGxheWVyIGJvdW5kYXJpZXMuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2lu
KEludFBvaW50KDE1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVl
c3RSZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0JhY2tmYWNpbmdDaGls
ZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBPd25QdHI8Q0NMYXll
ckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSks
IHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNp
emUpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC5y
b3RhdGUzZCgxODAsIDAsIDApOworICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAg
ICBjaGlsZC0+c2V0RG91YmxlU2lkZWQoZmFsc2UpOworCisgICAgcm9vdC0+YWRkQ2hpbGQoY2hp
bGQucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNl
KCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAv
LyBTY3JvbGwgZXZlbnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBzY3JvbGxhYmxlIGxheWVyIGlz
IG5vdCBmYWNpbmcgdGhlIHZpZXdlciBhbmQgdGhlcmUgaXMKKyAgICAvLyBub3RoaW5nIHNjcm9s
bGFibGUgYmVoaW5kIGl0LgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJ
bnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RS
ZWRyYXcpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJsb2NrZWRCeUNvbnRlbnRMYXllcikK
K3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBjb250ZW50TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1
LCA1KSwgc3VyZmFjZVNpemUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2hvdWxkU2Nyb2xsT25N
YWluVGhyZWFkKHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7
CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0gY3JlYXRlU2Nyb2xsYWJs
ZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXll
ci0+YWRkQ2hpbGQoY29udGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hvc3RJbXBsLT5z
ZXRSb290TGF5ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRW
aWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5k
RHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGxpbmcgZmFpbHMgYmVjYXVzZSB0aGUgY29udGVu
dCBsYXllciBpcyBhc2tpbmcgdG8gYmUgc2Nyb2xsZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFp
blRocmVhZCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9v
dEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VT
aXplKDEwLCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwg
c3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2Uo
KSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBleHBlY3RlZFNjcm9sbERlbHRhKHNjcm9sbERl
bHRhKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9zdEltcGwtPnJvb3RMYXll
cigpLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3Jv
bGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAv
LyBTZXQgbmV3IHBhZ2Ugc2NhbGUgZnJvbSBtYWluIHRocmVhZC4KKyAgICBtX2hvc3RJbXBsLT5z
ZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCBwYWdlU2NhbGUsIHBhZ2VTY2Fs
ZSk7CisKKyAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSBzY3JvbGwgZGVsdGEu
CisgICAgZXhwZWN0ZWRTY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGUpOworICAgIE93blB0cjxD
Q1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9s
bERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAwLCBleHBl
Y3RlZFNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIGFsc28g
aGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigp
LT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9sbCk7CisKKyAgICAvLyBUaGUg
cGFnZSBzY2FsZSBkZWx0YSByZW1haW5zIGNvbnN0YW50IGJlY2F1c2UgdGhlIGltcGwgdGhyZWFk
IGRpZCBub3Qgc2NhbGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5w
YWdlU2NhbGVEZWx0YSgpLCAxKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFkKQoreworICAgIEludFNp
emUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBv
aW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJv
b3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNp
emUpOworICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCAxLCBw
YWdlU2NhbGUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisK
KyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkU2Ny
b2xsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIEludFNpemUgZXhwZWN0ZWRNYXhTY3JvbGwobV9o
b3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCkpOworICAgIEVYUEVDVF9F
UShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAg
IG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3Jv
bGxFbmQoKTsKKworICAgIC8vIFNldCBuZXcgcGFnZSBzY2FsZSBvbiBpbXBsIHRocmVhZCBieSBw
aW5jaGluZy4KKyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVCZWdpbigpOworICAgIG1faG9z
dEltcGwtPnBpbmNoR2VzdHVyZVVwZGF0ZShwYWdlU2NhbGUsIEludFBvaW50KCkpOworICAgIG1f
aG9zdEltcGwtPnBpbmNoR2VzdHVyZUVuZCgpOworCisgICAgLy8gVGhlIHNjcm9sbCBkZWx0YSBp
cyBub3Qgc2NhbGVkIGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisgICAg
T3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9j
ZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCks
IDAsIGV4cGVjdGVkU2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91
bGQgYWxzbyBoYXZlIGJlZW4gdXBkYXRlZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9v
dExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKKworICAg
IC8vIFRoZSBwYWdlIHNjYWxlIGRlbHRhIHNob3VsZCBtYXRjaCB0aGUgbmV3IHNjYWxlIG9uIHRo
ZSBpbXBsIHNpZGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5wYWdl
U2NhbGVEZWx0YSgpLCBwYWdlU2NhbGUpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHNjcm9sbENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQoreworICAg
IEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIC8vIEFsc28gbWFyayB0aGUgcm9vdCBz
Y3JvbGxhYmxlIHNvIGl0IGJlY29tZXMgdGhlIHJvb3Qgc2Nyb2xsIGxheWVyLgorICAgIHJvb3Qt
PnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJs
ZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3
cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJh
d0ZyYW1lKCk7CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5
ZXIoKS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwg
MTApOworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAg
SW50U2l6ZSBleHBlY3RlZE1heFNjcm9sbChjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSk7Cisg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9z
dEltcGwtPnNjcm9sbEVuZCgpOworCisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBtX2hv
c3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCAxLCBwYWdlU2Nh
bGUpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRh
LgorICAgIGV4cGVjdGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAgICBPd25QdHI8
Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3Jv
bGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMSwgZXhw
ZWN0ZWRTY3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBub3Qg
aGF2ZSBjaGFuZ2VkLgorICAgIEVYUEVDVF9FUShjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSwg
ZXhwZWN0ZWRNYXhTY3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZGVsdGEgcmVtYWlu
cyBjb25zdGFudCBiZWNhdXNlIHRoZSBpbXBsIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIEVY
UEVDVF9FUShjaGlsZC0+cGFnZVNjYWxlRGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdCkKK3sKKyAgICAvLyBTY3Jv
bGwgYSBjaGlsZCBsYXllciBiZXlvbmQgaXRzIG1heGltdW0gc2Nyb2xsIHJhbmdlIGFuZCBtYWtl
IHN1cmUgdGhlCisgICAgLy8gcGFyZW50IGxheWVyIGlzIHNjcm9sbGVkIG9uIHRoZSBheGlzIG9u
IHdoaWNoIHRoZSBjaGlsZCB3YXMgdW5hYmxlIHRvCisgICAgLy8gc2Nyb2xsLgorICAgIEludFNp
emUgc3VyZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBj
cmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwor
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxh
eWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBncmFuZENoaWxkLT5z
ZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCA1KSk7CisKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1
cmZhY2VTaXplKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMywgMCkp
OworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290
LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXll
cihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZh
Y2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAg
IHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgtMywgLTcpOworICAgICAgICBFWFBFQ1Rf
RVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAg
ICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgICAgICBtX2hvc3RJ
bXBsLT5zY3JvbGxFbmQoKTsKKworICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4g
c2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKworICAgICAg
ICAvLyBUaGUgZ3JhbmQgY2hpbGQgc2hvdWxkIGhhdmUgc2Nyb2xsZWQgdXAgdG8gaXRzIGxpbWl0
LgorICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+
Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBj
aGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9s
bEluZm8uZ2V0KCksIGdyYW5kQ2hpbGQtPmlkKCksIEludFNpemUoMCwgLTUpKTsKKworICAgICAg
ICAvLyBUaGUgY2hpbGQgc2hvdWxkIGhhdmUgb25seSBzY3JvbGxlZCBvbiB0aGUgb3RoZXIgYXhp
cy4KKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgp
LCBJbnRTaXplKC0zLCAwKSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHNjcm9sbEV2ZW50QnViYmxpbmcpCit7CisgICAgLy8gV2hlbiB3ZSB0cnkgdG8gc2Ny
b2xsIGEgbm9uLXNjcm9sbGFibGUgY2hpbGQgbGF5ZXIsIHRoZSBzY3JvbGwgZGVsdGEKKyAgICAv
LyBzaG91bGQgYmUgYXBwbGllZCB0byBvbmUgb2YgaXRzIGFuY2VzdG9ycyBpZiBwb3NzaWJsZS4K
KyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJs
ZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKworICAgIGNoaWxkLT5z
ZXRTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkp
OworCisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBt
X2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVM
YXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgeworICAgICAgICBJbnRTaXplIHNjcm9s
bERlbHRhKDAsIDQpOworICAgICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4o
SW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnko
c2Nyb2xsRGVsdGEpOworICAgICAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgICAg
ICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnBy
b2Nlc3NTY3JvbGxEZWx0YXMoKTsKKworICAgICAgICAvLyBPbmx5IHRoZSByb290IHNob3VsZCBo
YXZlIHNjcm9sbGVkLgorICAgICAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXpl
KCksIDF1KTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIG1faG9z
dEltcGwtPnJvb3RMYXllcigpLT5pZCgpLCBzY3JvbGxEZWx0YSk7CisgICAgfQorfQorCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJlZm9yZVJlZHJhdykKK3sKKyAgICBJ
bnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICAv
LyBEcmF3IG9uZSBmcmFtZSBhbmQgdGhlbiBpbW1lZGlhdGVseSByZWJ1aWxkIHRoZSBsYXllciB0
cmVlIHRvIG1pbWljIGEgdHJlZSBzeW5jaHJvbml6YXRpb24uCisgICAgaW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBtX2hvc3RJbXBsLT5kZXRhY2hMYXllclRyZWUo
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAs
IEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisKKyAgICAvLyBTY3JvbGxpbmcgc2hv
dWxkIHN0aWxsIHdvcmsgZXZlbiB0aG91Z2ggd2UgZGlkIG5vdCBkcmF3IHlldC4KKyAgICBFWFBF
Q1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsK
K30KKwogY2xhc3MgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKICAgICBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQoKSA6
IG1fYmxlbmQoZmFsc2UpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMzU1ZmNlYWM1ZDgzOTdhZGFlZmEzNjEz
YThkNTE0OWQ3MjE3MjE4Mi4uNjQ0N2UxMmZjYTAyZTZiZWYxMDhhYTE1MjA1ZTlhMjllOWVlZDY3
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwCkBAIC0yMjIwLDQgKzIyMjAsNzggQEAgcHJpdmF0ZToKIAogU0lOR0xFX0FO
RF9NVUxUSV9USFJFQURfVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllckFkZGVkV2l0aEFu
aW1hdGlvbikKIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCwgcHVibGljIExheWVyQ2hyb21pdW1TY3JvbGxEZWxl
Z2F0ZSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIo
KQorICAgICAgICA6IG1fc2Nyb2xsQW1vdW50KDIsIDEpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBiZWdpblRlc3QoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290
U2Nyb2xsTGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0
ZSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTAp
KTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX3Jv
b3RTY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RTY3Jv
bGxMYXllcik7CisgICAgICAgIG1fY2hpbGRMYXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpj
cmVhdGUoJm1fbW9ja0RlbGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRMYXllclNj
cm9sbERlbGVnYXRlKHRoaXMpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEJvdW5kcyhJbnRT
aXplKDUwLCA1MCkpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7
CisgICAgICAgIG1fY2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAgbV9j
aGlsZExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIpOworICAgICAgICBw
b3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKSBPVkVSUklERQorICAgIHsK
KyAgICAgICAgbV9yZXBvcnRlZFNjcm9sbEFtb3VudCA9IHNjcm9sbERlbHRhOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhLCBmbG9hdCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIEludFBvaW50IHBvc2l0aW9u
ID0gbV9yb290U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcm9vdFNj
cm9sbExheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiArIHNjcm9sbERlbHRhKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdEltcGwqIGltcGwpIE9WRVJSSURFCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9yb290
U2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBpZiAo
IW1fbGF5ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUSht
X2NoaWxkTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJ
bnRQb2ludCgpICsgbV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBk
cmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKSBPVkVSUklERQor
ICAgIHsKKyAgICAgICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAg
ICAgRVhQRUNUX0VRKGltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7
CisgICAgICAgICAgICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAg
ICBpbXBsLT5zY3JvbGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51bWJl
cigpID09IDIpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFmdGVyVGVzdCgpIE9WRVJSSURFCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9zY3Jv
bGxBbW91bnQsIG1fcmVwb3J0ZWRTY3JvbGxBbW91bnQpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBjb25zdCBJbnRTaXplIG1fc2Nyb2xsQW1vdW50OworICAgIEludFNpemUgbV9yZXBvcnRlZFNj
cm9sbEFtb3VudDsKKyAgICBNb2NrQ29udGVudExheWVyRGVsZWdhdGUgbV9tb2NrRGVsZWdhdGU7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbV9yb290U2Nyb2xsTGF5ZXI7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3Qo
dHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVz
dC5jcHAKaW5kZXggOTJmMDA2MTg0MTQ3OTU2ZTEwMTlmYzY5MDE1ZjYzOWU0ODk0ZjMzMS4uZDVi
NjhhODY3Zjc4MmNjNjdmZDFiN2JjMjk2MjA1MjkzNGZkNzA5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGxUZXN0LmNwcApAQCAtMjAyLDE0ICsyMDIsMTQgQEAgVEVTVF9GKFdlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQpCiAgICAgbV9p
bnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CiB9CiAKLVRFU1RfRihXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxGYWlsZWQpCitURVNU
X0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlU2Nyb2xsT25NYWlu
VGhyZWFkKQogewogICAgIC8vIFdlIHNob3VsZCBzZW5kIGFsbCBldmVudHMgdG8gdGhlIHdpZGdl
dCBmb3IgdGhpcyBnZXN0dXJlLgogICAgIG1fZXhwZWN0ZWREaXNwb3NpdGlvbiA9IERpZE5vdEhh
bmRsZTsKICAgICBWRVJJRllfQU5EX1JFU0VUX01PQ0tTKCk7CiAKICAgICBFWFBFQ1RfQ0FMTCht
X21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4oOjp0ZXN0aW5nOjpfLCA6OnRl
c3Rpbmc6Ol8pKQotICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAgICAgLldpbGxPbmNlKHRl
c3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWlu
VGhyZWFkKSk7CiAKICAgICBnZXN0dXJlLnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Ny
b2xsQmVnaW47CiAgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7
CkBAIC0zMDYsNyArMzA2LDcgQEAgVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
VGVzdCwgZ2VzdHVyZUZsaW5nRmFpbGVkKQogICAgIFZFUklGWV9BTkRfUkVTRVRfTU9DS1MoKTsK
IAogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdp
bih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJl
dHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAg
ICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbE9uTWFpblRocmVhZCkpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViSW5wdXRF
dmVudDo6R2VzdHVyZUZsaW5nU3RhcnQ7CiAgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0
RXZlbnQoZ2VzdHVyZSk7CkBAIC0zODcsNyArMzg3LDcgQEAgVEVTVF9GKFdlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZUZsaW5nQW5pbWF0ZXMpCiAgICAgLy8gdHJhbnNm
ZXJyZWQgdG8gdGhlIG1haW4gdGhyZWFkLgogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRI
YW5kbGVyQ2xpZW50LCBzY2hlZHVsZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfQ0FMTChtX21v
Y2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6
XykpCi0gICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCkpOworICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6
UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQp
KTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQnko
dGVzdGluZzo6XykpLlRpbWVzKDApOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5k
bGVyQ2xpZW50LCBzY3JvbGxFbmQoKSkuVGltZXMoMCk7CiAKQEAgLTQ2OSw3ICs0NjksNyBAQCBU
RVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdUcmFu
c2ZlclJlc2V0cykKICAgICAvLyB0cmFuc2ZlcnJlZCB0byB0aGUgbWFpbiB0aHJlYWQuCiAgICAg
RVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxlQW5pbWF0aW9u
KCkpOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxC
ZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5nOjpfKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6
OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7Cisg
ICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCkpOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5w
dXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCeSh0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CiAgICAgRVhQ
RUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEVuZCgpKS5UaW1lcygw
KTsKIApAQCAtNTQ2LDcgKzU0Niw3IEBAIFRFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbFRlc3QsIGdlc3R1cmVGbGluZ1RyYW5zZmVyUmVzZXRzKQogICAgIC8vIFRoZW4gYWJvcnQg
dGhlIHNlY29uZCBmbGluZy4KICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNs
aWVudCwgc2NoZWR1bGVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1
dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rpbmc6Ol8pKQotICAg
ICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihX
ZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKSk7CiAgICAg
RVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJ5KHRlc3Rpbmc6
Ol8pKS5UaW1lcygwKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVu
dCwgc2Nyb2xsRW5kKCkpLlRpbWVzKDApOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147700</attachid>
            <date>2012-06-14 18:40:45 -0700</date>
            <delta_ts>2012-06-15 03:10:51 -0700</delta_ts>
            <desc>Exact same patch again</desc>
            <filename>bug-73350-20120614184045.patch</filename>
            <type>text/plain</type>
            <size>85060</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjM1YzU4YTVhNGZhOTFk
Yjg5NTI2ZWU2ZjcyMDA0NTRmZjdiOTk2OS4uMDhkYjgyYjE2ZGJjZmEwMWFjOTNlOTA4NGE4M2Nk
YTRjY2I5ZDMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0wNi0xNCAgU2Ft
aSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEFsbG93IHNjcm9sbGluZyBub24tcm9vdCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAor
CisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZC4KKyAgICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xs
ZWQgQ0NMYXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgbWFpbiB0aHJl
YWQuCisKKyAgICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZl
biBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9s
bGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgTGF5ZXIgaGl0IHRlc3RpbmcgY29k
ZSBieSBTaGF3biBTaW5naC4KKworICAgICAgICBBZGRlZCBuZXcgdW5pdCB0ZXN0cyB0byB2ZXJp
ZnkgbGF5ZXIgc2Nyb2xsaW5nIGJlaGF2aW9yOgorCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LnZlcmlmeVN1YnRyZWVTZWFyY2gKKyAgICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNsZWFyUm9vdFJlbmRlclN1cmZhY2VBbmRTY3JvbGwKKyAgICAgICAgICAg
IENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVz
V2hpbGVBbmltYXRpbmdQYWdlU2NhbGUKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVzV2hpbGVQaW5jaFpvb21pbmcKKyAg
ICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnJlcGxhY2VUcmVlV2hpbGVTY3JvbGxp
bmcKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbEJlZm9yZVJlZHJh
dworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQmxvY2tlZEJ5Q29u
dGVudExheWVyCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxDaGls
ZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZAorICAgICAgICAgICAgQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdAorICAgICAgICAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsRXZlbnRCdWJibGluZworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkCisg
ICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxNaXNzZXNDaGlsZAorICAg
ICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QK
KyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RBbmRDaGFuZ2VQ
YWdlU2NhbGVPbkltcGxUaHJlYWQKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LnNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQKKyAgICAgICAgICAgIEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RJZ25vcmVkCisgICAgICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxXaXRob3V0Um9vdExheWVyCisgICAgICAgICAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcgorICAgICAgICAgICAgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGxUZXN0Lmdlc3R1cmVTY3JvbGxPbk1haW5UaHJlYWQKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbEJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZTo6fkxheWVyQ2hyb21pdW1T
Y3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJTY3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6c29ydExheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbEFuZFNjYWxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVySW5TdWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVu
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRv
RHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRldGFjaExheWVyVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNj
YWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRl
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6ZW5zdXJlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjbGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjptYWtlU2Nyb2xsQW5kU2NhbGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sbGVjdFNjcm9sbERlbHRhcyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVQYWdlU2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhclJlbmRlclN1cmZhY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6Cisg
ICAgICAgIChGcmFtZURhdGEpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290U2Nyb2xsTGF5ZXIpOgorCiAy
MDEyLTA2LTE0ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaWxl
UmVhZGVyIGlzIGR5c2Z1bmN0aW9uYWwgaW4gZG9jdW1lbnRzIHdpdGggIm51bGwiIG9yaWdpbiBz
dHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzM1MGI3YzE0Nzc0Mzg0OWRjMDM0
ZjU4MGQzY2QzNzQxZTdiMDBhMi4uZDI5MmE4ODg1YmZmMmI2MWExNTg4ZTNjYTVhYzdhZTE4MDc5
OTY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMi0w
Ni0xNCAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Y2hyb21pdW1dIEFsbG93IHNjcm9sbGluZyBub24tcm9vdCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0
b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MzM1MAorCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAg
IE5ldyB1bml0IHRlc3RzIHRvIHZlcmlmeSBsYXllciBzY3JvbGxpbmcgYmVoYXZpb3IgYW5kIHRo
ZSBhc3NvY2lhdGVkCisgICAgICAgIHV0aWxpdHkgZnVuY3Rpb25zLgorCisgICAgICAgICogc3Jj
L1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnRJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0
dXJlRmxpbmcpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3Bw
OgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAg
KiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6TW9ja0NvbnRl
bnRMYXllckRlbGVnYXRlOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxDaGlsZExheWVyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2lu
VGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVy
OjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbENoaWxkTGF5ZXI6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpkcmF3TGF5ZXJzT25DQ1RocmVh
ZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjph
ZnRlclRlc3QpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAg
ICAgKiB0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpURVNUX0YpOgorCiAyMDEyLTA2LTE0ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1h
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBTdWItcGl4ZWwgdGV4dCByZW5k
ZXJpbmcgaXMgaW5jb3JyZWN0bHkgdXNlZCBmb3IgV2ViVmlldyB3aXRoIHRyYW5zcGFyZW50IGJh
Y2tncm91bmQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDdlNGEwNGRjODQ5YTVmYTIzMmJh
YzNkNjcyM2UyOWI3YjY1NTRhNDMuLjFkMWJiMTQxMzQzMDhjNmI4MTZlNzkyMTNhZjA5ZjkyOTk3
NmI1MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC05NCw2ICs5NCw3IEBAIExheWVyQ2hy
b21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybUlzQW5p
bWF0aW5nKGZhbHNlKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEuMCkKICAgICAsIG1fbGF5ZXJB
bmltYXRpb25EZWxlZ2F0ZSgwKQorICAgICwgbV9sYXllclNjcm9sbERlbGVnYXRlKDApCiB7CiB9
CiAKQEAgLTM5NSw2ICszOTYsMTQgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRTY3JvbGxQb3Np
dGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiAgICAgc2V0TmVlZHNDb21taXQo
KTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJ
bnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikKK3sKKyAgICBpZiAobV9tYXhTY3JvbGxQb3NpdGlv
biA9PSBtYXhTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fbWF4U2Nyb2xs
UG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQor
CiB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxhYmxlKQogewog
ICAgIGlmIChtX3Njcm9sbGFibGUgPT0gc2Nyb2xsYWJsZSkKQEAgLTQyOCw2ICs0MzcsMTMgQEAg
dm9pZCBMYXllckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdp
b24mIHJlZ2lvbikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIExheWVyQ2hyb21p
dW06OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIHNldFNjcm9s
bFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxEZWx0YSk7CisgICAgaWYgKG1fbGF5
ZXJTY3JvbGxEZWxlZ2F0ZSkKKyAgICAgICAgbV9sYXllclNjcm9sbERlbGVnYXRlLT5kaWRTY3Jv
bGwoc2Nyb2xsRGVsdGEpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldERyYXdDaGVja2Vy
Ym9hcmRGb3JNaXNzaW5nVGlsZXMoYm9vbCBjaGVja2VyYm9hcmQpCiB7CiAgICAgaWYgKG1fZHJh
d0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyA9PSBjaGVja2VyYm9hcmQpCkBAIC01NDUsNiAr
NTYxLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBs
KiBsYXllcikKICAgICBsYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyKG1fZml4ZWRUb0Nv
bnRhaW5lckxheWVyKTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7
CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgIGxh
eWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNjcm9sbFBvc2l0aW9uKTsKICAgICBsYXll
ci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7CiAgICAgaWYgKCF0
cmFuc2Zvcm1Jc0FuaW1hdGluZygpKQogICAgICAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1fdHJh
bnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBlYzkzODczNTA2ZDY1OTQ2Nzk4YzcwNjYw
NjBlOWEzMzQyZjJjMDYxLi40YTVmMWFlNzNhMDNiMjlhZTM5MWNlNGNjMDJiNjMwYjJhOTkyNjM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC02NSw2ICs2NSwxNSBAQCBjbGFzcyBDQ0xheWVyVHJl
ZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwogY2xhc3MgU2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bTsKIAorLy8gRGVsZWdhdGUgZm9yIGhhbmRsaW5nIHNjcm9sbCBpbnB1dCBmb3IgYSBMYXll
ckNocm9taXVtLgorY2xhc3MgTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRlIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IEludFNpemUmKSA9IDA7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIH5MYXllckNocm9taXVtU2Nyb2xsRGVsZWdhdGUoKSB7IH0KK307
CisKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5
cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCiBjbGFzcyBMYXllckNocm9taXVt
IDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4sIHB1YmxpYyBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckNsaWVudCB7CkBAIC0xNTEsMTIgKzE2MCwxOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0K
IAorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYpOworICAgIGNv
bnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXhTY3Jv
bGxQb3NpdGlvbjsgfQorCiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2wpOworICAgIGJvb2wg
c2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZTsgfQogICAgIHZvaWQgc2V0
U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKGJvb2wpOwogICAgIHZvaWQgc2V0SGF2ZVdoZWVsRXZl
bnRIYW5kbGVycyhib29sKTsKICAgICBjb25zdCBSZWdpb24mIG5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKCkgeyByZXR1cm4gbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsgfQogICAgIHZvaWQgc2V0
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJik7CiAgICAgdm9pZCBzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQoKSB7IG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb25D
aGFuZ2VkID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0TGF5ZXJTY3JvbGxEZWxlZ2F0ZShMYXllckNo
cm9taXVtU2Nyb2xsRGVsZWdhdGUqIGxheWVyU2Nyb2xsRGVsZWdhdGUpIHsgbV9sYXllclNjcm9s
bERlbGVnYXRlID0gbGF5ZXJTY3JvbGxEZWxlZ2F0ZTsgfQorICAgIHZvaWQgc2Nyb2xsQnkoY29u
c3QgSW50U2l6ZSYpOwogCiAgICAgdm9pZCBzZXREcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1Rp
bGVzKGJvb2wpOwogICAgIGJvb2wgZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlczsgfQpAQCAtMzI2
LDYgKzM0MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVXNlcyB0YXJnZXQgc3VyZmFjZSdzIHNwYWNl
LgogICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0
aW9uOworICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fc2Nyb2xs
YWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwogICAgIGJvb2wgbV9o
YXZlV2hlZWxFdmVudEhhbmRsZXJzOwpAQCAtMzc4LDYgKzM5NCw3IEBAIHByaXZhdGU6CiAgICAg
ZmxvYXQgbV9jb250ZW50c1NjYWxlOwogCiAgICAgQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlKiBt
X2xheWVyQW5pbWF0aW9uRGVsZWdhdGU7CisgICAgTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRl
KiBtX2xheWVyU2Nyb2xsRGVsZWdhdGU7CiB9OwogCiB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+OjppdGVyYXRvciwgdm9pZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgKaW5kZXgg
NzY2MDhkOWZjMWQwZGExMzlhNDkzMGJjNTA0N2MwOGFlYjhiMmRmNC4uNzdkZDJkYmNmNzRiNzdm
ODAyNzFjZWM0ZjI1YmE3MWMwNTBmZjJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCkBA
IC00NSwxMiArNDUsMTIgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIENDSW5wdXRIYW5kbGVyQ2xp
ZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0lucHV0SGFuZGxlckNsaWVudCk7CiBw
dWJsaWM6Ci0gICAgZW51bSBTY3JvbGxTdGF0dXMgeyBTY3JvbGxGYWlsZWQsIFNjcm9sbFN0YXJ0
ZWQsIFNjcm9sbElnbm9yZWQgfTsKKyAgICBlbnVtIFNjcm9sbFN0YXR1cyB7IFNjcm9sbE9uTWFp
blRocmVhZCwgU2Nyb2xsU3RhcnRlZCwgU2Nyb2xsSWdub3JlZCB9OwogICAgIGVudW0gU2Nyb2xs
SW5wdXRUeXBlIHsgR2VzdHVyZSwgV2hlZWwgfTsKIAogICAgIC8vIEF0dGVtcHQgdG8gc3RhcnQg
c2Nyb2xsaW5nIGEgbGF5ZXIgYXQgYSBnaXZlbiBwb2ludCBpbiB3aW5kb3cKICAgICAvLyBjb29y
ZGluYXRlcy4gUmV0dXJucyBTY3JvbGxTdGFydGVkIGlmIHRoZSBsYXllciBhdCB0aGUgY29vcmRp
bmF0ZXMgY2FuCi0gICAgLy8gYmUgc2Nyb2xsZWQsIFNjcm9sbEZhaWxlZCBpZiB0aGUgc2Nyb2xs
IGV2ZW50IHNob3VsZCBpbnN0ZWFkIGJlCisgICAgLy8gYmUgc2Nyb2xsZWQsIFNjcm9sbE9uTWFp
blRocmVhZCBpZiB0aGUgc2Nyb2xsIGV2ZW50IHNob3VsZCBpbnN0ZWFkIGJlCiAgICAgLy8gZGVs
ZWdhdGVkIHRvIHRoZSBtYWluIHRocmVhZCwgb3IgU2Nyb2xsSWdub3JlZCBpZiB0aGVyZSBpcyBu
b3RoaW5nIHRvCiAgICAgLy8gYmUgc2Nyb2xsZWQgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLgog
ICAgIHZpcnR1YWwgU2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNvbnN0IEludFBvaW50JiwgU2Ny
b2xsSW5wdXRUeXBlKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggOGE1Mzg5OWY2
NzZhZmNlZGUyZmU1YTM0ODdjM2RjZGEwNDUyYzJhNC4uZTYxYmY5MWQwNmM1Y2EyNWM1YzNiYTZi
NGYzYmU0NjlhMWI5Y2QwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0ND
RGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKKyNp
bmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCiAjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCiAj
aW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KQEAgLTE4Niw2ICsxODcsNDAgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2Nyb2xs
QnkoY29uc3QgRmxvYXRTaXplJiBzY3JvbGwpCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
Rm9yU3VidHJlZSgpOwogfQogCitDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIEND
TGF5ZXJJbXBsOjp0cnlTY3JvbGwoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAo
c2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIs
ICJDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsOiBGYWlsZWQgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFk
Iik7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhy
ZWFkOworICAgIH0KKworICAgIGlmICghc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pc0ludmVydGli
bGUoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJJbXBsOjp0cnlTY3Jv
bGw6IElnbm9yZWQgbm9uSW52ZXJ0aWJsZVRyYW5zZm9ybSIpOworICAgICAgICByZXR1cm4gQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ7CisgICAgfQorCisgICAgaWYgKCFub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbigpLmlzRW1wdHkoKSkgeworICAgICAgICBib29sIGNsaXBwZWQg
PSBmYWxzZTsKKyAgICAgICAgRmxvYXRQb2ludCBoaXRUZXN0UG9pbnRJbkxvY2FsU3BhY2UgPSBD
Q01hdGhVdGlsOjpwcm9qZWN0UG9pbnQoc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCks
IEZsb2F0UG9pbnQodmlld3BvcnRQb2ludCksIGNsaXBwZWQpOworICAgICAgICBpZiAoIWNsaXBw
ZWQgJiYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKS5jb250YWlucyhmbG9vcmVkSW50UG9pbnQo
aGl0VGVzdFBvaW50SW5Mb2NhbFNwYWNlKSkpIHsKKyAgICAgICAgICAgIFRSQUNFX0VWRU5UMCgi
Y2MiLCAiQ0NMYXllckltcGw6OnRyeVNjcm9sbDogRmFpbGVkIG5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uIik7CisgICAgICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9u
TWFpblRocmVhZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBlID09IENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpXaGVlbCAmJiBoYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkpIHsKKyAgICAg
ICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsOiBGYWlsZWQgd2hl
ZWxFdmVudEhhbmRsZXJzIik7CisgICAgICAgIHJldHVybiBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsT25NYWluVGhyZWFkOworICAgIH0KKworICAgIGlmICghc2Nyb2xsYWJsZSgpKSB7Cisg
ICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllckltcGw6OnRyeVNjcm9sbDogSWdub3Jl
ZCBub3Qgc2Nyb2xsYWJsZSIpOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbElnbm9yZWQ7CisgICAgfQorCisgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxTdGFydGVkOworfQorCiBjb25zdCBJbnRSZWN0IENDTGF5ZXJJbXBsOjpnZXREcmF3
UmVjdCgpIGNvbnN0CiB7CiAgICAgLy8gRm9ybSB0aGUgbWF0cml4IHVzZWQgYnkgdGhlIHNoYWRl
ciB0byBtYXAgdGhlIGNvcm5lcnMgb2YgdGhlIGxheWVyJ3MKQEAgLTIzOCw3ICsyNzMsNyBAQCB2
b2lkIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQg
aW5kZW50KSBjb25zdAogCiB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPENDTGF5ZXJJbXBsKj46Oml0
ZXJhdG9yIGZpcnN0LCBWZWN0b3I8Q0NMYXllckltcGwqPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVy
U29ydGVyKiBsYXllclNvcnRlcikKIHsKLSAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzb3J0TGF5ZXJzIiwgMCwgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJMYXll
clJlbmRlcmVyQ2hyb21pdW06OnNvcnRMYXllcnMiKTsKICAgICBsYXllclNvcnRlci0+c29ydChm
aXJzdCwgZW5kKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMGEyM2NkODgzZWEwYzhj
NTMzMDExZDFmMzEwZTc4MGMxNmNhNTExNy4uNDkyOTA2MDY2OGQzMDUzYmE3OGU1NjNiODU5ZWU5
Mjg2ODg2MzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJl
YW0uaCIKKyNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgi
CiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKQEAgLTIxOCw2ICsyMTksOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXREcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzKGJvb2wg
Y2hlY2tlcmJvYXJkKSB7IG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyA9IGNoZWNr
ZXJib2FyZDsgfQogICAgIGJvb2wgZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fZHJhd0NoZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlczsgfQogCisgICAg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyB0cnlTY3JvbGwoY29uc3QgSW50UG9p
bnQmIHZpZXdwb3J0UG9pbnQsIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUp
IGNvbnN0OworCiAgICAgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmlzaWJsZUxheWVyUmVjdDsgfQogICAgIHZvaWQgc2V0VmlzaWJsZUxheWVyUmVj
dChjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KSB7IG1fdmlzaWJsZUxheWVyUmVjdCA9
IHZpc2libGVMYXllclJlY3Q7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5k
ZXggOGYyNDZkM2M1OWJmNThkMzc0NGE3YTU1YmNhZDZlOWNkMWM2M2M1Zi4uNGE1ZmNmM2MzZDQz
OGRmOTdjZmNhNDE4M2FhMmI2ZDM4YjJlMTc1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENv
bW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIHsKICAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgaG9zdEltcGwtPnNldFJvb3RM
YXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0
SW1wbC0+cmVsZWFzZVJvb3RMYXllcigpLCBob3N0SW1wbCkpOworICAgIGhvc3RJbXBsLT5zZXRS
b290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwg
aG9zdEltcGwtPmRldGFjaExheWVyVHJlZSgpLCBob3N0SW1wbCkpOwogCiAgICAgLy8gV2UgbWF5
IGhhdmUgYWRkZWQgYW4gYW5pbWF0aW9uIGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwg
Y2F1c2UgYm90aCBsYXllciB0cmVlIGhvc3RzCiAgICAgLy8gdG8gdmlzaXQgdGhlaXIgY29udHJv
bGxlcnMuCkBAIC02MTgsMTUgKzYxOCw0MiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAg
IG9jY2x1c2lvblRyYWNrZXIub3ZlcmRyYXdNZXRyaWNzKCkucmVjb3JkTWV0cmljcyh0aGlzKTsK
IH0KIAorc3RhdGljIExheWVyQ2hyb21pdW0qIGZpbmRGaXJzdFNjcm9sbGFibGVMYXllcihMYXll
ckNocm9taXVtKiBsYXllcikKK3sKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmIChsYXllci0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1cm4gbGF5ZXI7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytp
KSB7CisgICAgICAgIExheWVyQ2hyb21pdW0qIGZvdW5kID0gZmluZEZpcnN0U2Nyb2xsYWJsZUxh
eWVyKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAg
ICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBDQ1Njcm9sbEFuZFNj
YWxlU2V0JiBpbmZvKQogewotICAgIC8vIEZJWE1FOiBwdXNoaW5nIHNjcm9sbCBvZmZzZXRzIHRv
IG5vbi1yb290IGxheWVycyBub3QgaW1wbGVtZW50ZWQKLSAgICBpZiAoIWluZm8uc2Nyb2xscy5z
aXplKCkpCisgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNT
RVJUKGluZm8uc2Nyb2xscy5zaXplKCkgPT0gMSk7Ci0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9
IGluZm8uc2Nyb2xsc1swXS5zY3JvbGxEZWx0YTsKLSAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxB
bmRTY2FsZShzY3JvbGxEZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CisgICAgTGF5ZXJDaHJv
bWl1bSogcm9vdFNjcm9sbExheWVyID0gZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKG1fcm9vdExh
eWVyLmdldCgpKTsKKyAgICBJbnRTaXplIHJvb3RTY3JvbGxEZWx0YTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5mby5zY3JvbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVy
Q2hyb21pdW0qIGxheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRy
ZWUobV9yb290TGF5ZXIuZ2V0KCksIGluZm8uc2Nyb2xsc1tpXS5sYXllcklkKTsKKyAgICAgICAg
aWYgKCFsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobGF5ZXIgPT0g
cm9vdFNjcm9sbExheWVyKQorICAgICAgICAgICAgcm9vdFNjcm9sbERlbHRhICs9IGluZm8uc2Ny
b2xsc1tpXS5zY3JvbGxEZWx0YTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGF5ZXItPnNj
cm9sbEJ5KGluZm8uc2Nyb2xsc1tpXS5zY3JvbGxEZWx0YSk7CisgICAgfQorICAgIGlmICghcm9v
dFNjcm9sbERlbHRhLmlzWmVybygpIHx8IGluZm8ucGFnZVNjYWxlRGVsdGEgIT0gMSkKKyAgICAg
ICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUocm9vdFNjcm9sbERlbHRhLCBpbmZvLnBh
Z2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0
ZXIoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmgKaW5kZXggZTVlNGZkOWEyYzIzODJiOWU5MjVjYTc5NDk4
NTkzNzcxNjgyMjlkOS4uZTVhNGZlYzljMTU2ZTRmNTEwMTllNmY2NmJmNmExOGM4NjA2M2IyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKQEAgLTUyLDYgKzUyLDEw
IEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3RhdGljIGJv
b2wgcmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiwgaW50IHRhcmdl
dFN1cmZhY2VMYXllcklEKTsKIAorICAgIC8vIFJldHVybnMgYSBsYXllciB3aXRoIHRoZSBnaXZl
biBpZCBpZiBvbmUgZXhpc3RzIGluIHRoZSBzdWJ0cmVlIHN0YXJ0aW5nCisgICAgLy8gZnJvbSB0
aGUgZ2l2ZW4gcm9vdCBsYXllciAoaW5jbHVkaW5nIG1hc2sgYW5kIHJlcGxpY2EgbGF5ZXJzKS4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBMYXllclR5cGUqIGZpbmRM
YXllckluU3VidHJlZShMYXllclR5cGUqIHJvb3RMYXllciwgaW50IGxheWVySWQpOworCiAgICAg
c3RydWN0IFNjcm9sbFVwZGF0ZUluZm8gewogICAgICAgICBpbnQgbGF5ZXJJZDsKICAgICAgICAg
SW50U2l6ZSBzY3JvbGxEZWx0YTsKQEAgLTc3LDYgKzgxLDI1IEBAIGJvb2wgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqIGxh
eWVyLCBpCiAgICAgcmV0dXJuIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPmlkKCkg
IT0gdGFyZ2V0U3VyZmFjZUxheWVySUQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZT4KK0xheWVyVHlwZSogQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUo
TGF5ZXJUeXBlKiByb290TGF5ZXIsIGludCBsYXllcklkKQoreworICAgIGlmIChyb290TGF5ZXIt
PmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAgICAgcmV0dXJuIHJvb3RMYXllcjsKKworICAgIGlmIChy
b290TGF5ZXItPm1hc2tMYXllcigpICYmIHJvb3RMYXllci0+bWFza0xheWVyKCktPmlkKCkgPT0g
bGF5ZXJJZCkKKyAgICAgICAgcmV0dXJuIHJvb3RMYXllci0+bWFza0xheWVyKCk7CisKKyAgICBp
ZiAocm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiByb290TGF5ZXItPnJlcGxpY2FMYXllcigp
LT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiByb290TGF5ZXItPnJlcGxpY2FMYXll
cigpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290TGF5ZXItPmNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKExheWVyVHlwZSogZm91bmQgPSBmaW5kTGF5ZXJJ
blN1YnRyZWUocm9vdExheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpLCBsYXllcklkKSkKKyAgICAg
ICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCmluZGV4IGE5ODVjM2Y2MmEyMWU3MDE3YmE4YjBhMjViYWQwODVkNmQ1MTIzYjguLjcy
MjYxMTZhZWJjMmViMjk1ZDc0NjkzZjQ4MGI2YzJjOWFiNjM0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xMTUsNyArMTE1LDkgQEAgQ0NMYXllclRyZWVI
b3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJiBz
ZXR0aW5ncywgQ0MKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fc291cmNlRnJhbWVO
dW1iZXIoLTEpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCi0gICAgLCBtX3Njcm9sbExheWVySW1w
bCgwKQorICAgICwgbV9yb290U2Nyb2xsTGF5ZXJJbXBsKDApCisgICAgLCBtX2N1cnJlbnRseVNj
cm9sbGluZ0xheWVySW1wbCgwKQorICAgICwgbV9zY3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3Vz
VHJlZSgtMSkKICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3Zpc2libGUodHJ1
ZSkKICAgICAsIG1fc291cmNlRnJhbWVDYW5CZURyYXduKHRydWUpCkBAIC0xMzgsNyArMTQwLDcg
QEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ0xheWVy
VHJlZVNldHRpbmdzJiBzZXR0aW5ncywgQ0MKIENDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVy
VHJlZUhvc3RJbXBsKCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwot
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1w
bCgpIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJ
bXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpIik7CiAKICAgICBpZiAobV9yb290TGF5ZXJJbXBs
KQogICAgICAgICBjbGVhclJlbmRlclN1cmZhY2VzKCk7CkBAIC0xODIsMTAgKzE4NCwxMCBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIGRv
dWJsZSB3YWxsQ2xvY2tUaW1lKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFn
ZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hv
clBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWUsIGRvdWJsZSBkdXJhdGlv
bikKIHsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9yb290U2Nyb2xs
TGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0g
Zmxvb3JlZEludFNpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9
IGZsb29yZWRJbnRTaXplKG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSAr
IG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAgICAgc2Nyb2xsVG90YWwu
c2NhbGUobV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgZmxvYXQgc2NhbGVUb3RhbCA9IG1fcGFnZVNj
YWxlICogbV9wYWdlU2NhbGVEZWx0YTsKICAgICBJbnRTaXplIHNjYWxlZENvbnRlbnRTaXplID0g
Y29udGVudFNpemUoKTsKQEAgLTIzNSw2ICsyMzcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIs
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxp
c3QoQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgQVNTRVJUKHJl
bmRlclN1cmZhY2VMYXllckxpc3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9yb290TGF5ZXJJ
bXBsKTsKIAogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKG1fcm9vdExheWVySW1w
bC5nZXQoKSk7CiAKQEAgLTI0Niw3ICsyNDksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXllckxpc3QmIHJlbmRlclN1cgog
ICAgIG1fcm9vdExheWVySW1wbC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBkZXZp
Y2VWaWV3cG9ydFNpemUoKSkpOwogCiAgICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbDo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKKyAgICAgICAgVFJBQ0VfRVZF
TlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjRHJhd0V0YyIpOwogICAgICAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICAgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggZGV2aWNlU2NhbGVUcmFuc2Zvcm07CiAgICAgICAgIGRldmljZVNjYWxl
VHJhbnNmb3JtLnNjYWxlKG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3IpOwpAQCAtMjY5LDcg
KzI3Miw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2Vz
KENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAKICAgICBjYWxjdWxhdGVSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCi0gICAgVFJBQ0VfRVZF
TlQxKCJ3ZWJraXQiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2Vz
IiwgInJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25n
IHVuc2lnbmVkPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkpOworICAgIFRSQUNFX0VW
RU5UMSgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzIiwg
InJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVu
c2lnbmVkPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSkpOwogCiAgICAgbV9yb290TGF5
ZXJJbXBsLT5zZXRTY2lzc29yUmVjdChlbmNsb3NpbmdJbnRSZWN0KG1fcm9vdFNjaXNzb3JSZWN0
KSk7CiAKQEAgLTM3NCwyMSArMzc3LDIyIEBAIEludFNpemUgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y29udGVudFNpemUoKSBjb25zdAogewogICAgIC8vIFRPRE8oYWVsaWFzKTogSGFyZGNvZGluZyB0
aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4gVGhpbmsgb2YKICAgICAvLyBhIGNsZWFuZXIg
d2F5IHRvIGdldCB0aGUgY29udGVudEJvdW5kcyBvbiB0aGUgSW1wbCBzaWRlLgotICAgIGlmICgh
bV9zY3JvbGxMYXllckltcGwgfHwgbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuaXNFbXB0
eSgpKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsIHx8IG1fcm9vdFNjcm9sbExheWVy
SW1wbC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0g
ICAgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJbXBsLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRz
KCk7CisgICAgcmV0dXJuIG1fcm9vdFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKVswXS0+Y29u
dGVudEJvdW5kcygpOwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0Ry
YXcoRnJhbWVEYXRhJiBmcmFtZSkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
SW1wbDo6cHJlcGFyZVRvRHJhdyIsIHRoaXMsIDApOworICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAi
Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJhdyIpOwogICAgIEFTU0VSVChjYW5EcmF3
KCkpOwogCisgICAgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9ICZtX3JlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CiAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmNsZWFyKCk7Ci0gICAgZnJhbWUu
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOworICAgIGZyYW1lLnJlbmRlclN1cmZhY2VM
YXllckxpc3QtPmNsZWFyKCk7CiAgICAgZnJhbWUud2lsbERyYXdMYXllcnMuY2xlYXIoKTsKIAot
ICAgIGlmICghY2FsY3VsYXRlUmVuZGVyUGFzc2VzKGZyYW1lLnJlbmRlclBhc3NlcywgZnJhbWUu
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZnJhbWUud2lsbERyYXdMYXllcnMpKQorICAgIGlmICgh
Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKGZyYW1lLnJlbmRlclBhc3NlcywgKmZyYW1lLnJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGZyYW1lLndpbGxEcmF3TGF5ZXJzKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gSWYgd2UgcmV0dXJuIHRydWUsIHRoZW4gd2UgZXhwZWN0IGRyYXdMYXll
cnMoKSB0byBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFnYWluLgpA
QCAtNDAyLDcgKzQwNiw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Q29udGVudHNN
ZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhzaXplX3QgYnl0ZXMpCiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQogewotICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7Cisg
ICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIik7
CiAgICAgQVNTRVJUKGNhbkRyYXcoKSk7CiAgICAgQVNTRVJUKCFmcmFtZS5yZW5kZXJQYXNzZXMu
aXNFbXB0eSgpKTsKIApAQCAtNDI2LDcgKzQzMCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQogICAgIH0KIAogICAgIGlmICht
X2RlYnVnUmVjdEhpc3RvcnktPmVuYWJsZWQoc2V0dGluZ3MoKSkpCi0gICAgICAgIG1fZGVidWdS
ZWN0SGlzdG9yeS0+c2F2ZURlYnVnUmVjdHNGb3JDdXJyZW50RnJhbWUobV9yb290TGF5ZXJJbXBs
LmdldCgpLCBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBzZXR0aW5ncygpKTsKKyAgICAg
ICAgbV9kZWJ1Z1JlY3RIaXN0b3J5LT5zYXZlRGVidWdSZWN0c0ZvckN1cnJlbnRGcmFtZShtX3Jv
b3RMYXllckltcGwuZ2V0KCksICpmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBzZXR0aW5n
cygpKTsKIAogICAgIGlmIChtX2hlYWRzVXBEaXNwbGF5LT5lbmFibGVkKHNldHRpbmdzKCkpKQog
ICAgICAgICBtX2hlYWRzVXBEaXNwbGF5LT5kcmF3KHRoaXMpOwpAQCAtNDkwLDcgKzQ5NCw3IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMo
cGl4ZWxzLCByZWN0KTsKIH0KIAotc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIo
Q0NMYXllckltcGwqIGxheWVyKQorc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kUm9vdFNjcm9sbExh
eWVyKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTQ5OSw3ICs1MDMsNyBAQCBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxM
YXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJldHVybiBsYXllcjsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFNjcm9sbExheWVyKGxheWVyLT5jaGlsZHJl
bigpW2ldLmdldCgpKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGZvdW5kID0gZmluZFJvb3RTY3Jv
bGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiAgICAgICAgIGlmIChmb3VuZCkK
ICAgICAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CkBAIC01MDcsMTIgKzUxMSw0MyBAQCBz
dGF0aWMgQ0NMYXllckltcGwqIGZpbmRTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiAg
ICAgcmV0dXJuIDA7CiB9CiAKKy8vIENvbnRlbnQgbGF5ZXJzIGNhbiBiZSBlaXRoZXIgZGlyZWN0
bHkgc2Nyb2xsYWJsZSBvciBjb250YWluZWQgaW4gYW4gb3V0ZXIKKy8vIHNjcm9sbGluZyBsYXll
ciB3aGljaCBhcHBsaWVzIHRoZSBzY3JvbGwgdHJhbnNmb3JtLiBHaXZlbiBhIGNvbnRlbnQgbGF5
ZXIsCisvLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgc2Nyb2xsIGxheWVy
IGlmIGFueS4KK3N0YXRpYyBDQ0xheWVySW1wbCogZmluZFNjcm9sbExheWVyRm9yQ29udGVudExh
eWVyKENDTGF5ZXJJbXBsKiBsYXllckltcGwpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAg
ICByZXR1cm4gbGF5ZXJJbXBsOworCisgICAgaWYgKGxheWVySW1wbC0+ZHJhd3NDb250ZW50KCkg
JiYgbGF5ZXJJbXBsLT5wYXJlbnQoKSAmJiBsYXllckltcGwtPnBhcmVudCgpLT5zY3JvbGxhYmxl
KCkpCisgICAgICAgIHJldHVybiBsYXllckltcGwtPnBhcmVudCgpOworCisgICAgcmV0dXJuIDA7
Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKFBhc3NPd25QdHI8
Q0NMYXllckltcGw+IGxheWVyKQogewogICAgIG1fcm9vdExheWVySW1wbCA9IGxheWVyOworICAg
IG1fcm9vdFNjcm9sbExheWVySW1wbCA9IGZpbmRSb290U2Nyb2xsTGF5ZXIobV9yb290TGF5ZXJJ
bXBsLmdldCgpKTsKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisKKyAg
ICBpZiAobV9yb290TGF5ZXJJbXBsICYmIG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1Ry
ZWUgIT0gLTEpCisgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUobV9yb290TGF5ZXJJbXBsLmdldCgp
LCBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlvdXNUcmVlKTsKKworICAgIG1fc2Nyb2xsaW5n
TGF5ZXJJZEZyb21QcmV2aW91c1RyZWUgPSAtMTsKK30KKworUGFzc093blB0cjxDQ0xheWVySW1w
bD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6ZGV0YWNoTGF5ZXJUcmVlKCkKK3sKKyAgICAvLyBDbGVh
ciBhbGwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSBkaXJlY3QgcmVmZXJlbmNlcyB0byB0aGUg
bGF5ZXIgdHJlZS4KKyAgICBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlvdXNUcmVlID0gbV9j
dXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwgPyBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1w
bC0+aWQoKSA6IC0xOworICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKKyAg
ICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKIAotICAgIC8vIEZJWE1FOiBDdXJy
ZW50bHksIHRoaXMgb25seSBmaW5kcyB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBsYXllci4KLSAgICBt
X3Njcm9sbExheWVySW1wbCA9IGZpbmRTY3JvbGxMYXllcihtX3Jvb3RMYXllckltcGwuZ2V0KCkp
OworICAgIHJldHVybiBtX3Jvb3RMYXllckltcGwucmVsZWFzZSgpOwogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAtNTc2LDYgKzYxMSwz
NCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpZXdwb3J0U2l6ZShjb25zdCBJbnRT
aXplJiB2aWV3cG9ydFNpemUpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRDaGFu
Z2VkKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2Uo
Q0NMYXllckltcGwqIGxheWVySW1wbCwgZmxvYXQgcGFnZVNjYWxlQ2hhbmdlKQoreworICAgIGlm
ICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGF5ZXJJbXBsLT5zY3Jv
bGxhYmxlKCkpIHsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBjb252ZXJ0IGltcGwtc2lkZSBzY3Jv
bGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBzcGFjZS4KKyAgICAgICAgRmxvYXRTaXplIHNjcm9sbERl
bHRhID0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOworICAgICAgICBzY3JvbGxEZWx0YS5zY2Fs
ZShwYWdlU2NhbGVDaGFuZ2UpOworICAgICAgICBsYXllckltcGwtPnNldFNjcm9sbERlbHRhKHNj
cm9sbERlbHRhKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW1w
bC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VT
Y2FsZUNoYW5nZShsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCksIHBhZ2VTY2FsZUNoYW5n
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyhD
Q0xheWVySW1wbCogbGF5ZXJJbXBsLCBmbG9hdCBwYWdlU2NhbGVEZWx0YSkKK3sKKyAgICBpZiAo
IWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxheWVySW1wbC0+c2Nyb2xs
YWJsZSgpKQorICAgICAgICBsYXllckltcGwtPnNldFBhZ2VTY2FsZURlbHRhKHBhZ2VTY2FsZURl
bHRhKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbXBsLT5jaGlsZHJlbigp
LnNpemUoKTsgKytpKQorICAgICAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMo
bGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ldLmdldCgpLCBwYWdlU2NhbGVEZWx0YSk7Cit9CisKIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0
IHBhZ2VTY2FsZSwgZmxvYXQgbWluUGFnZVNjYWxlLCBmbG9hdCBtYXhQYWdlU2NhbGUpCiB7CiAg
ICAgaWYgKCFwYWdlU2NhbGUpCkBAIC01OTAsMjUgKzY1MywxMyBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZs
b2F0IG1pbgogICAgIGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSA9IHBhZ2VTY2FsZSAvIG1fcGFnZVNj
YWxlOwogICAgIG1fcGFnZVNjYWxlID0gcGFnZVNjYWxlOwogCi0gICAgYWRqdXN0U2Nyb2xsc0Zv
clBhZ2VTY2FsZUNoYW5nZShwYWdlU2NhbGVDaGFuZ2UpOworICAgIGlmIChwYWdlU2NhbGVDaGFu
Z2UgIT0gMSkKKyAgICAgICAgYWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShtX3Jvb3RT
Y3JvbGxMYXllckltcGwsIHBhZ2VTY2FsZUNoYW5nZSk7CiAKICAgICAvLyBDbGFtcCBkZWx0YSB0
byBsaW1pdHMgYW5kIHJlZnJlc2ggZGlzcGxheSBtYXRyaXguCiAgICAgc2V0UGFnZVNjYWxlRGVs
dGEobV9wYWdlU2NhbGVEZWx0YSAvIG1fc2VudFBhZ2VTY2FsZURlbHRhKTsKICAgICBtX3NlbnRQ
YWdlU2NhbGVEZWx0YSA9IDE7Ci0gICAgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIo
KTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNj
YWxlQ2hhbmdlKGZsb2F0IHBhZ2VTY2FsZUNoYW5nZSkKLXsKLSAgICBpZiAocGFnZVNjYWxlQ2hh
bmdlID09IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGFsc28gbmVlZCB0byBjb252
ZXJ0IGltcGwtc2lkZSBzY3JvbGwgZGVsdGFzIHRvIHBhZ2VTY2FsZSBzcGFjZS4KLSAgICBpZiAo
bV9zY3JvbGxMYXllckltcGwpIHsKLSAgICAgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCk7Ci0gICAgICAgIHNjcm9sbERlbHRhLnNjYWxl
KHBhZ2VTY2FsZUNoYW5nZSk7Ci0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTY3JvbGxE
ZWx0YShzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9s
bExheWVycyhtX3Jvb3RTY3JvbGxMYXllckltcGwsIG1fcGFnZVNjYWxlRGVsdGEpOwogfQogCiB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2FsZURlbHRhKGZsb2F0IGRlbHRhKQpA
QCAtNjI2LDIyICs2NzcsMTYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2Nh
bGVEZWx0YShmbG9hdCBkZWx0YSkKICAgICBtX3BhZ2VTY2FsZURlbHRhID0gZGVsdGE7CiAKICAg
ICB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwotICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Nj
cm9sbExheWVyKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YXBwbHlQYWdlU2Nh
bGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKQotewotICAgIGlmIChtX3Njcm9sbExheWVySW1wbCkKLSAg
ICAgICAgbV9zY3JvbGxMYXllckltcGwtPnNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlRGVs
dGEpOworICAgIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyhtX3Jvb3RTY3JvbGxM
YXllckltcGwsIG1fcGFnZVNjYWxlRGVsdGEpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKIHsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJ
bXBsIHx8ICFtX3Njcm9sbExheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCkpCisgICAgaWYgKCFt
X3Jvb3RTY3JvbGxMYXllckltcGwgfHwgIW1fcm9vdFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4o
KS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0U2l6ZSB2aWV3Qm91bmRzID0g
bV92aWV3cG9ydFNpemU7Ci0gICAgaWYgKENDTGF5ZXJJbXBsKiBjbGlwTGF5ZXIgPSBtX3Njcm9s
bExheWVySW1wbC0+cGFyZW50KCkpIHsKKyAgICBpZiAoQ0NMYXllckltcGwqIGNsaXBMYXllciA9
IG1fcm9vdFNjcm9sbExheWVySW1wbC0+cGFyZW50KCkpIHsKICAgICAgICAgaWYgKGNsaXBMYXll
ci0+bWFza3NUb0JvdW5kcygpKQogICAgICAgICAgICAgdmlld0JvdW5kcyA9IGNsaXBMYXllci0+
Ym91bmRzKCk7CiAgICAgfQpAQCAtNjU1LDkgKzcwMCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKQogICAgIC8vIGhhdmluZyBhIHZlcnRpY2Fs
IHNjcm9sbGJhciBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdy4KICAgICBtYXhTY3JvbGwuY2xh
bXBOZWdhdGl2ZVRvWmVybygpOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwtPnNldE1heFNjcm9s
bFBvc2l0aW9uKG1heFNjcm9sbCk7Ci0KLSAgICAvLyBUT0RPKGFlbGlhcyk6IEFsc28gdXBkYXRl
IHN1YmxheWVycy4KKyAgICBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNldE1heFNjcm9sbFBvc2l0
aW9uKG1heFNjcm9sbCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNS
ZWRyYXcoKQpAQCAtNjY1LDUxICs3MDgsMTA5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0TmVlZHNSZWRyYXcoKQogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpOwogfQogCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmVuc3VyZVJlbmRlclN1cmZhY2VM
YXllckxpc3QoKQoreworICAgIGlmICghbV9yb290TGF5ZXJJbXBsKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBXZSBuZWVkIGJvdGggYSBub24tZW1wdHkgcmVuZGVyIHN1cmZhY2Ug
bGF5ZXIgbGlzdCBhbmQgYSByb290IHJlbmRlcgorICAgIC8vIHN1cmZhY2UgdG8gYmUgYWJsZSB0
byBpdGVyYXRlIG92ZXIgdGhlIHZpc2libGUgbGF5ZXJzLgorICAgIGlmIChtX3JlbmRlclN1cmZh
Y2VMYXllckxpc3Quc2l6ZSgpICYmIG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIHdlIGFyZSBjYWxsZWQgYWZ0ZXIgc2V0
Um9vdExheWVyKCkgYnV0IGJlZm9yZSBwcmVwYXJlVG9EcmF3KCksIHdlIG5lZWQKKyAgICAvLyB0
byByZWNhbGN1bGF0ZSB0aGUgdmlzaWJsZSBsYXllcnMuIFRoaXMgcHJldmVudHMgYmVpbmcgdW5h
YmxlIHRvIHNjcm9sbAorICAgIC8vIGR1cmluZyBwYXJ0IG9mIGEgY29tbWl0LgorICAgIG1fcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOworICAgIGNhbGN1bGF0ZVJlbmRlclN1cmZhY2VM
YXllckxpc3QobV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIHJldHVybiBtX3JlbmRl
clN1cmZhY2VMYXllckxpc3Quc2l6ZSgpOworfQorCiBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsU3RhdHVzIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKGNvbnN0IEludFBvaW50
JiB2aWV3cG9ydFBvaW50LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlIHR5
cGUpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHNjcm9sbGFibGUgc3VibGF5ZXJzLgotICAg
IGlmICghbV9zY3JvbGxMYXllckltcGwgfHwgIW1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxhYmxl
KCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJlZ2luIElnbm9yZWQgbm8gc2Nyb2xs
YWJsZSIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsSWdub3JlZDsKLSAgICB9Cisg
ICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCZWdpbiIp
OwogCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQo
KSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIHNob3VsZFNjcm9s
bE9uTWFpblRocmVhZCIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOwot
ICAgIH0KKyAgICBBU1NFUlQoIW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKTsKKyAgICBj
bGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKCk7CisKKyAgICBpZiAoIWVuc3VyZVJlbmRlclN1
cmZhY2VMYXllckxpc3QoKSkKKyAgICAgICAgcmV0dXJuIFNjcm9sbElnbm9yZWQ7CiAKICAgICBJ
bnRQb2ludCBkZXZpY2VWaWV3cG9ydFBvaW50ID0gdmlld3BvcnRQb2ludDsKICAgICBkZXZpY2VW
aWV3cG9ydFBvaW50LnNjYWxlKG1fc2V0dGluZ3MuZGV2aWNlU2NhbGVGYWN0b3IsIG1fc2V0dGlu
Z3MuZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgLy8gVGhlIGludmVyc2Ugb2YgdGhlIHNjcmVl
biBzcGFjZSB0cmFuc2Zvcm0gdGFrZXMgdXMgZnJvbSBwaHlzaWNhbCBwaXhlbHMgdG8gbGF5b3V0
IHBpeGVscy4KLSAgICBJbnRQb2ludCBzY3JvbGxMYXllclBvaW50KG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChkZXZpY2VWaWV3cG9y
dFBvaW50KSk7CisgICAgLy8gRmlyc3QgZmluZCBvdXQgd2hpY2ggbGF5ZXIgd2FzIGhpdCBmcm9t
IHRoZSBzYXZlZCBsaXN0IG9mIHZpc2libGUgbGF5ZXJzCisgICAgLy8gaW4gdGhlIG1vc3QgcmVj
ZW50IGZyYW1lLgorICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodmlld3BvcnRQb2ludCwgbV9yZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKIAotICAgIGlmIChtX3Njcm9sbExheWVySW1wbC0+bm9uRmFzdFNj
cm9sbGFibGVSZWdpb24oKS5jb250YWlucyhzY3JvbGxMYXllclBvaW50KSkgewotICAgICAgICBU
UkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uIiwg
dGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBTY3JvbGxGYWlsZWQ7Ci0gICAgfQorICAgIC8vIFdh
bGsgdXAgdGhlIGhpZXJhcmNoeSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIGxheWVyLgorICAg
IENDTGF5ZXJJbXBsKiBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisgICAgZm9y
ICg7IGxheWVySW1wbDsgbGF5ZXJJbXBsID0gbGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgICAg
ICAvLyBUaGUgY29udGVudCBsYXllciBjYW4gYWxzbyBibG9jayBhdHRlbXB0cyB0byBzY3JvbGwg
b3V0c2lkZSB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIGlmIChsYXllckltcGwtPnRyeVNjcm9s
bChkZXZpY2VWaWV3cG9ydFBvaW50LCB0eXBlKSA9PSBTY3JvbGxPbk1haW5UaHJlYWQpCisgICAg
ICAgICAgICByZXR1cm4gU2Nyb2xsT25NYWluVGhyZWFkOworCisgICAgICAgIENDTGF5ZXJJbXBs
KiBzY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIobGF5ZXJJ
bXBsKTsKKyAgICAgICAgaWYgKCFzY3JvbGxMYXllckltcGwpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBTY3JvbGxTdGF0dXMgc3RhdHVzID0gc2Nyb2xsTGF5ZXJJbXBsLT50cnlT
Y3JvbGwodmlld3BvcnRQb2ludCwgdHlwZSk7CiAKLSAgICBpZiAodHlwZSA9PSBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6V2hlZWwgJiYgbV9zY3JvbGxMYXllckltcGwtPmhhdmVXaGVlbEV2ZW50SGFu
ZGxlcnMoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgic2Nyb2xsQmVnaW4gRmFpbGVkIHdoZWVs
RXZlbnRIYW5kbGVycyIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFpbGVkOwor
ICAgICAgICAvLyBJZiBhbnkgbGF5ZXIgd2FudHMgdG8gZGl2ZXJ0IHRoZSBzY3JvbGwgZXZlbnQg
dG8gdGhlIG1haW4gdGhyZWFkLCBhYm9ydC4KKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTY3JvbGxP
bk1haW5UaHJlYWQpCisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsT25NYWluVGhyZWFkOworCisg
ICAgICAgIGlmIChzdGF0dXMgPT0gU2Nyb2xsU3RhcnRlZCAmJiAhcG90ZW50aWFsbHlTY3JvbGxp
bmdMYXllckltcGwpCisgICAgICAgICAgICBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbCA9
IHNjcm9sbExheWVySW1wbDsKICAgICB9CiAKLSAgICByZXR1cm4gU2Nyb2xsU3RhcnRlZDsKKyAg
ICBpZiAocG90ZW50aWFsbHlTY3JvbGxpbmdMYXllckltcGwpIHsKKyAgICAgICAgbV9jdXJyZW50
bHlTY3JvbGxpbmdMYXllckltcGwgPSBwb3RlbnRpYWxseVNjcm9sbGluZ0xheWVySW1wbDsKKyAg
ICAgICAgcmV0dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgfQorICAgIHJldHVybiBTY3JvbGxJZ25v
cmVkOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzY3JvbGxCeSIsIHRoaXMsIDApOwotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAg
VFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxCeSIpOworICAg
IGlmICghbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Ci0gICAgbV9jbGll
bnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRz
UmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgRmxvYXRTaXplIHBlbmRpbmdEZWx0YShzY3JvbGxE
ZWx0YSk7CisgICAgcGVuZGluZ0RlbHRhLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKKwor
ICAgIGZvciAoQ0NMYXllckltcGwqIGxheWVySW1wbCA9IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5
ZXJJbXBsOyBsYXllckltcGwgJiYgIXBlbmRpbmdEZWx0YS5pc1plcm8oKTsgbGF5ZXJJbXBsID0g
bGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsYWJs
ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEZsb2F0U2l6ZSBwcmV2aW91c0Rl
bHRhKGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgICAgIGxheWVySW1wbC0+c2Nyb2xs
QnkocGVuZGluZ0RlbHRhKTsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHBlbmRpbmcgc2Nyb2xsIGRl
bHRhIHRvIHplcm8gaWYgdGhlIGxheWVyIHdhcyBhYmxlIHRvIG1vdmUgYWxvbmcgdGhlIHJlcXVl
c3RlZAorICAgICAgICAvLyBheGlzLiBUaGlzIGlzIHRvIGVuc3VyZSBpdCBpcyBwb3NzaWJsZSB0
byBzY3JvbGwgZXhhY3RseSB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBhCisgICAgICAgIC8v
IHNjcm9sbCBhcmVhIHJlZ2FyZGxlc3Mgb2YgdGhlIHNjcm9sbCBzdGVwLiBGb3IgZGlhZ29uYWwg
c2Nyb2xscyB0aGlzIGFsc28gYXZvaWRzIGFwcGx5aW5nCisgICAgICAgIC8vIHRoZSBzY3JvbGwg
b24gb25lIGF4aXMgdG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICBpZiAocHJldmlvdXNEZWx0
YS53aWR0aCgpICE9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgpKQorICAgICAgICAg
ICAgcGVuZGluZ0RlbHRhLnNldFdpZHRoKDApOworICAgICAgICBpZiAocHJldmlvdXNEZWx0YS5o
ZWlnaHQoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkpCisgICAgICAgICAg
ICBwZW5kaW5nRGVsdGEuc2V0SGVpZ2h0KDApOworICAgIH0KKworICAgIGlmICghc2Nyb2xsRGVs
dGEuaXNaZXJvKCkgJiYgcGVuZGluZ0RlbHRhLmlzRW1wdHkoKSkgeworICAgICAgICBtX2NsaWVu
dC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5l
ZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNsZWFyQ3VycmVudGx5U2Nyb2xsaW5nTGF5ZXIoKQoreworICAgIG1fY3VycmVudGx5
U2Nyb2xsaW5nTGF5ZXJJbXBsID0gMDsKKyAgICBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlv
dXNUcmVlID0gLTE7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsRW5kKCkK
IHsKKyAgICBjbGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKCk7CiB9CiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlQmVnaW4oKQpAQCAtNzIxLDkgKzgyMiw5IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlQmVnaW4oKQogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQgbWFnbmlmeURlbHRhLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQm
IGFuY2hvcikKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hH
ZXN0dXJlVXBkYXRlIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUiKTsKIAotICAgIGlmICghbV9zY3JvbGxM
YXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChtX3ByZXZpb3VzUGluY2hBbmNob3IgPT0gSW50UG9pbnQ6Onplcm8oKSkK
QEAgLTczOCw3ICs4MzksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVy
ZVVwZGF0ZShmbG9hdCBtYWduaWZ5RGVsdGEsCiAKICAgICBtX3ByZXZpb3VzUGluY2hBbmNob3Ig
PSBhbmNob3I7CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkocm91bmRlZEludFNp
emUobW92ZSkpOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2Nyb2xsQnkocm91bmRlZElu
dFNpemUobW92ZSkpOwogICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgp
OwogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQpAQCAtNzYw
LDcgKzg2MSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZURvdWJsZVRhcFpv
b21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsCiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3Jv
bGxJbmZvKQogewotICAgIGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RT
Y3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE9ubHkgc2VuZCBmYWtl
IHNjcm9sbC96b29tIGRlbHRhcyBpZiB3ZSdyZSBwaW5jaCB6b29taW5nIG91dCBieSBhCkBAIC03
NzIsNyArODczLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21wdXRlUGluY2hab29t
RGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8KIAogICAgIC8vIENvbXB1dGUg
d2hlcmUgdGhlIHNjcm9sbCBvZmZzZXQvcGFnZSBzY2FsZSB3b3VsZCBiZSBpZiBmdWxseSBwaW5j
aC16b29tZWQKICAgICAvLyBvdXQgZnJvbSB0aGUgYW5jaG9yIHBvaW50LgotICAgIEludFNpemUg
c2Nyb2xsQmVnaW4gPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9z
aXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXpl
IHNjcm9sbEJlZ2luID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKICAg
ICBzY3JvbGxCZWdpbi5zY2FsZShtX3BhZ2VTY2FsZURlbHRhKTsKICAgICBmbG9hdCBzY2FsZUJl
Z2luID0gbV9wYWdlU2NhbGUgKiBtX3BhZ2VTY2FsZURlbHRhOwogICAgIGZsb2F0IHBhZ2VTY2Fs
ZURlbHRhVG9TZW5kID0gbV9taW5QYWdlU2NhbGUgLyBtX3BhZ2VTY2FsZTsKQEAgLTc5MiwyMiAr
ODkzLDQwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRh
cyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6bWFrZVNjcm9sbEFuZFNjYWxlU2V0KENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbElu
Zm8sIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlKQogewotICAg
IGlmICghbV9zY3JvbGxMYXllckltcGwpCisgICAgaWYgKCFtX3Jvb3RTY3JvbGxMYXllckltcGwp
CiAgICAgICAgIHJldHVybjsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBk
YXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xsLmxheWVySWQgPSBtX3Njcm9sbExheWVySW1wbC0+
aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxPZmZzZXQgLSB0b1NpemUobV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNjcm9sbC5sYXllcklkID0g
bV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5pZCgpOworICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNj
cm9sbE9mZnNldCAtIHRvU2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9u
KCkpOwogICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9sbCk7Ci0gICAgbV9zY3Jv
bGxMYXllckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOworICAg
IG1fcm9vdFNjcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5zY3JvbGxE
ZWx0YSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSBzY3JvbGxJbmZvLT5wYWdlU2NhbGVE
ZWx0YSA9IHBhZ2VTY2FsZSAvIG1fcGFnZVNjYWxlOwogfQogCitzdGF0aWMgdm9pZCBjb2xsZWN0
U2Nyb2xsRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9sbEluZm8sIENDTGF5ZXJJbXBs
KiBsYXllckltcGwpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpLmlzWmVybygpKSB7CisgICAgICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSBmbG9vcmVkSW50U2l6ZShsYXllckltcGwtPnNjcm9sbERlbHRh
KCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Ny
b2xsOworICAgICAgICBzY3JvbGwubGF5ZXJJZCA9IGxheWVySW1wbC0+aWQoKTsKKyAgICAgICAg
c2Nyb2xsLnNjcm9sbERlbHRhID0gc2Nyb2xsRGVsdGE7CisgICAgICAgIHNjcm9sbEluZm8tPnNj
cm9sbHMuYXBwZW5kKHNjcm9sbCk7CisgICAgICAgIGxheWVySW1wbC0+c2V0U2VudFNjcm9sbERl
bHRhKHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
eWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY29sbGVjdFNjcm9sbERl
bHRhcyhzY3JvbGxJbmZvLCBsYXllckltcGwtPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworfQorCiBQ
YXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdEltcGw6OnByb2Nl
c3NTY3JvbGxEZWx0YXMoKQogewogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3Jv
bGxJbmZvID0gYWRvcHRQdHIobmV3IENDU2Nyb2xsQW5kU2NhbGVTZXQoKSk7Ci0gICAgYm9vbCBk
aWRNb3ZlID0gbV9zY3JvbGxMYXllckltcGwgJiYgKCFtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xs
RGVsdGEoKS5pc1plcm8oKSB8fCBtX3BhZ2VTY2FsZURlbHRhICE9IDEuMGYpOwotICAgIGlmICgh
ZGlkTW92ZSB8fCBtX3BpbmNoR2VzdHVyZUFjdGl2ZSB8fCBtX3BhZ2VTY2FsZUFuaW1hdGlvbikg
eworCisgICAgaWYgKG1fcGluY2hHZXN0dXJlQWN0aXZlIHx8IG1fcGFnZVNjYWxlQW5pbWF0aW9u
KSB7CiAgICAgICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Nyb2xsSW5mby0+cGFnZVNjYWxl
RGVsdGEgPSAxOwogICAgICAgICBpZiAobV9waW5jaEdlc3R1cmVBY3RpdmUpCiAgICAgICAgICAg
ICBjb21wdXRlUGluY2hab29tRGVsdGFzKHNjcm9sbEluZm8uZ2V0KCkpOwpAQCAtODE2LDE2ICs5
MzUsOSBAQCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IENDTGF5ZXJUcmVlSG9zdElt
cGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQogICAgICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxl
YXNlKCk7CiAgICAgfQogCisgICAgY29sbGVjdFNjcm9sbERlbHRhcyhzY3JvbGxJbmZvLmdldCgp
LCBtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0gc2Ny
b2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSBtX3BhZ2VTY2FsZURlbHRhOwogCi0gICAgLy8gRklY
TUU6IHRyYWNrIHNjcm9sbHMgZnJvbSBsYXllcnMgb3RoZXIgdGhhbiB0aGUgcm9vdAotICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbyBzY3JvbGw7Ci0gICAgc2Nyb2xs
LmxheWVySWQgPSBtX3Njcm9sbExheWVySW1wbC0+aWQoKTsKLSAgICBzY3JvbGwuc2Nyb2xsRGVs
dGEgPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7Ci0g
ICAgc2Nyb2xsSW5mby0+c2Nyb2xscy5hcHBlbmQoc2Nyb2xsKTsKLQotICAgIG1fc2Nyb2xsTGF5
ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Nyb2xsLnNjcm9sbERlbHRhKTsKLQogICAgIHJl
dHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKIH0KIApAQCAtODQwLDE1ICs5NTIsMTUgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRGdWxsUm9vdExheWVyRGFtYWdlKCkKIAogdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlUGFnZVNjYWxlKGRvdWJsZSBtb25vdG9uaWNUaW1l
KQogewotICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24gfHwgIW1fc2Nyb2xsTGF5ZXJJbXBs
KQorICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24gfHwgIW1fcm9vdFNjcm9sbExheWVySW1w
bCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJ
bnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVk
SW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RT
Y3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwogCiAgICAgc2V0UGFnZVNjYWxlRGVsdGEo
bV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShtb25vdG9uaWNUaW1lKSAvIG1f
cGFnZVNjYWxlKTsKICAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlv
bi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKG1vbm90b25pY1RpbWUpOwogICAgIG5leHRTY3JvbGwuc2Nh
bGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxC
eShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOworICAgIG1fcm9vdFNjcm9sbExheWVySW1wbC0+
c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKICAgICBtX2NsaWVudC0+c2V0TmVl
ZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIAogICAgIGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+
aXNBbmltYXRpb25Db21wbGV0ZUF0VGltZShtb25vdG9uaWNUaW1lKSkgewpAQCAtODYyLDcgKzk3
NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhkb3VibGUgbW9u
b3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpCiAgICAgaWYgKCFDQ1NldHRpbmdzOjphY2Nl
bGVyYXRlZEFuaW1hdGlvbkVuYWJsZWQoKSB8fCAhbV9uZWVkc0FuaW1hdGVMYXllcnMgfHwgIW1f
cm9vdExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVO
VDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiKTsKIAogICAgIE93
blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3RvcikpOwogCkBAIC05MDYsNyArMTAxOCw3IEBAIHN0YXRpYyB2b2lkIGNs
ZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJy
ZW50KQogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhclJlbmRlclN1cmZhY2VzKCkKIHsK
ICAgICBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShtX3Jvb3RMYXll
ckltcGwuZ2V0KCkpOwotICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGFueSBSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0IHNhdmVkLCB0aGVuIG1ha2UgdGhlIGxpc3QgZW1wdHkgaGVyZS4KKyAgICBtX3Jl
bmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKIH0KIAogU3RyaW5nIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKaW5kZXggNGRiOTAxZjczNzEyOTE0MDQxYTgyMjgxNmMwZGQyZGJlYTkxMzBjNy4u
NjMwZTc5OGIwOThiOWMyOTVlYTE5MTJkZThiNTM0YjIzYjRhYzlhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAKICAgICBz
dHJ1Y3QgRnJhbWVEYXRhIHsKICAgICAgICAgQ0NSZW5kZXJQYXNzTGlzdCByZW5kZXJQYXNzZXM7
Ci0gICAgICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgICAgIEND
TGF5ZXJMaXN0KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgICAgICBDQ0xheWVyTGlzdCB3
aWxsRHJhd0xheWVyczsKICAgICB9OwogCkBAIC0xMzMsMTAgKzEzMywxMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZv
aWQgc2V0Um9vdExheWVyKFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKLSAgICBQYXNzT3duUHRy
PENDTGF5ZXJJbXBsPiByZWxlYXNlUm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXJJbXBs
LnJlbGVhc2UoKTsgfQogICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jv
b3RMYXllckltcGwuZ2V0KCk7IH0KIAotICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJbXBsOyB9CisgICAgLy8gUmVsZWFzZSBvd25lcnNo
aXAgb2YgdGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuIGVtcHR5
CisgICAgLy8gdHJlZS4gUmV0dXJucyB0aGUgcm9vdCBsYXllciBvZiB0aGUgZGV0YWNoZWQgdHJl
ZS4KKyAgICBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBkZXRhY2hMYXllclRyZWUoKTsKKworICAg
IENDTGF5ZXJJbXBsKiByb290U2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RTY3Jv
bGxMYXllckltcGw7IH0KIAogICAgIGJvb2wgdmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlz
aWJsZTsgfQogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKQEAgLTE5Niw4ICsxOTksNiBAQCBw
cml2YXRlOgogICAgIHZvaWQgbWFrZVNjcm9sbEFuZFNjYWxlU2V0KENDU2Nyb2xsQW5kU2NhbGVT
ZXQqIHNjcm9sbEluZm8sIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCwgZmxvYXQgcGFnZVNj
YWxlKTsKIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQpOwotICAgIHZvaWQgYXBw
bHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xsTGF5ZXIoKTsKLSAgICB2b2lkIGFkanVzdFNjcm9sbHNG
b3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRp
b24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJv
b3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
IApAQCAtMjEwLDEzICsyMTEsMTcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIGNvbnRlbnRTaXpl
KCkgY29uc3Q7CiAgICAgdm9pZCBzZW5kRGlkTG9zZUNvbnRleHRSZWN1cnNpdmUoQ0NMYXllcklt
cGwqKTsKICAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZXMoKTsKKyAgICBib29sIGVuc3VyZVJl
bmRlclN1cmZhY2VMYXllckxpc3QoKTsKKyAgICB2b2lkIGNsZWFyQ3VycmVudGx5U2Nyb2xsaW5n
TGF5ZXIoKTsKIAogICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50LCBjb25zdCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgUmVmUHRyPENDR3JhcGhp
Y3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPENDUmVuZGVyZXI+IG1fbGF5ZXJSZW5k
ZXJlcjsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKLSAgICBDQ0xh
eWVySW1wbCogbV9zY3JvbGxMYXllckltcGw7CisgICAgQ0NMYXllckltcGwqIG1fcm9vdFNjcm9s
bExheWVySW1wbDsKKyAgICBDQ0xheWVySW1wbCogbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllcklt
cGw7CisgICAgaW50IG1fc2Nyb2xsaW5nTGF5ZXJJZEZyb21QcmV2aW91c1RyZWU7CiAgICAgQ0NM
YXllclRyZWVTZXR0aW5ncyBtX3NldHRpbmdzOwogICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7
CiAgICAgSW50U2l6ZSBtX2RldmljZVZpZXdwb3J0U2l6ZTsKQEAgLTI0OCw2ICsyNTMsMTAgQEAg
cHJpdmF0ZToKIAogICAgIEZsb2F0UmVjdCBtX3Jvb3RTY2lzc29yUmVjdDsKIAorICAgIC8vIExp
c3Qgb2YgdmlzaWJsZSBsYXllcnMgZm9yIHRoZSBtb3N0IHJlY2VudGx5IHByZXBhcmVkIGZyYW1l
LiBVc2VkIGZvcgorICAgIC8vIHJlbmRlcmluZyBhbmQgaW5wdXQgZXZlbnQgaGl0IHRlc3Rpbmcu
CisgICAgQ0NMYXllckxpc3QgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCiAgICAgT3duUHRy
PENDRnJhbWVSYXRlQ291bnRlcj4gbV9mcHNDb3VudGVyOwogICAgIE93blB0cjxDQ0RlYnVnUmVj
dEhpc3Rvcnk+IG1fZGVidWdSZWN0SGlzdG9yeTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAK
aW5kZXggOGUwYzYxM2E0MmEzOTY2N2VhNjNlNjVlOTI1YTIyYTdhMzRiMTQ5ZC4uNjNiZjI3MGZl
MDIyNjQzNjBmNDI3YTJlMjNjNjI4Y2FlYTExMmM5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNw
cApAQCAtMTkxLDcgKzE5MSw3IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVu
dERpc3Bvc2l0aW9uIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoCiAgICAgICAgICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgRHJvcEV2ZW50LCBidXQgaW4gY2FzZXMgd2hlcmUg
d2UgZmFpbCB0byBwcm9wZXJseSBzeW5jIHNjcm9sbGFiaWxpdHkgaXQncyBzYWZlciB0byBzZW5k
IHRoZQogICAgICAgICAgICAgLy8gZXZlbnQgdG8gdGhlIG1haW4gdGhyZWFkLiBDaGFuZ2UgYmFj
ayB0byBEcm9wRXZlbnQgb25jZSB3ZSBoYXZlIHN5bmNocm9uaXphdGlvbiBidWdzIHNvcnRlZCBv
dXQuCiAgICAgICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlOyAKLSAgICAgICAgY2FzZSBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgorICAgICAgICBjYXNlIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ6CiAgICAgICAgICAgICByZXR1cm4gRGlkTm90
SGFuZGxlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09IFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbikgewpAQCAtMjA2LDcgKzIwNiw3IEBAIFdlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9uIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsOjpoCiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXJ0ZWQ6CiAgICAgICAgICAgICBtX2dlc3R1cmVTY3JvbGxTdGFydGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgIHJldHVybiBEaWRIYW5kbGU7Ci0gICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbEZhaWxlZDoKKyAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsT25NYWluVGhyZWFkOgogICAgICAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKICAg
ICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDoKICAgICAgICAg
ICAgIHJldHVybiBEcm9wRXZlbnQ7CkBAIC0yNzgsOCArMjc4LDggQEAgV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGw6OkV2ZW50RGlzcG9zaXRpb24gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGw6OmgKICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjaGVkdWxlQW5pbWF0aW9u
KCk7CiAgICAgICAgIHJldHVybiBEaWRIYW5kbGU7CiAgICAgfQotICAgIGNhc2UgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDogewotICAgICAgICBUUkFDRV9FVkVOVF9JTlNUQU5U
MCgiY2MiLCAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUdlc3R1cmVGbGlu
Zzo6ZmFpbGVkIik7CisgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWlu
VGhyZWFkOiB7CisgICAgICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJjYyIsICJXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nOjpzY3JvbGxPbk1haW5UaHJl
YWQiKTsKICAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKICAgICB9CiAgICAgY2FzZSBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5k
ZXggZWYwN2NmNTI2ZDk0MzVmOTUzZDAzYTc1NDZmY2U1NDgwZDg1ZDczNC4uODlkMjExZTgxYjNk
NWZiMjY3NDFhZDNmZGJjMTAyZWJiYmVkM2ZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0z
NjYyLDYgKzM2NjIsMjcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlI
aXRUZXN0aW5nRm9yTXVsdGlwbGVMYXllckxpc3RzKQogICAgIEVYUEVDVF9FUSg0LCByZXN1bHRM
YXllci0+aWQoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
U3VidHJlZVNlYXJjaCkKK3sKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENo
aWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IG1hc2tMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiByZXBsaWNhTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIGdy
YW5kQ2hpbGQtPnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIuZ2V0KCkpOworICAgIGNoaWxk
LT5hZGRDaGlsZChncmFuZENoaWxkLmdldCgpKTsKKyAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1h
c2tMYXllci5nZXQoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQuZ2V0KCkpOworCisgICAg
aW50IG5vbmV4aXN0ZW50SWQgPSAtMTsKKyAgICBFWFBFQ1RfRVEocm9vdCwgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgcm9vdC0+aWQoKSkpOwor
ICAgIEVYUEVDVF9FUShjaGlsZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1
YnRyZWUocm9vdC5nZXQoKSwgY2hpbGQtPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEoZ3JhbmRDaGls
ZCwgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwg
Z3JhbmRDaGlsZC0+aWQoKSkpOworICAgIEVYUEVDVF9FUShtYXNrTGF5ZXIsIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIG1hc2tMYXllci0+aWQo
KSkpOworICAgIEVYUEVDVF9FUShyZXBsaWNhTGF5ZXIsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIHJlcGxpY2FMYXllci0+aWQoKSkpOworICAg
IEVYUEVDVF9FUSgwLCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShy
b290LmdldCgpLCBub25leGlzdGVudElkKSk7Cit9CiAKIC8vIEZJWE1FOgogLy8gY29udGludWUg
d29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NDIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKaW5kZXggN2Q2ZGNmNzllZTRmYzAxZTRjYTdmMGVkMGJmMjlhOWVjYThm
NTNkMS4uMzUwOTM3NmFmOGNlZWVlOGJlMzYwZjg4NjJhYzJmYWMxNTVkYTM2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAKQEAgLTEzOSw2ICsxMzksMjcgQEAgcHVibGljOgogICAgICAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoaW50IGlkLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAg
IE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKGlkKTsKKyAg
ICAgICAgbGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7Cisg
ICAgICAgIGxheWVyLT5zZXRCb3VuZHMoc2l6ZSk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50
Qm91bmRzKHNpemUpOworICAgICAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6
ZShzaXplLndpZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpICogMikpOworICAgICAgICByZXR1cm4g
bGF5ZXIucmVsZWFzZSgpOworICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJBbmREcmF3RnJhbWUoKQorICAgIHsKKyAgICAgICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXIoY3JlYXRlQ29udGV4dCgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKKyAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOworICAgICAgICBFWFBFQ1Rf
VFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAgICAgIG1faG9zdElt
cGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5
ZXJzKGZyYW1lKTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBQYXNzUmVmUHRyPENDR3JhcGhp
Y3NDb250ZXh0PiBjcmVhdGVDb250ZXh0KCkKICAgICB7CkBAIC0yMjMsMTMgKzI0NCw5IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFSZXBlYXRlZFNjcm9sbHMp
CiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdENhbGxzQ29tbWl0
QW5kUmVkcmF3KQogewotICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKLSAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwotICAg
ICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7Ci0gICAg
ICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0gICAgfQorICAg
IHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIG1f
aG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxp
emVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKICAgICBFWFBFQ1RfRVEobV9ob3N0SW1w
bC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVl
bCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKICAgICBtX2hvc3RJbXBs
LT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CkBAIC0yMzgsMjAgKzI1NSw1NyBAQCBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJhdykK
ICAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOwogfQogCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFdpdGhvdXRSb290TGF5ZXIpCit7CisgICAgLy8gV2Ug
c2hvdWxkIG5vdCBjcmFzaCB3aGVuIHRyeWluZyB0byBzY3JvbGwgYW4gZW1wdHkgbGF5ZXIgdHJl
ZS4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxJZ25vcmVkKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCByZXBsYWNl
VHJlZVdoaWxlU2Nyb2xsaW5nKQoreworICAgIGNvbnN0IGludCBzY3JvbGxMYXllcklkID0gMDsK
KworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwor
ICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBXZSBzaG91bGQg
bm90IGNyYXNoIGlmIHRoZSB0cmVlIGlzIHJlcGxhY2VkIHdoaWxlIHdlIGFyZSBzY3JvbGxpbmcu
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7CisgICAgbV9ob3N0SW1wbC0+ZGV0YWNoTGF5ZXJUcmVlKCk7CisKKyAgICBzZXR1
cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsKKworICAgIC8vIFdl
IHNob3VsZCBzdGlsbCBiZSBzY3JvbGxpbmcsIGJlY2F1c2UgdGhlIHNjcm9sbGVkIGxheWVyIGFs
c28gZXhpc3RzIGluIHRoZSBuZXcgdHJlZS4KKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDEw
KTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1w
bC0+c2Nyb2xsRW5kKCk7CisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbElu
Zm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFp
bnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVySWQsIHNjcm9sbERlbHRhKTsKK30KKworVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBjbGVhclJvb3RSZW5kZXJTdXJmYWNlQW5kU2Nyb2xs
KQoreworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBXZSBzaG91
bGQgYmUgYWJsZSB0byBzY3JvbGwgZXZlbiBpZiB0aGUgcm9vdCBsYXllciBsb3NlcyBpdHMgcmVu
ZGVyIHN1cmZhY2UgYWZ0ZXIgdGhlIG1vc3QKKyAgICAvLyByZWNlbnQgcmVuZGVyLgorICAgIG1f
aG9zdEltcGwtPnJvb3RMYXllcigpLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICBFWFBFQ1Rf
RVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKK30K
KwogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiB7
Ci0gICAgewotICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDApOwotICAgICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwotICAgICAgICBy
b290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7Ci0gICAgICAgIHJvb3QtPnNl
dE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKLSAgICAgICAgbV9ob3N0SW1w
bC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKLSAgICB9CisgICAgc2V0dXBTY3JvbGxB
bmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0
Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJBbmREcmF3RnJhbWUoKTsKICAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJv
b3RMYXllcigpOwogCiAgICAgcm9vdC0+c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyh0cnVlKTsK
KwogICAgIC8vIFdpdGggcmVnaXN0ZXJlZCBldmVudCBoYW5kbGVycywgd2hlZWwgc2Nyb2xscyBo
YXZlIHRvIGdvIHRvIHRoZSBtYWluIHRocmVhZC4KLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworICAgIEVYUEVDVF9FUShtX2hv
c3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7CiAKICAg
ICAvLyBCdXQgZ2VzdHVyZSBzY3JvbGxzIGNhbiBzdGlsbCBiZSBoYW5kbGVkLgogICAgIEVYUEVD
VF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7
CkBAIC0yNTksMjcgKzMxMywyOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHdo
ZWVsRXZlbnRIYW5kbGVycykKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzaG91
bGRTY3JvbGxPbk1haW5UaHJlYWQpCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwot
ICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsKLSAgICByb290LT5z
ZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgc2V0dXBTY3JvbGxB
bmRDb250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0
Vmlld3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJBbmREcmF3RnJhbWUoKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJv
b3RMYXllcigpOworCiAgICAgcm9vdC0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHRydWUp
OwotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0gICAgRVhQ
RUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsK
LSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bEZhaWxlZCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKTsKIH0KIAogVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkJhc2ljKQogewot
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0g
ICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKLSAgICByb290LT5zZXRTY3JvbGxQb3NpdGlv
bihJbnRQb2ludCgwLCAwKSk7Ci0gICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6
ZSgxMDAsIDEwMCkpOworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgy
MDAsIDIwMCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwMCwg
MTAwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKyAgICBD
Q0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpOworCiAgICAgcm9vdC0+
c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oSW50UmVjdCgwLCAwLCA1MCwgNTApKTsKLSAgICBt
X2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworCiAgICAgLy8gQWxsIHNj
cm9sbCB0eXBlcyBpbnNpZGUgdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uIHNob3VsZCBm
YWlsLgotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgyNSwg
MjUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsRmFpbGVkKTsKLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpLCBDQ0lucHV0SGFu
ZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7CisgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVh
ZCk7CiAKICAgICAvLyBBbGwgc2Nyb2xsIHR5cGVzIG91dHNpZGUgdGhpcyByZWdpb24gc2hvdWxk
IHN1Y2NlZWQuCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDc1LCA3NSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxTdGFydGVkKTsKQEAgLTI5MiwxNiArMzQ4LDEzIEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25CYXNpYykKIAogVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbldpdGhPZmZz
ZXQpCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgwKTsKLSAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOwotICAgIHJvb3QtPnNldFNjcm9s
bFBvc2l0aW9uKEludFBvaW50KDAsIDApKTsKLSAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlv
bihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJ
bnRTaXplKDIwMCwgMjAwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNp
emUoMTAwLCAxMDApKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RM
YXllcigpOworCiAgICAgcm9vdC0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oSW50UmVjdCgw
LCAwLCA1MCwgNTApKTsKICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC0yNSwgMCkp
OwotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0gICAgQ0NM
YXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOwotICAgIEVYUEVDVF9UUlVFKG1faG9z
dEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKLSAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJz
KGZyYW1lKTsgLy8gVXBkYXRlIGRyYXcgdHJhbnNmb3JtcyBzbyB3ZSBjYW4gY29ycmVjdGx5IG1h
cCBwb2ludHMgaW50byBsYXllciBzcGFjZS4KKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFu
ZERyYXdGcmFtZSgpOwogCiAgICAgLy8gVGhpcyBwb2ludCB3b3VsZCBmYWxsIGludG8gdGhlIG5v
bi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uIGV4Y2VwdCB0aGF0IHdlJ3ZlIG1vdmVkIHRoZSBsYXll
ciBkb3duIGJ5IDI1IHBpeGVscy4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVn
aW4oSW50UG9pbnQoNDAsIDEwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMzA5LDE1ICszNjIsMTYgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbldpdGhP
ZmZzZXQpCiAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CiAKICAgICAvLyBUaGlzIHBvaW50
IGlzIHN0aWxsIGluc2lkZSB0aGUgbm9uLWZhc3QgcmVnaW9uLgotICAgIEVYUEVDVF9FUShtX2hv
c3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgxMCwgMTApLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKTsKKyAgICBFWFBF
Q1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTAsIDEwKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRo
cmVhZCk7CiB9CiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGluY2hHZXN0dXJl
KQogewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkp
OwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKLSAgICBDQ0xheWVySW1w
bCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5zY3JvbGxMYXllcigpOworICAgIENDTGF5ZXJJ
bXBsKiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnJvb3RTY3JvbGxMYXllcigpOwogICAgIEFT
U0VSVChzY3JvbGxMYXllcik7CiAKICAgICBjb25zdCBmbG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUs
IG1heFBhZ2VTY2FsZSA9IDQ7CkBAIC0zOTYsOCArNDUwLDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBwYWdlU2NhbGVBbmltYXRpb24pCiB7CiAgICAgc2V0dXBTY3JvbGxBbmRD
b250ZW50c0xheWVycyhJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmll
d3BvcnRTaXplKEludFNpemUoNTAsIDUwKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJB
bmREcmF3RnJhbWUoKTsKIAotICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllciA9IG1faG9zdElt
cGwtPnNjcm9sbExheWVyKCk7CisgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0
SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7CiAgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKIAogICAg
IGNvbnN0IGZsb2F0IG1pblBhZ2VTY2FsZSA9IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKQEAgLTQ0
MSw2ICs0OTYsMTAxIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFnZVNjYWxl
QW5pbWF0aW9uKQogICAgIH0KIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBp
bmhpYml0U2Nyb2xsQW5kUGFnZVNjYWxlVXBkYXRlc1doaWxlUGluY2hab29taW5nKQoreworICAg
IHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIG1f
aG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxp
emVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBDQ0xheWVySW1wbCogc2Nyb2xs
TGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290U2Nyb2xsTGF5ZXIoKTsKKyAgICBBU1NFUlQoc2Nyb2xs
TGF5ZXIpOworCisgICAgY29uc3QgZmxvYXQgbWluUGFnZVNjYWxlID0gMC41LCBtYXhQYWdlU2Nh
bGUgPSA0OworCisgICAgLy8gUGluY2ggem9vbSBpbi4KKyAgICB7CisgICAgICAgIC8vIFN0YXJ0
IGEgcGluY2ggaW4gZ2VzdHVyZSBhdCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgdmll
d3BvcnQuCisgICAgICAgIGNvbnN0IGZsb2F0IHpvb21JbkRlbHRhID0gMjsKKyAgICAgICAgbV9o
b3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDEsIG1pblBhZ2VTY2FsZSwgbWF4
UGFnZVNjYWxlKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlQmVnaW4oKTsKKyAg
ICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlVXBkYXRlKHpvb21JbkRlbHRhLCBJbnRQb2lu
dCg1MCwgNTApKTsKKworICAgICAgICAvLyBCZWNhdXNlIHdlIGFyZSBwaW5jaCB6b29taW5nIGlu
LCB3ZSBzaG91bGRuJ3QgZ2V0IGFueSBzY3JvbGwgb3IgcGFnZQorICAgICAgICAvLyBzY2FsZSBk
ZWx0YXMuCisgICAgICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0g
bV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgICAgICBFWFBFQ1RfRVEoc2Ny
b2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIDEpOworICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5m
by0+c2Nyb2xscy5zaXplKCksIDB1KTsKKworICAgICAgICAvLyBPbmNlIHRoZSBnZXN0dXJlIGVu
ZHMsIHdlIGdldCB0aGUgZmluYWwgc2Nyb2xsIGFuZCBwYWdlIHNjYWxlIHZhbHVlcy4KKyAgICAg
ICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlRW5kKCk7CisgICAgICAgIHNjcm9sbEluZm8gPSBt
X2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgICAgIEVYUEVDVF9FUShzY3Jv
bGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgem9vbUluRGVsdGEpOworICAgICAgICBleHBlY3RDb250
YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xsTGF5ZXItPmlkKCksIEludFNpemUoMjUsIDI1KSk7Cisg
ICAgfQorCisgICAgLy8gUGluY2ggem9vbSBvdXQuCisgICAgeworICAgICAgICAvLyBTdGFydCBh
IHBpbmNoIG91dCBnZXN0dXJlIGF0IHRoZSBib3R0b20gcmlnaHQgY29ybmVyIG9mIHRoZSB2aWV3
cG9ydC4KKyAgICAgICAgY29uc3QgZmxvYXQgem9vbU91dERlbHRhID0gMC43NTsKKyAgICAgICAg
bV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKDEsIG1pblBhZ2VTY2FsZSwg
bWF4UGFnZVNjYWxlKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlQmVnaW4oKTsK
KyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlVXBkYXRlKHpvb21PdXREZWx0YSwgSW50
UG9pbnQoNTAsIDUwKSk7CisKKyAgICAgICAgLy8gU2luY2Ugd2UgYXJlIHBpbmNoIHpvb21pbmcg
b3V0LCB3ZSBzaG91bGQgZ2V0IGFuIHVwZGF0ZSB0byB6b29tIGFsbAorICAgICAgICAvLyB0aGUg
d2F5IG91dCB0byB0aGUgbWluaW11bSBwYWdlIHNjYWxlLgorICAgICAgICBPd25QdHI8Q0NTY3Jv
bGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0
YXMoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCBtaW5Q
YWdlU2NhbGUpOworICAgICAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xsTGF5
ZXItPmlkKCksIEludFNpemUoMCwgMCkpOworCisgICAgICAgIC8vIE9uY2UgdGhlIGdlc3R1cmUg
ZW5kcywgd2UgZ2V0IHRoZSBmaW5hbCBzY3JvbGwgYW5kIHBhZ2Ugc2NhbGUgdmFsdWVzLgorICAg
ICAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVFbmQoKTsKKyAgICAgICAgc2Nyb2xsSW5mbyA9
IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNj
cm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCB6b29tT3V0RGVsdGEpOworICAgICAgICBleHBlY3RD
b250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xsTGF5ZXItPmlkKCksIEludFNpemUoOCwgOCkpOwor
ICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBpbmhpYml0U2Nyb2xs
QW5kUGFnZVNjYWxlVXBkYXRlc1doaWxlQW5pbWF0aW5nUGFnZVNjYWxlKQoreworICAgIHNldHVw
U2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIg
PSBtX2hvc3RJbXBsLT5yb290U2Nyb2xsTGF5ZXIoKTsKKyAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIp
OworCisgICAgY29uc3QgZmxvYXQgbWluUGFnZVNjYWxlID0gMC41LCBtYXhQYWdlU2NhbGUgPSA0
OworICAgIGNvbnN0IGRvdWJsZSBzdGFydFRpbWUgPSAxOworICAgIGNvbnN0IGRvdWJsZSBkdXJh
dGlvbiA9IDAuMTsKKyAgICBjb25zdCBkb3VibGUgaGFsZndheVRocm91Z2hBbmltYXRpb24gPSBz
dGFydFRpbWUgKyBkdXJhdGlvbiAvIDI7CisgICAgY29uc3QgZG91YmxlIGVuZFRpbWUgPSBzdGFy
dFRpbWUgKyBkdXJhdGlvbjsKKworICAgIC8vIFN0YXJ0IGEgcGFnZSBzY2FsZSBhbmltYXRpb24u
CisgICAgY29uc3QgZmxvYXQgcGFnZVNjYWxlRGVsdGEgPSAyOworICAgIG1faG9zdEltcGwtPnNl
dFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCBtaW5QYWdlU2NhbGUsIG1heFBhZ2VTY2FsZSk7
CisgICAgbV9ob3N0SW1wbC0+c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oSW50U2l6ZSg1MCwgNTAp
LCBmYWxzZSwgcGFnZVNjYWxlRGVsdGEsIHN0YXJ0VGltZSwgZHVyYXRpb24pOworCisgICAgLy8g
V2Ugc2hvdWxkIGltbWVkaWF0ZWx5IGdldCB0aGUgZmluYWwgem9vbSBhbmQgc2Nyb2xsIHZhbHVl
cyBmb3IgdGhlCisgICAgLy8gYW5pbWF0aW9uLgorICAgIG1faG9zdEltcGwtPmFuaW1hdGUoaGFs
ZndheVRocm91Z2hBbmltYXRpb24sIGhhbGZ3YXlUaHJvdWdoQW5pbWF0aW9uKTsKKyAgICBPd25Q
dHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NT
Y3JvbGxEZWx0YXMoKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEs
IHBhZ2VTY2FsZURlbHRhKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xs
TGF5ZXItPmlkKCksIEludFNpemUoMjUsIDI1KSk7CisKKyAgICAvLyBTY3JvbGxpbmcgZHVyaW5n
IHRoZSBhbmltYXRpb24gaXMgaWdub3JlZC4KKyAgICBjb25zdCBJbnRTaXplIHNjcm9sbERlbHRh
KDAsIDEwKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
MjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRh
KTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgIC8vIFRoZSBmaW5hbCBwYWdl
IHNjYWxlIGFuZCBzY3JvbGwgZGVsdGFzIHNob3VsZCBtYXRjaCB3aGF0IHdlIGdvdAorICAgIC8v
IGVhcmxpZXIuCisgICAgbV9ob3N0SW1wbC0+YW5pbWF0ZShlbmRUaW1lLCBlbmRUaW1lKTsKKyAg
ICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIEVY
UEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgcGFnZVNjYWxlRGVsdGEpOworICAg
IGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLCBzY3JvbGxMYXllci0+aWQoKSwgSW50U2l6ZSgy
NSwgMjUpKTsKK30KKwogY2xhc3MgRGlkRHJhd0NoZWNrTGF5ZXIgOiBwdWJsaWMgQ0NUaWxlZExh
eWVySW1wbCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RGlkRHJhd0NoZWNrTGF5
ZXI+IGNyZWF0ZShpbnQgaWQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBEaWREcmF3Q2hlY2tMYXll
cihpZCkpOyB9CkBAIC02NTcsNiArODA3LDI5OSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1doZW5BbmltYXRpb25Vc2VzQ2hlY2tlcmJvYXJkKQog
ICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwogfQogCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbFJvb3RJZ25vcmVkKQoreworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+c2V0
U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVs
ZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisg
ICAgLy8gU2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSBsYXllciBpcyBub3Qgc2Nyb2xs
YWJsZS4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwg
MCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAg
ICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsKK30KKworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxOb25Db21wb3NpdGVkUm9vdCkKK3sKKyAgICAvLyBUZXN0
IHRoZSBjb25maWd1cmF0aW9uIHdoZXJlIGEgbm9uLWNvbXBvc2l0ZWQgcm9vdCBsYXllciBpcyBl
bWJlZGRlZCBpbiBhCisgICAgLy8gc2Nyb2xsYWJsZSBvdXRlciBsYXllci4KKyAgICBJbnRTaXpl
IHN1cmZhY2VTaXplKDEwLCAxMCk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNvbnRlbnRM
YXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgY29udGVudExheWVyLT5zZXRJc05v
bkNvbXBvc2l0ZWRDb250ZW50KHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oSW50UG9pbnQoNSwgNSkp
OworICAgIGNvbnRlbnRMYXllci0+c2V0Qm91bmRzKHN1cmZhY2VTaXplKTsKKyAgICBjb250ZW50
TGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZShzdXJmYWNlU2l6ZS53aWR0aCgpICogMiwg
c3VyZmFjZVNpemUuaGVpZ2h0KCkgKiAyKSk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHNj
cm9sbExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBzY3JvbGxMYXllci0+c2V0
U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICBzY3JvbGxMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
c3VyZmFjZVNpemUpOworICAgIHNjcm9sbExheWVyLT5hZGRDaGlsZChjb250ZW50TGF5ZXIucmVs
ZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxMYXllci5yZWxl
YXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7Cisg
ICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIEVYUEVDVF9F
UShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAg
IG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUoMCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5z
Y3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVY
UEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykKK3sKKyAgICBJbnRT
aXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxh
YmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAgICBtX2hvc3RJ
bXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZp
ZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmRE
cmF3RnJhbWUoKTsKKworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQ
b2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KEludFNpemUo
MCwgMTApKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKyAgICBFWFBFQ1RfVFJVRSht
X2RpZFJlcXVlc3RSZWRyYXcpOworICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7
Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hpbGQp
Cit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGwgZXZlbnQgaXMgaWdub3Jl
ZCBiZWNhdXNlIHRoZSBpbnB1dCBjb29yZGluYXRlIGlzIG91dHNpZGUgdGhlIGxheWVyIGJvdW5k
YXJpZXMuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDE1
LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOwor
ICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0JhY2tmYWNpbmdDaGlsZCkKK3sKKyAgICBJ
bnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxk
ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXpl
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworCisgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC5yb3RhdGUzZCgxODAs
IDAsIDApOworICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICBjaGlsZC0+c2V0
RG91YmxlU2lkZWQoZmFsc2UpOworCisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgp
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICAvLyBTY3JvbGwgZXZl
bnQgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBzY3JvbGxhYmxlIGxheWVyIGlzIG5vdCBmYWNpbmcg
dGhlIHZpZXdlciBhbmQgdGhlcmUgaXMKKyAgICAvLyBub3RoaW5nIHNjcm9sbGFibGUgYmVoaW5k
IGl0LgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbElnbm9yZWQpOworICAgIEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RSZWRyYXcpOworICAg
IEVYUEVDVF9GQUxTRShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJsb2NrZWRCeUNvbnRlbnRMYXllcikKK3sKKyAgICBJbnRT
aXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjb250ZW50
TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFj
ZVNpemUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHRy
dWUpOworICAgIGNvbnRlbnRMYXllci0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisKKyAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHNjcm9sbExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+YWRkQ2hpbGQo
Y29udGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
c2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
c3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7
CisKKyAgICAvLyBTY3JvbGxpbmcgZmFpbHMgYmVjYXVzZSB0aGUgY29udGVudCBsYXllciBpcyBh
c2tpbmcgdG8gYmUgc2Nyb2xsZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIEVYUEVDVF9FUSht
X2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZCk7Cit9
CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBh
Z2VTY2FsZU9uTWFpblRocmVhZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7
CisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUp
OworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9o
b3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5
ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAx
MCk7CisgICAgSW50U2l6ZSBleHBlY3RlZFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBJ
bnRTaXplIGV4cGVjdGVkTWF4U2Nyb2xsKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3Jv
bGxQb3NpdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50
UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxE
ZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAvLyBTZXQgbmV3IHBh
Z2Ugc2NhbGUgZnJvbSBtYWluIHRocmVhZC4KKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVG
YWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCBwYWdlU2NhbGUsIHBhZ2VTY2FsZSk7CisKKyAgICAv
LyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRvIHRoZSBzY3JvbGwgZGVsdGEuCisgICAgZXhwZWN0
ZWRTY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGUpOworICAgIE93blB0cjxDQ1Njcm9sbEFuZFNj
YWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwor
ICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCAwLCBleHBlY3RlZFNjcm9sbERl
bHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwgcmFuZ2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVuIHVw
ZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQ
b3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9sbCk7CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBk
ZWx0YSByZW1haW5zIGNvbnN0YW50IGJlY2F1c2UgdGhlIGltcGwgdGhyZWFkIGRpZCBub3Qgc2Nh
bGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5wYWdlU2NhbGVEZWx0
YSgpLCAxKTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290
QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFkKQoreworICAgIEludFNpemUgc3VyZmFjZVNp
emUoMTAsIDEwKTsKKyAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgp
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIG1f
aG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCAxLCBwYWdlU2NhbGUpOwor
ICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBJbnRTaXpl
IHNjcm9sbERlbHRhKDAsIDEwKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Ny
b2xsRGVsdGEpOworICAgIEludFNpemUgZXhwZWN0ZWRNYXhTY3JvbGwobV9ob3N0SW1wbC0+cm9v
dExheWVyKCktPm1heFNjcm9sbFBvc2l0aW9uKCkpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBs
LT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVs
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwt
PnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKwor
ICAgIC8vIFNldCBuZXcgcGFnZSBzY2FsZSBvbiBpbXBsIHRocmVhZCBieSBwaW5jaGluZy4KKyAg
ICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVCZWdpbigpOworICAgIG1faG9zdEltcGwtPnBpbmNo
R2VzdHVyZVVwZGF0ZShwYWdlU2NhbGUsIEludFBvaW50KCkpOworICAgIG1faG9zdEltcGwtPnBp
bmNoR2VzdHVyZUVuZCgpOworCisgICAgLy8gVGhlIHNjcm9sbCBkZWx0YSBpcyBub3Qgc2NhbGVk
IGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIGRpZCBub3Qgc2NhbGUuCisgICAgT3duUHRyPENDU2Ny
b2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVs
dGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDAsIGV4cGVjdGVk
U2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgYWxzbyBoYXZl
IGJlZW4gdXBkYXRlZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1h
eFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdl
IHNjYWxlIGRlbHRhIHNob3VsZCBtYXRjaCB0aGUgbmV3IHNjYWxlIG9uIHRoZSBpbXBsIHNpZGUu
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5wYWdlU2NhbGVEZWx0YSgp
LCBwYWdlU2NhbGUpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9s
bENoaWxkQW5kQ2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQoreworICAgIEludFNpemUgc3Vy
ZmFjZVNpemUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDApOworICAgIC8vIEFsc28gbWFyayB0aGUgcm9vdCBzY3JvbGxhYmxlIHNv
IGl0IGJlY29tZXMgdGhlIHJvb3Qgc2Nyb2xsIGxheWVyLgorICAgIHJvb3QtPnNldFNjcm9sbGFi
bGUodHJ1ZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExh
eWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3Vy
ZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisK
KyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRy
ZW4oKVswXS5nZXQoKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIElu
dFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgSW50U2l6ZSBleHBl
Y3RlZE1heFNjcm9sbChjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAg
bV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9s
bEVuZCgpOworCisgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKKyAgICBtX2hvc3RJbXBsLT5zZXRQ
YWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlLCAxLCBwYWdlU2NhbGUpOworCisgICAg
Ly8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgorICAgIGV4cGVj
dGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAgICBPd25QdHI8Q0NTY3JvbGxBbmRT
Y2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsK
KyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMSwgZXhwZWN0ZWRTY3JvbGxE
ZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBub3QgaGF2ZSBjaGFuZ2Vk
LgorICAgIEVYUEVDVF9FUShjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhT
Y3JvbGwpOworCisgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZGVsdGEgcmVtYWlucyBjb25zdGFudCBi
ZWNhdXNlIHRoZSBpbXBsIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIEVYUEVDVF9FUShjaGls
ZC0+cGFnZVNjYWxlRGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdCkKK3sKKyAgICAvLyBTY3JvbGwgYSBjaGlsZCBs
YXllciBiZXlvbmQgaXRzIG1heGltdW0gc2Nyb2xsIHJhbmdlIGFuZCBtYWtlIHN1cmUgdGhlCisg
ICAgLy8gcGFyZW50IGxheWVyIGlzIHNjcm9sbGVkIG9uIHRoZSBheGlzIG9uIHdoaWNoIHRoZSBj
aGlsZCB3YXMgdW5hYmxlIHRvCisgICAgLy8gc2Nyb2xsLgorICAgIEludFNpemUgc3VyZmFjZVNp
emUoMTAsIDEwKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxh
YmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworCisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDIsIEZsb2F0
UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBncmFuZENoaWxkLT5zZXRTY3JvbGxQb3Np
dGlvbihJbnRQb2ludCgwLCA1KSk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0g
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsK
KyAgICBjaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMywgMCkpOworICAgIGNoaWxk
LT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisKKyAgICByb290LT5hZGRDaGlsZChj
aGlsZC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVh
c2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAg
ICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIHsKKyAgICAgICAg
SW50U2l6ZSBzY3JvbGxEZWx0YSgtMywgLTcpOworICAgICAgICBFWFBFQ1RfRVEobV9ob3N0SW1w
bC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVl
bCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICAgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgICAgICBtX2hvc3RJbXBsLT5zY3JvbGxF
bmQoKTsKKworICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9
IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKworICAgICAgICAvLyBUaGUgZ3Jh
bmQgY2hpbGQgc2hvdWxkIGhhdmUgc2Nyb2xsZWQgdXAgdG8gaXRzIGxpbWl0LgorICAgICAgICBD
Q0xheWVySW1wbCogY2hpbGQgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2hpbGRyZW4oKVsw
XS5nZXQoKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRy
ZW4oKVswXS5nZXQoKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCks
IGdyYW5kQ2hpbGQtPmlkKCksIEludFNpemUoMCwgLTUpKTsKKworICAgICAgICAvLyBUaGUgY2hp
bGQgc2hvdWxkIGhhdmUgb25seSBzY3JvbGxlZCBvbiB0aGUgb3RoZXIgYXhpcy4KKyAgICAgICAg
ZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIGNoaWxkLT5pZCgpLCBJbnRTaXplKC0z
LCAwKSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9s
bEV2ZW50QnViYmxpbmcpCit7CisgICAgLy8gV2hlbiB3ZSB0cnkgdG8gc2Nyb2xsIGEgbm9uLXNj
cm9sbGFibGUgY2hpbGQgbGF5ZXIsIHRoZSBzY3JvbGwgZGVsdGEKKyAgICAvLyBzaG91bGQgYmUg
YXBwbGllZCB0byBvbmUgb2YgaXRzIGFuY2VzdG9ycyBpZiBwb3NzaWJsZS4KKyAgICBJbnRTaXpl
IHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3Jl
YXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKworICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxl
KGZhbHNlKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgbV9o
b3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5z
ZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CisgICAgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhKDAsIDQp
OworICAgICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwg
NSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGFydGVkKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEp
OworICAgICAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgICAgICBPd25QdHI8Q0NT
Y3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxE
ZWx0YXMoKTsKKworICAgICAgICAvLyBPbmx5IHRoZSByb290IHNob3VsZCBoYXZlIHNjcm9sbGVk
LgorICAgICAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2Nyb2xscy5zaXplKCksIDF1KTsKKyAg
ICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIG1faG9zdEltcGwtPnJvb3RM
YXllcigpLT5pZCgpLCBzY3JvbGxEZWx0YSk7CisgICAgfQorfQorCitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJlZm9yZVJlZHJhdykKK3sKKyAgICBJbnRTaXplIHN1cmZh
Y2VTaXplKDEwLCAxMCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9s
bGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9z
dEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CisKKyAgICAvLyBEcmF3IG9uZSBm
cmFtZSBhbmQgdGhlbiBpbW1lZGlhdGVseSByZWJ1aWxkIHRoZSBsYXllciB0cmVlIHRvIG1pbWlj
IGEgdHJlZSBzeW5jaHJvbml6YXRpb24uCisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmRE
cmF3RnJhbWUoKTsKKyAgICBtX2hvc3RJbXBsLT5kZXRhY2hMYXllclRyZWUoKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKSk7CisKKyAgICAvLyBTY3JvbGxpbmcgc2hvdWxkIHN0aWxsIHdv
cmsgZXZlbiB0aG91Z2ggd2UgZGlkIG5vdCBkcmF3IHlldC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpX
aGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKK30KKwogY2xhc3Mg
QmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
IHsKIHB1YmxpYzoKICAgICBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQoKSA6IG1fYmxlbmQoZmFs
c2UpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAKaW5kZXggMzU1ZmNlYWM1ZDgzOTdhZGFlZmEzNjEzYThkNTE0OWQ3MjE3
MjE4Mi4uNjQ0N2UxMmZjYTAyZTZiZWYxMDhhYTE1MjA1ZTlhMjllOWVlZDY3NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
CkBAIC0yMjIwLDQgKzIyMjAsNzggQEAgcHJpdmF0ZToKIAogU0lOR0xFX0FORF9NVUxUSV9USFJF
QURfVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllckFkZGVkV2l0aEFuaW1hdGlvbikKIAor
Y2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIgOiBwdWJsaWMgQ0NMYXll
clRyZWVIb3N0VGVzdCwgcHVibGljIExheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZSB7CitwdWJs
aWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbENoaWxkTGF5ZXIoKQorICAgICAgICA6
IG1fc2Nyb2xsQW1vdW50KDIsIDEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRW
aWV3cG9ydFNpemUoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9yb290U2Nyb2xsTGF5ZXIg
PSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0ZSk7CisgICAgICAg
IG1fcm9vdFNjcm9sbExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAg
bV9yb290U2Nyb2xsTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisgICAgICAgIG1fcm9vdFNj
cm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXll
ci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChtX3Jvb3RTY3JvbGxMYXllcik7Cisg
ICAgICAgIG1fY2hpbGRMYXllciA9IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoJm1fbW9j
a0RlbGVnYXRlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRMYXllclNjcm9sbERlbGVnYXRl
KHRoaXMpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUwLCA1MCkp
OworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldElzRHJhd2FibGUodHJ1ZSk7CisgICAgICAgIG1f
Y2hpbGRMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5z
ZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1fcm9vdFNj
cm9sbExheWVyLT5hZGRDaGlsZChtX2NoaWxkTGF5ZXIpOworICAgICAgICBwb3N0U2V0TmVlZHND
b21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xs
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV9y
ZXBvcnRlZFNjcm9sbEFtb3VudCA9IHNjcm9sbERlbHRhOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9h
dCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gbV9yb290U2Ny
b2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5z
ZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiArIHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGlt
cGwpIE9WRVJSSURFCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9yb290U2Nyb2xsTGF5ZXIt
PnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBpZiAoIW1fbGF5ZXJUcmVl
SG9zdC0+ZnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShtX2NoaWxkTGF5ZXIt
PnNjcm9sbFBvc2l0aW9uKCksIEludFBvaW50KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBFWFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpICsg
bV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25D
Q1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKSBPVkVSUklERQorICAgIHsKKyAgICAg
ICAgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX0VR
KGltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgICAg
ICBpbXBsLT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAgICBpbXBsLT5zY3Jv
bGxFbmQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDIpCisg
ICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVz
dCgpIE9WRVJSSURFCisgICAgeworICAgICAgICBFWFBFQ1RfRVEobV9zY3JvbGxBbW91bnQsIG1f
cmVwb3J0ZWRTY3JvbGxBbW91bnQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBJbnRT
aXplIG1fc2Nyb2xsQW1vdW50OworICAgIEludFNpemUgbV9yZXBvcnRlZFNjcm9sbEFtb3VudDsK
KyAgICBNb2NrQ29udGVudExheWVyRGVsZWdhdGUgbV9tb2NrRGVsZWdhdGU7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IG1fY2hpbGRMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bV9yb290U2Nyb2xsTGF5ZXI7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9s
bENoaWxkTGF5ZXIsIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3QodHJ1ZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKaW5kZXgg
OTJmMDA2MTg0MTQ3OTU2ZTEwMTlmYzY5MDE1ZjYzOWU0ODk0ZjMzMS4uZDViNjhhODY3Zjc4MmNj
NjdmZDFiN2JjMjk2MjA1MjkzNGZkNzA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxU
ZXN0LmNwcApAQCAtMjAyLDE0ICsyMDIsMTQgQEAgVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNjcm9sbFN0YXJ0ZWQpCiAgICAgbV9pbnB1dEhhbmRsZXIt
PmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CiB9CiAKLVRFU1RfRihXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxGYWlsZWQpCitURVNUX0YoV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlU2Nyb2xsT25NYWluVGhyZWFkKQogewog
ICAgIC8vIFdlIHNob3VsZCBzZW5kIGFsbCBldmVudHMgdG8gdGhlIHdpZGdldCBmb3IgdGhpcyBn
ZXN0dXJlLgogICAgIG1fZXhwZWN0ZWREaXNwb3NpdGlvbiA9IERpZE5vdEhhbmRsZTsKICAgICBW
RVJJRllfQU5EX1JFU0VUX01PQ0tTKCk7CiAKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0
SGFuZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4oOjp0ZXN0aW5nOjpfLCA6OnRlc3Rpbmc6Ol8pKQot
ICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVy
bihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKSk7CiAK
ICAgICBnZXN0dXJlLnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW47CiAg
ICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CkBAIC0zMDYsNyAr
MzA2LDcgQEAgVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVy
ZUZsaW5nRmFpbGVkKQogICAgIFZFUklGWV9BTkRfUkVTRVRfTU9DS1MoKTsKIAogICAgIEVYUEVD
VF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpf
LCB0ZXN0aW5nOjpfKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3Jl
OjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5XaWxsT25j
ZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9u
TWFpblRocmVhZCkpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViSW5wdXRFdmVudDo6R2VzdHVy
ZUZsaW5nU3RhcnQ7CiAgICAgbV9pbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVy
ZSk7CkBAIC0zODcsNyArMzg3LDcgQEAgVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsVGVzdCwgZ2VzdHVyZUZsaW5nQW5pbWF0ZXMpCiAgICAgLy8gdHJhbnNmZXJyZWQgdG8gdGhl
IG1haW4gdGhyZWFkLgogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50
LCBzY2hlZHVsZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFu
ZGxlckNsaWVudCwgc2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCi0gICAgICAg
IC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbEZhaWxlZCkpOworICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNv
cmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpKTsKICAgICBFWFBF
Q1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQnkodGVzdGluZzo6Xykp
LlRpbWVzKDApOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBz
Y3JvbGxFbmQoKSkuVGltZXMoMCk7CiAKQEAgLTQ2OSw3ICs0NjksNyBAQCBURVNUX0YoV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdUcmFuc2ZlclJlc2V0cykK
ICAgICAvLyB0cmFuc2ZlcnJlZCB0byB0aGUgbWFpbiB0aHJlYWQuCiAgICAgRVhQRUNUX0NBTEwo
bV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOwogICAgIEVY
UEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5n
OjpfLCB0ZXN0aW5nOjpfKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJD
b3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5XaWxs
T25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bE9uTWFpblRocmVhZCkpOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xp
ZW50LCBzY3JvbGxCeSh0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CiAgICAgRVhQRUNUX0NBTEwobV9t
b2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEVuZCgpKS5UaW1lcygwKTsKIApAQCAtNTQ2
LDcgKzU0Niw3IEBAIFRFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdl
c3R1cmVGbGluZ1RyYW5zZmVyUmVzZXRzKQogICAgIC8vIFRoZW4gYWJvcnQgdGhlIHNlY29uZCBm
bGluZy4KICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2NoZWR1
bGVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGll
bnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8sIHRlc3Rpbmc6Ol8pKQotICAgICAgICAuV2lsbE9u
Y2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxG
YWlsZWQpKTsKKyAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKSk7CiAgICAgRVhQRUNUX0NBTEwo
bV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJ5KHRlc3Rpbmc6Ol8pKS5UaW1lcygw
KTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsRW5k
KCkpLlRpbWVzKDApOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147779</attachid>
            <date>2012-06-15 03:11:01 -0700</date>
            <delta_ts>2012-06-15 05:46:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73350-20120615111100.patch</filename>
            <type>text/plain</type>
            <size>85025</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDA4ZGQzYjc5OTI1N2Iw
YjllZjM5YjQ2MGIyNWMwZGQzMmYwMWI0My4uYmE4N2YxNjM4YzIyMjYwY2QxNDY3ZmFmMTBlZmFh
NmIyZjgxMTVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0wNi0xNCAgU2Ft
aSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEFsbG93IHNjcm9sbGluZyBub24tcm9vdCBsYXllcnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM1MAor
CisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggZW5hYmxlcyBzY3JvbGxpbmcgY2hpbGQgbGF5ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVh
ZC4KKyAgICAgICAgU2Nyb2xsIGRlbHRhcyBhcmUgYWNjdW11bGF0ZWQgZm9yIGVhY2ggc2Nyb2xs
ZWQgQ0NMYXllckltcGwgYW5kCisgICAgICAgIHN5bmNocm9uaXplZCB0byB0aGUgbWFpbiB0aHJl
YWQuCisKKyAgICAgICAgSWYgYSBsYXllciBoYXMgbm8gcm9vbSB0byBzY3JvbGwgaW4gYSBnaXZl
biBkaXJlY3Rpb24sIG9uZSBvZiBpdHMKKyAgICAgICAgYW5jZXN0b3IgbGF5ZXJzIGlzIHNjcm9s
bGVkIGluc3RlYWQgaWYgcG9zc2libGUuCisKKyAgICAgICAgTGF5ZXIgaGl0IHRlc3RpbmcgY29k
ZSBieSBTaGF3biBTaW5naC4KKworICAgICAgICBBZGRlZCBuZXcgdW5pdCB0ZXN0cyB0byB2ZXJp
ZnkgbGF5ZXIgc2Nyb2xsaW5nIGJlaGF2aW9yOgorCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LnZlcmlmeVN1YnRyZWVTZWFyY2gKKyAgICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNsZWFyUm9vdFJlbmRlclN1cmZhY2VBbmRTY3JvbGwKKyAgICAgICAgICAg
IENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVz
V2hpbGVBbmltYXRpbmdQYWdlU2NhbGUKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmluaGliaXRTY3JvbGxBbmRQYWdlU2NhbGVVcGRhdGVzV2hpbGVQaW5jaFpvb21pbmcKKyAg
ICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnJlcGxhY2VUcmVlV2hpbGVTY3JvbGxp
bmcKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbEJlZm9yZVJlZHJh
dworICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQmxvY2tlZEJ5Q29u
dGVudExheWVyCisgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxDaGls
ZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZAorICAgICAgICAgICAgQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRCZXlvbmRMaW1pdAorICAgICAgICAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3Quc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsRXZlbnRCdWJibGluZworICAgICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkCisg
ICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxNaXNzZXNDaGlsZAorICAg
ICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Quc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QK
KyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RBbmRDaGFuZ2VQ
YWdlU2NhbGVPbkltcGxUaHJlYWQKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LnNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQKKyAgICAgICAgICAgIEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LnNjcm9sbFJvb3RJZ25vcmVkCisgICAgICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5zY3JvbGxXaXRob3V0Um9vdExheWVyCisgICAgICAgICAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcgorICAgICAgICAgICAgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGxUZXN0Lmdlc3R1cmVTY3JvbGxPbk1haW5UaHJlYWQKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjcm9sbEJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZTo6fkxheWVyQ2hyb21pdW1T
Y3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06Om1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNjcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJTY3JvbGxEZWxlZ2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6dHJ5U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6c29ydExheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZEZpcnN0U2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbEFuZFNjYWxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVySW5TdWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVu
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRv
RHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSb290U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2Nyb2xsTGF5ZXJGb3JDb250ZW50TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRldGFjaExheWVyVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0UGFnZVNj
YWxlRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRl
TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6ZW5zdXJlUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjbGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJlZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjptYWtlU2Nyb2xsQW5kU2NhbGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sbGVjdFNjcm9sbERlbHRhcyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVQYWdlU2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhclJlbmRlclN1cmZhY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6Cisg
ICAgICAgIChGcmFtZURhdGEpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290U2Nyb2xsTGF5ZXIpOgorCiAy
MDEyLTA2LTE1ICBIaXJvbm9yaSBCb25vICA8aGJvbm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEFsbG93IHBsYXRmb3JtcyB0byBjaG9vc2Ugd2hldGhlciB0byByZW1vdmUgbWFya2VycyBvbiBl
ZGl0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDg2MDZjNGZmMDg4YjdmOTFjM2Qw
NzQyNzgwZjE3MDFlODNjNjM4ZmMuLjViODU2OTIyNjgwYjNlZjA4NWFhNWY4NjExNjViY2Y1ZGY4
MzdlNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTIt
MDYtMTQgIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBBbGxvdyBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5ZXJzIGluIHRoZSBjb21wb3Np
dG9yIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzMzNTAKKworICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAg
ICBOZXcgdW5pdCB0ZXN0cyB0byB2ZXJpZnkgbGF5ZXIgc2Nyb2xsaW5nIGJlaGF2aW9yIGFuZCB0
aGUgYXNzb2NpYXRlZAorICAgICAgICB1dGlsaXR5IGZ1bmN0aW9ucy4KKworICAgICAgICAqIHNy
Yy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50SW50ZXJuYWwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2Vz
dHVyZUZsaW5nKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6Ok1vY2tDb250
ZW50TGF5ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhv
c3RUZXN0U2Nyb2xsQ2hpbGRMYXllcik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcik6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyOjpiZWdp
blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXll
cjo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxDaGlsZExheWVyOjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6ZHJhd0xheWVyc09uQ0NUaHJl
YWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsQ2hpbGRMYXllcjo6
YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OlRFU1RfRik6CisgICAg
ICAgICogdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6VEVTVF9GKToKKwogMjAxMi0wNi0xNSAgSGlyb25vcmkgQm9ubyAgPGhib25v
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBbGxvdyBwbGF0Zm9ybXMgdG8gY2hvb3NlIHdoZXRo
ZXIgdG8gcmVtb3ZlIG1hcmtlcnMgb24gZWRpdGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRl
eCA3ZTRhMDRkYzg0OWE1ZmEyMzJiYWMzZDY3MjNlMjliN2I2NTU0YTQzLi4xZDFiYjE0MTM0MzA4
YzZiODE2ZTc5MjEzYWYwOWY5Mjk5NzZiNTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAt
OTQsNiArOTQsNyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICAsIG1fc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm1Jc0FuaW1hdGluZyhmYWxzZSkKICAgICAsIG1fY29udGVudHNTY2Fs
ZSgxLjApCiAgICAgLCBtX2xheWVyQW5pbWF0aW9uRGVsZWdhdGUoMCkKKyAgICAsIG1fbGF5ZXJT
Y3JvbGxEZWxlZ2F0ZSgwKQogewogfQogCkBAIC0zOTUsNiArMzk2LDE0IEBAIHZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TWF4
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pCit7CisgICAg
aWYgKG1fbWF4U2Nyb2xsUG9zaXRpb24gPT0gbWF4U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4U2Nyb2xsUG9zaXRpb247CisgICAg
c2V0TmVlZHNDb21taXQoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRTY3JvbGxhYmxl
KGJvb2wgc2Nyb2xsYWJsZSkKIHsKICAgICBpZiAobV9zY3JvbGxhYmxlID09IHNjcm9sbGFibGUp
CkBAIC00MjgsNiArNDM3LDEzIEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pCiAgICAgc2V0TmVlZHNDb21taXQoKTsK
IH0KIAordm9pZCBMYXllckNocm9taXVtOjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSkKK3sKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xs
RGVsdGEpOworICAgIGlmIChtX2xheWVyU2Nyb2xsRGVsZWdhdGUpCisgICAgICAgIG1fbGF5ZXJT
Y3JvbGxEZWxlZ2F0ZS0+ZGlkU2Nyb2xsKHNjcm9sbERlbHRhKTsKK30KKwogdm9pZCBMYXllckNo
cm9taXVtOjpzZXREcmF3Q2hlY2tlcmJvYXJkRm9yTWlzc2luZ1RpbGVzKGJvb2wgY2hlY2tlcmJv
YXJkKQogewogICAgIGlmIChtX2RyYXdDaGVja2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMgPT0gY2hl
Y2tlcmJvYXJkKQpAQCAtNTQ1LDYgKzU2MSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldEZpeGVkVG9Db250
YWluZXJMYXllcihtX2ZpeGVkVG9Db250YWluZXJMYXllcik7CiAgICAgbGF5ZXItPnNldFByZXNl
cnZlczNEKHByZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Nj
cm9sbFBvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obV9tYXhTY3Jv
bGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fc3VibGF5ZXJU
cmFuc2Zvcm0pOwogICAgIGlmICghdHJhbnNmb3JtSXNBbmltYXRpbmcoKSkKICAgICAgICAgbGF5
ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggZWM5
Mzg3MzUwNmQ2NTk0Njc5OGM3MDY2MDYwZTlhMzM0MmYyYzA2MS4uNGE1ZjFhZTczYTAzYjI5YWUz
OTFjZTRjYzAyYjYzMGIyYTk5MjYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNjUsNiArNjUs
MTUgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNs
YXNzIFNjcm9sbGJhckxheWVyQ2hyb21pdW07CiAKKy8vIERlbGVnYXRlIGZvciBoYW5kbGluZyBz
Y3JvbGwgaW5wdXQgZm9yIGEgTGF5ZXJDaHJvbWl1bS4KK2NsYXNzIExheWVyQ2hyb21pdW1TY3Jv
bGxEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJ
bnRTaXplJikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TGF5ZXJDaHJvbWl1bVNj
cm9sbERlbGVnYXRlKCkgeyB9Cit9OworCiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxh
eWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlzIGNsYXNz
LgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+
LCBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgewpAQCAtMTUxLDEyICsx
NjAsMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmKTsKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbFBvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNv
bnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKwogICAgIHZvaWQgc2V0U2Nyb2xs
YWJsZShib29sKTsKKyAgICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGU7IH0KICAgICB2b2lkIHNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZChib29sKTsKICAg
ICB2b2lkIHNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoYm9vbCk7CiAgICAgY29uc3QgUmVnaW9u
JiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpIHsgcmV0dXJuIG1fbm9uRmFzdFNjcm9sbGFibGVS
ZWdpb247IH0KICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lv
biYpOwogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25DaGFuZ2VkKCkgeyBtX25v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCA9IHRydWU7IH0KKyAgICB2b2lkIHNldExheWVy
U2Nyb2xsRGVsZWdhdGUoTGF5ZXJDaHJvbWl1bVNjcm9sbERlbGVnYXRlKiBsYXllclNjcm9sbERl
bGVnYXRlKSB7IG1fbGF5ZXJTY3JvbGxEZWxlZ2F0ZSA9IGxheWVyU2Nyb2xsRGVsZWdhdGU7IH0K
KyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKIAogICAgIHZvaWQgc2V0RHJhd0No
ZWNrZXJib2FyZEZvck1pc3NpbmdUaWxlcyhib29sKTsKICAgICBib29sIGRyYXdDaGVja2VyYm9h
cmRGb3JNaXNzaW5nVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX2RyYXdDaGVja2VyYm9hcmRGb3JN
aXNzaW5nVGlsZXM7IH0KQEAgLTMyNiw2ICszNDEsNyBAQCBwcml2YXRlOgogICAgIC8vIFVzZXMg
dGFyZ2V0IHN1cmZhY2UncyBzcGFjZS4KICAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CiAgICAg
SW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRp
b247CiAgICAgYm9vbCBtX3Njcm9sbGFibGU7CiAgICAgYm9vbCBtX3Nob3VsZFNjcm9sbE9uTWFp
blRocmVhZDsKICAgICBib29sIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVyczsKQEAgLTM3OCw2ICsz
OTQsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKIAogICAgIENDTGF5
ZXJBbmltYXRpb25EZWxlZ2F0ZSogbV9sYXllckFuaW1hdGlvbkRlbGVnYXRlOworICAgIExheWVy
Q2hyb21pdW1TY3JvbGxEZWxlZ2F0ZSogbV9sYXllclNjcm9sbERlbGVnYXRlOwogfTsKIAogdm9p
ZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRI
YW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0lucHV0SGFuZGxlci5oCmluZGV4IDc2NjA4ZDlmYzFkMGRhMTM5YTQ5MzBiYzUwNDdjMDhhZWI4
YjJkZjQuLjc3ZGQyZGJjZjc0Yjc3ZjgwMjcxY2VjNGYyNWJhNzFjMDUwZmYyYmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRI
YW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NJbnB1dEhhbmRsZXIuaApAQCAtNDUsMTIgKzQ1LDEyIEBAIGNsYXNzIEludFNpemU7CiBj
bGFzcyBDQ0lucHV0SGFuZGxlckNsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NJ
bnB1dEhhbmRsZXJDbGllbnQpOwogcHVibGljOgotICAgIGVudW0gU2Nyb2xsU3RhdHVzIHsgU2Ny
b2xsRmFpbGVkLCBTY3JvbGxTdGFydGVkLCBTY3JvbGxJZ25vcmVkIH07CisgICAgZW51bSBTY3Jv
bGxTdGF0dXMgeyBTY3JvbGxPbk1haW5UaHJlYWQsIFNjcm9sbFN0YXJ0ZWQsIFNjcm9sbElnbm9y
ZWQgfTsKICAgICBlbnVtIFNjcm9sbElucHV0VHlwZSB7IEdlc3R1cmUsIFdoZWVsIH07CiAKICAg
ICAvLyBBdHRlbXB0IHRvIHN0YXJ0IHNjcm9sbGluZyBhIGxheWVyIGF0IGEgZ2l2ZW4gcG9pbnQg
aW4gd2luZG93CiAgICAgLy8gY29vcmRpbmF0ZXMuIFJldHVybnMgU2Nyb2xsU3RhcnRlZCBpZiB0
aGUgbGF5ZXIgYXQgdGhlIGNvb3JkaW5hdGVzIGNhbgotICAgIC8vIGJlIHNjcm9sbGVkLCBTY3Jv
bGxGYWlsZWQgaWYgdGhlIHNjcm9sbCBldmVudCBzaG91bGQgaW5zdGVhZCBiZQorICAgIC8vIGJl
IHNjcm9sbGVkLCBTY3JvbGxPbk1haW5UaHJlYWQgaWYgdGhlIHNjcm9sbCBldmVudCBzaG91bGQg
aW5zdGVhZCBiZQogICAgIC8vIGRlbGVnYXRlZCB0byB0aGUgbWFpbiB0aHJlYWQsIG9yIFNjcm9s
bElnbm9yZWQgaWYgdGhlcmUgaXMgbm90aGluZyB0bwogICAgIC8vIGJlIHNjcm9sbGVkIGF0IHRo
ZSBnaXZlbiBjb29yZGluYXRlcy4KICAgICB2aXJ0dWFsIFNjcm9sbFN0YXR1cyBzY3JvbGxCZWdp
bihjb25zdCBJbnRQb2ludCYsIFNjcm9sbElucHV0VHlwZSkgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwCmluZGV4IDhhNTM4OTlmNjc2YWZjZWRlMmZlNWEzNDg3YzNkY2RhMDQ1MmMyYTQuLmU2
MWJmOTFkMDZjNWNhMjVjNWMzYmE2YjRmM2JlNDY5YTFiOWNkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyU29ydGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5oIgogI2luY2x1ZGUg
ImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0xODYsNiArMTg3LDQwIEBAIHZv
aWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQogICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRyZWUoKTsKIH0KIAorQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsKGNvbnN0IEludFBvaW50
JiB2aWV3cG9ydFBvaW50LCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlIHR5
cGUpIGNvbnN0Cit7CisgICAgaWYgKHNob3VsZFNjcm9sbE9uTWFpblRocmVhZCgpKSB7CisgICAg
ICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllckltcGw6OnRyeVNjcm9sbDogRmFpbGVkIHNo
b3VsZFNjcm9sbE9uTWFpblRocmVhZCIpOworICAgICAgICByZXR1cm4gQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDsKKyAgICB9CisKKyAgICBpZiAoIXNjcmVlblNwYWNl
VHJhbnNmb3JtKCkuaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIs
ICJDQ0xheWVySW1wbDo6dHJ5U2Nyb2xsOiBJZ25vcmVkIG5vbkludmVydGlibGVUcmFuc2Zvcm0i
KTsKKyAgICAgICAgcmV0dXJuIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOwor
ICAgIH0KKworICAgIGlmICghbm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgYm9vbCBjbGlwcGVkID0gZmFsc2U7CisgICAgICAgIEZsb2F0UG9pbnQgaGl0VGVz
dFBvaW50SW5Mb2NhbFNwYWNlID0gQ0NNYXRoVXRpbDo6cHJvamVjdFBvaW50KHNjcmVlblNwYWNl
VHJhbnNmb3JtKCkuaW52ZXJzZSgpLCBGbG9hdFBvaW50KHZpZXdwb3J0UG9pbnQpLCBjbGlwcGVk
KTsKKyAgICAgICAgaWYgKCFjbGlwcGVkICYmIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29u
dGFpbnMoZmxvb3JlZEludFBvaW50KGhpdFRlc3RQb2ludEluTG9jYWxTcGFjZSkpKSB7CisgICAg
ICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJJbXBsOjp0cnlTY3JvbGw6IEZhaWxl
ZCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiIpOworICAgICAgICAgICAgcmV0dXJuIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAodHlwZSA9PSBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwgJiYgaGF2ZVdoZWVsRXZl
bnRIYW5kbGVycygpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllckltcGw6
OnRyeVNjcm9sbDogRmFpbGVkIHdoZWVsRXZlbnRIYW5kbGVycyIpOworICAgICAgICByZXR1cm4g
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDsKKyAgICB9CisKKyAgICBp
ZiAoIXNjcm9sbGFibGUoKSkgeworICAgICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJJ
bXBsOjp0cnlTY3JvbGw6IElnbm9yZWQgbm90IHNjcm9sbGFibGUiKTsKKyAgICAgICAgcmV0dXJu
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOworICAgIH0KKworICAgIHJldHVy
biBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDsKK30KKwogY29uc3QgSW50UmVj
dCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogewogICAgIC8vIEZvcm0gdGhlIG1h
dHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJzIG9mIHRoZSBsYXllcidz
CkBAIC0yMzgsNyArMjczLDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGll
cyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKIAogdm9pZCBzb3J0TGF5ZXJzKFZl
Y3RvcjxDQ0xheWVySW1wbCo+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj46
Oml0ZXJhdG9yIGVuZCwgQ0NMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIpCiB7Ci0gICAgVFJBQ0Vf
RVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c29ydExheWVycyIsIDAsIDApOworICAgIFRS
QUNFX0VWRU5UMCgiY2MiLCAiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzb3J0TGF5ZXJzIik7CiAg
ICAgbGF5ZXJTb3J0ZXItPnNvcnQoZmlyc3QsIGVuZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IDBhMjNjZDg4M2VhMGM4YzUzMzAxMWQxZjMxMGU3ODBjMTZjYTUxMTcuLjQ5MjkwNjA2
NjhkMzA1M2JhNzhlNTYzYjg1OWVlOTI4Njg4NjM0NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSZWdpb24u
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
ImNjL0NDUmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgi
CkBAIC0yMTgsNiArMjE5LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0RHJhd0NoZWNrZXJib2Fy
ZEZvck1pc3NpbmdUaWxlcyhib29sIGNoZWNrZXJib2FyZCkgeyBtX2RyYXdDaGVja2VyYm9hcmRG
b3JNaXNzaW5nVGlsZXMgPSBjaGVja2VyYm9hcmQ7IH0KICAgICBib29sIGRyYXdDaGVja2VyYm9h
cmRGb3JNaXNzaW5nVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX2RyYXdDaGVja2VyYm9hcmRGb3JN
aXNzaW5nVGlsZXM7IH0KIAorICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMg
dHJ5U2Nyb2xsKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6U2Nyb2xsSW5wdXRUeXBlKSBjb25zdDsKKwogICAgIGNvbnN0IEludFJlY3QmIHZpc2li
bGVMYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVMYXllclJlY3Q7IH0KICAgICB2
b2lkIHNldFZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCkg
eyBtX3Zpc2libGVMYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0OyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDhmMjQ2ZDNjNTliZjU4ZDM3NDRhN2E1NWJjYWQ2ZTlj
ZDFjNjNjNWYuLjRhNWZjZjNjM2Q0MzhkZjk3Y2ZjYTQxODNhYTJiNmQzOGIyZTE3NWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1w
bCogaG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIAot
ICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJlbGVhc2VSb290TGF5ZXIoKSwgaG9zdEltcGwp
KTsKKyAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9u
aXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5kZXRhY2hMYXllclRyZWUoKSwgaG9zdElt
cGwpKTsKIAogICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1hdGlvbiBkdXJpbmcgdGhl
IHRyZWUgc3luYy4gVGhpcyB3aWxsIGNhdXNlIGJvdGggbGF5ZXIgdHJlZSBob3N0cwogICAgIC8v
IHRvIHZpc2l0IHRoZWlyIGNvbnRyb2xsZXJzLgpAQCAtNjE4LDE1ICs2MTgsNDIgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRl
clN1cmZhY2VMYXllckxpc3QKICAgICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygp
LnJlY29yZE1ldHJpY3ModGhpcyk7CiB9CiAKK3N0YXRpYyBMYXllckNocm9taXVtKiBmaW5kRmly
c3RTY3JvbGxhYmxlTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgaWYgKCFsYXll
cikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGF5ZXItPnNjcm9sbGFibGUoKSkKKyAg
ICAgICAgcmV0dXJuIGxheWVyOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBmb3VuZCA9
IGZpbmRGaXJzdFNjcm9sbGFibGVMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cisg
ICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsQW5kU2Nh
bGUoY29uc3QgQ0NTY3JvbGxBbmRTY2FsZVNldCYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogcHVz
aGluZyBzY3JvbGwgb2Zmc2V0cyB0byBub24tcm9vdCBsYXllcnMgbm90IGltcGxlbWVudGVkCi0g
ICAgaWYgKCFpbmZvLnNjcm9sbHMuc2l6ZSgpKQorICAgIGlmICghbV9yb290TGF5ZXIpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEFTU0VSVChpbmZvLnNjcm9sbHMuc2l6ZSgpID09IDEpOwotICAg
IEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvLnNjcm9sbHNbMF0uc2Nyb2xsRGVsdGE7Ci0gICAg
bV9jbGllbnQtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoc2Nyb2xsRGVsdGEsIGluZm8ucGFnZVNjYWxl
RGVsdGEpOworICAgIExheWVyQ2hyb21pdW0qIHJvb3RTY3JvbGxMYXllciA9IGZpbmRGaXJzdFNj
cm9sbGFibGVMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgSW50U2l6ZSByb290U2Nyb2xs
RGVsdGE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZm8uc2Nyb2xscy5zaXplKCk7
ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKG1fcm9vdExheWVyLmdldCgpLCBpbmZvLnNjcm9sbHNb
aV0ubGF5ZXJJZCk7CisgICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGxheWVyID09IHJvb3RTY3JvbGxMYXllcikKKyAgICAgICAgICAgIHJvb3RT
Y3JvbGxEZWx0YSArPSBpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGE7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGxheWVyLT5zY3JvbGxCeShpbmZvLnNjcm9sbHNbaV0uc2Nyb2xsRGVsdGEp
OworICAgIH0KKyAgICBpZiAoIXJvb3RTY3JvbGxEZWx0YS5pc1plcm8oKSB8fCBpbmZvLnBhZ2VT
Y2FsZURlbHRhICE9IDEpCisgICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbEFuZFNjYWxlKHJv
b3RTY3JvbGxEZWx0YSwgaW5mby5wYWdlU2NhbGVEZWx0YSk7CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpzdGFydFJhdGVMaW1pdGVyKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IGU1ZTRm
ZDlhMmMyMzgyYjllOTI1Y2E3OTQ5ODU5Mzc3MTY4MjI5ZDkuLmU1YTRmZWM5YzE1NmU0ZjUxMDE5
ZTZmNjZiZjZhMThjODYwNjNiMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oCkBAIC01Miw2ICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMYXllclR5cGU+IHN0YXRpYyBib29sIHJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0
KExheWVyVHlwZSosIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CiAKKyAgICAvLyBSZXR1cm5z
IGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgaWYgb25lIGV4aXN0cyBpbiB0aGUgc3VidHJlZSBz
dGFydGluZworICAgIC8vIGZyb20gdGhlIGdpdmVuIHJvb3QgbGF5ZXIgKGluY2x1ZGluZyBtYXNr
IGFuZCByZXBsaWNhIGxheWVycykuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBz
dGF0aWMgTGF5ZXJUeXBlKiBmaW5kTGF5ZXJJblN1YnRyZWUoTGF5ZXJUeXBlKiByb290TGF5ZXIs
IGludCBsYXllcklkKTsKKwogICAgIHN0cnVjdCBTY3JvbGxVcGRhdGVJbmZvIHsKICAgICAgICAg
aW50IGxheWVySWQ7CiAgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGE7CkBAIC03Nyw2ICs4MSwy
NSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVz
VG9UYXJnZXQoTGF5ZXJUeXBlKiBsYXllciwgaQogICAgIHJldHVybiBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpICYmIGxheWVyLT5pZCgpICE9IHRhcmdldFN1cmZhY2VMYXllcklEOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CitMYXllclR5cGUqIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6ZmluZExheWVySW5TdWJ0cmVlKExheWVyVHlwZSogcm9vdExheWVyLCBpbnQgbGF5ZXJJZCkK
K3sKKyAgICBpZiAocm9vdExheWVyLT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiBy
b290TGF5ZXI7CisKKyAgICBpZiAocm9vdExheWVyLT5tYXNrTGF5ZXIoKSAmJiByb290TGF5ZXIt
Pm1hc2tMYXllcigpLT5pZCgpID09IGxheWVySWQpCisgICAgICAgIHJldHVybiByb290TGF5ZXIt
Pm1hc2tMYXllcigpOworCisgICAgaWYgKHJvb3RMYXllci0+cmVwbGljYUxheWVyKCkgJiYgcm9v
dExheWVyLT5yZXBsaWNhTGF5ZXIoKS0+aWQoKSA9PSBsYXllcklkKQorICAgICAgICByZXR1cm4g
cm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChMYXllclR5
cGUqIGZvdW5kID0gZmluZExheWVySW5TdWJ0cmVlKHJvb3RMYXllci0+Y2hpbGRyZW4oKVtpXS5n
ZXQoKSwgbGF5ZXJJZCkpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBhOTg1YzNmNjJhMjFlNzAxN2JhOGIw
YTI1YmFkMDg1ZDZkNTEyM2I4Li43MjI2MTE2YWViYzJlYjI5NWQ3NDY5M2Y0ODBiNmMyYzlhYjYz
NGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMTE1LDcg
KzExNSw5IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3Qg
Q0NMYXllclRyZWVTZXR0aW5ncyYgc2V0dGluZ3MsIENDCiAgICAgOiBtX2NsaWVudChjbGllbnQp
CiAgICAgLCBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigwKQot
ICAgICwgbV9zY3JvbGxMYXllckltcGwoMCkKKyAgICAsIG1fcm9vdFNjcm9sbExheWVySW1wbCgw
KQorICAgICwgbV9jdXJyZW50bHlTY3JvbGxpbmdMYXllckltcGwoMCkKKyAgICAsIG1fc2Nyb2xs
aW5nTGF5ZXJJZEZyb21QcmV2aW91c1RyZWUoLTEpCiAgICAgLCBtX3NldHRpbmdzKHNldHRpbmdz
KQogICAgICwgbV92aXNpYmxlKHRydWUpCiAgICAgLCBtX3NvdXJjZUZyYW1lQ2FuQmVEcmF3bih0
cnVlKQpAQCAtMTM4LDcgKzE0MCw3IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVl
SG9zdEltcGwoY29uc3QgQ0NMYXllclRyZWVTZXR0aW5ncyYgc2V0dGluZ3MsIENDCiBDQ0xheWVy
VHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpCiB7CiAgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKSIsIHRoaXMsIDApOworICAgIFRSQUNFX0VWRU5UMCgi
Y2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKSIpOwogCiAg
ICAgaWYgKG1fcm9vdExheWVySW1wbCkKICAgICAgICAgY2xlYXJSZW5kZXJTdXJmYWNlcygpOwpA
QCAtMTgyLDEwICsxODQsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRv
dWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSkKIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJn
ZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3Rh
cnRUaW1lLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCkK
KyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SW50U2l6ZSBzY3JvbGxUb3RhbCA9IGZsb29yZWRJbnRTaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAg
IEludFNpemUgc2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRh
KCkpOwogICAgIHNjcm9sbFRvdGFsLnNjYWxlKG1fcGFnZVNjYWxlRGVsdGEpOwogICAgIGZsb2F0
IHNjYWxlVG90YWwgPSBtX3BhZ2VTY2FsZSAqIG1fcGFnZVNjYWxlRGVsdGE7CiAgICAgSW50U2l6
ZSBzY2FsZWRDb250ZW50U2l6ZSA9IGNvbnRlbnRTaXplKCk7CkBAIC0yMzUsNiArMjM3LDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5
ZXJJbXBsKiByb290RHJhd0xheWVyLAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxh
dGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KQogewogICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1fcm9vdExheWVySW1wbCk7CiAKICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwogCkBAIC0yNDYsNyArMjQ5LDcgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KEND
TGF5ZXJMaXN0JiByZW5kZXJTdXIKICAgICBtX3Jvb3RMYXllckltcGwtPnNldENsaXBSZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgZGV2aWNlVmlld3BvcnRTaXplKCkpKTsKIAogICAgIHsKLSAgICAg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGNEcmF3RXRjIiwgdGhpcywg
MCk7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2Fs
Y0RyYXdFdGMiKTsKICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxlVHJhbnNmb3Jt
OwogICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX3NldHRpbmdzLmRldmljZVNj
YWxlRmFjdG9yKTsKQEAgLTI2OSw3ICsyNzIsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZQog
CiAgICAgY2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdChyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKIAotICAgIFRSQUNFX0VWRU5UMSgid2Via2l0IiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6
OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyIsICJyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSIs
IHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5z
aXplKCkpKTsKKyAgICBUUkFDRV9FVkVOVDEoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGN1bGF0ZVJlbmRlclBhc3NlcyIsICJyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSIsIHN0
YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCkpKTsKIAogICAgIG1fcm9vdExheWVySW1wbC0+c2V0U2Npc3NvclJlY3QoZW5jbG9zaW5nSW50
UmVjdChtX3Jvb3RTY2lzc29yUmVjdCkpOwogCkBAIC0zNzQsMjEgKzM3NywyMiBAQCBJbnRTaXpl
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRTaXplKCkgY29uc3QKIHsKICAgICAvLyBUT0RP
KGFlbGlhcyk6IEhhcmRjb2RpbmcgdGhlIGZpcnN0IGNoaWxkIGhlcmUgaXMgd2VpcmQuIFRoaW5r
IG9mCiAgICAgLy8gYSBjbGVhbmVyIHdheSB0byBnZXQgdGhlIGNvbnRlbnRCb3VuZHMgb24gdGhl
IEltcGwgc2lkZS4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8IG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5jaGlsZHJlbigpLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fcm9vdFNjcm9sbExheWVySW1w
bCB8fCBtX3Jvb3RTY3JvbGxMYXllckltcGwtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOwotICAgIHJldHVybiBtX3Njcm9sbExheWVySW1wbC0+Y2hpbGRy
ZW4oKVswXS0+Y29udGVudEJvdW5kcygpOworICAgIHJldHVybiBtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKTsKIH0KIAogYm9vbCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZyYW1lRGF0YSYgZnJhbWUpCiB7Ci0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0RyYXciLCB0aGlzLCAwKTsKKyAg
ICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0RyYXci
KTsKICAgICBBU1NFUlQoY2FuRHJhdygpKTsKIAorICAgIGZyYW1lLnJlbmRlclN1cmZhY2VMYXll
ckxpc3QgPSAmbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIGZyYW1lLnJlbmRlclBhc3Nl
cy5jbGVhcigpOwotICAgIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKKyAg
ICBmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LT5jbGVhcigpOwogICAgIGZyYW1lLndpbGxE
cmF3TGF5ZXJzLmNsZWFyKCk7CiAKLSAgICBpZiAoIWNhbGN1bGF0ZVJlbmRlclBhc3NlcyhmcmFt
ZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QsIGZyYW1lLndpbGxE
cmF3TGF5ZXJzKSkKKyAgICBpZiAoIWNhbGN1bGF0ZVJlbmRlclBhc3NlcyhmcmFtZS5yZW5kZXJQ
YXNzZXMsICpmcmFtZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBmcmFtZS53aWxsRHJhd0xheWVy
cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHdlIHJldHVybiB0cnVlLCB0
aGVuIHdlIGV4cGVjdCBkcmF3TGF5ZXJzKCkgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCBhZ2Fpbi4KQEAgLTQwMiw3ICs0MDYsNyBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldENvbnRlbnRzTWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoc2l6ZV90IGJ5
dGVzKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJhbWVE
YXRhJiBmcmFtZSkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJh
d0xheWVycyIsIHRoaXMsIDApOworICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVI
b3N0SW1wbDo6ZHJhd0xheWVycyIpOwogICAgIEFTU0VSVChjYW5EcmF3KCkpOwogICAgIEFTU0VS
VCghZnJhbWUucmVuZGVyUGFzc2VzLmlzRW1wdHkoKSk7CiAKQEAgLTQyNiw3ICs0MzAsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJhbWVEYXRhJiBmcmFt
ZSkKICAgICB9CiAKICAgICBpZiAobV9kZWJ1Z1JlY3RIaXN0b3J5LT5lbmFibGVkKHNldHRpbmdz
KCkpKQotICAgICAgICBtX2RlYnVnUmVjdEhpc3RvcnktPnNhdmVEZWJ1Z1JlY3RzRm9yQ3VycmVu
dEZyYW1lKG1fcm9vdExheWVySW1wbC5nZXQoKSwgZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgc2V0dGluZ3MoKSk7CisgICAgICAgIG1fZGVidWdSZWN0SGlzdG9yeS0+c2F2ZURlYnVnUmVj
dHNGb3JDdXJyZW50RnJhbWUobV9yb290TGF5ZXJJbXBsLmdldCgpLCAqZnJhbWUucmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgc2V0dGluZ3MoKSk7CiAKICAgICBpZiAobV9oZWFkc1VwRGlzcGxheS0+
ZW5hYmxlZChzZXR0aW5ncygpKSkKICAgICAgICAgbV9oZWFkc1VwRGlzcGxheS0+ZHJhdyh0aGlz
KTsKQEAgLTQ5MCw3ICs0OTQsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNr
KHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBtX2xheWVyUmVuZGVyZXIt
PmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CiB9CiAKLXN0YXRpYyBDQ0xheWVy
SW1wbCogZmluZFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKK3N0YXRpYyBDQ0xheWVy
SW1wbCogZmluZFJvb3RTY3JvbGxMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiB7CiAgICAgaWYg
KCFsYXllcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC00OTksNyArNTAzLDcgQEAgc3RhdGljIEND
TGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQogICAgICAgICBy
ZXR1cm4gbGF5ZXI7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJl
bigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiBmb3VuZCA9IGZpbmRTY3Jv
bGxMYXllcihsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisgICAgICAgIENDTGF5ZXJJbXBs
KiBmb3VuZCA9IGZpbmRSb290U2Nyb2xsTGF5ZXIobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkp
OwogICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICByZXR1cm4gZm91bmQ7CiAgICAgfQpA
QCAtNTA3LDEyICs1MTEsNDMgQEAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kU2Nyb2xsTGF5ZXIo
Q0NMYXllckltcGwqIGxheWVyKQogICAgIHJldHVybiAwOwogfQogCisvLyBDb250ZW50IGxheWVy
cyBjYW4gYmUgZWl0aGVyIGRpcmVjdGx5IHNjcm9sbGFibGUgb3IgY29udGFpbmVkIGluIGFuIG91
dGVyCisvLyBzY3JvbGxpbmcgbGF5ZXIgd2hpY2ggYXBwbGllcyB0aGUgc2Nyb2xsIHRyYW5zZm9y
bS4gR2l2ZW4gYSBjb250ZW50IGxheWVyLAorLy8gdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBh
c3NvY2lhdGVkIHNjcm9sbCBsYXllciBpZiBhbnkuCitzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRT
Y3JvbGxMYXllckZvckNvbnRlbnRMYXllcihDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQoreworICAg
IGlmICghbGF5ZXJJbXBsKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChsYXllckltcGwt
PnNjcm9sbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGxheWVySW1wbDsKKworICAgIGlmIChsYXll
ckltcGwtPmRyYXdzQ29udGVudCgpICYmIGxheWVySW1wbC0+cGFyZW50KCkgJiYgbGF5ZXJJbXBs
LT5wYXJlbnQoKS0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1cm4gbGF5ZXJJbXBsLT5wYXJl
bnQoKTsKKworICAgIHJldHVybiAwOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNl
dFJvb3RMYXllcihQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsKICAgICBtX3Jvb3RM
YXllckltcGwgPSBsYXllcjsKKyAgICBtX3Jvb3RTY3JvbGxMYXllckltcGwgPSBmaW5kUm9vdFNj
cm9sbExheWVyKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisgICAgbV9jdXJyZW50bHlTY3JvbGxp
bmdMYXllckltcGwgPSAwOworCisgICAgaWYgKG1fcm9vdExheWVySW1wbCAmJiBtX3Njcm9sbGlu
Z0xheWVySWRGcm9tUHJldmlvdXNUcmVlICE9IC0xKQorICAgICAgICBtX2N1cnJlbnRseVNjcm9s
bGluZ0xheWVySW1wbCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVl
KG1fcm9vdExheWVySW1wbC5nZXQoKSwgbV9zY3JvbGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJl
ZSk7CisKKyAgICBtX3Njcm9sbGluZ0xheWVySWRGcm9tUHJldmlvdXNUcmVlID0gLTE7Cit9CisK
K1Bhc3NPd25QdHI8Q0NMYXllckltcGw+IENDTGF5ZXJUcmVlSG9zdEltcGw6OmRldGFjaExheWVy
VHJlZSgpCit7CisgICAgLy8gQ2xlYXIgYWxsIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhdmUgZGly
ZWN0IHJlZmVyZW5jZXMgdG8gdGhlIGxheWVyIHRyZWUuCisgICAgbV9zY3JvbGxpbmdMYXllcklk
RnJvbVByZXZpb3VzVHJlZSA9IG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID8gbV9jdXJy
ZW50bHlTY3JvbGxpbmdMYXllckltcGwtPmlkKCkgOiAtMTsKKyAgICBtX2N1cnJlbnRseVNjcm9s
bGluZ0xheWVySW1wbCA9IDA7CisgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7
CiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB0aGlzIG9ubHkgZmluZHMgdGhlIGZpcnN0IHNj
cm9sbGFibGUgbGF5ZXIuCi0gICAgbV9zY3JvbGxMYXllckltcGwgPSBmaW5kU2Nyb2xsTGF5ZXIo
bV9yb290TGF5ZXJJbXBsLmdldCgpKTsKKyAgICByZXR1cm4gbV9yb290TGF5ZXJJbXBsLnJlbGVh
c2UoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlz
aWJsZSkKQEAgLTU3Niw2ICs2MTEsMzQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRW
aWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogICAgICAgICBtX2xheWVy
UmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwogfQogCitzdGF0aWMgdm9pZCBhZGp1c3RTY3Jv
bGxzRm9yUGFnZVNjYWxlQ2hhbmdlKENDTGF5ZXJJbXBsKiBsYXllckltcGwsIGZsb2F0IHBhZ2VT
Y2FsZUNoYW5nZSkKK3sKKyAgICBpZiAoIWxheWVySW1wbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGxheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8g
Y29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdlU2NhbGUgc3BhY2UuCisgICAg
ICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKTsKKyAg
ICAgICAgc2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlQ2hhbmdlKTsKKyAgICAgICAgbGF5ZXJJ
bXBsLT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAg
IGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UobGF5ZXJJbXBsLT5jaGlsZHJlbigpW2ld
LmdldCgpLCBwYWdlU2NhbGVDaGFuZ2UpOworfQorCitzdGF0aWMgdm9pZCBhcHBseVBhZ2VTY2Fs
ZURlbHRhVG9TY3JvbGxMYXllcnMoQ0NMYXllckltcGwqIGxheWVySW1wbCwgZmxvYXQgcGFnZVNj
YWxlRGVsdGEpCit7CisgICAgaWYgKCFsYXllckltcGwpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgbGF5ZXJJbXBsLT5zZXRQYWdl
U2NhbGVEZWx0YShwYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxheWVySW1wbC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgYXBwbHlQYWdlU2Nh
bGVEZWx0YVRvU2Nyb2xsTGF5ZXJzKGxheWVySW1wbC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgcGFn
ZVNjYWxlRGVsdGEpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFBhZ2VTY2Fs
ZUZhY3RvckFuZExpbWl0cyhmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IG1pblBhZ2VTY2FsZSwgZmxv
YXQgbWF4UGFnZVNjYWxlKQogewogICAgIGlmICghcGFnZVNjYWxlKQpAQCAtNTkwLDI1ICs2NTMs
MTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1p
dHMoZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBtaW4KICAgICBmbG9hdCBwYWdlU2NhbGVDaGFuZ2Ug
PSBwYWdlU2NhbGUgLyBtX3BhZ2VTY2FsZTsKICAgICBtX3BhZ2VTY2FsZSA9IHBhZ2VTY2FsZTsK
IAotICAgIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UocGFnZVNjYWxlQ2hhbmdlKTsK
KyAgICBpZiAocGFnZVNjYWxlQ2hhbmdlICE9IDEpCisgICAgICAgIGFkanVzdFNjcm9sbHNGb3JQ
YWdlU2NhbGVDaGFuZ2UobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBwYWdlU2NhbGVDaGFuZ2UpOwog
CiAgICAgLy8gQ2xhbXAgZGVsdGEgdG8gbGltaXRzIGFuZCByZWZyZXNoIGRpc3BsYXkgbWF0cml4
LgogICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlRGVsdGEgLyBtX3NlbnRQYWdlU2Nh
bGVEZWx0YSk7CiAgICAgbV9zZW50UGFnZVNjYWxlRGVsdGEgPSAxOwotICAgIGFwcGx5UGFnZVNj
YWxlRGVsdGFUb1Njcm9sbExheWVyKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
YWRqdXN0U2Nyb2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCBwYWdlU2NhbGVDaGFuZ2UpCi17
Ci0gICAgaWYgKHBhZ2VTY2FsZUNoYW5nZSA9PSAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBXZSBhbHNvIG5lZWQgdG8gY29udmVydCBpbXBsLXNpZGUgc2Nyb2xsIGRlbHRhcyB0byBwYWdl
U2NhbGUgc3BhY2UuCi0gICAgaWYgKG1fc2Nyb2xsTGF5ZXJJbXBsKSB7Ci0gICAgICAgIEZsb2F0
U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpOwotICAg
ICAgICBzY3JvbGxEZWx0YS5zY2FsZShwYWdlU2NhbGVDaGFuZ2UpOwotICAgICAgICBtX3Njcm9s
bExheWVySW1wbC0+c2V0U2Nyb2xsRGVsdGEoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAgICBhcHBs
eVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcnMobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3Bh
Z2VTY2FsZURlbHRhKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRQYWdlU2Nh
bGVEZWx0YShmbG9hdCBkZWx0YSkKQEAgLTYyNiwyMiArNjc3LDE2IEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0UGFnZVNjYWxlRGVsdGEoZmxvYXQgZGVsdGEpCiAgICAgbV9wYWdlU2Nh
bGVEZWx0YSA9IGRlbHRhOwogCiAgICAgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKLSAgICBh
cHBseVBhZ2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwotfQotCi12b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCkKLXsKLSAgICBpZiAo
bV9zY3JvbGxMYXllckltcGwpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRQYWdlU2Nh
bGVEZWx0YShtX3BhZ2VTY2FsZURlbHRhKTsKKyAgICBhcHBseVBhZ2VTY2FsZURlbHRhVG9TY3Jv
bGxMYXllcnMobV9yb290U2Nyb2xsTGF5ZXJJbXBsLCBtX3BhZ2VTY2FsZURlbHRhKTsKIH0KIAog
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpCiB7Ci0g
ICAgaWYgKCFtX3Njcm9sbExheWVySW1wbCB8fCAhbV9zY3JvbGxMYXllckltcGwtPmNoaWxkcmVu
KCkuc2l6ZSgpKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Jvb3RTY3Jv
bGxMYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBG
bG9hdFNpemUgdmlld0JvdW5kcyA9IG1fdmlld3BvcnRTaXplOwotICAgIGlmIChDQ0xheWVySW1w
bCogY2xpcExheWVyID0gbV9zY3JvbGxMYXllckltcGwtPnBhcmVudCgpKSB7CisgICAgaWYgKEND
TGF5ZXJJbXBsKiBjbGlwTGF5ZXIgPSBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnBhcmVudCgpKSB7
CiAgICAgICAgIGlmIChjbGlwTGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkKICAgICAgICAgICAgIHZp
ZXdCb3VuZHMgPSBjbGlwTGF5ZXItPmJvdW5kcygpOwogICAgIH0KQEAgLTY1NSw5ICs3MDAsNyBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAg
ICAvLyBoYXZpbmcgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZs
b3cuCiAgICAgbWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKIAotICAgIG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwotCi0gICAgLy8gVE9E
TyhhZWxpYXMpOiBBbHNvIHVwZGF0ZSBzdWJsYXllcnMuCisgICAgbV9yb290U2Nyb2xsTGF5ZXJJ
bXBsLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKQEAgLTY2NSw1MSArNzA4LDEwOSBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+c2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjplbnN1cmVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KCkKK3sKKyAgICBpZiAoIW1fcm9vdExheWVy
SW1wbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgbmVlZCBib3RoIGEgbm9u
LWVtcHR5IHJlbmRlciBzdXJmYWNlIGxheWVyIGxpc3QgYW5kIGEgcm9vdCByZW5kZXIKKyAgICAv
LyBzdXJmYWNlIHRvIGJlIGFibGUgdG8gaXRlcmF0ZSBvdmVyIHRoZSB2aXNpYmxlIGxheWVycy4K
KyAgICBpZiAobV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAmJiBtX3Jvb3RMYXllcklt
cGwtPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiB3
ZSBhcmUgY2FsbGVkIGFmdGVyIHNldFJvb3RMYXllcigpIGJ1dCBiZWZvcmUgcHJlcGFyZVRvRHJh
dygpLCB3ZSBuZWVkCisgICAgLy8gdG8gcmVjYWxjdWxhdGUgdGhlIHZpc2libGUgbGF5ZXJzLiBU
aGlzIHByZXZlbnRzIGJlaW5nIHVuYWJsZSB0byBzY3JvbGwKKyAgICAvLyBkdXJpbmcgcGFydCBv
ZiBhIGNvbW1pdC4KKyAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKKyAgICBj
YWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CisKKyAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKTsKK30KKwogQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3Jv
bGxCZWdpbihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbElucHV0VHlwZSB0eXBlKQogewotICAgIC8vIFRPRE86IENoZWNrIGZvciBzY3Jv
bGxhYmxlIHN1YmxheWVycy4KLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsIHx8ICFtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJzY3JvbGxC
ZWdpbiBJZ25vcmVkIG5vIHNjcm9sbGFibGUiLCB0aGlzLCAwKTsKLSAgICAgICAgcmV0dXJuIFNj
cm9sbElnbm9yZWQ7Ci0gICAgfQorICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2Nyb2xsQmVnaW4iKTsKIAotICAgIGlmIChtX3Njcm9sbExheWVySW1wbC0+c2hv
dWxkU2Nyb2xsT25NYWluVGhyZWFkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJl
Z2luIEZhaWxlZCBzaG91bGRTY3JvbGxPbk1haW5UaHJlYWQiLCB0aGlzLCAwKTsKLSAgICAgICAg
cmV0dXJuIFNjcm9sbEZhaWxlZDsKLSAgICB9CisgICAgQVNTRVJUKCFtX2N1cnJlbnRseVNjcm9s
bGluZ0xheWVySW1wbCk7CisgICAgY2xlYXJDdXJyZW50bHlTY3JvbGxpbmdMYXllcigpOworCisg
ICAgaWYgKCFlbnN1cmVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KCkpCisgICAgICAgIHJldHVybiBT
Y3JvbGxJZ25vcmVkOwogCiAgICAgSW50UG9pbnQgZGV2aWNlVmlld3BvcnRQb2ludCA9IHZpZXdw
b3J0UG9pbnQ7CiAgICAgZGV2aWNlVmlld3BvcnRQb2ludC5zY2FsZShtX3NldHRpbmdzLmRldmlj
ZVNjYWxlRmFjdG9yLCBtX3NldHRpbmdzLmRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgIC8vIFRo
ZSBpbnZlcnNlIG9mIHRoZSBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtIHRha2VzIHVzIGZyb20gcGh5
c2ljYWwgcGl4ZWxzIHRvIGxheW91dCBwaXhlbHMuCi0gICAgSW50UG9pbnQgc2Nyb2xsTGF5ZXJQ
b2ludChtX3Njcm9sbExheWVySW1wbC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCku
bWFwUG9pbnQoZGV2aWNlVmlld3BvcnRQb2ludCkpOworICAgIC8vIEZpcnN0IGZpbmQgb3V0IHdo
aWNoIGxheWVyIHdhcyBoaXQgZnJvbSB0aGUgc2F2ZWQgbGlzdCBvZiB2aXNpYmxlIGxheWVycwor
ICAgIC8vIGluIHRoZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICBDQ0xheWVySW1wbCogbGF5ZXJJ
bXBsID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHZp
ZXdwb3J0UG9pbnQsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKLSAgICBpZiAobV9zY3Jv
bGxMYXllckltcGwtPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkuY29udGFpbnMoc2Nyb2xsTGF5
ZXJQb2ludCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNjcm9sbEJlZ2luIEZhaWxlZCBub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbiIsIHRoaXMsIDApOwotICAgICAgICByZXR1cm4gU2Nyb2xsRmFp
bGVkOwotICAgIH0KKyAgICAvLyBXYWxrIHVwIHRoZSBoaWVyYXJjaHkgYW5kIGxvb2sgZm9yIGEg
c2Nyb2xsYWJsZSBsYXllci4KKyAgICBDQ0xheWVySW1wbCogcG90ZW50aWFsbHlTY3JvbGxpbmdM
YXllckltcGwgPSAwOworICAgIGZvciAoOyBsYXllckltcGw7IGxheWVySW1wbCA9IGxheWVySW1w
bC0+cGFyZW50KCkpIHsKKyAgICAgICAgLy8gVGhlIGNvbnRlbnQgbGF5ZXIgY2FuIGFsc28gYmxv
Y2sgYXR0ZW1wdHMgdG8gc2Nyb2xsIG91dHNpZGUgdGhlIG1haW4gdGhyZWFkLgorICAgICAgICBp
ZiAobGF5ZXJJbXBsLT50cnlTY3JvbGwoZGV2aWNlVmlld3BvcnRQb2ludCwgdHlwZSkgPT0gU2Ny
b2xsT25NYWluVGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbE9uTWFpblRocmVhZDsK
KworICAgICAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXJJbXBsID0gZmluZFNjcm9sbExheWVy
Rm9yQ29udGVudExheWVyKGxheWVySW1wbCk7CisgICAgICAgIGlmICghc2Nyb2xsTGF5ZXJJbXBs
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU2Nyb2xsU3RhdHVzIHN0YXR1cyA9
IHNjcm9sbExheWVySW1wbC0+dHJ5U2Nyb2xsKHZpZXdwb3J0UG9pbnQsIHR5cGUpOwogCi0gICAg
aWYgKHR5cGUgPT0gQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsICYmIG1fc2Nyb2xsTGF5ZXJJ
bXBsLT5oYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoInNj
cm9sbEJlZ2luIEZhaWxlZCB3aGVlbEV2ZW50SGFuZGxlcnMiLCB0aGlzLCAwKTsKLSAgICAgICAg
cmV0dXJuIFNjcm9sbEZhaWxlZDsKKyAgICAgICAgLy8gSWYgYW55IGxheWVyIHdhbnRzIHRvIGRp
dmVydCB0aGUgc2Nyb2xsIGV2ZW50IHRvIHRoZSBtYWluIHRocmVhZCwgYWJvcnQuCisgICAgICAg
IGlmIChzdGF0dXMgPT0gU2Nyb2xsT25NYWluVGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIFNj
cm9sbE9uTWFpblRocmVhZDsKKworICAgICAgICBpZiAoc3RhdHVzID09IFNjcm9sbFN0YXJ0ZWQg
JiYgIXBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBsKQorICAgICAgICAgICAgcG90ZW50aWFs
bHlTY3JvbGxpbmdMYXllckltcGwgPSBzY3JvbGxMYXllckltcGw7CiAgICAgfQogCi0gICAgcmV0
dXJuIFNjcm9sbFN0YXJ0ZWQ7CisgICAgaWYgKHBvdGVudGlhbGx5U2Nyb2xsaW5nTGF5ZXJJbXBs
KSB7CisgICAgICAgIG1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsID0gcG90ZW50aWFsbHlT
Y3JvbGxpbmdMYXllckltcGw7CisgICAgICAgIHJldHVybiBTY3JvbGxTdGFydGVkOworICAgIH0K
KyAgICByZXR1cm4gU2Nyb2xsSWdub3JlZDsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKLSAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2Nyb2xsQnkiLCB0aGlzLCAwKTsKLSAgICBpZiAoIW1f
c2Nyb2xsTGF5ZXJJbXBsKQorICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2Nyb2xsQnkiKTsKKyAgICBpZiAoIW1fY3VycmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBs
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkoc2Ny
b2xsRGVsdGEpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwot
ICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIEZsb2F0U2l6
ZSBwZW5kaW5nRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgIHBlbmRpbmdEZWx0YS5zY2FsZSgxIC8g
bV9wYWdlU2NhbGVEZWx0YSk7CisKKyAgICBmb3IgKENDTGF5ZXJJbXBsKiBsYXllckltcGwgPSBt
X2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbDsgbGF5ZXJJbXBsICYmICFwZW5kaW5nRGVsdGEu
aXNaZXJvKCk7IGxheWVySW1wbCA9IGxheWVySW1wbC0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYg
KCFsYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBGbG9hdFNpemUgcHJldmlvdXNEZWx0YShsYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAg
ICAgICBsYXllckltcGwtPnNjcm9sbEJ5KHBlbmRpbmdEZWx0YSk7CisgICAgICAgIC8vIFJlc2V0
IHRoZSBwZW5kaW5nIHNjcm9sbCBkZWx0YSB0byB6ZXJvIGlmIHRoZSBsYXllciB3YXMgYWJsZSB0
byBtb3ZlIGFsb25nIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgLy8gYXhpcy4gVGhpcyBpcyB0byBl
bnN1cmUgaXQgaXMgcG9zc2libGUgdG8gc2Nyb2xsIGV4YWN0bHkgdG8gdGhlIGJlZ2lubmluZyBv
ciBlbmQgb2YgYQorICAgICAgICAvLyBzY3JvbGwgYXJlYSByZWdhcmRsZXNzIG9mIHRoZSBzY3Jv
bGwgc3RlcC4gRm9yIGRpYWdvbmFsIHNjcm9sbHMgdGhpcyBhbHNvIGF2b2lkcyBhcHBseWluZwor
ICAgICAgICAvLyB0aGUgc2Nyb2xsIG9uIG9uZSBheGlzIHRvIG11bHRpcGxlIGxheWVycy4KKyAg
ICAgICAgaWYgKHByZXZpb3VzRGVsdGEud2lkdGgoKSAhPSBsYXllckltcGwtPnNjcm9sbERlbHRh
KCkud2lkdGgoKSkKKyAgICAgICAgICAgIHBlbmRpbmdEZWx0YS5zZXRXaWR0aCgwKTsKKyAgICAg
ICAgaWYgKHByZXZpb3VzRGVsdGEuaGVpZ2h0KCkgIT0gbGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgp
LmhlaWdodCgpKQorICAgICAgICAgICAgcGVuZGluZ0RlbHRhLnNldEhlaWdodCgwKTsKKyAgICB9
CisKKyAgICBpZiAoIXNjcm9sbERlbHRhLmlzWmVybygpICYmIHBlbmRpbmdEZWx0YS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Cisg
ICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIH0KK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVy
KCkKK3sKKyAgICBtX2N1cnJlbnRseVNjcm9sbGluZ0xheWVySW1wbCA9IDA7CisgICAgbV9zY3Jv
bGxpbmdMYXllcklkRnJvbVByZXZpb3VzVHJlZSA9IC0xOwogfQogCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNjcm9sbEVuZCgpCiB7CisgICAgY2xlYXJDdXJyZW50bHlTY3JvbGxpbmdMYXll
cigpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZUJlZ2luKCkK
QEAgLTcyMSw5ICs4MjIsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVy
ZUJlZ2luKCkKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlKGZs
b2F0IG1hZ25pZnlEZWx0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFBvaW50JiBhbmNob3IpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdEltcGw6OnBpbmNoR2VzdHVyZVVwZGF0ZSIsIHRoaXMsIDApOworICAgIFRSQUNF
X0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6cGluY2hHZXN0dXJlVXBkYXRlIik7
CiAKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5
ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wcmV2aW91c1BpbmNoQW5jaG9y
ID09IEludFBvaW50Ojp6ZXJvKCkpCkBAIC03MzgsNyArODM5LDcgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQgbWFnbmlmeURlbHRhLAogCiAgICAg
bV9wcmV2aW91c1BpbmNoQW5jaG9yID0gYW5jaG9yOwogCi0gICAgbV9zY3JvbGxMYXllckltcGwt
PnNjcm9sbEJ5KHJvdW5kZWRJbnRTaXplKG1vdmUpKTsKKyAgICBtX3Jvb3RTY3JvbGxMYXllcklt
cGwtPnNjcm9sbEJ5KHJvdW5kZWRJbnRTaXplKG1vdmUpKTsKICAgICBtX2NsaWVudC0+c2V0TmVl
ZHNDb21taXRPbkltcGxUaHJlYWQoKTsKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbklt
cGxUaHJlYWQoKTsKIH0KQEAgLTc2MCw3ICs4NjEsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbXB1dGVEb3VibGVUYXBab29tRGVsdGFzKENDU2Nyb2xsQW5kU2NhbGVTZXQqIHNjcm9s
bAogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMoQ0NT
Y3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbykKIHsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJ
bXBsKQorICAgIGlmICghbV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBPbmx5IHNlbmQgZmFrZSBzY3JvbGwvem9vbSBkZWx0YXMgaWYgd2UncmUgcGluY2gg
em9vbWluZyBvdXQgYnkgYQpAQCAtNzcyLDcgKzg3Myw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6Y29tcHV0ZVBpbmNoWm9vbURlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJ
bmZvCiAKICAgICAvLyBDb21wdXRlIHdoZXJlIHRoZSBzY3JvbGwgb2Zmc2V0L3BhZ2Ugc2NhbGUg
d291bGQgYmUgaWYgZnVsbHkgcGluY2gtem9vbWVkCiAgICAgLy8gb3V0IGZyb20gdGhlIGFuY2hv
ciBwb2ludC4KLSAgICBJbnRTaXplIHNjcm9sbEJlZ2luID0gZmxvb3JlZEludFNpemUobV9zY3Jv
bGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xs
RGVsdGEoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxCZWdpbiA9IGZsb29yZWRJbnRTaXplKG1fcm9v
dFNjcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fcm9vdFNjcm9sbExheWVySW1w
bC0+c2Nyb2xsRGVsdGEoKSk7CiAgICAgc2Nyb2xsQmVnaW4uc2NhbGUobV9wYWdlU2NhbGVEZWx0
YSk7CiAgICAgZmxvYXQgc2NhbGVCZWdpbiA9IG1fcGFnZVNjYWxlICogbV9wYWdlU2NhbGVEZWx0
YTsKICAgICBmbG9hdCBwYWdlU2NhbGVEZWx0YVRvU2VuZCA9IG1fbWluUGFnZVNjYWxlIC8gbV9w
YWdlU2NhbGU7CkBAIC03OTIsMjIgKzg5Myw0MCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmNvbXB1dGVQaW5jaFpvb21EZWx0YXMoQ0NTY3JvbGxBbmRTY2FsZVNldCogc2Nyb2xsSW5mbwog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6Om1ha2VTY3JvbGxBbmRTY2FsZVNldChDQ1Njcm9s
bEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQsIGZs
b2F0IHBhZ2VTY2FsZSkKIHsKLSAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJbXBsKQorICAgIGlmICgh
bV9yb290U2Nyb2xsTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKICAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gc2Nyb2xsOwotICAgIHNjcm9sbC5sYXllcklk
ID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gc2Ny
b2xsT2Zmc2V0IC0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpKTsK
KyAgICBzY3JvbGwubGF5ZXJJZCA9IG1fcm9vdFNjcm9sbExheWVySW1wbC0+aWQoKTsKKyAgICBz
Y3JvbGwuc2Nyb2xsRGVsdGEgPSBzY3JvbGxPZmZzZXQgLSB0b1NpemUobV9yb290U2Nyb2xsTGF5
ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVu
ZChzY3JvbGwpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zZXRTZW50U2Nyb2xsRGVsdGEoc2Ny
b2xsLnNjcm9sbERlbHRhKTsKKyAgICBtX3Jvb3RTY3JvbGxMYXllckltcGwtPnNldFNlbnRTY3Jv
bGxEZWx0YShzY3JvbGwuc2Nyb2xsRGVsdGEpOwogICAgIG1fc2VudFBhZ2VTY2FsZURlbHRhID0g
c2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEgPSBwYWdlU2NhbGUgLyBtX3BhZ2VTY2FsZTsKIH0K
IAorc3RhdGljIHZvaWQgY29sbGVjdFNjcm9sbERlbHRhcyhDQ1Njcm9sbEFuZFNjYWxlU2V0KiBz
Y3JvbGxJbmZvLCBDQ0xheWVySW1wbCogbGF5ZXJJbXBsKQoreworICAgIGlmICghbGF5ZXJJbXBs
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS5p
c1plcm8oKSkgeworICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gZmxvb3JlZEludFNpemUo
bGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpTY3JvbGxVcGRhdGVJbmZvIHNjcm9sbDsKKyAgICAgICAgc2Nyb2xsLmxheWVySWQgPSBsYXll
ckltcGwtPmlkKCk7CisgICAgICAgIHNjcm9sbC5zY3JvbGxEZWx0YSA9IHNjcm9sbERlbHRhOwor
ICAgICAgICBzY3JvbGxJbmZvLT5zY3JvbGxzLmFwcGVuZChzY3JvbGwpOworICAgICAgICBsYXll
ckltcGwtPnNldFNlbnRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgfQorCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsYXllckltcGwtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisg
ICAgICAgIGNvbGxlY3RTY3JvbGxEZWx0YXMoc2Nyb2xsSW5mbywgbGF5ZXJJbXBsLT5jaGlsZHJl
bigpW2ldLmdldCgpKTsKK30KKwogUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKIHsKICAgICBPd25QdHI8Q0NT
Y3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0UHRyKG5ldyBDQ1Njcm9sbEFuZFNj
YWxlU2V0KCkpOwotICAgIGJvb2wgZGlkTW92ZSA9IG1fc2Nyb2xsTGF5ZXJJbXBsICYmICghbV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkgfHwgbV9wYWdlU2NhbGVEZWx0
YSAhPSAxLjBmKTsKLSAgICBpZiAoIWRpZE1vdmUgfHwgbV9waW5jaEdlc3R1cmVBY3RpdmUgfHwg
bV9wYWdlU2NhbGVBbmltYXRpb24pIHsKKworICAgIGlmIChtX3BpbmNoR2VzdHVyZUFjdGl2ZSB8
fCBtX3BhZ2VTY2FsZUFuaW1hdGlvbikgewogICAgICAgICBtX3NlbnRQYWdlU2NhbGVEZWx0YSA9
IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gMTsKICAgICAgICAgaWYgKG1fcGluY2hHZXN0
dXJlQWN0aXZlKQogICAgICAgICAgICAgY29tcHV0ZVBpbmNoWm9vbURlbHRhcyhzY3JvbGxJbmZv
LmdldCgpKTsKQEAgLTgxNiwxNiArOTM1LDkgQEAgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxl
U2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKICAgICAgICAg
cmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgpOwogICAgIH0KIAorICAgIGNvbGxlY3RTY3JvbGxE
ZWx0YXMoc2Nyb2xsSW5mby5nZXQoKSwgbV9yb290TGF5ZXJJbXBsLmdldCgpKTsKICAgICBtX3Nl
bnRQYWdlU2NhbGVEZWx0YSA9IHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhID0gbV9wYWdlU2Nh
bGVEZWx0YTsKIAotICAgIC8vIEZJWE1FOiB0cmFjayBzY3JvbGxzIGZyb20gbGF5ZXJzIG90aGVy
IHRoYW4gdGhlIHJvb3QKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUlu
Zm8gc2Nyb2xsOwotICAgIHNjcm9sbC5sYXllcklkID0gbV9zY3JvbGxMYXllckltcGwtPmlkKCk7
Ci0gICAgc2Nyb2xsLnNjcm9sbERlbHRhID0gZmxvb3JlZEludFNpemUobV9zY3JvbGxMYXllcklt
cGwtPnNjcm9sbERlbHRhKCkpOwotICAgIHNjcm9sbEluZm8tPnNjcm9sbHMuYXBwZW5kKHNjcm9s
bCk7Ci0KLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2V0U2VudFNjcm9sbERlbHRhKHNjcm9sbC5z
Y3JvbGxEZWx0YSk7Ci0KICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiB9CiAKQEAg
LTg0MCwxNSArOTUyLDE1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0RnVsbFJvb3RM
YXllckRhbWFnZSgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2Fs
ZShkb3VibGUgbW9ub3RvbmljVGltZSkKIHsKLSAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9u
IHx8ICFtX3Njcm9sbExheWVySW1wbCkKKyAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uIHx8
ICFtX3Jvb3RTY3JvbGxMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUg
c2Nyb2xsVG90YWwgPSBmbG9vcmVkSW50U2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9z
aXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKKyAgICBJbnRTaXpl
IHNjcm9sbFRvdGFsID0gZmxvb3JlZEludFNpemUobV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3Jv
bGxQb3NpdGlvbigpICsgbV9yb290U2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKIAog
ICAgIHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRp
bWUobW9ub3RvbmljVGltZSkgLyBtX3BhZ2VTY2FsZSk7CiAgICAgSW50U2l6ZSBuZXh0U2Nyb2xs
ID0gbV9wYWdlU2NhbGVBbmltYXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShtb25vdG9uaWNUaW1l
KTsKICAgICBuZXh0U2Nyb2xsLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKLSAgICBtX3Nj
cm9sbExheWVySW1wbC0+c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKKyAgICBt
X3Jvb3RTY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwgLSBzY3JvbGxUb3RhbCk7
CiAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiAKICAgICBpZiAo
bV9wYWdlU2NhbGVBbmltYXRpb24tPmlzQW5pbWF0aW9uQ29tcGxldGVBdFRpbWUobW9ub3Rvbmlj
VGltZSkpIHsKQEAgLTg2Miw3ICs5NzQsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGVMYXllcnMoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaQogICAg
IGlmICghQ0NTZXR0aW5nczo6YWNjZWxlcmF0ZWRBbmltYXRpb25FbmFibGVkKCkgfHwgIW1fbmVl
ZHNBbmltYXRlTGF5ZXJzIHx8ICFtX3Jvb3RMYXllckltcGwpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzIiwgdGhp
cywgMCk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmlt
YXRlTGF5ZXJzIik7CiAKICAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50
cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKIApAQCAtOTA2LDcgKzEw
MTgsNyBAQCBzdGF0aWMgdm9pZCBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vy
c2l2ZShDQ0xheWVySW1wbCogY3VycmVudCkKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2xl
YXJSZW5kZXJTdXJmYWNlcygpCiB7CiAgICAgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllcklt
cGxSZWN1cnNpdmUobV9yb290TGF5ZXJJbXBsLmdldCgpKTsKLSAgICAvLyBGSVhNRTogSWYgd2Ug
aGF2ZSBhbnkgUmVuZGVyU3VyZmFjZUxheWVyTGlzdCBzYXZlZCwgdGhlbiBtYWtlIHRoZSBsaXN0
IGVtcHR5IGhlcmUuCisgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CiB9CiAK
IFN0cmluZyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpsYXllclRyZWVBc1RleHQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDRkYjkwMWY3MzcxMjkxNDA0MWE4
MjI4MTZjMGRkMmRiZWE5MTMwYzcuLjYzMGU3OThiMDk4YjljMjk1ZWExOTEyZGU4YjUzNGIyM2I0
YWM5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTg2LDcgKzg2
LDcgQEAgcHVibGljOgogCiAgICAgc3RydWN0IEZyYW1lRGF0YSB7CiAgICAgICAgIENDUmVuZGVy
UGFzc0xpc3QgcmVuZGVyUGFzc2VzOwotICAgICAgICBDQ0xheWVyTGlzdCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OworICAgICAgICBDQ0xheWVyTGlzdCogcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsK
ICAgICAgICAgQ0NMYXllckxpc3Qgd2lsbERyYXdMYXllcnM7CiAgICAgfTsKIApAQCAtMTMzLDEw
ICsxMzMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgcmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25z
dCBJbnRSZWN0Jik7CiAKICAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzT3duUHRyPENDTGF5ZXJJ
bXBsPik7Ci0gICAgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcmVsZWFzZVJvb3RMYXllcigpIHsg
cmV0dXJuIG1fcm9vdExheWVySW1wbC5yZWxlYXNlKCk7IH0KICAgICBDQ0xheWVySW1wbCogcm9v
dExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CiAKLSAgICBDQ0xheWVy
SW1wbCogc2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExheWVySW1wbDsgfQor
ICAgIC8vIFJlbGVhc2Ugb3duZXJzaGlwIG9mIHRoZSBjdXJyZW50IGxheWVyIHRyZWUgYW5kIHJl
cGxhY2UgaXQgd2l0aCBhbiBlbXB0eQorICAgIC8vIHRyZWUuIFJldHVybnMgdGhlIHJvb3QgbGF5
ZXIgb2YgdGhlIGRldGFjaGVkIHRyZWUuCisgICAgUGFzc093blB0cjxDQ0xheWVySW1wbD4gZGV0
YWNoTGF5ZXJUcmVlKCk7CisKKyAgICBDQ0xheWVySW1wbCogcm9vdFNjcm9sbExheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9yb290U2Nyb2xsTGF5ZXJJbXBsOyB9CiAKICAgICBib29sIHZpc2libGUo
KSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7
CkBAIC0xOTYsOCArMTk5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1ha2VTY3JvbGxBbmRTY2Fs
ZVNldChDQ1Njcm9sbEFuZFNjYWxlU2V0KiBzY3JvbGxJbmZvLCBjb25zdCBJbnRTaXplJiBzY3Jv
bGxPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSk7CiAKICAgICB2b2lkIHNldFBhZ2VTY2FsZURlbHRh
KGZsb2F0KTsKLSAgICB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCk7Ci0g
ICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsKICAgICB2b2lk
IHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1
cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKQEAgLTIxMCwxMyArMjExLDE3IEBAIHByaXZhdGU6CiAg
ICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogICAgIHZvaWQgc2VuZERpZExvc2VDb250
ZXh0UmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7CiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2Vz
KCk7CisgICAgYm9vbCBlbnN1cmVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KCk7CisgICAgdm9pZCBj
bGVhckN1cnJlbnRseVNjcm9sbGluZ0xheWVyKCk7CiAKICAgICB2b2lkIGR1bXBSZW5kZXJTdXJm
YWNlcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCwgY29uc3QgQ0NMYXllckltcGwqKSBjb25zdDsK
IAogICAgIFJlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwogICAgIE93blB0cjxD
Q1JlbmRlcmVyPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBtX3Jv
b3RMYXllckltcGw7Ci0gICAgQ0NMYXllckltcGwqIG1fc2Nyb2xsTGF5ZXJJbXBsOworICAgIEND
TGF5ZXJJbXBsKiBtX3Jvb3RTY3JvbGxMYXllckltcGw7CisgICAgQ0NMYXllckltcGwqIG1fY3Vy
cmVudGx5U2Nyb2xsaW5nTGF5ZXJJbXBsOworICAgIGludCBtX3Njcm9sbGluZ0xheWVySWRGcm9t
UHJldmlvdXNUcmVlOwogICAgIENDTGF5ZXJUcmVlU2V0dGluZ3MgbV9zZXR0aW5nczsKICAgICBJ
bnRTaXplIG1fdmlld3BvcnRTaXplOwogICAgIEludFNpemUgbV9kZXZpY2VWaWV3cG9ydFNpemU7
CkBAIC0yNDgsNiArMjUzLDEwIEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFJlY3QgbV9yb290U2Np
c3NvclJlY3Q7CiAKKyAgICAvLyBMaXN0IG9mIHZpc2libGUgbGF5ZXJzIGZvciB0aGUgbW9zdCBy
ZWNlbnRseSBwcmVwYXJlZCBmcmFtZS4gVXNlZCBmb3IKKyAgICAvLyByZW5kZXJpbmcgYW5kIGlu
cHV0IGV2ZW50IGhpdCB0ZXN0aW5nLgorICAgIENDTGF5ZXJMaXN0IG1fcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKKwogICAgIE93blB0cjxDQ0ZyYW1lUmF0ZUNvdW50ZXI+IG1fZnBzQ291bnRlcjsK
ICAgICBPd25QdHI8Q0NEZWJ1Z1JlY3RIaXN0b3J5PiBtX2RlYnVnUmVjdEhpc3Rvcnk7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwuY3BwCmluZGV4IDhlMGM2MTNhNDJhMzk2NjdlYTYzZTY1ZTkyNWEy
MmE3YTM0YjE0OWQuLjYzYmYyNzBmZTAyMjY0MzYwZjQyN2EyZTIzYzYyOGNhZWExMTJjOTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3NpdGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6aAogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIERyb3BFdmVu
dCwgYnV0IGluIGNhc2VzIHdoZXJlIHdlIGZhaWwgdG8gcHJvcGVybHkgc3luYyBzY3JvbGxhYmls
aXR5IGl0J3Mgc2FmZXIgdG8gc2VuZCB0aGUKICAgICAgICAgICAgIC8vIGV2ZW50IHRvIHRoZSBt
YWluIHRocmVhZC4gQ2hhbmdlIGJhY2sgdG8gRHJvcEV2ZW50IG9uY2Ugd2UgaGF2ZSBzeW5jaHJv
bml6YXRpb24gYnVncyBzb3J0ZWQgb3V0LgogICAgICAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRs
ZTsgCi0gICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZDoKKyAg
ICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkOgogICAg
ICAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRsZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
ZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW4pIHsKQEAgLTIw
Niw3ICsyMDYsNyBAQCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6RXZlbnREaXNwb3Np
dGlvbiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aAogICAgICAgICBjYXNlIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOgogICAgICAgICAgICAgbV9nZXN0dXJlU2Ny
b2xsU3RhcnRlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwotICAgICAg
ICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6CisgICAgICAgIGNhc2Ug
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDoKICAgICAgICAgICAgIHJl
dHVybiBEaWROb3RIYW5kbGU7CiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbElnbm9yZWQ6CiAgICAgICAgICAgICByZXR1cm4gRHJvcEV2ZW50OwpAQCAtMjc4LDggKzI3
OCw4IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpFdmVudERpc3Bvc2l0aW9uIFdl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoCiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xp
ZW50LT5zY2hlZHVsZUFuaW1hdGlvbigpOwogICAgICAgICByZXR1cm4gRGlkSGFuZGxlOwogICAg
IH0KLSAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6IHsKLSAgICAg
ICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDAoImNjIiwgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsOjpoYW5kbGVHZXN0dXJlRmxpbmc6OmZhaWxlZCIpOworICAgIGNhc2UgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVhZDogeworICAgICAgICBUUkFDRV9FVkVOVF9JTlNU
QU5UMCgiY2MiLCAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUdlc3R1cmVG
bGluZzo6c2Nyb2xsT25NYWluVGhyZWFkIik7CiAgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGU7
CiAgICAgfQogICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGVmMDdjZjUyNmQ5NDM1Zjk1M2QwM2E3NTQ2ZmNlNTQ4
MGQ4NWQ3MzQuLjg5ZDIxMWU4MWIzZDVmYjI2NzQxYWQzZmRiYzEwMmViYmJlZDNmZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcApAQCAtMzY2Miw2ICszNjYyLDI3IEBAIFRFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJMaXN0cykKICAg
ICBFWFBFQ1RfRVEoNCwgcmVzdWx0TGF5ZXItPmlkKCkpOwogfQogCitURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeVN1YnRyZWVTZWFyY2gpCit7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IHJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBtYXNrTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcmVwbGljYUxheWVyID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisKKyAgICBncmFuZENoaWxkLT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxh
eWVyLmdldCgpKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5nZXQoKSk7CisgICAg
Y2hpbGQtPnNldE1hc2tMYXllcihtYXNrTGF5ZXIuZ2V0KCkpOworICAgIHJvb3QtPmFkZENoaWxk
KGNoaWxkLmdldCgpKTsKKworICAgIGludCBub25leGlzdGVudElkID0gLTE7CisgICAgRVhQRUNU
X0VRKHJvb3QsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3Qu
Z2V0KCksIHJvb3QtPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQsIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIGNoaWxkLT5pZCgpKSk7Cisg
ICAgRVhQRUNUX0VRKGdyYW5kQ2hpbGQsIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVy
SW5TdWJ0cmVlKHJvb3QuZ2V0KCksIGdyYW5kQ2hpbGQtPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEo
bWFza0xheWVyLCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShyb290
LmdldCgpLCBtYXNrTGF5ZXItPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEocmVwbGljYUxheWVyLCBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShyb290LmdldCgpLCByZXBs
aWNhTGF5ZXItPmlkKCkpKTsKKyAgICBFWFBFQ1RfRVEoMCwgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgbm9uZXhpc3RlbnRJZCkpOworfQogCiAv
LyBGSVhNRToKIC8vIGNvbnRpbnVlIHdvcmtpbmcgb24gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY4OTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDdkNmRjZjc5ZWU0ZmMw
MWU0Y2E3ZjBlZDBiZjI5YTllY2E4ZjUzZDEuLjM1MDkzNzZhZjhjZWVlZThiZTM2MGY4ODYyYWMy
ZmFjMTU1ZGEzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xMzksNiArMTM5LDI3IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlU2Nyb2xsYWJs
ZUxheWVyKGludCBpZCwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUm
IHNpemUpCisgICAgeworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGxheWVyID0gQ0NMYXll
ckltcGw6OmNyZWF0ZShpZCk7CisgICAgICAgIGxheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOwor
ICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICBsYXllci0+c2V0
UG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBsYXllci0+c2V0Qm91bmRzKHNpemUpOworICAg
ICAgICBsYXllci0+c2V0Q29udGVudEJvdW5kcyhzaXplKTsKKyAgICAgICAgbGF5ZXItPnNldE1h
eFNjcm9sbFBvc2l0aW9uKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSAq
IDIpKTsKKyAgICAgICAgcmV0dXJuIGxheWVyLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB2b2lk
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCkKKyAgICB7CisgICAgICAgIG1f
aG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNyZWF0ZUNvbnRleHQoKSwgVW50aHJv
dHRsZWRVcGxvYWRlcik7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBm
cmFtZTsKKyAgICAgICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFt
ZSkpOworICAgICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICAgICAgbV9o
b3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgUGFzc1JlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY3JlYXRlQ29udGV4dCgpCiAgICAgewpA
QCAtMjIzLDEzICsyNDQsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9s
bERlbHRhUmVwZWF0ZWRTY3JvbGxzKQogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHNjcm9sbFJvb3RDYWxsc0NvbW1pdEFuZFJlZHJhdykKIHsKLSAgICB7Ci0gICAgICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgICAgIHJv
b3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7Ci0gICAgICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9u
KEludFBvaW50KDAsIDApKTsKLSAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50
U2l6ZSgxMDAsIDEwMCkpOwotICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5y
ZWxlYXNlKCkpOwotICAgIH0KKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNp
emUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1
MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwogCiAg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZCk7CiAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAxMCkpOwpAQCAtMjM4
LDIwICsyNTUsNTcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290
Q2FsbHNDb21taXRBbmRSZWRyYXcpCiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0
KTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxXaXRob3V0Um9v
dExheWVyKQoreworICAgIC8vIFdlIHNob3VsZCBub3QgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gc2Ny
b2xsIGFuIGVtcHR5IGxheWVyIHRyZWUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9s
bEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgcmVwbGFjZVRyZWVXaGlsZVNjcm9sbGluZykKK3sKKyAgICBjb25zdCBp
bnQgc2Nyb2xsTGF5ZXJJZCA9IDA7CisKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJz
KEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50
U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgp
OworCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmFzaCBpZiB0aGUgdHJlZSBpcyByZXBsYWNlZCB3
aGlsZSB3ZSBhcmUgc2Nyb2xsaW5nLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxC
ZWdpbihJbnRQb2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1
dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPmRldGFjaExh
eWVyVHJlZSgpOworCisgICAgc2V0dXBTY3JvbGxBbmRDb250ZW50c0xheWVycyhJbnRTaXplKDEw
MCwgMTAwKSk7CisKKyAgICAvLyBXZSBzaG91bGQgc3RpbGwgYmUgc2Nyb2xsaW5nLCBiZWNhdXNl
IHRoZSBzY3JvbGxlZCBsYXllciBhbHNvIGV4aXN0cyBpbiB0aGUgbmV3IHRyZWUuCisgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsQnkoc2Nyb2xs
RGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgpOworICAgIE93blB0cjxDQ1Njcm9s
bEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRh
cygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLCBzY3JvbGxMYXllcklkLCBzY3Jv
bGxEZWx0YSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgY2xlYXJSb290
UmVuZGVyU3VyZmFjZUFuZFNjcm9sbCkKK3sKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5
ZXJzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
SW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpOworCisgICAgLy8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gc2Nyb2xsIGV2ZW4gaWYgdGhlIHJv
b3QgbGF5ZXIgbG9zZXMgaXRzIHJlbmRlciBzdXJmYWNlIGFmdGVyIHRoZSBtb3N0CisgICAgLy8g
cmVjZW50IHJlbmRlci4KKyAgICBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+Y2xlYXJSZW5kZXJT
dXJmYWNlKCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7Cit9CisKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
d2hlZWxFdmVudEhhbmRsZXJzKQogewotICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICAgICAgcm9vdC0+c2V0U2Nyb2xs
YWJsZSh0cnVlKTsKLSAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwg
MCkpOwotICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwgMTAw
KSk7Ci0gICAgICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7Ci0g
ICAgfQorICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgQ0NMYXllckltcGwq
IHJvb3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKIAogICAgIHJvb3QtPnNldEhhdmVXaGVl
bEV2ZW50SGFuZGxlcnModHJ1ZSk7CisKICAgICAvLyBXaXRoIHJlZ2lzdGVyZWQgZXZlbnQgaGFu
ZGxlcnMsIHdoZWVsIHNjcm9sbHMgaGF2ZSB0byBnbyB0byB0aGUgbWFpbiB0aHJlYWQuCi0gICAg
RVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0
SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVk
KTsKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxPbk1haW5UaHJlYWQpOwogCiAgICAgLy8gQnV0IGdlc3R1cmUgc2Nyb2xscyBjYW4gc3RpbGwg
YmUgaGFuZGxlZC4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9p
bnQoMCwgMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMjU5LDI3ICszMTMsMjkgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCB3aGVlbEV2ZW50SGFuZGxlcnMpCiAKIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKQogewotICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+
c2V0U2Nyb2xsYWJsZSh0cnVlKTsKLSAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCgwLCAwKSk7Ci0gICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAg
IGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgQ0NMYXllckltcGwq
IHJvb3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKKwogICAgIHJvb3QtPnNldFNob3VsZFNj
cm9sbE9uTWFpblRocmVhZCh0cnVlKTsKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dC5yZWxlYXNlKCkpOwotICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQ
b2ludCgwLCAwKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbEZhaWxlZCk7Ci0gICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJl
Z2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6R2VzdHVyZSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpOworCisgICAgRVhQRUNUX0VRKG1faG9zdElt
cGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hl
ZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25NYWluVGhyZWFkKTsKKyAgICBFWFBF
Q1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMCwgMCksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRo
cmVhZCk7CiB9CiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNjcm9s
bGFibGVSZWdpb25CYXNpYykKIHsKLSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDApOwotICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7Ci0gICAg
cm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgMCkpOwotICAgIHJvb3QtPnNldE1h
eFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBzZXR1cFNjcm9sbEFuZENv
bnRlbnRzTGF5ZXJzKEludFNpemUoMjAwLCAyMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3
cG9ydFNpemUoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVy
QW5kRHJhd0ZyYW1lKCk7CisgICAgQ0NMYXllckltcGwqIHJvb3QgPSBtX2hvc3RJbXBsLT5yb290
TGF5ZXIoKTsKKwogICAgIHJvb3QtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKEludFJlY3Qo
MCwgMCwgNTAsIDUwKSk7Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFz
ZSgpKTsKKwogICAgIC8vIEFsbCBzY3JvbGwgdHlwZXMgaW5zaWRlIHRoZSBub24tZmFzdCBzY3Jv
bGxhYmxlIHJlZ2lvbiBzaG91bGQgZmFpbC4KLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoMjUsIDI1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7Ci0gICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpHZXN0dXJlKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxlZCk7CisgICAgRVhQ
RUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5U
aHJlYWQpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCgy
NSwgMjUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6R2VzdHVyZSksIENDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOwogCiAgICAgLy8gQWxsIHNjcm9sbCB0eXBlcyBvdXRz
aWRlIHRoaXMgcmVnaW9uIHNob3VsZCBzdWNjZWVkLgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBs
LT5zY3JvbGxCZWdpbihJbnRQb2ludCg3NSwgNzUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hl
ZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0yOTIsMTYgKzM0
OCwxMyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIG5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uQmFzaWMpCiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFzdFNj
cm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVl
KTsKLSAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7Ci0gICAgcm9v
dC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIHNldHVwU2Ny
b2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgyMDAsIDIwMCkpOworICAgIG1faG9zdEltcGwt
PnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgQ0NMYXllckltcGwqIHJv
b3QgPSBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKTsKKwogICAgIHJvb3QtPnNldE5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uKEludFJlY3QoMCwgMCwgNTAsIDUwKSk7CiAgICAgcm9vdC0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludCgtMjUsIDApKTsKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dC5yZWxlYXNlKCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsK
LSAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7Ci0gICAg
bV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7IC8vIFVwZGF0ZSBkcmF3IHRyYW5zZm9ybXMg
c28gd2UgY2FuIGNvcnJlY3RseSBtYXAgcG9pbnRzIGludG8gbGF5ZXIgc3BhY2UuCisgICAgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKIAogICAgIC8vIFRoaXMgcG9pbnQg
d291bGQgZmFsbCBpbnRvIHRoZSBub24tZmFzdCBzY3JvbGxhYmxlIHJlZ2lvbiBleGNlcHQgdGhh
dCB3ZSd2ZSBtb3ZlZCB0aGUgbGF5ZXIgZG93biBieSAyNSBwaXhlbHMuCiAgICAgRVhQRUNUX0VR
KG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDQwLCAxMCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKQEAg
LTMwOSwxNSArMzYyLDE2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbm9uRmFz
dFNjcm9sbGFibGVSZWdpb25XaXRoT2Zmc2V0KQogICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgp
OwogCiAgICAgLy8gVGhpcyBwb2ludCBpcyBzdGlsbCBpbnNpZGUgdGhlIG5vbi1mYXN0IHJlZ2lv
bi4KLSAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoMTAsIDEw
KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbEZhaWxlZCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBv
aW50KDEwLCAxMCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpOwogfQogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHBpbmNoR2VzdHVyZSkKIHsKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5
ZXJzKEludFNpemUoMTAwLCAxMDApKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUo
SW50U2l6ZSg1MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpOwogCi0gICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+c2Nyb2xs
TGF5ZXIoKTsKKyAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5yb290
U2Nyb2xsTGF5ZXIoKTsKICAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOwogCiAgICAgY29uc3QgZmxv
YXQgbWluUGFnZVNjYWxlID0gMC41LCBtYXhQYWdlU2NhbGUgPSA0OwpAQCAtMzk2LDggKzQ1MCw5
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcGFnZVNjYWxlQW5pbWF0aW9uKQog
ewogICAgIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwog
ICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOworICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAKLSAgICBDQ0xheWVySW1wbCog
c2Nyb2xsTGF5ZXIgPSBtX2hvc3RJbXBsLT5zY3JvbGxMYXllcigpOworICAgIENDTGF5ZXJJbXBs
KiBzY3JvbGxMYXllciA9IG1faG9zdEltcGwtPnJvb3RTY3JvbGxMYXllcigpOwogICAgIEFTU0VS
VChzY3JvbGxMYXllcik7CiAKICAgICBjb25zdCBmbG9hdCBtaW5QYWdlU2NhbGUgPSAwLjUsIG1h
eFBhZ2VTY2FsZSA9IDQ7CkBAIC00NDEsNiArNDk2LDEwMSBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikKICAgICB9CiB9CiAKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgaW5oaWJpdFNjcm9sbEFuZFBhZ2VTY2FsZVVwZGF0ZXNXaGls
ZVBpbmNoWm9vbWluZykKK3sKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNp
emUoMTAwLCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1
MCwgNTApKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisg
ICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVy
KCk7CisgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKworICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VT
Y2FsZSA9IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKKworICAgIC8vIFBpbmNoIHpvb20gaW4uCisg
ICAgeworICAgICAgICAvLyBTdGFydCBhIHBpbmNoIGluIGdlc3R1cmUgYXQgdGhlIGJvdHRvbSBy
aWdodCBjb3JuZXIgb2YgdGhlIHZpZXdwb3J0LgorICAgICAgICBjb25zdCBmbG9hdCB6b29tSW5E
ZWx0YSA9IDI7CisgICAgICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0
cygxLCBtaW5QYWdlU2NhbGUsIG1heFBhZ2VTY2FsZSk7CisgICAgICAgIG1faG9zdEltcGwtPnBp
bmNoR2VzdHVyZUJlZ2luKCk7CisgICAgICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZVVwZGF0
ZSh6b29tSW5EZWx0YSwgSW50UG9pbnQoNTAsIDUwKSk7CisKKyAgICAgICAgLy8gQmVjYXVzZSB3
ZSBhcmUgcGluY2ggem9vbWluZyBpbiwgd2Ugc2hvdWxkbid0IGdldCBhbnkgc2Nyb2xsIG9yIHBh
Z2UKKyAgICAgICAgLy8gc2NhbGUgZGVsdGFzLgorICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRT
Y2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsK
KyAgICAgICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnBhZ2VTY2FsZURlbHRhLCAxKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHNjcm9sbEluZm8tPnNjcm9sbHMuc2l6ZSgpLCAwdSk7CisKKyAgICAgICAg
Ly8gT25jZSB0aGUgZ2VzdHVyZSBlbmRzLCB3ZSBnZXQgdGhlIGZpbmFsIHNjcm9sbCBhbmQgcGFn
ZSBzY2FsZSB2YWx1ZXMuCisgICAgICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZUVuZCgpOwor
ICAgICAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwor
ICAgICAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEsIHpvb21JbkRlbHRh
KTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5pZCgp
LCBJbnRTaXplKDI1LCAyNSkpOworICAgIH0KKworICAgIC8vIFBpbmNoIHpvb20gb3V0LgorICAg
IHsKKyAgICAgICAgLy8gU3RhcnQgYSBwaW5jaCBvdXQgZ2VzdHVyZSBhdCB0aGUgYm90dG9tIHJp
Z2h0IGNvcm5lciBvZiB0aGUgdmlld3BvcnQuCisgICAgICAgIGNvbnN0IGZsb2F0IHpvb21PdXRE
ZWx0YSA9IDAuNzU7CisgICAgICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExp
bWl0cygxLCBtaW5QYWdlU2NhbGUsIG1heFBhZ2VTY2FsZSk7CisgICAgICAgIG1faG9zdEltcGwt
PnBpbmNoR2VzdHVyZUJlZ2luKCk7CisgICAgICAgIG1faG9zdEltcGwtPnBpbmNoR2VzdHVyZVVw
ZGF0ZSh6b29tT3V0RGVsdGEsIEludFBvaW50KDUwLCA1MCkpOworCisgICAgICAgIC8vIFNpbmNl
IHdlIGFyZSBwaW5jaCB6b29taW5nIG91dCwgd2Ugc2hvdWxkIGdldCBhbiB1cGRhdGUgdG8gem9v
bSBhbGwKKyAgICAgICAgLy8gdGhlIHdheSBvdXQgdG8gdGhlIG1pbmltdW0gcGFnZSBzY2FsZS4K
KyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJ
bXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZv
LT5wYWdlU2NhbGVEZWx0YSwgbWluUGFnZVNjYWxlKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMo
KnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKDAsIDApKTsKKworICAgICAg
ICAvLyBPbmNlIHRoZSBnZXN0dXJlIGVuZHMsIHdlIGdldCB0aGUgZmluYWwgc2Nyb2xsIGFuZCBw
YWdlIHNjYWxlIHZhbHVlcy4KKyAgICAgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlRW5kKCk7
CisgICAgICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7
CisgICAgICAgIEVYUEVDVF9FUShzY3JvbGxJbmZvLT5wYWdlU2NhbGVEZWx0YSwgem9vbU91dERl
bHRhKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5p
ZCgpLCBJbnRTaXplKDgsIDgpKTsKKyAgICB9Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgaW5oaWJpdFNjcm9sbEFuZFBhZ2VTY2FsZVVwZGF0ZXNXaGlsZUFuaW1hdGluZ1Bh
Z2VTY2FsZSkKK3sKKyAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAw
LCAxMDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1MCwgNTAp
KTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgQ0NM
YXllckltcGwqIHNjcm9sbExheWVyID0gbV9ob3N0SW1wbC0+cm9vdFNjcm9sbExheWVyKCk7Cisg
ICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKworICAgIGNvbnN0IGZsb2F0IG1pblBhZ2VTY2FsZSA9
IDAuNSwgbWF4UGFnZVNjYWxlID0gNDsKKyAgICBjb25zdCBkb3VibGUgc3RhcnRUaW1lID0gMTsK
KyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAwLjE7CisgICAgY29uc3QgZG91YmxlIGhhbGZ3
YXlUaHJvdWdoQW5pbWF0aW9uID0gc3RhcnRUaW1lICsgZHVyYXRpb24gLyAyOworICAgIGNvbnN0
IGRvdWJsZSBlbmRUaW1lID0gc3RhcnRUaW1lICsgZHVyYXRpb247CisKKyAgICAvLyBTdGFydCBh
IHBhZ2Ugc2NhbGUgYW5pbWF0aW9uLgorICAgIGNvbnN0IGZsb2F0IHBhZ2VTY2FsZURlbHRhID0g
MjsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoMSwgbWluUGFn
ZVNjYWxlLCBtYXhQYWdlU2NhbGUpOworICAgIG1faG9zdEltcGwtPnN0YXJ0UGFnZVNjYWxlQW5p
bWF0aW9uKEludFNpemUoNTAsIDUwKSwgZmFsc2UsIHBhZ2VTY2FsZURlbHRhLCBzdGFydFRpbWUs
IGR1cmF0aW9uKTsKKworICAgIC8vIFdlIHNob3VsZCBpbW1lZGlhdGVseSBnZXQgdGhlIGZpbmFs
IHpvb20gYW5kIHNjcm9sbCB2YWx1ZXMgZm9yIHRoZQorICAgIC8vIGFuaW1hdGlvbi4KKyAgICBt
X2hvc3RJbXBsLT5hbmltYXRlKGhhbGZ3YXlUaHJvdWdoQW5pbWF0aW9uLCBoYWxmd2F5VGhyb3Vn
aEFuaW1hdGlvbik7CisgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8g
PSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgRVhQRUNUX0VRKHNjcm9s
bEluZm8tPnBhZ2VTY2FsZURlbHRhLCBwYWdlU2NhbGVEZWx0YSk7CisgICAgZXhwZWN0Q29udGFp
bnMoKnNjcm9sbEluZm8sIHNjcm9sbExheWVyLT5pZCgpLCBJbnRTaXplKDI1LCAyNSkpOworCisg
ICAgLy8gU2Nyb2xsaW5nIGR1cmluZyB0aGUgYW5pbWF0aW9uIGlzIGlnbm9yZWQuCisgICAgY29u
c3QgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwt
PnNjcm9sbEJlZ2luKEludFBvaW50KDI1LCAyNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVl
bCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBs
LT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisK
KyAgICAvLyBUaGUgZmluYWwgcGFnZSBzY2FsZSBhbmQgc2Nyb2xsIGRlbHRhcyBzaG91bGQgbWF0
Y2ggd2hhdCB3ZSBnb3QKKyAgICAvLyBlYXJsaWVyLgorICAgIG1faG9zdEltcGwtPmFuaW1hdGUo
ZW5kVGltZSwgZW5kVGltZSk7CisgICAgc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NT
Y3JvbGxEZWx0YXMoKTsKKyAgICBFWFBFQ1RfRVEoc2Nyb2xsSW5mby0+cGFnZVNjYWxlRGVsdGEs
IHBhZ2VTY2FsZURlbHRhKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mbywgc2Nyb2xs
TGF5ZXItPmlkKCksIEludFNpemUoMjUsIDI1KSk7Cit9CisKIGNsYXNzIERpZERyYXdDaGVja0xh
eWVyIDogcHVibGljIENDVGlsZWRMYXllckltcGwgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPERpZERyYXdDaGVja0xheWVyPiBjcmVhdGUoaW50IGlkKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgRGlkRHJhd0NoZWNrTGF5ZXIoaWQpKTsgfQpAQCAtNjU3LDYgKzgwNywyOTkgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwcmVwYXJlVG9EcmF3RmFpbHNXaGVuQW5pbWF0
aW9uVXNlc0NoZWNrZXJib2FyZCkKICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZy
YW1lKTsKIH0KIAorVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdu
b3JlZCkKK3sKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDApOworICAgIHJvb3QtPnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgIG1faG9zdEltcGwt
PnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJBbmREcmF3RnJhbWUoKTsKKworICAgIC8vIFNjcm9sbCBldmVudCBpcyBpZ25vcmVkIGJlY2F1
c2UgbGF5ZXIgaXMgbm90IHNjcm9sbGFibGUuCisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNj
cm9sbEJlZ2luKEludFBvaW50KDAsIDApLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZCk7CisgICAgRVhQRUNUX0ZBTFNFKG1f
ZGlkUmVxdWVzdFJlZHJhdyk7CisgICAgRVhQRUNUX0ZBTFNFKG1fZGlkUmVxdWVzdENvbW1pdCk7
Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTm9uQ29tcG9zaXRl
ZFJvb3QpCit7CisgICAgLy8gVGVzdCB0aGUgY29uZmlndXJhdGlvbiB3aGVyZSBhIG5vbi1jb21w
b3NpdGVkIHJvb3QgbGF5ZXIgaXMgZW1iZWRkZWQgaW4gYQorICAgIC8vIHNjcm9sbGFibGUgb3V0
ZXIgbGF5ZXIuCisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworCisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBjb250ZW50TGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAg
IGNvbnRlbnRMYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudCh0cnVlKTsKKyAgICBjb250
ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFBv
c2l0aW9uKEludFBvaW50KDUsIDUpKTsKKyAgICBjb250ZW50TGF5ZXItPnNldEJvdW5kcyhzdXJm
YWNlU2l6ZSk7CisgICAgY29udGVudExheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoc3Vy
ZmFjZVNpemUud2lkdGgoKSAqIDIsIHN1cmZhY2VTaXplLmhlaWdodCgpICogMikpOworCisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7
CisgICAgc2Nyb2xsTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7CisgICAgc2Nyb2xsTGF5ZXIt
PnNldE1heFNjcm9sbFBvc2l0aW9uKHN1cmZhY2VTaXplKTsKKyAgICBzY3JvbGxMYXllci0+YWRk
Q2hpbGQoY29udGVudExheWVyLnJlbGVhc2UoKSk7CisKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIoc2Nyb2xsTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQo
NSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEw
KSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRS
ZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOworfQor
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRB
bmRSZWRyYXcpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgcm9vdC0+
YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsK
KyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOworICAgIGluaXRp
YWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisKKyAgICBFWFBFQ1RfRVEobV9ob3N0
SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpX
aGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkKTsKKyAgICBtX2hvc3RJ
bXBsLT5zY3JvbGxCeShJbnRTaXplKDAsIDEwKSk7CisgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5k
KCk7CisgICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfVFJV
RShtX2RpZFJlcXVlc3RDb21taXQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbE1pc3Nlc0NoaWxkKQoreworICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEw
KTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDAp
OworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290
LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXpl
KTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8g
U2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgaW5wdXQgY29vcmRpbmF0ZSBpcyBv
dXRzaWRlIHRoZSBsYXllciBib3VuZGFyaWVzLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5z
Y3JvbGxCZWdpbihJbnRQb2ludCgxNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCks
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
bV9kaWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0
KTsKK30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNr
ZmFjaW5nQ2hpbGQpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBv
aW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXpl
KHN1cmZhY2VTaXplKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAg
ICBtYXRyaXgucm90YXRlM2QoMTgwLCAwLCAwKTsKKyAgICBjaGlsZC0+c2V0VHJhbnNmb3JtKG1h
dHJpeCk7CisgICAgY2hpbGQtPnNldERvdWJsZVNpZGVkKGZhbHNlKTsKKworICAgIHJvb3QtPmFk
ZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJv
b3QucmVsZWFzZSgpKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgp
OworCisgICAgLy8gU2Nyb2xsIGV2ZW50IGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgc2Nyb2xsYWJs
ZSBsYXllciBpcyBub3QgZmFjaW5nIHRoZSB2aWV3ZXIgYW5kIHRoZXJlIGlzCisgICAgLy8gbm90
aGluZyBzY3JvbGxhYmxlIGJlaGluZCBpdC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Ny
b2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9k
aWRSZXF1ZXN0UmVkcmF3KTsKKyAgICBFWFBFQ1RfRkFMU0UobV9kaWRSZXF1ZXN0Q29tbWl0KTsK
K30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCbG9ja2VkQnlDb250
ZW50TGF5ZXIpCit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gY29udGVudExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFNob3Vs
ZFNjcm9sbE9uTWFpblRocmVhZCh0cnVlKTsKKyAgICBjb250ZW50TGF5ZXItPnNldFNjcm9sbGFi
bGUoZmFsc2UpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IGNyZWF0
ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAg
c2Nyb2xsTGF5ZXItPmFkZENoaWxkKGNvbnRlbnRMYXllci5yZWxlYXNlKCkpOworCisgICAgbV9o
b3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9sbExheWVyLnJlbGVhc2UoKSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgLy8gU2Nyb2xsaW5nIGZhaWxzIGJlY2F1c2Ug
dGhlIGNvbnRlbnQgbGF5ZXIgaXMgYXNraW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRoZSBtYWluIHRo
cmVhZC4KKyAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwg
NSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxPbk1haW5UaHJlYWQpOworfQorCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCit7CisgICAgSW50U2l6
ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9p
bnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9v
dC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6
ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKKworICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEoMCwgMTApOworICAgIEludFNpemUgZXhwZWN0ZWRTY3JvbGxEZWx0
YShzY3JvbGxEZWx0YSk7CisgICAgSW50U2l6ZSBleHBlY3RlZE1heFNjcm9sbChtX2hvc3RJbXBs
LT5yb290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRpb24oKSk7CisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEVuZCgp
OworCisgICAgLy8gU2V0IG5ldyBwYWdlIHNjYWxlIGZyb20gbWFpbiB0aHJlYWQuCisgICAgbV9o
b3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwgcGFnZVNjYWxl
LCBwYWdlU2NhbGUpOworCisgICAgLy8gVGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Ny
b2xsIGRlbHRhLgorICAgIGV4cGVjdGVkU2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKKyAg
ICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnBy
b2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQo
KSwgMCwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNo
b3VsZCBhbHNvIGhhdmUgYmVlbiB1cGRhdGVkLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5y
b290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOworCisg
ICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZGVsdGEgcmVtYWlucyBjb25zdGFudCBiZWNhdXNlIHRoZSBp
bXBsIHRocmVhZCBkaWQgbm90IHNjYWxlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290
TGF5ZXIoKS0+cGFnZVNjYWxlRGVsdGEoKSwgMSk7Cit9CisKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKK3sK
KyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgZmxvYXQgcGFnZVNjYWxlID0g
MjsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIo
MCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIG1faG9zdEltcGwtPnNldFJv
b3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXpl
KHN1cmZhY2VTaXplKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1p
dHMoMSwgMSwgcGFnZVNjYWxlKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdG
cmFtZSgpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgwLCAxMCk7CisgICAgSW50U2l6ZSBl
eHBlY3RlZFNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkTWF4
U2Nyb2xsKG1faG9zdEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoNSwgNSksIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpXaGVlbCksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFy
dGVkKTsKKyAgICBtX2hvc3RJbXBsLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CisgICAgbV9ob3N0
SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAvLyBTZXQgbmV3IHBhZ2Ugc2NhbGUgb24gaW1wbCB0
aHJlYWQgYnkgcGluY2hpbmcuCisgICAgbV9ob3N0SW1wbC0+cGluY2hHZXN0dXJlQmVnaW4oKTsK
KyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVVcGRhdGUocGFnZVNjYWxlLCBJbnRQb2ludCgp
KTsKKyAgICBtX2hvc3RJbXBsLT5waW5jaEdlc3R1cmVFbmQoKTsKKworICAgIC8vIFRoZSBzY3Jv
bGwgZGVsdGEgaXMgbm90IHNjYWxlZCBiZWNhdXNlIHRoZSBtYWluIHRocmVhZCBkaWQgbm90IHNj
YWxlLgorICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0
SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJ
bmZvLmdldCgpLCAwLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZSBzY3JvbGwg
cmFuZ2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9s
bCk7CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBkZWx0YSBzaG91bGQgbWF0Y2ggdGhlIG5ldyBz
Y2FsZSBvbiB0aGUgaW1wbCBzaWRlLgorICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5
ZXIoKS0+cGFnZVNjYWxlRGVsdGEoKSwgcGFnZVNjYWxlKTsKK30KKworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVh
ZCkKK3sKKyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICAvLyBBbHNvIG1hcmsg
dGhlIHJvb3Qgc2Nyb2xsYWJsZSBzbyBpdCBiZWNvbWVzIHRoZSByb290IHNjcm9sbCBsYXllci4K
KyAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUpOworICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0
ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAg
IG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CisgICAgbV9ob3N0SW1w
bC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlckFuZERyYXdGcmFtZSgpOworCisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gbV9ob3N0SW1w
bC0+cm9vdExheWVyKCktPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBJbnRTaXplIHNjcm9s
bERlbHRhKDAsIDEwKTsKKyAgICBJbnRTaXplIGV4cGVjdGVkU2Nyb2xsRGVsdGEoc2Nyb2xsRGVs
dGEpOworICAgIEludFNpemUgZXhwZWN0ZWRNYXhTY3JvbGwoY2hpbGQtPm1heFNjcm9sbFBvc2l0
aW9uKCkpOworICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1
LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXJ0ZWQpOworICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsK
KyAgICBtX2hvc3RJbXBsLT5zY3JvbGxFbmQoKTsKKworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IDI7
CisgICAgbV9ob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZSwg
MSwgcGFnZVNjYWxlKTsKKworICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHNj
cm9sbCBkZWx0YS4KKyAgICBleHBlY3RlZFNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZSk7Cisg
ICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5w
cm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0
KCksIDEsIGV4cGVjdGVkU2Nyb2xsRGVsdGEpOworCisgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBz
aG91bGQgbm90IGhhdmUgY2hhbmdlZC4KKyAgICBFWFBFQ1RfRVEoY2hpbGQtPm1heFNjcm9sbFBv
c2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKKworICAgIC8vIFRoZSBwYWdlIHNjYWxlIGRl
bHRhIHJlbWFpbnMgY29uc3RhbnQgYmVjYXVzZSB0aGUgaW1wbCB0aHJlYWQgZGlkIG5vdCBzY2Fs
ZS4KKyAgICBFWFBFQ1RfRVEoY2hpbGQtPnBhZ2VTY2FsZURlbHRhKCksIDEpOworfQorCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQmV5b25kTGltaXQpCit7Cisg
ICAgLy8gU2Nyb2xsIGEgY2hpbGQgbGF5ZXIgYmV5b25kIGl0cyBtYXhpbXVtIHNjcm9sbCByYW5n
ZSBhbmQgbWFrZSBzdXJlIHRoZQorICAgIC8vIHBhcmVudCBsYXllciBpcyBzY3JvbGxlZCBvbiB0
aGUgYXhpcyBvbiB3aGljaCB0aGUgY2hpbGQgd2FzIHVuYWJsZSB0bworICAgIC8vIHNjcm9sbC4K
KyAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IGNyZWF0ZVNj
cm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgZ3Jh
bmRDaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgNSkpOworCisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgY2hpbGQtPnNldFNjcm9sbFBvc2l0aW9uKEludFBv
aW50KDMsIDApKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOwor
CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKyAgICBtX2hvc3RJbXBsLT5z
ZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0
U2l6ZShzdXJmYWNlU2l6ZSk7CisgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJh
bWUoKTsKKyAgICB7CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEoLTMsIC03KTsKKyAgICAg
ICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3Rh
cnRlZCk7CisgICAgICAgIG1faG9zdEltcGwtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICAg
ICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7CisKKyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5k
U2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7
CisKKyAgICAgICAgLy8gVGhlIGdyYW5kIGNoaWxkIHNob3VsZCBoYXZlIHNjcm9sbGVkIHVwIHRv
IGl0cyBsaW1pdC4KKyAgICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gbV9ob3N0SW1wbC0+cm9v
dExheWVyKCktPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgIENDTGF5ZXJJbXBsKiBncmFu
ZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgIGV4cGVjdENvbnRh
aW5zKCpzY3JvbGxJbmZvLmdldCgpLCBncmFuZENoaWxkLT5pZCgpLCBJbnRTaXplKDAsIC01KSk7
CisKKyAgICAgICAgLy8gVGhlIGNoaWxkIHNob3VsZCBoYXZlIG9ubHkgc2Nyb2xsZWQgb24gdGhl
IG90aGVyIGF4aXMuCisgICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBj
aGlsZC0+aWQoKSwgSW50U2l6ZSgtMywgMCkpOworICAgIH0KK30KKworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxFdmVudEJ1YmJsaW5nKQoreworICAgIC8vIFdoZW4gd2Ug
dHJ5IHRvIHNjcm9sbCBhIG5vbi1zY3JvbGxhYmxlIGNoaWxkIGxheWVyLCB0aGUgc2Nyb2xsIGRl
bHRhCisgICAgLy8gc2hvdWxkIGJlIGFwcGxpZWQgdG8gb25lIG9mIGl0cyBhbmNlc3RvcnMgaWYg
cG9zc2libGUuCisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUs
IDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0
ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisKKyAg
ICBjaGlsZC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQu
cmVsZWFzZSgpKTsKKworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2Uo
KSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKKyAgICBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOworICAgIHsKKyAgICAgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YSgwLCA0KTsKKyAgICAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNj
cm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZCk7CisgICAgICAgIG1faG9zdEltcGwt
PnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICAgICAgbV9ob3N0SW1wbC0+c2Nyb2xsRW5kKCk7
CisKKyAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hv
c3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisKKyAgICAgICAgLy8gT25seSB0aGUgcm9v
dCBzaG91bGQgaGF2ZSBzY3JvbGxlZC4KKyAgICAgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8tPnNj
cm9sbHMuc2l6ZSgpLCAxdSk7CisgICAgICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdl
dCgpLCBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+aWQoKSwgc2Nyb2xsRGVsdGEpOworICAgIH0K
K30KKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCZWZvcmVSZWRyYXcp
Cit7CisgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOworICAgIG1faG9zdEltcGwtPnNl
dFJvb3RMYXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUp
OworCisgICAgLy8gRHJhdyBvbmUgZnJhbWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVidWlsZCB0
aGUgbGF5ZXIgdHJlZSB0byBtaW1pYyBhIHRyZWUgc3luY2hyb25pemF0aW9uLgorICAgIGluaXRp
YWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CisgICAgbV9ob3N0SW1wbC0+ZGV0YWNo
TGF5ZXJUcmVlKCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFi
bGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworCisgICAgLy8gU2Ny
b2xsaW5nIHNob3VsZCBzdGlsbCB3b3JrIGV2ZW4gdGhvdWdoIHdlIGRpZCBub3QgZHJhdyB5ZXQu
CisgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50KDUsIDUpLCBD
Q0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xs
U3RhcnRlZCk7Cit9CisKIGNsYXNzIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dDogcHVibGljIEZh
a2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgQmxlbmRTdGF0ZVRyYWNrZXJD
b250ZXh0KCkgOiBtX2JsZW5kKGZhbHNlKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDM1NWZjZWFjNWQ4Mzk3
YWRhZWZhMzYxM2E4ZDUxNDlkNzIxNzIxODIuLjY0NDdlMTJmY2EwMmU2YmVmMTA4YWExNTIwNWU5
YTI5ZTllZWQ2NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjIyMCw0ICsyMjIwLDc4IEBAIHByaXZhdGU6CiAK
IFNJTkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJB
ZGRlZFdpdGhBbmltYXRpb24pCiAKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGls
ZExheWVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QsIHB1YmxpYyBMYXllckNocm9taXVt
U2Nyb2xsRGVsZWdhdGUgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxD
aGlsZExheWVyKCkKKyAgICAgICAgOiBtX3Njcm9sbEFtb3VudCgyLCAxKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisgICAg
ICAgIG1fcm9vdFNjcm9sbExheWVyID0gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9t
b2NrRGVsZWdhdGUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0Qm91bmRzKEludFNp
emUoMTAsIDEwKSk7CisgICAgICAgIG1fcm9vdFNjcm9sbExheWVyLT5zZXRJc0RyYXdhYmxlKHRy
dWUpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKKyAg
ICAgICAgbV9yb290U2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAw
LCAxMDApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQ2hpbGQo
bV9yb290U2Nyb2xsTGF5ZXIpOworICAgICAgICBtX2NoaWxkTGF5ZXIgPSBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0ZSk7CisgICAgICAgIG1fY2hpbGRMYXllci0+
c2V0TGF5ZXJTY3JvbGxEZWxlZ2F0ZSh0aGlzKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRC
b3VuZHMoSW50U2l6ZSg1MCwgNTApKTsKKyAgICAgICAgbV9jaGlsZExheWVyLT5zZXRJc0RyYXdh
YmxlKHRydWUpOworICAgICAgICBtX2NoaWxkTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSk7Cisg
ICAgICAgIG1fY2hpbGRMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEw
MCkpOworICAgICAgICBtX3Jvb3RTY3JvbGxMYXllci0+YWRkQ2hpbGQobV9jaGlsZExheWVyKTsK
KyAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGRpZFNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkgT1ZFUlJJ
REUKKyAgICB7CisgICAgICAgIG1fcmVwb3J0ZWRTY3JvbGxBbW91bnQgPSBzY3JvbGxEZWx0YTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSwgZmxvYXQpIE9WRVJSSURFCisgICAgeworICAgICAgICBJbnRQb2lu
dCBwb3NpdGlvbiA9IG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAg
ICBtX3Jvb3RTY3JvbGxMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxE
ZWx0YSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChD
Q0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgRVhQRUNU
X0VRKG1fcm9vdFNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAg
ICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBF
WFBFQ1RfRVEobV9jaGlsZExheWVyLT5zY3JvbGxQb3NpdGlvbigpLCBJbnRQb2ludCgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKG1fY2hpbGRMYXllci0+c2Nyb2xsUG9z
aXRpb24oKSwgSW50UG9pbnQoKSArIG1fc2Nyb2xsQW1vdW50KTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaW1wbCkg
T1ZFUlJJREUKKyAgICB7CisgICAgICAgIGlmIChpbXBsLT5mcmFtZU51bWJlcigpID09IDEpIHsK
KyAgICAgICAgICAgIEVYUEVDVF9FUShpbXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwg
Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bFN0YXJ0ZWQpOworICAgICAgICAgICAgaW1wbC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOwor
ICAgICAgICAgICAgaW1wbC0+c2Nyb2xsRW5kKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+
ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgRVhQRUNU
X0VRKG1fc2Nyb2xsQW1vdW50LCBtX3JlcG9ydGVkU2Nyb2xsQW1vdW50KTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgY29uc3QgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKKyAgICBJbnRTaXplIG1f
cmVwb3J0ZWRTY3JvbGxBbW91bnQ7CisgICAgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIG1fbW9j
a0RlbGVnYXRlOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX2NoaWxkTGF5ZXI7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdFNjcm9sbExheWVyOworfTsKKworVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxDaGlsZExheWVyLCBydW5NdWx0aVRocmVhZCkKK3sKKyAg
ICBydW5UZXN0KHRydWUpOworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbFRlc3QuY3BwCmluZGV4IDkyZjAwNjE4NDE0Nzk1NmUxMDE5ZmM2OTAxNWY2MzllNDg5
NGYzMzEuLmQ1YjY4YTg2N2Y3ODJjYzY3ZmQxYjdiYzI5NjIwNTI5MzRmZDcwOWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKQEAgLTIwMiwxNCArMjAyLDE0IEBAIFRFU1Rf
RihXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVTY3JvbGxTdGFydGVk
KQogICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwogfQogCi1U
RVNUX0YoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlU2Nyb2xsRmFp
bGVkKQorVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVyZVNj
cm9sbE9uTWFpblRocmVhZCkKIHsKICAgICAvLyBXZSBzaG91bGQgc2VuZCBhbGwgZXZlbnRzIHRv
IHRoZSB3aWRnZXQgZm9yIHRoaXMgZ2VzdHVyZS4KICAgICBtX2V4cGVjdGVkRGlzcG9zaXRpb24g
PSBEaWROb3RIYW5kbGU7CiAgICAgVkVSSUZZX0FORF9SRVNFVF9NT0NLUygpOwogCiAgICAgRVhQ
RUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKDo6dGVzdGlu
Zzo6XywgOjp0ZXN0aW5nOjpfKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihX
ZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5X
aWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbE9uTWFpblRocmVhZCkpOwogCiAgICAgZ2VzdHVyZS50eXBlID0gV2ViSW5wdXRFdmVudDo6
R2VzdHVyZVNjcm9sbEJlZ2luOwogICAgIG1faW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50
KGdlc3R1cmUpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIFRFU1RfRihXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbFRlc3QsIGdlc3R1cmVGbGluZ0ZhaWxlZCkKICAgICBWRVJJRllfQU5EX1JFU0VU
X01PQ0tTKCk7CiAKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwg
c2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCi0gICAgICAgIC5XaWxsT25jZSh0
ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZhaWxl
ZCkpOworICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpKTsKIAogICAgIGdlc3R1cmUudHlwZSA9
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0OwogICAgIG1faW5wdXRIYW5kbGVyLT5o
YW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwpAQCAtMzg3LDcgKzM4Nyw3IEBAIFRFU1RfRihXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QsIGdlc3R1cmVGbGluZ0FuaW1hdGVzKQogICAg
IC8vIHRyYW5zZmVycmVkIHRvIHRoZSBtYWluIHRocmVhZC4KICAgICBFWFBFQ1RfQ0FMTChtX21v
Y2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2NoZWR1bGVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQsIHNjcm9sbEJlZ2luKHRlc3Rpbmc6Ol8s
IHRlc3Rpbmc6Ol8pKQotICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6
OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQpKTsKKyAgICAgICAgLldpbGxPbmNl
KHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsT25N
YWluVGhyZWFkKSk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhhbmRsZXJDbGllbnQs
IHNjcm9sbEJ5KHRlc3Rpbmc6Ol8pKS5UaW1lcygwKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tD
Q0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsRW5kKCkpLlRpbWVzKDApOwogCkBAIC00NjksNyAr
NDY5LDcgQEAgVEVTVF9GKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdCwgZ2VzdHVy
ZUZsaW5nVHJhbnNmZXJSZXNldHMpCiAgICAgLy8gdHJhbnNmZXJyZWQgdG8gdGhlIG1haW4gdGhy
ZWFkLgogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY2hlZHVs
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfQ0FMTChtX21vY2tDQ0lucHV0SGFuZGxlckNsaWVu
dCwgc2Nyb2xsQmVnaW4odGVzdGluZzo6XywgdGVzdGluZzo6XykpCi0gICAgICAgIC5XaWxsT25j
ZSh0ZXN0aW5nOjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbEZh
aWxlZCkpOworICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKFdlYkNvcmU6OkNDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxPbk1haW5UaHJlYWQpKTsKICAgICBFWFBFQ1RfQ0FMTCht
X21vY2tDQ0lucHV0SGFuZGxlckNsaWVudCwgc2Nyb2xsQnkodGVzdGluZzo6XykpLlRpbWVzKDAp
OwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxFbmQo
KSkuVGltZXMoMCk7CiAKQEAgLTU0Niw3ICs1NDYsNyBAQCBURVNUX0YoV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGxUZXN0LCBnZXN0dXJlRmxpbmdUcmFuc2ZlclJlc2V0cykKICAgICAvLyBU
aGVuIGFib3J0IHRoZSBzZWNvbmQgZmxpbmcuCiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1
dEhhbmRsZXJDbGllbnQsIHNjaGVkdWxlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9DQUxMKG1f
bW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxCZWdpbih0ZXN0aW5nOjpfLCB0ZXN0aW5n
OjpfKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OlJldHVybihXZWJDb3JlOjpDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkKSk7CisgICAgICAgIC5XaWxsT25jZSh0ZXN0aW5n
OjpSZXR1cm4oV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbE9uTWFpblRocmVh
ZCkpOwogICAgIEVYUEVDVF9DQUxMKG1fbW9ja0NDSW5wdXRIYW5kbGVyQ2xpZW50LCBzY3JvbGxC
eSh0ZXN0aW5nOjpfKSkuVGltZXMoMCk7CiAgICAgRVhQRUNUX0NBTEwobV9tb2NrQ0NJbnB1dEhh
bmRsZXJDbGllbnQsIHNjcm9sbEVuZCgpKS5UaW1lcygwKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>