<?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>122585</bug_id>
          
          <creation_ts>2013-10-09 20:16:51 -0700</creation_ts>
          <short_desc>Scrollbars are updated on the main thread rather than the scrolling thread (causing scrollbars not to appear/update quickly in some cases)</short_desc>
          <delta_ts>2013-10-10 15:26:26 -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>Layout and Rendering</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>938186</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-10-09 20:16:51 -0700</bug_when>
    <thetext>We shouldn&apos;t update scrollbars on the main thread, because this leads to out-of-sync issues.

&lt;rdar://problem/10710775&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938195</commentid>
    <comment_count>1</comment_count>
      <attachid>213848</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-10-09 20:33:52 -0700</bug_when>
    <thetext>Created attachment 213848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938196</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-09 20:35:19 -0700</bug_when>
    <thetext>Attachment 213848 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/WebCore/loader/icon/IconDatabase.cpp&apos;, u&apos;Source/WebCore/page/FrameView.cpp&apos;, u&apos;Source/WebCore/page/FrameView.h&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.h&apos;, u&apos;Source/WebCore/platform/ScrollableArea.cpp&apos;, u&apos;Source/WebCore/platform/ScrollableArea.h&apos;, u&apos;Source/WebCore/platform/Scrollbar.cpp&apos;, u&apos;Source/WebCore/platform/Scrollbar.h&apos;, u&apos;Source/WebCore/platform/ScrollbarThemeClient.h&apos;, u&apos;Source/WebCore/platform/mac/NSScrollerImpDetails.h&apos;, u&apos;Source/WebCore/platform/mac/ScrollAnimatorMac.h&apos;, u&apos;Source/WebCore/platform/mac/ScrollAnimatorMac.mm&apos;, u&apos;Source/WebCore/platform/mac/ScrollbarThemeMac.h&apos;, u&apos;Source/WebCore/platform/mac/ScrollbarThemeMac.mm&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.cpp&apos;, u&apos;Source/WebCore/rendering/RenderListBox.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h&apos;]&quot; exit_code: 1
Source/WebCore/loader/icon/IconDatabase.cpp:266:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 28 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>938199</commentid>
    <comment_count>3</comment_count>
      <attachid>213848</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-09 20:54:14 -0700</bug_when>
    <thetext>Comment on attachment 213848
Patch

Attachment 213848 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/3617003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938200</commentid>
    <comment_count>4</comment_count>
      <attachid>213848</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-09 20:58:52 -0700</bug_when>
    <thetext>Comment on attachment 213848
Patch

Attachment 213848 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/3619005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938202</commentid>
    <comment_count>5</comment_count>
      <attachid>213848</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-09 21:14:35 -0700</bug_when>
    <thetext>Comment on attachment 213848
Patch

Attachment 213848 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/3494115</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938454</commentid>
    <comment_count>6</comment_count>
      <attachid>213909</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-10-10 11:53:46 -0700</bug_when>
    <thetext>Created attachment 213909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938508</commentid>
    <comment_count>7</comment_count>
      <attachid>213909</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-10-10 13:09:34 -0700</bug_when>
    <thetext>Comment on attachment 213909
Patch

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

r- for use of ScrollbarPainter in C++, and for the badly named function

&gt; Source/WebCore/ChangeLog:17
&gt; +        ScrolllableArea function called updatesScrollLayerPositionOnMainThread()

ScrolllableArea!

&gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h:143
&gt; +    ScrollbarPainter horizontalScrollbarPainter() const { return m_horizontalScrollbarPainter; }

Isn&apos;t ScrollbarPainter an Objective-C type? You&apos;re exposing it in a C++ header here.

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h:126
&gt; +    void setScrollbarPaintersForNode(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar, ScrollingStateScrollingNode*);

Odd that this is called setScrollbarPainters, but what you&apos;re passing in are scrollbars.

&gt; Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:112
&gt; +        m_scrollingStateTree-&gt;setHasChangedProperties(true);

Is that true needed?

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:339
&gt; +        [CATransaction lock];

Do you really need to lock?

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:351
&gt; +        [CATransaction begin];
&gt; +        [CATransaction lock];

Can you share one transaction for both scrollbars?

&gt; Source/WebCore/platform/ScrollableArea.h:177
&gt; +    // Computes the so-called double value for the scrollbar&apos;s current position and the current overhang amount.

Not sure that &quot;so-called double value&quot; adds any clarity.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:464
&gt; +    return aRect;

aRect :(

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:501
&gt; +        macTheme-&gt;setCurrentPaintCharacteristics(_scrollbar);

No idea why setCurrentPaintCharacteristics would take a scrollbar!

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:534
&gt; +    if (newKnobAlpha == 0)
&gt; +        [scrollerPainter setUsePresentationValue:NO];

This is a bit mysterious.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:1000
&gt; +    if (layer)
&gt; +        [painter setLayer:layer-&gt;platformLayer()];
&gt; +    else
&gt; +        [painter setLayer:nil];

[painter setLayer:layer ? layer-&gt;platformLayer() : nil] ?

&gt; Source/WebCore/platform/mac/ScrollbarThemeMac.mm:464
&gt; +void ScrollbarThemeMac::setCurrentPaintCharacteristics(ScrollbarThemeClient* scrollbar)

I think this needs a better name.

&gt; Source/WebCore/rendering/RenderLayer.cpp:1411
&gt; +bool RenderLayer::updatesScrollLayerPositionOnMainThread() const
&gt; +{
&gt; +    if (Page* page = renderer().frame().page()) {
&gt; +        if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator())
&gt; +            return scrollingCoordinator-&gt;shouldUpdateScrollLayerPositionOnMainThread();
&gt; +    }
&gt; +
&gt; +    return true;
&gt; +}

Hm, wouldn&apos;t we always update overflow scrollbars on the main thread (currently)?

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2701
&gt; +            m_layerForHorizontalScrollbar-&gt;setDrawsContent(false);

drawsContent is false by default.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2702
&gt; +            m_layerForHorizontalScrollbar-&gt;setAnchorPoint(FloatPoint3D());

Is this still necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938535</commentid>
    <comment_count>8</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-10-10 14:08:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 213909 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=213909&amp;action=review
&gt; 
&gt; r- for use of ScrollbarPainter in C++, and for the badly named function
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; +        ScrolllableArea function called updatesScrollLayerPositionOnMainThread()
&gt; 
&gt; ScrolllableArea!
&gt; 

Hehe, fixed!

&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h:143
&gt; &gt; +    ScrollbarPainter horizontalScrollbarPainter() const { return m_horizontalScrollbarPainter; }
&gt; 
&gt; Isn&apos;t ScrollbarPainter an Objective-C type? You&apos;re exposing it in a C++ header here.
&gt; 

Oops. Added a void* typedef for other platforms.

&gt; &gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h:126
&gt; &gt; +    void setScrollbarPaintersForNode(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar, ScrollingStateScrollingNode*);
&gt; 
&gt; Odd that this is called setScrollbarPainters, but what you&apos;re passing in are scrollbars.
&gt; 

Changed name to setScrollbarPaintersFromScrollbarsForNode()

&gt; &gt; Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:112
&gt; &gt; +        m_scrollingStateTree-&gt;setHasChangedProperties(true);
&gt; 
&gt; Is that true needed?
&gt; 

Yes :-(

&gt; &gt; Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:339
&gt; &gt; +        [CATransaction lock];
&gt; 
&gt; Do you really need to lock?
&gt; 

So I&apos;ve been told.

&gt; &gt; Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:351
&gt; &gt; +        [CATransaction begin];
&gt; &gt; +        [CATransaction lock];
&gt; 
&gt; Can you share one transaction for both scrollbars?
&gt; 

Yes. Fixed.

&gt; &gt; Source/WebCore/platform/ScrollableArea.h:177
&gt; &gt; +    // Computes the so-called double value for the scrollbar&apos;s current position and the current overhang amount.
&gt; 
&gt; Not sure that &quot;so-called double value&quot; adds any clarity.
&gt; 

I removed it.

&gt; &gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:464
&gt; &gt; +    return aRect;
&gt; 
&gt; aRect :(
&gt; 

Changed to rect.

&gt; &gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:501
&gt; &gt; +        macTheme-&gt;setCurrentPaintCharacteristics(_scrollbar);
&gt; 
&gt; No idea why setCurrentPaintCharacteristics would take a scrollbar!
&gt; 

I changed the name to setCurrentPaintCharacteristicsForScrollbar()

&gt; &gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:534
&gt; &gt; +    if (newKnobAlpha == 0)
&gt; &gt; +        [scrollerPainter setUsePresentationValue:NO];
&gt; 
&gt; This is a bit mysterious.
&gt; 

I added a comment.

&gt; &gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:1000
&gt; &gt; +    if (layer)
&gt; &gt; +        [painter setLayer:layer-&gt;platformLayer()];
&gt; &gt; +    else
&gt; &gt; +        [painter setLayer:nil];
&gt; 
&gt; [painter setLayer:layer ? layer-&gt;platformLayer() : nil] ?
&gt; 

Good call.

&gt; &gt; Source/WebCore/platform/mac/ScrollbarThemeMac.mm:464
&gt; &gt; +void ScrollbarThemeMac::setCurrentPaintCharacteristics(ScrollbarThemeClient* scrollbar)
&gt; 
&gt; I think this needs a better name.
&gt; 

As noted above, I changed it to setCurrentPaintCharacteristicsForScrollbar()

&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:1411
&gt; &gt; +bool RenderLayer::updatesScrollLayerPositionOnMainThread() const
&gt; &gt; +{
&gt; &gt; +    if (Page* page = renderer().frame().page()) {
&gt; &gt; +        if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator())
&gt; &gt; +            return scrollingCoordinator-&gt;shouldUpdateScrollLayerPositionOnMainThread();
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    return true;
&gt; &gt; +}
&gt; 
&gt; Hm, wouldn&apos;t we always update overflow scrollbars on the main thread (currently)?
&gt; 

Heh, good point. I removed this implementation and just added one in the header that returns true.

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2701
&gt; &gt; +            m_layerForHorizontalScrollbar-&gt;setDrawsContent(false);
&gt; 
&gt; drawsContent is false by default.
&gt; 

Removed.

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2702
&gt; &gt; +            m_layerForHorizontalScrollbar-&gt;setAnchorPoint(FloatPoint3D());
&gt; 
&gt; Is this still necessary?

Apparently not!

New patch on the way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938538</commentid>
    <comment_count>9</comment_count>
      <attachid>213927</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-10-10 14:14:48 -0700</bug_when>
    <thetext>Created attachment 213927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938541</commentid>
    <comment_count>10</comment_count>
      <attachid>213927</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-10-10 14:19:09 -0700</bug_when>
    <thetext>Comment on attachment 213927
Patch

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

&gt; Source/WebCore/platform/mac/ScrollbarThemeMac.mm:464
&gt; +void ScrollbarThemeMac::setCurrentPaintCharacteristicsForScrollbar(ScrollbarThemeClient* scrollbar)

Not sure that the &quot;Current&quot; adds anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938545</commentid>
    <comment_count>11</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-10-10 14:23:23 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 213927 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=213927&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mac/ScrollbarThemeMac.mm:464
&gt; &gt; +void ScrollbarThemeMac::setCurrentPaintCharacteristicsForScrollbar(ScrollbarThemeClient* scrollbar)
&gt; 
&gt; Not sure that the &quot;Current&quot; adds anything.

Will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938550</commentid>
    <comment_count>12</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-10-10 14:43:39 -0700</bug_when>
    <thetext>Thanks Simon! http://trac.webkit.org/changeset/157253</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938573</commentid>
    <comment_count>13</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-10-10 15:26:26 -0700</bug_when>
    <thetext>Windows build fix: http://trac.webkit.org/changeset/157261</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213848</attachid>
            <date>2013-10-09 20:33:52 -0700</date>
            <delta_ts>2013-10-10 11:53:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>47845</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAxMy0xMC0wOSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2Nyb2xsYmFycyBhcmUgdXBkYXRl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQgcmF0aGVyIHRoYW4gdGhlIHNjcm9sbGluZyB0aHJlYWQgCisg
ICAgICAgIChjYXVzaW5nIHNjcm9sbCBiYXJzIG5vdCB0byBhcHBlYXIvdXBkYXRlIHF1aWNrbHkg
aW4gc29tZSBjYXNlcykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMjU4NQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8xMDcxMDc3NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgYSBmZXcgdGhpbmdzIGluIG9yZGVyIHRvIGFs
bG93IHNjcm9sbGJhcnMgdG8gYmUgdXBkYXRlZCBvbiB0aGUgCisgICAgICAgIHNjcm9sbGluZyB0
aHJlYWQ6CisgICAgICAgIDEuIFRoaXMgcGF0Y2ggYWRkcyB0aGUgYWJpbGl0eSB0byBrbm93IGlm
IHRoZSBsb3dlci1sZXZlbCBBUElzIG5lY2Vzc2FyeSB0byBnZXQgCisgICAgICAgIHRoaXMgdG8g
d29yayByaWdodCBhcmUgYXZhaWxhYmxlLCBBTkQgaWYgdGhlIGNvbnRlbnQgaXMgYWN0dWFsbHkg
Y2FwYWJsZSBvZiB0YWtpbmcgCisgICAgICAgIGFkdmFudGFnZSBvZiB0aGlzIGZlYXR1cmUuIFRo
aXMgaXMgY3VycmVudGx5IGltcGxlbWVudGVkIGFzIAorICAgICAgICBTY3JvbGxiYXI6OnN1cHBv
cnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSB3aGljaCBtYWtlcyB1c2VkIG9mIGEgbmV3IAor
ICAgICAgICBTY3JvbGxsYWJsZUFyZWEgZnVuY3Rpb24gY2FsbGVkIHVwZGF0ZXNTY3JvbGxMYXll
clBvc2l0aW9uT25NYWluVGhyZWFkKCkKKyAgICAgICAgCisgICAgICAgIDIuIFRvIHVwZGF0ZSBv
biB0aGUgc2Nyb2xsaW5nIHRocmVhZCwgdGhlIHNjcm9sbGluZyB0cmVlIG5lZWRzIHRvIGtub3cg
YWJvdXQgdGhlIAorICAgICAgICBTY3JvbGxiYXJQYWludGVycy4KKyAgICAgICAgCisgICAgICAg
IDMuIE9uY2UgaXQga25vd3MgYWJvdXQgdGhlbSwgaXQgc2hvdWxkIHVwZGF0ZSB0aGUgcHJlc2Vu
dGF0aW9uIHZhbHVlIHdoZW5ldmVyIHRoZSAKKyAgICAgICAgbGF5ZXIgcG9zaXRpb24gY2hhbmdl
cy4KKyAgICAgICAgCisgICAgICAgIDQuIFByZXNlbnRhdGlvbiB2YWx1ZSBpcyBiYXNpY2FsbHkg
dGhlIHNhbWUgdGhpbmcgYXMgZG91YmxlIHZhbHVlLiBUaGVyZSBpcyBhIGJpdCAKKyAgICAgICAg
b2YgY29kZSB3ZSBtYWludGFpbiBjdXJyZW50bHkgdG8gY29tcHV0ZSB0aGF0LiBUaGlzIHBhdGNo
IG1vdmVzIHRoYXQgY29kZSB0byBhIAorICAgICAgICBzdGF0aWMgZnVuY3Rpb24gb24gU2Nyb2xs
YWJsZUFyZWEgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB0aGUgbWFpbiB0aHJlYWQgYW5k
IAorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgCisgICAgICAgIDUuIFNj
cm9sbGJhclBhaW50ZXIgQVBJIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIGxheWVycyB3ZSBoYXZl
IGNyZWF0ZWQgZm9yIHRoZSAKKyAgICAgICAgdmVydGljYWwgYW5kIGhvcml6b250YWwgc2Nyb2xs
YmFycywgdGhlbiB0aGV5IHdpbGwgdXNlIHRob3NlIGxheWVycyBhbmQgdGhlIAorICAgICAgICBw
cmVzZW50YXRpb24gdmFsdWUgdGhhdCB3ZSBzZXQgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQgdG8g
bW92ZSB0aGUgbGF5ZXJzIGFyb3VuZC4KKworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgIzEgYWJv
dmUuIAorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6dXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAg
ICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mICMyLiBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVzIG5vdyBoYXZlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFs
IAorICAgICAgICBTY3JvbGxiYXJQYWludGVycyBmb3IgTWFjIG9ubHkuCisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
dmVydGljYWxTY3JvbGxiYXJQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6aG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIpOgorCisgICAgICAg
IEFsc28gcGFydCBvZiAjMi4gTWFrZSBzdXJlIHRvIHNldCB0aGUgU2Nyb2xsYmFyUGFpbnRlcnMg
Zm9yIHNjcm9sbGluZyBub2RlcyB3aGVuIAorICAgICAgICBhcHByb3ByaWF0ZS4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaDoKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRl
ZCk6CisKKyAgICAgICAgSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdGhhdCB3YXMganVzdCBzdHVi
YmVkIG91dCBiZWZvcmUuIFRoaXMgaXMgcGFydCBvZiAjNSBpbiAKKyAgICAgICAgdGhhdCBpcyB3
aWxsIGFsbG93IHRoZSBTY3JvbGxiYXJQYWludGVyIEFQSSB0byBrbm93IGFib3V0IGFueSBsYXll
ciBjaGFuZ2VzLiAKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKworICAgICAgICBCYWNrIHRv
ICMyLCBtYWtpbmcgc3VyZSB3ZSBwcm9wZXJseSBzZXQgdGhlIFNjcm9sbGJhclBhaW50ZXJzIHRv
IHNlbmQgb3ZlciB0byB0aGUgCisgICAgICAgIHNjcm9sbGluZyB0aHJlYWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2Nyb2xsYmFyUGFpbnRlcnNGb3JO
b2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpzZXRTY3JvbGxiYXJQYWludGVycyk6CisKKyAgICAgICAgVGhpcyBjb2RlIGFjaGlldmVz
ICMzLiBJdCB1c2VzIG5ldyBTY3JvbGxiYXJQYWludGVyIEFQSSB0byBhZGp1c3QgdGhlIHBvc2l0
aW9uIG9mIAorICAgICAgICB0aGUgc2Nyb2xsYmFycyBmcm9tIHRoZSBzY3JvbGxpbmcgdGhyZWFk
LgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZU1hYy5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYyk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNldFNjcm9s
bExheWVyUG9zaXRpb24pOgorCisgICAgICAgIFRoaXMgaXMgZm9yICM1LiBTY3JvbGxiYXJQYWlu
dGVyIG5lZWRzIHRvIGtub3cgYWJvdXQgb3VyIHNjcm9sbGJhciBsYXllcnMuCisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFu
Z2UpOgorCisgICAgICAgIFRoaXMgaXMgZm9yICM0LiBUaGlzIGNvZGUgY29tcHV0ZXMgdGhlIHNj
cm9sbGJhcuKAmXMgdmFsdWUgYW5kIGN1cnJlbnQgb3ZlcmhhbmcgCisgICAgICAgIGFtb3VudC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsYmFyVmFsdWVB
bmRPdmVyaGFuZyk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yU2Nyb2xs
aW5nKToKKworICAgICAgICBUaGlzIGlzIGZvciAjMS4gV2UgbmVlZCB0byBrbm93IGlmIHdlIGhh
dmUgdGhlIGFiaWxpdHkgdG8gdXBkYXRlIHNjcm9sbGJhcnMgb24gYSAKKyAgICAgICAgZGlmZmVy
ZW50IHRocmVhZC4gV2UgY2FuIGRvIHRoYXQgb25seSBvbiBjZXJ0YWluIHZlcnNpb25zIG9mIHRo
ZSBPUywgb25seSB3aGVuIAorICAgICAgICB0aHJlYWRlZCBzY3JvbGxpbmcgaXMgZW5hYmxlZCwg
YW5kIG9ubHkgd2hlbiB0aGUgY3VycmVudCBwYWdlIGlzIGFjdHVhbGx5IHVzaW5nIAorICAgICAg
ICB0aGUgc2Nyb2xsaW5nIHRocmVhZCB0byBzY3JvbGwuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVP
blNlY29uZGFyeVRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDbGllbnQuaDoKKworICAgICAgICBOZXcgU2Ny
b2xsYmFyUGFpbnRlciBBUElzLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1w
RGV0YWlscy5oOgorCisgICAgICAgIFRoaXMgaXMgZm9yICM1LCBsZXR0aW5nIHRoZSBTY3JvbGxi
YXJQYWludGVyIEFQSSAga25vdyBhYm91dCB0aGUgbGF5ZXJzLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGxh
eWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBjb252ZXJ0UmVj
dFRvTGF5ZXI6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzaG91
bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlckltcDpdKToKKworICAgICAgICBCZWZvcmUgd2Ug
a2ljayBvZmYgYSBzY3JvbGwgYW5pbWF0aW9uLCBzZXQgdGhlIGN1cnJlbnQgcGFpbnRpbmcgY2hh
cmFjdGVyaXN0aWNzIHNvIAorICAgICAgICB0aGV5IGFyZSB1cC10by1kYXRlIGluIGNhc2Ugd2Ug
YXJlIHNjcm9sbGluZyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIHNldFVwQWxwaGFBbmltYXRpb246c2Nyb2xsZXJQYWludGVy
OnBhcnQ6V2ViQ29yZTo6YW5pbWF0ZUFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25vYkFscGhhVG86
ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3Jv
bGxlckltcDphbmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorCisgICAgICAgIE9ubHkgcGFpbnQgdGhl
IHNjcm9sbGJhcnMgdGhyb3VnaCBTY3JvbGxiYXJUaGVtZU1hYyBpZiB0aGV5IGFyZSBOT1QgYmVp
bmcgdXBkYXRlZCAKKyAgICAgICAgYnkgdGhlIHNjcm9sbGluZyB0aHJlYWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L1Njcm9sbGJhclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVN
YWM6OnNldEN1cnJlbnRQYWludENoYXJhY3RlcmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpz
Y3JvbGxiYXJQYWludGVyUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVN
YWM6OnBhaW50KToKKworICAgICAgICBCYWNrIHRvICMxLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlc1Nj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVPdmVyZmxv
d0NvbnRyb2xzTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgor
CiAyMDEzLTEwLTA3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBV
c2UgdW5pcXVlX3B0ciBpbnN0ZWFkIG9mIGRlbGV0ZUFsbFZhbHVlcyBpbiBYUGF0aApJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAx
NTcxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjMsNyArMjYzLDcgQEAgSW1hZ2UqIEljb25EYXRhYmFzZTo6c3lu
Y2hyb25vdXNJY29uRm9yUAogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICAvLyBUaGUgb25s
eSB3YXkgd2Ugc2hvdWxkICpub3QqIGhhdmUgYW4gaWNvbiByZWNvcmQgaXMgaWYgdGhpcyBwYWdl
VVJMIGlzIHJldGFpbmVkIGJ1dCBoYXMgbm8gaWNvbiB5ZXQgLSBtYWtlIHN1cmUgb2YgdGhhdAot
ICAgIEFTU0VSVChpY29uUmVjb3JkIHx8IG1fcmV0YWluZWRQYWdlVVJMcy5jb250YWlucyhwYWdl
VVJMT3JpZ2luYWwpKTsKKyAgLy8gIEFTU0VSVChpY29uUmVjb3JkIHx8IG1fcmV0YWluZWRQYWdl
VVJMcy5jb250YWlucyhwYWdlVVJMT3JpZ2luYWwpKTsKICAgICAKICAgICBpZiAoIWljb25SZWNv
cmQpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAko
cmV2aXNpb24gMTU3MTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDE0LDYgKzMwMTQsMTYgQEAgYm9vbCBGcmFtZVZpZXc6OmlzQWN0
aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5p
c0FjdGl2ZSgpOwogfQogCitib29sIEZyYW1lVmlldzo6dXBkYXRlc1Njcm9sbExheWVyUG9zaXRp
b25Pbk1haW5UaHJlYWQoKSBjb25zdAoreworICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUoKS5w
YWdlKCkpIHsKKyAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICByZXR1
cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25P
bk1haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBGcmFt
ZVZpZXc6OnNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCkKIHsKICAgICBMYXlvdXRT
aXplIG9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CShyZXZpc2lvbiAxNTcxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MDEsNiArNDAxLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklERTsK
IAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICBHcmFwaGljc0xheWVyKiBzZXRXYW50
c0xheWVyRm9yVG9wT3ZlckhhbmdBcmVhKGJvb2wpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUuY3BwCShyZXZpc2lvbiAxNTcxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCwxMCBAQCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0
CiAgICAgLCBtX2NvdW50ZXJTY3JvbGxpbmdMYXllcigwKQogICAgICwgbV9oZWFkZXJMYXllcigw
KQogICAgICwgbV9mb290ZXJMYXllcigwKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAsIG1fdmVy
dGljYWxTY3JvbGxiYXJQYWludGVyKDApCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxiYXJQYWlu
dGVyKDApCisjZW5kaWYKICAgICAsIG1fZnJhbWVTY2FsZUZhY3RvcigxKQogICAgICwgbV93aGVl
bEV2ZW50SGFuZGxlckNvdW50KDApCiAgICAgLCBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9z
aXRpb25Pbk1haW5UaHJlYWQoMCkKQEAgLTYxLDYgKzY1LDEwIEBAIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3QKIAogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlJiBzdGF0ZU5vZGUpCiAgICAgOiBTY3JvbGxpbmdTdGF0ZU5vZGUoc3RhdGVOb2RlKQorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyKHN0YXRlTm9k
ZS52ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIoKSkKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJh
clBhaW50ZXIoc3RhdGVOb2RlLmhvcml6b250YWxTY3JvbGxiYXJQYWludGVyKCkpCisjZW5kaWYK
ICAgICAsIG1fdmlld3BvcnRSZWN0KHN0YXRlTm9kZS52aWV3cG9ydFJlY3QoKSkKICAgICAsIG1f
dG90YWxDb250ZW50c1NpemUoc3RhdGVOb2RlLnRvdGFsQ29udGVudHNTaXplKCkpCiAgICAgLCBt
X2ZyYW1lU2NhbGVGYWN0b3Ioc3RhdGVOb2RlLmZyYW1lU2NhbGVGYWN0b3IoKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAxNTcxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTIgKzMxLDE3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJl
Z2lvbi5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaWYgUExBVEZPUk0oTUFDKQorI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lTWFjLmgiCisjZW5kaWYKICNpbmNsdWRlICJTY3JvbGxpbmdD
b29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlTm9kZS5oIgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2Nyb2xs
YmFyOworCiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUgOiBwdWJsaWMgU2Nyb2xs
aW5nU3RhdGVOb2RlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU+IGNyZWF0ZShTY3JvbGxpbmdTdGF0ZVRyZWUqLCBTY3JvbGxpbmdO
b2RlSUQpOwpAQCAtNjQsNyArNjksOCBAQCBwdWJsaWM6CiAgICAgICAgIEhlYWRlckhlaWdodCwK
ICAgICAgICAgRm9vdGVySGVpZ2h0LAogICAgICAgICBIZWFkZXJMYXllciwKLSAgICAgICAgRm9v
dGVyTGF5ZXIKKyAgICAgICAgRm9vdGVyTGF5ZXIsCisgICAgICAgIFBhaW50ZXJGb3JTY3JvbGxi
YXIKICAgICB9OwogCiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsaW5nTm9kZSgpIE9WRVJSSURF
IHsgcmV0dXJuIHRydWU7IH0KQEAgLTEzMiw2ICsxMzgsMTIgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Rm9vdGVyTGF5ZXIoR3JhcGhpY3NMYXllciopOwogICAgIFBsYXRmb3JtTGF5ZXIqIGZvb3Rl
clBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBTY3JvbGxi
YXJQYWludGVyIHZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGljYWxTY3JvbGxiYXJQYWludGVyOyB9CisgICAgU2Nyb2xsYmFyUGFpbnRlciBob3Jpem9udGFs
U2Nyb2xsYmFyUGFpbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhclBh
aW50ZXI7IH0KKyNlbmRpZgorICAgIHZvaWQgc2V0U2Nyb2xsYmFyUGFpbnRlcnMoU2Nyb2xsYmFy
KiB2ZXJ0aWNhbFNjcm9sbGJhciwgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKTsKKwog
ICAgIGJvb2wgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Ny
b2xsKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJlc2VudHNQ
cm9ncmFtbWF0aWNTY3JvbGw7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wUHJvcGVydGllcyhU
ZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3QgT1ZFUlJJREU7CkBAIC0xNDcsNiArMTU5LDgg
QEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9jb3VudGVyU2Nyb2xs
aW5nUGxhdGZvcm1MYXllcjsKICAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9oZWFkZXJQ
bGF0Zm9ybUxheWVyOwogICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX2Zvb3RlclBsYXRm
b3JtTGF5ZXI7CisgICAgU2Nyb2xsYmFyUGFpbnRlciBtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRl
cjsKKyAgICBTY3JvbGxiYXJQYWludGVyIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXI7CiAj
ZW5kaWYKICAgICAKICAgICBJbnRSZWN0IG1fdmlld3BvcnRSZWN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjLmgJKHJldmlzaW9uIDE1NzEyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2Nyb2xsYmFyOwog
Y2xhc3MgU2Nyb2xsaW5nU3RhdGVOb2RlOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVUcmVlOwpAQCAtMTIyLDYgKzEyMyw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRDb3VudGVyU2Nyb2xsaW5nTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5
ZXIqLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKICAgICB2b2lkIHNldEhlYWRlckxh
eWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7
CiAgICAgdm9pZCBzZXRGb290ZXJMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciosIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZSopOworICAgIHZvaWQgc2V0U2Nyb2xsYmFyUGFpbnRlcnNGb3JO
b2RlKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNj
cm9sbGJhciwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAgICAgdm9pZCBzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKik7CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9k
ZSh1bnNpZ25lZCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMubW0JKHJldmlzaW9uIDE1NzEyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTMxLDExICsxMzEsMTcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJh
bWVWaWV3TAogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgU2Nyb2xsYmFy
KiB2ZXJ0aWNhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAg
ICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPmhvcml6b250YWxT
Y3JvbGxiYXIoKTsKKyAgICBpZiAoKHZlcnRpY2FsU2Nyb2xsYmFyICYmIHZlcnRpY2FsU2Nyb2xs
YmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkpCisgICAgICAgIHx8IChob3Jp
em9udGFsU2Nyb2xsYmFyICYmIGhvcml6b250YWxTY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25T
ZWNvbmRhcnlUaHJlYWQoKSkpCisgICAgICAgIHNldFNjcm9sbGJhclBhaW50ZXJzRm9yTm9kZSh2
ZXJ0aWNhbFNjcm9sbGJhciwgaG9yaXpvbnRhbFNjcm9sbGJhciwgbm9kZSk7CisKICAgICBTY3Jv
bGxQYXJhbWV0ZXJzIHNjcm9sbFBhcmFtZXRlcnM7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jp
em9udGFsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoKTsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9
IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCk7Ci0gICAgc2Nyb2xsUGFyYW1l
dGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpICYmIGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5lbmFibGVk
KCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSBm
cmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9s
bGJhcigpLT5lbmFibGVkKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpv
bnRhbFNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXIgJiYgaG9yaXpvbnRhbFNjcm9sbGJh
ci0+ZW5hYmxlZCgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Ny
b2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgJiYgdmVydGljYWxTY3JvbGxiYXItPmVuYWJsZWQo
KTsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlID0gZnJhbWVW
aWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpOwogICAgIHNjcm9sbFBhcmFtZXRlcnMudmVy
dGljYWxTY3JvbGxiYXJNb2RlID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsK
IApAQCAtMTc4LDcgKzE4NCw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1l
Vmlld1IKICAgICBzZXRGb290ZXJMYXllckZvck5vZGUoZm9vdGVyTGF5ZXJGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KSwgbm9kZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNj
cm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWM6OnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFy
ZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3BhZ2UpOwpAQCAtMTg2
LDcgKzE5MiwxMCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxhYmxlCiAg
ICAgaWYgKHNjcm9sbGFibGVBcmVhICE9IHN0YXRpY19jYXN0PFNjcm9sbGFibGVBcmVhKj4obV9w
YWdlLT5tYWluRnJhbWUoKS52aWV3KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50LgorICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikK
KyAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
KTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBjb25zdCBJbnRQ
b2ludCYgc2Nyb2xsUG9zaXRpb24pCkBAIC0yNzgsNiArMjg3LDEyIEBAIHZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OnNldEZvb3RlckwKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgp
OwogfQogCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxiYXJQYWludGVy
c0Zvck5vZGUoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciwgU2Nyb2xsYmFyKiBob3Jpem9u
dGFsU2Nyb2xsYmFyLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAg
bm9kZS0+c2V0U2Nyb2xsYmFyUGFpbnRlcnModmVydGljYWxTY3JvbGxiYXIsIGhvcml6b250YWxT
Y3JvbGxiYXIpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKIHZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShj
b25zdCBSZWdpb24mIHJlZ2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQog
ewogICAgIG5vZGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE1NzEyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUu
aCIKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkBAIC05MCw2ICs5MSwyNyBAQCB2
b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Rm9vCiAgICAgICAgIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAordm9pZCBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGJhclBhaW50ZXJzKFNjcm9sbGJh
ciogdmVydGljYWxTY3JvbGxiYXIsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcikKK3sK
KyAgICBTY3JvbGxiYXJUaGVtZSogc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhl
bWUoKTsKKyAgICBpZiAoc2Nyb2xsYmFyVGhlbWUtPmlzTW9ja1RoZW1lKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBTY3JvbGxiYXJUaGVtZU1hYyogbWFjVGhlbWUgPSBzdGF0aWNfY2FzdDxTY3Jv
bGxiYXJUaGVtZU1hYyo+KHNjcm9sbGJhclRoZW1lKTsKKworICAgIFNjcm9sbGJhclBhaW50ZXIg
dmVydGljYWxQYWludGVyID0gdmVydGljYWxTY3JvbGxiYXIgPyBtYWNUaGVtZS0+cGFpbnRlckZv
clNjcm9sbGJhcih2ZXJ0aWNhbFNjcm9sbGJhcikgOiAwOworICAgIFNjcm9sbGJhclBhaW50ZXIg
aG9yaXpvbnRhbFBhaW50ZXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyID8gbWFjVGhlbWUtPnBhaW50
ZXJGb3JTY3JvbGxiYXIoaG9yaXpvbnRhbFNjcm9sbGJhcikgOiAwOworCisgICAgaWYgKG1fdmVy
dGljYWxTY3JvbGxiYXJQYWludGVyID09IHZlcnRpY2FsUGFpbnRlciAmJiBtX2hvcml6b250YWxT
Y3JvbGxiYXJQYWludGVyID09IGhvcml6b250YWxQYWludGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlciA9IHZlcnRpY2FsUGFpbnRlcjsKKyAgICBt
X2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyID0gaG9yaXpvbnRhbFBhaW50ZXI7CisKKyAgICBz
ZXRQcm9wZXJ0eUNoYW5nZWQoUGFpbnRlckZvclNjcm9sbGJhcik7CisgICAgaWYgKG1fc2Nyb2xs
aW5nU3RhdGVUcmVlKQorICAgICAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFzQ2hhbmdl
ZFByb3BlcnRpZXModHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVNYWMuaAkocmV2aXNpb24gMTU3MTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogCiAj
aW5jbHVkZSAiU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZU1hYy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgiCiAj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCkBAIC04NCw2ICs4NSw4IEBAIHByaXZhdGU6CiAg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fY291bnRlclNjcm9sbGluZ0xheWVyOwogICAgIFJldGFp
blB0cjxDQUxheWVyPiBtX2hlYWRlckxheWVyOwogICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2Zv
b3RlckxheWVyOworICAgIFNjcm9sbGJhclBhaW50ZXIgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50
ZXI7CisgICAgU2Nyb2xsYmFyUGFpbnRlciBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyOwog
ICAgIEludFBvaW50IG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb247CiAgICAgYm9v
bCBtX2xhc3RTY3JvbGxIYWRVbmZpbGxlZFBpeGVsczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjLm1tCShyZXZpc2lvbiAxNTcxMjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTIzLDI0ICsyMywyNiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oIgorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oIgogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1ND
Uk9MTElORykKIAotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hl
ZWxFdmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAi
U2Nyb2xsaW5nVHJlZS5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgotI2luY2x1
ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJX
ZWJUaWxlTGF5ZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQg
Ik5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIK
KyNpbXBvcnQgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW1wb3J0ICJTY3JvbGxpbmdUcmVl
LmgiCisjaW1wb3J0ICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbXBvcnQgIlNldHRpbmdzLmgi
CisjaW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViVGlsZUxheWVyLmgiCisK
KyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8d3RmL0N1cnJlbnRU
aW1lLmg+CisjaW1wb3J0IDx3dGYvRGVxdWUuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01Niw2ICs1OCw4IEBAIFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGU+IFMKIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZU1hYyhTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2Rl
SUQgbm9kZUlEKQogICAgIDogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUoc2Nyb2xsaW5nVHJl
ZSwgbm9kZUlEKQogICAgICwgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcih0aGlzKQorICAg
ICwgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIoMCkKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9s
bGJhclBhaW50ZXIoMCkKICAgICAsIG1fbGFzdFNjcm9sbEhhZFVuZmlsbGVkUGl4ZWxzKGZhbHNl
KQogewogfQpAQCAtODMsNiArODcsMTEgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZU1hYzo6dXBkYQogICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OkZvb3RlckxheWVyKSkKICAgICAgICAgbV9m
b290ZXJMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS0+Zm9vdGVyUGxhdGZvcm1MYXllcigpOwog
CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS0+aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6UGFpbnRlckZvclNjcm9sbGJhcikpIHsKKyAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUtPnZlcnRpY2FsU2Ny
b2xsYmFyUGFpbnRlcigpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyID0g
c2Nyb2xsaW5nU3RhdGVOb2RlLT5ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlcigpOworICAgIH0K
KwogICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1h
aW5UaHJlYWQpKSB7CiAgICAgICAgIHVuc2lnbmVkIG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25z
ID0gdGhpcy0+c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwog
CkBAIC0zMjMsMTAgKzMzMiwzNSBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFj
OjpzZXRTCiAgICAgaWYgKG1fZm9vdGVyTGF5ZXIpCiAgICAgICAgIG1fZm9vdGVyTGF5ZXIuZ2V0
KCkucG9zaXRpb24gPSBGbG9hdFBvaW50KGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIs
IHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBmb290ZXJIZWlnaHQoKSk7CiAKKyAgICBJ
bnRSZWN0IHZpZXdwb3J0UmVjdCA9IHRoaXMtPnZpZXdwb3J0UmVjdCgpOworCisgICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXJQYWludGVyKSB7CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2lu
XTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gbG9ja107CisgICAgICAgIFttX3ZlcnRpY2FsU2Ny
b2xsYmFyUGFpbnRlciBzZXRVc2VQcmVzZW50YXRpb25WYWx1ZTpZRVNdOworICAgICAgICBmbG9h
dCBwcmVzZW50YXRpb25WYWx1ZTsKKyAgICAgICAgZmxvYXQgb3ZlcmhhbmdBbW91bnQ7CisgICAg
ICAgIFNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsYmFyVmFsdWVBbmRPdmVyaGFuZyhwb3Np
dGlvbi55KCksIHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCksIHZpZXdwb3J0UmVjdC5oZWln
aHQoKSwgcHJlc2VudGF0aW9uVmFsdWUsIG92ZXJoYW5nQW1vdW50KTsKKyAgICAgICAgW21fdmVy
dGljYWxTY3JvbGxiYXJQYWludGVyIHNldFByZXNlbnRhdGlvblZhbHVlOnByZXNlbnRhdGlvblZh
bHVlXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gdW5sb2NrXTsKKyAgICAgICAgW0NBVHJhbnNh
Y3Rpb24gY29tbWl0XTsKKyAgICB9CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFp
bnRlcikgeworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgIFtDQVRyYW5z
YWN0aW9uIGxvY2tdOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlciBzZXRV
c2VQcmVzZW50YXRpb25WYWx1ZTpZRVNdOworICAgICAgICBmbG9hdCBwcmVzZW50YXRpb25WYWx1
ZTsKKyAgICAgICAgZmxvYXQgb3ZlcmhhbmdBbW91bnQ7CisgICAgICAgIFNjcm9sbGFibGVBcmVh
Ojpjb21wdXRlU2Nyb2xsYmFyVmFsdWVBbmRPdmVyaGFuZyhwb3NpdGlvbi54KCksIHRvdGFsQ29u
dGVudHNTaXplKCkud2lkdGgoKSwgdmlld3BvcnRSZWN0LndpZHRoKCksIHByZXNlbnRhdGlvblZh
bHVlLCBvdmVyaGFuZ0Ftb3VudCk7CisgICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJQYWlu
dGVyIHNldFByZXNlbnRhdGlvblZhbHVlOnByZXNlbnRhdGlvblZhbHVlXTsKKyAgICAgICAgW0NB
VHJhbnNhY3Rpb24gdW5sb2NrXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAg
ICB9CisKICAgICBpZiAoIW1fY2hpbGRyZW4pCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJl
Y3Qgdmlld3BvcnRSZWN0ID0gdGhpcy0+dmlld3BvcnRSZWN0KCk7CiAgICAgdmlld3BvcnRSZWN0
LnNldExvY2F0aW9uKEludFBvaW50KHNjcm9sbE9mZnNldEZvckZpeGVkQ2hpbGRyZW4pKTsKIAog
ICAgIHNpemVfdCBzaXplID0gbV9jaGlsZHJlbi0+c2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAxNTcxMjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2
ICs5Miw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9s
bGJhcihTY3JvbGxiYXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZUhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSB7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRT
Y3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqKSB7IHJldHVybiB0cnVl
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBG
bG9hdFNpemUmIGRlbHRhKSB7IFVOVVNFRF9QQVJBTShkZWx0YSk7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDE1NzEyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQ0LDYgKzM0NCwxOCBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Ny
b2xsQ29yCiAgICAgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QocmVjdCk7CiB9CiAKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2b2lkIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKK3sKKyAgICBzY3JvbGxBbmltYXRvcigpLT52ZXJ0
aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6
Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCit7CisgICAgc2Nyb2xsQW5pbWF0
b3IoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7Cit9CisjZW5kaWYKKwog
Ym9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29u
c3QKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC00NTAsNCArNDYyLDI3
IEBAIEludFBvaW50IFNjcm9sbGFibGVBcmVhOjpjb25zdHJhaW5TY3JvbGwKICAgICByZXR1cm4g
Y29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JPdmVyaGFuZyh2aXNpYmxlQ29udGVudFJlY3QoKSwg
dG90YWxDb250ZW50c1NpemUoKSwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbigpLCBoZWFk
ZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkpOwogfQogCit2b2lkIFNjcm9sbGFibGVBcmVhOjpj
b21wdXRlU2Nyb2xsYmFyVmFsdWVBbmRPdmVyaGFuZyhmbG9hdCBjdXJyZW50UG9zaXRpb24sIGZs
b2F0IHRvdGFsU2l6ZSwgZmxvYXQgdmlzaWJsZVNpemUsIGZsb2F0JiBkb3VibGVWYWx1ZSwgZmxv
YXQmIG92ZXJoYW5nQW1vdW50KQoreworICAgIGRvdWJsZVZhbHVlID0gMDsKKyAgICBvdmVyaGFu
Z0Ftb3VudCA9IDA7CisgICAgZmxvYXQgbWF4aW11bSA9IHRvdGFsU2l6ZSAtIHZpc2libGVTaXpl
OworCisgICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA8IDApIHsKKyAgICAgICAgLy8gU2Nyb2xsZWQg
cGFzdCB0aGUgdG9wLgorICAgICAgICBkb3VibGVWYWx1ZSA9IDA7CisgICAgICAgIG92ZXJoYW5n
QW1vdW50ID0gLWN1cnJlbnRQb3NpdGlvbjsKKyAgICB9IGVsc2UgaWYgKHZpc2libGVTaXplICsg
Y3VycmVudFBvc2l0aW9uID4gdG90YWxTaXplKSB7CisgICAgICAgIC8vIFNjcm9sbGVkIHBhc3Qg
dGhlIGJvdHRvbS4KKyAgICAgICAgZG91YmxlVmFsdWUgPSAxOworICAgICAgICBvdmVyaGFuZ0Ft
b3VudCA9IGN1cnJlbnRQb3NpdGlvbiArIHZpc2libGVTaXplIC0gdG90YWxTaXplOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIFdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBzY3JvbGxhYmxlIGFy
ZWEuCisgICAgICAgIGlmIChtYXhpbXVtID4gMCkKKyAgICAgICAgICAgIGRvdWJsZVZhbHVlID0g
Y3VycmVudFBvc2l0aW9uIC8gbWF4aW11bTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG91
YmxlVmFsdWUgPSAwOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiAxNTcxMjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTAsNiArMTEwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UmVjdCBzY3Jv
bGxDb3JuZXJSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsQ29ybmVyKGNvbnN0IEludFJlY3QmKTsKIAorICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVzU2Ny
b2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpIGNvbnN0ID0gMDsKKwogICAgIC8vIENvbnZl
cnQgcG9pbnRzIGFuZCByZWN0cyBiZXR3ZWVuIHRoZSBzY3JvbGxiYXIgYW5kIGl0cyBjb250YWlu
aW5nIHZpZXcuCiAgICAgLy8gVGhlIGNsaWVudCBuZWVkcyB0byBpbXBsZW1lbnQgdGhlc2UgaW4g
b3JkZXIgdG8gYmUgYXdhcmUgb2YgbGF5b3V0IGVmZmVjdHMKICAgICAvLyBsaWtlIENTUyB0cmFu
c2Zvcm1zLgpAQCAtMTcyLDYgKzE3NCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEludFBvaW50
IGNvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yT3ZlcmhhbmcoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZUNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0b3RhbENvbnRlbnRzU2l6ZSwgY29uc3QgSW50
UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luLCBpbnQg
aGVhZGVySGVpZ2h0LCBpbnQgZm9vdGV0SGVpZ2h0KTsKICAgICBJbnRQb2ludCBjb25zdHJhaW5T
Y3JvbGxQb3NpdGlvbkZvck92ZXJoYW5nKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7
CiAKKyAgICAvLyBDb21wdXRlcyB0aGUgc28tY2FsbGVkIGRvdWJsZSB2YWx1ZSBmb3IgdGhlIHNj
cm9sbGJhcidzIGN1cnJlbnQgcG9zaXRpb24gYW5kIHRoZSBjdXJyZW50IG92ZXJoYW5nIGFtb3Vu
dC4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHN0YXRpYyBzbyB0aGF0IGl0IGNhbiBiZSBjYWxs
ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQgb3IgdGhlIHNjcm9sbGluZyB0aHJlYWQuCisgICAgc3Rh
dGljIHZvaWQgY29tcHV0ZVNjcm9sbGJhclZhbHVlQW5kT3ZlcmhhbmcoZmxvYXQgY3VycmVudFBv
c2l0aW9uLCBmbG9hdCB0b3RhbFNpemUsIGZsb2F0IHZpc2libGVTaXplLCBmbG9hdCYgZG91Ymxl
VmFsdWUsIGZsb2F0JiBvdmVyaGFuZ0Ftb3VudCk7CisKICAgICAvLyBMZXQgc3ViY2xhc3NlcyBw
cm92aWRlIGEgd2F5IG9mIGFza2luZyBmb3IgYW5kIHNlcnZpY2luZyBzY3JvbGwKICAgICAvLyBh
bmltYXRpb25zLgogICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZUFuaW1hdGlvbigpIHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC0xODAsNiArMTg2LDEyIEBAIHB1YmxpYzoKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygp
IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorCisgICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7
CisgICAgdm9pZCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKICNlbmRpZgog
CiBwcm90ZWN0ZWQ6CkBAIC0xOTUsOCArMjA3LDYgQEAgcHJvdGVjdGVkOgogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICBmcmllbmQgY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I7CiAgICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbGluZygpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIEdyYXBoaWNz
TGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAg
ICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgdmlydHVhbCBHcmFw
aGljc0xheWVyKiBsYXllckZvck92ZXJoYW5nQXJlYXMoKSBjb25zdCB7IHJldHVybiAwOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDE1NzEyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4OSw0ICs1ODksMTUgQEAgSW50UG9pbnQgU2Nyb2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRh
aW5pbgogICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50
UG9pbnQpOwogfQogCitib29sIFNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRo
cmVhZCgpIGNvbnN0Cit7CisgICAgLy8gSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHRoaXMgbmVlZHMg
dG8gYmUgZG9uZSB3aXRoIGFuIGlmZGVmLiBJZGVhbGx5IHRoZXJlIHdvdWxkIGJlIGFibGUgdG8g
ZmVhdHVyZS1kZXRlY3QKKyAgICAvLyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQgd2l0aGluIEFwcEtp
dC4KKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTAwMCAmJiBFTkFC
TEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhID8gIW1f
c2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZXNTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCkg
OiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCShyZXZp
c2lvbiAxNTcxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
aXNBbHBoYUxvY2tlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNBbHBoYUxvY2tlZDsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FscGhhTG9ja2VkKGJvb2wgZmxhZykgT1ZFUlJJREUg
eyBtX2lzQWxwaGFMb2NrZWQgPSBmbGFnOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNV
cGRhdGVPblNlY29uZGFyeVRocmVhZCgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xs
YmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRy
b2xTaXplLCBTY3JvbGxiYXJUaGVtZSogPSAwKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyVGhlbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNsaWVudC5oCShyZXZpc2lvbiAxNTcxMjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBbHBoYUxv
Y2tlZCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbHBoYUxvY2tlZChib29s
KSA9IDA7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVh
ZCgpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1l
Q2xpZW50KCkgeyB9CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Ny
b2xsZXJJbXBEZXRhaWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgJKHJldmlzaW9uIDE1NzEyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw4IEBAIEBpbnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbGJhclBhaW50ZXIp
CiAtICh2b2lkKXNldEVuYWJsZWQ6KEJPT0wpZW5hYmxlZDsKIC0gKHZvaWQpc2V0Qm91bmRzU2l6
ZTooTlNTaXplKWJvdW5kc1NpemU7CiAtICh2b2lkKXNldERvdWJsZVZhbHVlOihkb3VibGUpZG91
YmxlVmFsdWU7CistICh2b2lkKXNldFByZXNlbnRhdGlvblZhbHVlOihkb3VibGUpcHJlc2VudGF0
aW9uVmFsdWU7CistICh2b2lkKXNldFVzZVByZXNlbnRhdGlvblZhbHVlOihCT09MKXVzZVByZXNl
bnRhdGlvblZhbHVlOwogLSAodm9pZClzZXRLbm9iUHJvcG9ydGlvbjooQ0dGbG9hdClwcm9wb3J0
aW9uOwogLSAodm9pZClzZXRLbm9iU3R5bGU6KE5TU2Nyb2xsZXJLbm9iU3R5bGUpa25vYlN0eWxl
OwogLSAodm9pZClzZXRFeHBhbmRlZDooQk9PTClleHBhbmRlZDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCShyZXZpc2lvbiAxNTcx
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2
b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwogCisgICAgdmly
dHVhbCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7CisKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9h
dFNpemUmIGRlbHRhKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHJldmlzaW9uIDE1NzEyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRl
ICJOU1Njcm9sbGVySW1wRGV0YWlscy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCkBAIC00MzgsOSArNDM5LDE0IEBA
IC0gKENBTGF5ZXIgKilsYXllcgogICAgIGlmICghU2Nyb2xsYmFyVGhlbWVNYWM6OmlzQ3VycmVu
dGx5RHJhd2luZ0ludG9MYXllcigpKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGF0dGVtcHQgdG8gcmV0dXJuIGFuIGFjdHVhbCBsYXllci4KKyAgICBH
cmFwaGljc0xheWVyKiBsYXllcjsKKyAgICBpZiAoX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxh
YmxlQXJlYSgpLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgZWxzZQorICAgICAg
ICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpOworCiAgICAgc3RhdGljIENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5
ZXIgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBkdW1teUxheWVyOworICAgIHJldHVybiBsYXll
ciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBkdW1teUxheWVyOwogfQogCiAtIChOU1BvaW50
KW1vdXNlTG9jYXRpb25JblNjcm9sbGVyRm9yU2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wCkBA
IC00NTMsOSArNDU5LDI0IEBAIC0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JT
Y3IKICAgICByZXR1cm4gX3Njcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhfc2Ny
b2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkpOwogfQog
CistIChOU1JlY3QpY29udmVydFJlY3RUb0xheWVyOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1
cm4gYVJlY3Q7Cit9CisKKy0gKEJPT0wpc2hvdWxkVXNlTGF5ZXJQZXJQYXJ0Rm9yU2Nyb2xsZXJJ
bXA6KGlkKXNjcm9sbGVySW1wCit7CisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGVySW1wLCBzY3JvbGxlckltcCA9
PSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKF9zY3JvbGxiYXIpKTsKKworICAgIHJldHVy
biBfc2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCk7Cit9CisKIC0g
KHZvaWQpc2V0VXBBbHBoYUFuaW1hdGlvbjooUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmlt
YXRpb24+JilzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjooU2Nyb2xsYmFy
UGFpbnRlcilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0
IGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZh
bClkdXJhdGlvbgogewotICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB0aGUgcGFnZSwg
dGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJlIGFuaW1hdGVkIGhlcmUuIAorICAgIC8vIElmIHRo
ZSB1c2VyIGhhcyBzY3JvbGxlZCB0aGUgcGFnZSwgdGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJl
IGFuaW1hdGVkIGhlcmUuCiAgICAgLy8gVGhpcyBvdmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMu
CiAgICAgYm9vbCBtdXN0QW5pbWF0ZSA9IFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+aGF2ZVNjcm9s
bGVkU2luY2VQYWdlTG9hZCgpOwogCkBAIC00NzYsNiArNDk3LDkgQEAgLSAodm9pZClzZXRVcEFs
cGhhQW5pbWF0aW9uOihSZXRhaW5QdHI8VwogICAgICAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
ID0gbmlsOwogICAgIH0KIAorICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogbWFjVGhlbWUgPSBt
YWNTY3JvbGxiYXJUaGVtZSgpKQorICAgICAgICBtYWNUaGVtZS0+c2V0Q3VycmVudFBhaW50Q2hh
cmFjdGVyaXN0aWNzKF9zY3JvbGxiYXIpOworCiAgICAgaWYgKHBhcnQgPT0gV2ViQ29yZTo6VGh1
bWJQYXJ0ICYmIF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIp
IHsKICAgICAgICAgaWYgKG5ld0FscGhhID09IDEpIHsKICAgICAgICAgICAgIEludFJlY3QgdGh1
bWJSZWN0ID0gSW50UmVjdChbc2Nyb2xsZXJQYWludGVyIHJlY3RGb3JQYXJ0Ok5TU2Nyb2xsZXJL
bm9iXSk7CkBAIC00ODQsNyArNTA4LDcgQEAgLSAodm9pZClzZXRVcEFscGhhQW5pbWF0aW9uOihS
ZXRhaW5QdHI8VwogICAgICAgICAgICAgW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5zZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QoSW50UmVjdCgpKTsKICAgICB9CiAKLSAgICBzY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGlu
aXRXaXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIgCisgICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9
IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9s
bGJhcjpfc2Nyb2xsYmFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6cGFydCA9PSBU
aHVtYlBhcnQgPyBUaHVtYkFscGhhIDogVHJhY2tBbHBoYQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFu
aW1hdGVGcm9tOnBhcnQgPT0gVGh1bWJQYXJ0ID8gW3Njcm9sbGVyUGFpbnRlciBrbm9iQWxwaGFd
IDogW3Njcm9sbGVyUGFpbnRlciB0cmFja0FscGhhXQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5p
bWF0ZVRvOm5ld0FscGhhIApAQCAtNTA2LDYgKzUzMCw5IEBAIC0gKHZvaWQpc2Nyb2xsZXJJbXA6
KGlkKXNjcm9sbGVySW1wIGFuaW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChu
ZXdLbm9iQWxwaGEgPT0gMCkKKyAgICAgICAgW3Njcm9sbGVyUGFpbnRlciBzZXRVc2VQcmVzZW50
YXRpb25WYWx1ZTpOT107CisKICAgICBbc2VsZiBzZXRVcEFscGhhQW5pbWF0aW9uOl9rbm9iQWxw
aGFBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6
OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEgZHVyYXRpb246ZHVyYXRpb25d
OwogfQogCkBAIC01MTUsNyArNTQyLDcgQEAgLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xs
ZXJJbXAgYW5pbQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0g
c2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihfc2Nyb2xsYmFyKSk7Ci0gICAgCisKICAgICBT
Y3JvbGxiYXJQYWludGVyIHNjcm9sbGVyUGFpbnRlciA9IChTY3JvbGxiYXJQYWludGVyKXNjcm9s
bGVySW1wOwogICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X3RyYWNrQWxwaGFBbmltYXRp
b24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OkJhY2tUcmFj
a1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07CiB9
CkBAIC05MDIsNiArOTI5LDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVydGlj
YWxTYwogICAgIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgPSBhZG9wdE5TKFtb
V2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3Jv
bGxiYXJdKTsKIAogICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1fdmVydGljYWxTY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGUuZ2V0KCldOworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IHNj
cm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQor
ICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKKwogICAg
IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFp
bnRlcl07CiAgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQogICAgICAg
ICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CkBAIC05MzEsNiArOTYxLDkgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbAogICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUg
YWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwogCiAgICAgW3BhaW50ZXIgc2V0
RGVsZWdhdGU6bV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKKyAg
ICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkt
PmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBbcGFpbnRlciBzZXRMYXll
cjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKKwogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKICAgICBpZiAoc2Nyb2xs
YWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCiAgICAgICAgIFtwYWludGVyIHNldEtub2JBbHBo
YToxXTsKQEAgLTk1MCw2ICs5ODMsNDAgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJl
bW92ZUhvcml6bwogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldEhvcml6b250
YWxTY3JvbGxlckltcDpuaWxdOwogfQogCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IG1fc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBTY3Jv
bGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7
CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGJhclBh
aW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsK
KyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXllcikKKyAg
ICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKV07CisgICAgZWxz
ZQorICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpuaWxdOworfQorCit2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQoreworICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JT
Y3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChsYXllcikKKyAgICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKV07CisgICAgZWxzZQorICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpuaWxdOwor
fQorCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUlu
SGl0VGVzdGluZyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKICAgICAvLyBOb24tb3ZlcmxheSBz
Y3JvbGxiYXJzIHNob3VsZCBhbHdheXMgcGFydGljaXBhdGUgaW4gaGl0IHRlc3RpbmcuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaAko
cmV2aXNpb24gMTU3MTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJh
clRoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDggQEAgcHVibGljOgogICAg
IHZvaWQgc2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNj
cm9sbGJhclBhaW50ZXIpOwogICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlckZvclNjcm9sbGJh
cihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogCisgICAgdm9pZCBzZXRDdXJyZW50UGFpbnRDaGFy
YWN0ZXJpc3RpY3MoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKwogICAgIHN0YXRpYyBib29sIGlz
Q3VycmVudGx5RHJhd2luZ0ludG9MYXllcigpOwogICAgIHN0YXRpYyB2b2lkIHNldElzQ3VycmVu
dGx5RHJhd2luZ0ludG9MYXllcihib29sKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTU3MTI5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00NjEsMTMgKzQ2MSwyMyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1cGRh
dGVFbmFibGVkU3RhCiAgICAgW3Njcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKSBzZXRFbmFi
bGVkOnNjcm9sbGJhci0+ZW5hYmxlZCgpXTsKIH0KIAotc3RhdGljIHZvaWQgc2Nyb2xsYmFyUGFp
bnRlclBhaW50KFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciwgYm9vbCBlbmFibGVk
LCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgQ0dSZWN0IGZyYW1lUmVjdCkKK3Zv
aWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnNldEN1cnJlbnRQYWludENoYXJhY3RlcmlzdGljcyhTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewotICAgIFtzY3JvbGxiYXJQYWludGVyIHNl
dEVuYWJsZWQ6ZW5hYmxlZF07Ci0gICAgW3Njcm9sbGJhclBhaW50ZXIgc2V0Qm91bmRzU2l6ZTog
TlNTaXplRnJvbUNHU2l6ZShmcmFtZVJlY3Quc2l6ZSldOwotICAgIFtzY3JvbGxiYXJQYWludGVy
IHNldERvdWJsZVZhbHVlOnZhbHVlXTsKLSAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRLbm9iUHJv
cG9ydGlvbjpwcm9wb3J0aW9uXTsKKyAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBwYWlu
dGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAKKyAgICBmbG9hdCB2YWx1ZTsKKyAgICBmbG9h
dCBvdmVyaGFuZzsKKyAgICBTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNjcm9sbGJhclZhbHVlQW5k
T3Zlcmhhbmcoc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCksIHNjcm9sbGJhci0+dG90YWxTaXplKCks
IHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSwgdmFsdWUsIG92ZXJoYW5nKTsKKyAgICBmbG9hdCBw
cm9wb3J0aW9uID0gKHN0YXRpY19jYXN0PENHRmxvYXQ+KHNjcm9sbGJhci0+dmlzaWJsZVNpemUo
KSkgLSBvdmVyaGFuZykgLyBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOworCisgICAgW3BhaW50ZXIg
c2V0RW5hYmxlZDpzY3JvbGxiYXItPmVuYWJsZWQoKV07CisgICAgW3BhaW50ZXIgc2V0Qm91bmRz
U2l6ZTpzY3JvbGxiYXItPmZyYW1lUmVjdCgpLnNpemUoKV07CisgICAgW3BhaW50ZXIgc2V0RG91
YmxlVmFsdWU6dmFsdWVdOworICAgIFtwYWludGVyIHNldEtub2JQcm9wb3J0aW9uOnByb3BvcnRp
b25dOworfQorCitzdGF0aWMgdm9pZCBzY3JvbGxiYXJQYWludGVyUGFpbnQoU2Nyb2xsYmFyUGFp
bnRlciBzY3JvbGxiYXJQYWludGVyLCBib29sIGVuYWJsZWQpCit7CiAgICAgLy8gVXNlIHJlY3RG
b3JQYXJ0OiBoZXJlOyBpdCB3aWxsIHRha2UgdGhlIGV4cGFuc2lvbiB0cmFuc2l0aW9uIHByb2dy
ZXNzIGludG8gYWNjb3VudC4KICAgICBOU1JlY3QgdHJhY2tSZWN0ID0gW3Njcm9sbGJhclBhaW50
ZXIgcmVjdEZvclBhcnQ6TlNTY3JvbGxlcktub2JTbG90XTsKICAgICBbc2Nyb2xsYmFyUGFpbnRl
ciBkcmF3S25vYlNsb3RJblJlY3Q6dHJhY2tSZWN0IGhpZ2hsaWdodDpOT107CkBAIC00ODAsMzcg
KzQ5MCwxOCBAQCBzdGF0aWMgdm9pZCBzY3JvbGxiYXJQYWludGVyUGFpbnQoU2Nyb2xsCiAKIGJv
b2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxi
YXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkK
IHsKLSAgICBmbG9hdCB2YWx1ZSA9IDA7Ci0gICAgZmxvYXQgb3ZlcmhhbmcgPSAwOworICAgIHNl
dEN1cnJlbnRQYWludENoYXJhY3RlcmlzdGljcyhzY3JvbGxiYXIpOwogCi0gICAgaWYgKHNjcm9s
bGJhci0+Y3VycmVudFBvcygpIDwgMCkgewotICAgICAgICAvLyBTY3JvbGxlZCBwYXN0IHRoZSB0
b3AuCi0gICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgb3ZlcmhhbmcgPSAtc2Nyb2xsYmFyLT5j
dXJyZW50UG9zKCk7Ci0gICAgfSBlbHNlIGlmIChzY3JvbGxiYXItPnZpc2libGVTaXplKCkgKyBz
Y3JvbGxiYXItPmN1cnJlbnRQb3MoKSA+IHNjcm9sbGJhci0+dG90YWxTaXplKCkpIHsKLSAgICAg
ICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgYm90dG9tLgotICAgICAgICB2YWx1ZSA9IDE7Ci0gICAg
ICAgIG92ZXJoYW5nID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgKyBzY3JvbGxiYXItPnZpc2li
bGVTaXplKCkgLSBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIFdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBzY3JvbGxhYmxlIGFyZWEuCi0gICAgICAgIGlu
dCBtYXhpbXVtID0gc2Nyb2xsYmFyLT5tYXhpbXVtKCk7Ci0gICAgICAgIGlmIChtYXhpbXVtID4g
MCkKLSAgICAgICAgICAgIHZhbHVlID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgLyBtYXhpbXVt
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgaWYgKCFzY3JvbGxi
YXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkgeworICAgICAgICBUZW1wb3Jh
cnlDaGFuZ2U8Ym9vbD4gaXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyKGdfaXNDdXJyZW50bHlE
cmF3aW5nSW50b0xheWVyLCBjb250ZXh0LT5pc0NBTGF5ZXJDb250ZXh0KCkpOworICAgIAorICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOworICAg
ICAgICBjb250ZXh0LT5jbGlwKGRhbWFnZVJlY3QpOworICAgICAgICBjb250ZXh0LT50cmFuc2xh
dGUoc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCksIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgp
KTsKKyAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250
ZXh0KTsKKyAgICAgICAgc2Nyb2xsYmFyUGFpbnRlclBhaW50KHNjcm9sbGJhck1hcCgpLT5nZXQo
c2Nyb2xsYmFyKS5nZXQoKSwgc2Nyb2xsYmFyLT5lbmFibGVkKCkpOwogICAgIH0KIAotICAgIFRl
bXBvcmFyeUNoYW5nZTxib29sPiBpc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoZ19pc0N1cnJl
bnRseURyYXdpbmdJbnRvTGF5ZXIsIGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7Ci0gICAg
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKLSAg
ICBjb250ZXh0LT5jbGlwKGRhbWFnZVJlY3QpOwotICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkpOwotICAg
IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7Ci0gICAg
c2Nyb2xsYmFyUGFpbnRlclBhaW50KHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAtIG92
ZXJoYW5nKSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTU3
MTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQwMCw2ICsxNDAwLDE2IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9s
bGFibGVBcmVhQm91bmQKICAgICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCgpOwogfQogCitib29sIFJlbmRlckxheWVyOjp1cGRhdGVzU2Nyb2xsTGF5ZXJQb3NpdGlv
bk9uTWFpblRocmVhZCgpIGNvbnN0Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSByZW5kZXJlcigp
LmZyYW1lKCkucGFnZSgpKSB7CisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Ny
b2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAg
ICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zaG91bGRVcGRhdGVTY3JvbGxMYXll
clBvc2l0aW9uT25NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3Rvcigp
IGNvbnN0CiB7CiAgICAgUmVuZGVyTGF5ZXIqIGN1cnIgPSBwYXJlbnQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiAxNTcxMjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTAy
OSw2ICsxMDI5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNIYW5kbGluZ1doZWVs
RXZlbnQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEludFJlY3Qgc2Ny
b2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVzU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpIGNvbnN0IE9WRVJSSURF
OwogCiAgICAgLy8gUmVjdGFuZ2xlIGVuY29tcGFzc2luZyB0aGUgc2Nyb2xsIGNvcm5lciBhbmQg
cmVzaXplciByZWN0LgogICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyQW5kUmVzaXplclJlY3QoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxNTcxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5Mywx
MCArMjY5MywxMyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlT3ZlcmZsCiAg
ICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzKTsKICAgICAgICAgICAgIG1fbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTaG93RGVidWdCb3JkZXIobV9zaG93RGVidWdC
b3JkZXJzKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhci0+c2V0TmFtZSgiaG9yaXpvbnRhbCBzY3JvbGxiYXIiKTsKKyAgICAgICAgICAg
IG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLT5zZXROYW1lKCJob3Jpem9udGFsIHNjcm9s
bGJhciBjb250YWluZXIiKTsKKwogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0Ep
CiAgICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0QWNjZWxlcmF0
ZXNEcmF3aW5nKGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7CisgICAgICAgICAgICBtX2xh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICAg
ICAgICAgIG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50M0QoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIG1fb3ZlcmZsb3dDb250cm9sc0hvc3RM
YXllci0+YWRkQ2hpbGQobV9sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIuZ2V0KCkpOwogCkBA
IC0yNzE2LDEwICsyNzE5LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVP
dmVyZmwKICAgICAgICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzKTsKICAgICAgICAgICAg
IG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+c2V0U2hvd0RlYnVnQm9yZGVyKG1fc2hvd0Rl
YnVnQm9yZGVycyk7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgbV9sYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXROYW1lKCJ2ZXJ0aWNhbCBzY3JvbGxiYXIiKTsKKyAgICAgICAgICAg
IG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+c2V0TmFtZSgidmVydGljYWwgc2Nyb2xsYmFy
IGNvbnRhaW5lciIpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCiAgICAg
ICAgICAgICBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXItPnNldEFjY2VsZXJhdGVzRHJhd2lu
ZyhhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOworICAgICAgICAgICAgbV9sYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgICAgICAgICAgbV9s
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7
CiAjZW5kaWYKICAgICAgICAgICAgIG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllci0+YWRkQ2hp
bGQobV9sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiAxNTcxMjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjMsNiArMTIzLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEludFBvaW50IGxhc3RLbm93bk1v
dXNlUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNIYW5kbGlu
Z1doZWVsRXZlbnQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3Vz
cGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgSW50UmVjdCBzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNTcyMDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0xMC0wOSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgU2Nyb2xsYmFycyBhcmUgdXBkYXRlZCBvbiB0aGUgbWFpbiB0aHJl
YWQgcmF0aGVyIHRoYW4gdGhlIHNjcm9sbGluZyB0aHJlYWQgCisgICAgICAgIChjYXVzaW5nIHNj
cm9sbCBiYXJzIG5vdCB0byBhcHBlYXIvdXBkYXRlIHF1aWNrbHkgaW4gc29tZSBjYXNlcykKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjU4NQorICAg
ICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDcxMDc3
NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcg
cHVyZSB2aXJ0dWFsIGZ1bmN0aW9uLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLmg6CisKIDIwMTMtMTAtMDkgIFNlcmdpbyBDb3JyZWlhICA8c2VyZ2lvLmNvcnJl
aWFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBTZXQgdmlldyB0byBhY3RpdmUgaW4gVmlld0Ns
aWVudEVmbCBhZnRlciBXZWJQcm9jZXNzIGhhcyByZWxhdW5jaGVkCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgJKHJldmlzaW9u
IDE1NzEyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFy
ZW50UmVjdCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBj
b252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgV2ViQ29yZTo6U2Nyb2xs
YmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVzU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIFBERlBsdWdpbiBmdW5jdGlvbnMuCiAgICAgdm9p
ZCB1cGRhdGVTY3JvbGxiYXJzKCk7Cg==
</data>
<flag name="commit-queue"
          id="236277"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213909</attachid>
            <date>2013-10-10 11:53:46 -0700</date>
            <delta_ts>2013-10-10 14:14:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>47864</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzIzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAxMy0xMC0xMCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2Nyb2xsYmFycyBhcmUgdXBkYXRl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQgcmF0aGVyIHRoYW4gdGhlIHNjcm9sbGluZyB0aHJlYWQgCisg
ICAgICAgIChjYXVzaW5nIHNjcm9sbCBiYXJzIG5vdCB0byBhcHBlYXIvdXBkYXRlIHF1aWNrbHkg
aW4gc29tZSBjYXNlcykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMjU4NQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8xMDcxMDc3NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgYSBmZXcgdGhpbmdzIGluIG9yZGVyIHRvIGFs
bG93IHNjcm9sbGJhcnMgdG8gYmUgdXBkYXRlZCBvbiB0aGUgCisgICAgICAgIHNjcm9sbGluZyB0
aHJlYWQ6CisgICAgICAgIDEuIFRoaXMgcGF0Y2ggYWRkcyB0aGUgYWJpbGl0eSB0byBrbm93IGlm
IHRoZSBsb3dlci1sZXZlbCBBUElzIG5lY2Vzc2FyeSB0byBnZXQgCisgICAgICAgIHRoaXMgdG8g
d29yayByaWdodCBhcmUgYXZhaWxhYmxlLCBBTkQgaWYgdGhlIGNvbnRlbnQgaXMgYWN0dWFsbHkg
Y2FwYWJsZSBvZiB0YWtpbmcgCisgICAgICAgIGFkdmFudGFnZSBvZiB0aGlzIGZlYXR1cmUuIFRo
aXMgaXMgY3VycmVudGx5IGltcGxlbWVudGVkIGFzIAorICAgICAgICBTY3JvbGxiYXI6OnN1cHBv
cnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSB3aGljaCBtYWtlcyB1c2VkIG9mIGEgbmV3IAor
ICAgICAgICBTY3JvbGxsYWJsZUFyZWEgZnVuY3Rpb24gY2FsbGVkIHVwZGF0ZXNTY3JvbGxMYXll
clBvc2l0aW9uT25NYWluVGhyZWFkKCkKKyAgICAgICAgCisgICAgICAgIDIuIFRvIHVwZGF0ZSBv
biB0aGUgc2Nyb2xsaW5nIHRocmVhZCwgdGhlIHNjcm9sbGluZyB0cmVlIG5lZWRzIHRvIGtub3cg
YWJvdXQgdGhlIAorICAgICAgICBTY3JvbGxiYXJQYWludGVycy4KKyAgICAgICAgCisgICAgICAg
IDMuIE9uY2UgaXQga25vd3MgYWJvdXQgdGhlbSwgaXQgc2hvdWxkIHVwZGF0ZSB0aGUgcHJlc2Vu
dGF0aW9uIHZhbHVlIHdoZW5ldmVyIHRoZSAKKyAgICAgICAgbGF5ZXIgcG9zaXRpb24gY2hhbmdl
cy4KKyAgICAgICAgCisgICAgICAgIDQuIFByZXNlbnRhdGlvbiB2YWx1ZSBpcyBiYXNpY2FsbHkg
dGhlIHNhbWUgdGhpbmcgYXMgZG91YmxlIHZhbHVlLiBUaGVyZSBpcyBhIGJpdCAKKyAgICAgICAg
b2YgY29kZSB3ZSBtYWludGFpbiBjdXJyZW50bHkgdG8gY29tcHV0ZSB0aGF0LiBUaGlzIHBhdGNo
IG1vdmVzIHRoYXQgY29kZSB0byBhIAorICAgICAgICBzdGF0aWMgZnVuY3Rpb24gb24gU2Nyb2xs
YWJsZUFyZWEgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB0aGUgbWFpbiB0aHJlYWQgYW5k
IAorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgCisgICAgICAgIDUuIFNj
cm9sbGJhclBhaW50ZXIgQVBJIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIGxheWVycyB3ZSBoYXZl
IGNyZWF0ZWQgZm9yIHRoZSAKKyAgICAgICAgdmVydGljYWwgYW5kIGhvcml6b250YWwgc2Nyb2xs
YmFycywgdGhlbiB0aGV5IHdpbGwgdXNlIHRob3NlIGxheWVycyBhbmQgdGhlIAorICAgICAgICBw
cmVzZW50YXRpb24gdmFsdWUgdGhhdCB3ZSBzZXQgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQgdG8g
bW92ZSB0aGUgbGF5ZXJzIGFyb3VuZC4KKworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgIzEgYWJv
dmUuIAorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6dXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAg
ICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mICMyLiBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVzIG5vdyBoYXZlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFs
IAorICAgICAgICBTY3JvbGxiYXJQYWludGVycyBmb3IgTWFjIG9ubHkuCisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
dmVydGljYWxTY3JvbGxiYXJQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6aG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIpOgorCisgICAgICAg
IEFsc28gcGFydCBvZiAjMi4gTWFrZSBzdXJlIHRvIHNldCB0aGUgU2Nyb2xsYmFyUGFpbnRlcnMg
Zm9yIHNjcm9sbGluZyBub2RlcyB3aGVuIAorICAgICAgICBhcHByb3ByaWF0ZS4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaDoKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRl
ZCk6CisKKyAgICAgICAgSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdGhhdCB3YXMganVzdCBzdHVi
YmVkIG91dCBiZWZvcmUuIFRoaXMgaXMgcGFydCBvZiAjNSBpbiAKKyAgICAgICAgdGhhdCBpcyB3
aWxsIGFsbG93IHRoZSBTY3JvbGxiYXJQYWludGVyIEFQSSB0byBrbm93IGFib3V0IGFueSBsYXll
ciBjaGFuZ2VzLiAKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKworICAgICAgICBCYWNrIHRv
ICMyLCBtYWtpbmcgc3VyZSB3ZSBwcm9wZXJseSBzZXQgdGhlIFNjcm9sbGJhclBhaW50ZXJzIHRv
IHNlbmQgb3ZlciB0byB0aGUgCisgICAgICAgIHNjcm9sbGluZyB0aHJlYWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2Nyb2xsYmFyUGFpbnRlcnNGb3JO
b2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpzZXRTY3JvbGxiYXJQYWludGVycyk6CisKKyAgICAgICAgVGhpcyBjb2RlIGFjaGlldmVz
ICMzLiBJdCB1c2VzIG5ldyBTY3JvbGxiYXJQYWludGVyIEFQSSB0byBhZGp1c3QgdGhlIHBvc2l0
aW9uIG9mIAorICAgICAgICB0aGUgc2Nyb2xsYmFycyBmcm9tIHRoZSBzY3JvbGxpbmcgdGhyZWFk
LgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZU1hYy5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYyk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNldFNjcm9s
bExheWVyUG9zaXRpb24pOgorCisgICAgICAgIFRoaXMgaXMgZm9yICM1LiBTY3JvbGxiYXJQYWlu
dGVyIG5lZWRzIHRvIGtub3cgYWJvdXQgb3VyIHNjcm9sbGJhciBsYXllcnMuCisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFu
Z2UpOgorCisgICAgICAgIFRoaXMgaXMgZm9yICM0LiBUaGlzIGNvZGUgY29tcHV0ZXMgdGhlIHNj
cm9sbGJhcuKAmXMgdmFsdWUgYW5kIGN1cnJlbnQgb3ZlcmhhbmcgCisgICAgICAgIGFtb3VudC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsYmFyVmFsdWVB
bmRPdmVyaGFuZyk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yU2Nyb2xs
aW5nKToKKworICAgICAgICBUaGlzIGlzIGZvciAjMS4gV2UgbmVlZCB0byBrbm93IGlmIHdlIGhh
dmUgdGhlIGFiaWxpdHkgdG8gdXBkYXRlIHNjcm9sbGJhcnMgb24gYSAKKyAgICAgICAgZGlmZmVy
ZW50IHRocmVhZC4gV2UgY2FuIGRvIHRoYXQgb25seSBvbiBjZXJ0YWluIHZlcnNpb25zIG9mIHRo
ZSBPUywgb25seSB3aGVuIAorICAgICAgICB0aHJlYWRlZCBzY3JvbGxpbmcgaXMgZW5hYmxlZCwg
YW5kIG9ubHkgd2hlbiB0aGUgY3VycmVudCBwYWdlIGlzIGFjdHVhbGx5IHVzaW5nIAorICAgICAg
ICB0aGUgc2Nyb2xsaW5nIHRocmVhZCB0byBzY3JvbGwuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVP
blNlY29uZGFyeVRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDbGllbnQuaDoKKworICAgICAgICBOZXcgU2Ny
b2xsYmFyUGFpbnRlciBBUElzLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1w
RGV0YWlscy5oOgorCisgICAgICAgIFRoaXMgaXMgZm9yICM1LCBsZXR0aW5nIHRoZSBTY3JvbGxi
YXJQYWludGVyIEFQSSAga25vdyBhYm91dCB0aGUgbGF5ZXJzLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGxh
eWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBjb252ZXJ0UmVj
dFRvTGF5ZXI6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzaG91
bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlckltcDpdKToKKworICAgICAgICBCZWZvcmUgd2Ug
a2ljayBvZmYgYSBzY3JvbGwgYW5pbWF0aW9uLCBzZXQgdGhlIGN1cnJlbnQgcGFpbnRpbmcgY2hh
cmFjdGVyaXN0aWNzIHNvIAorICAgICAgICB0aGV5IGFyZSB1cC10by1kYXRlIGluIGNhc2Ugd2Ug
YXJlIHNjcm9sbGluZyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIHNldFVwQWxwaGFBbmltYXRpb246c2Nyb2xsZXJQYWludGVy
OnBhcnQ6V2ViQ29yZTo6YW5pbWF0ZUFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25vYkFscGhhVG86
ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3Jv
bGxlckltcDphbmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorCisgICAgICAgIE9ubHkgcGFpbnQgdGhl
IHNjcm9sbGJhcnMgdGhyb3VnaCBTY3JvbGxiYXJUaGVtZU1hYyBpZiB0aGV5IGFyZSBOT1QgYmVp
bmcgdXBkYXRlZCAKKyAgICAgICAgYnkgdGhlIHNjcm9sbGluZyB0aHJlYWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L1Njcm9sbGJhclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVN
YWM6OnNldEN1cnJlbnRQYWludENoYXJhY3RlcmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpz
Y3JvbGxiYXJQYWludGVyUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVN
YWM6OnBhaW50KToKKworICAgICAgICBCYWNrIHRvICMxLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlc1Nj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVPdmVyZmxv
d0NvbnRyb2xzTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgor
CiAyMDEzLTEwLTEwICBCZW0gSm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgogCiAgICAg
ICAgIFtDU1MgU2hhcGVzXSBOZXcgcG9zaXRpb25pbmcgbW9kZWw6IFNoYXBlIGNyb3BwZWQgdG8g
bWFyZ2luIGJveApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTU3
MjMyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDE0LDYgKzMwMTQsMTYgQEAgYm9vbCBGcmFtZVZpZXc6OmlzQWN0aXZlKCkgY29uc3QK
ICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwog
fQogCitib29sIEZyYW1lVmlldzo6dXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQoKSBjb25zdAoreworICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdlKCkpIHsKKyAg
ICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPnNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBGcmFtZVZpZXc6OnNjcm9s
bFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCkKIHsKICAgICBMYXlvdXRTaXplIG9mZnNldCA9
IHNjcm9sbE9mZnNldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiAx
NTcyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MDEsNiArNDAxLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNBY3RpdmUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlc1Njcm9s
bExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklERTsKIAogI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKICAgICBHcmFwaGljc0xheWVyKiBzZXRXYW50c0xheWVyRm9yVG9w
T3ZlckhhbmdBcmVhKGJvb2wpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3Bw
CShyZXZpc2lvbiAxNTcyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwx
MCBAQCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0CiAgICAgLCBtX2Nv
dW50ZXJTY3JvbGxpbmdMYXllcigwKQogICAgICwgbV9oZWFkZXJMYXllcigwKQogICAgICwgbV9m
b290ZXJMYXllcigwKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAsIG1fdmVydGljYWxTY3JvbGxi
YXJQYWludGVyKDApCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyKDApCisjZW5k
aWYKICAgICAsIG1fZnJhbWVTY2FsZUZhY3RvcigxKQogICAgICwgbV93aGVlbEV2ZW50SGFuZGxl
ckNvdW50KDApCiAgICAgLCBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5U
aHJlYWQoMCkKQEAgLTYxLDYgKzY1LDEwIEBAIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
U2Nyb2xsaW5nU3QKIAogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzdGF0ZU5v
ZGUpCiAgICAgOiBTY3JvbGxpbmdTdGF0ZU5vZGUoc3RhdGVOb2RlKQorI2lmIFBMQVRGT1JNKE1B
QykKKyAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyKHN0YXRlTm9kZS52ZXJ0aWNhbFNj
cm9sbGJhclBhaW50ZXIoKSkKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIoc3Rh
dGVOb2RlLmhvcml6b250YWxTY3JvbGxiYXJQYWludGVyKCkpCisjZW5kaWYKICAgICAsIG1fdmll
d3BvcnRSZWN0KHN0YXRlTm9kZS52aWV3cG9ydFJlY3QoKSkKICAgICAsIG1fdG90YWxDb250ZW50
c1NpemUoc3RhdGVOb2RlLnRvdGFsQ29udGVudHNTaXplKCkpCiAgICAgLCBtX2ZyYW1lU2NhbGVG
YWN0b3Ioc3RhdGVOb2RlLmZyYW1lU2NhbGVGYWN0b3IoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZS5oCShyZXZpc2lvbiAxNTcyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIg
KzMxLDE3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lTWFjLmgiCisjZW5kaWYKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5o
IgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2Nyb2xsYmFyOworCiBjbGFz
cyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUgOiBwdWJsaWMgU2Nyb2xsaW5nU3RhdGVOb2Rl
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU+IGNyZWF0ZShTY3JvbGxpbmdTdGF0ZVRyZWUqLCBTY3JvbGxpbmdOb2RlSUQpOwpAQCAt
NjQsNyArNjksOCBAQCBwdWJsaWM6CiAgICAgICAgIEhlYWRlckhlaWdodCwKICAgICAgICAgRm9v
dGVySGVpZ2h0LAogICAgICAgICBIZWFkZXJMYXllciwKLSAgICAgICAgRm9vdGVyTGF5ZXIKKyAg
ICAgICAgRm9vdGVyTGF5ZXIsCisgICAgICAgIFBhaW50ZXJGb3JTY3JvbGxiYXIKICAgICB9Owog
CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsaW5nTm9kZSgpIE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KQEAgLTEzMiw2ICsxMzgsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Rm9vdGVyTGF5
ZXIoR3JhcGhpY3NMYXllciopOwogICAgIFBsYXRmb3JtTGF5ZXIqIGZvb3RlclBsYXRmb3JtTGF5
ZXIoKSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBTY3JvbGxiYXJQYWludGVyIHZl
cnRpY2FsU2Nyb2xsYmFyUGFpbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxi
YXJQYWludGVyOyB9CisgICAgU2Nyb2xsYmFyUGFpbnRlciBob3Jpem9udGFsU2Nyb2xsYmFyUGFp
bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXI7IH0KKyNl
bmRpZgorICAgIHZvaWQgc2V0U2Nyb2xsYmFyUGFpbnRlcnMoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNj
cm9sbGJhciwgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKTsKKwogICAgIGJvb2wgcmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNT
Y3JvbGw7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wUHJvcGVydGllcyhUZXh0U3RyZWFtJiwg
aW50IGluZGVudCkgY29uc3QgT1ZFUlJJREU7CkBAIC0xNDcsNiArMTU5LDggQEAgcHJpdmF0ZToK
ICAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9jb3VudGVyU2Nyb2xsaW5nUGxhdGZvcm1M
YXllcjsKICAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9oZWFkZXJQbGF0Zm9ybUxheWVy
OwogICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX2Zvb3RlclBsYXRmb3JtTGF5ZXI7Cisg
ICAgU2Nyb2xsYmFyUGFpbnRlciBtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlcjsKKyAgICBTY3Jv
bGxiYXJQYWludGVyIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXI7CiAjZW5kaWYKICAgICAK
ICAgICBJbnRSZWN0IG1fdmlld3BvcnRSZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgJ
KHJldmlzaW9uIDE1NzIzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdDb29yZGluYXRvck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2Nyb2xsYmFyOwogY2xhc3MgU2Nyb2xs
aW5nU3RhdGVOb2RlOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwogY2xhc3Mg
U2Nyb2xsaW5nU3RhdGVUcmVlOwpAQCAtMTIyLDYgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRDb3VudGVyU2Nyb2xsaW5nTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqLCBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKICAgICB2b2lkIHNldEhlYWRlckxheWVyRm9yTm9kZShH
cmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAgICAgdm9pZCBz
ZXRGb290ZXJMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciosIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSopOworICAgIHZvaWQgc2V0U2Nyb2xsYmFyUGFpbnRlcnNGb3JOb2RlKFNjcm9sbGJh
ciogdmVydGljYWxTY3JvbGxiYXIsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciwgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
Kik7CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWMubW0JKHJldmlzaW9uIDE1NzIzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMxLDEx
ICsxMzEsMTcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3TAogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNj
cm9sbGJhciA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIq
IGhvcml6b250YWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKTsK
KyAgICBpZiAoKHZlcnRpY2FsU2Nyb2xsYmFyICYmIHZlcnRpY2FsU2Nyb2xsYmFyLT5zdXBwb3J0
c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkpCisgICAgICAgIHx8IChob3Jpem9udGFsU2Nyb2xs
YmFyICYmIGhvcml6b250YWxTY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJl
YWQoKSkpCisgICAgICAgIHNldFNjcm9sbGJhclBhaW50ZXJzRm9yTm9kZSh2ZXJ0aWNhbFNjcm9s
bGJhciwgaG9yaXpvbnRhbFNjcm9sbGJhciwgbm9kZSk7CisKICAgICBTY3JvbGxQYXJhbWV0ZXJz
IHNjcm9sbFBhcmFtZXRlcnM7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xs
RWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKICAg
ICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+
dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFi
bGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigp
ICYmIGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5lbmFibGVkKCk7Ci0gICAgc2Ny
b2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPnZl
cnRpY2FsU2Nyb2xsYmFyKCkgJiYgZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpLT5lbmFi
bGVkKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
ciA9IGhvcml6b250YWxTY3JvbGxiYXIgJiYgaG9yaXpvbnRhbFNjcm9sbGJhci0+ZW5hYmxlZCgp
OworICAgIHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID0gdmVy
dGljYWxTY3JvbGxiYXIgJiYgdmVydGljYWxTY3JvbGxiYXItPmVuYWJsZWQoKTsKICAgICBzY3Jv
bGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlID0gZnJhbWVWaWV3LT5ob3Jpem9u
dGFsU2Nyb2xsYmFyTW9kZSgpOwogICAgIHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxi
YXJNb2RlID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsKIApAQCAtMTc4LDcg
KzE4NCw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld1IKICAgICBz
ZXRGb290ZXJMYXllckZvck5vZGUoZm9vdGVyTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwg
bm9kZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGFibGVBcmVh
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9s
bGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFi
bGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3BhZ2UpOwpAQCAtMTg2LDcgKzE5MiwxMCBA
QCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxhYmxlCiAgICAgaWYgKHNjcm9s
bGFibGVBcmVhICE9IHN0YXRpY19jYXN0PFNjcm9sbGFibGVBcmVhKj4obV9wYWdlLT5tYWluRnJh
bWUoKS52aWV3KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgorICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgc2Ny
b2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKKyAgICBlbHNl
CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFu
Z2UoKTsKIH0KIAogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9sbFBv
c2l0aW9uVXBkYXRlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xs
UG9zaXRpb24pCkBAIC0yNzgsNiArMjg3LDEyIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnNldEZvb3RlckwKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCit2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxiYXJQYWludGVyc0Zvck5vZGUoU2Ny
b2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciwgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFy
LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0U2Ny
b2xsYmFyUGFpbnRlcnModmVydGljYWxTY3JvbGxiYXIsIGhvcml6b250YWxTY3JvbGxiYXIpOwor
ICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKIHZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWM6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24m
IHJlZ2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQogewogICAgIG5vZGUt
PnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE1NzIzMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRl
ICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKIAogI2lmIEVO
QUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkBAIC05MCw2ICs5MSwyNyBAQCB2b2lkIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Rm9vCiAgICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAordm9pZCBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGJhclBhaW50ZXJzKFNjcm9sbGJhciogdmVydGljYWxT
Y3JvbGxiYXIsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxi
YXJUaGVtZSogc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKKyAgICBp
ZiAoc2Nyb2xsYmFyVGhlbWUtPmlzTW9ja1RoZW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICBT
Y3JvbGxiYXJUaGVtZU1hYyogbWFjVGhlbWUgPSBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1h
Yyo+KHNjcm9sbGJhclRoZW1lKTsKKworICAgIFNjcm9sbGJhclBhaW50ZXIgdmVydGljYWxQYWlu
dGVyID0gdmVydGljYWxTY3JvbGxiYXIgPyBtYWNUaGVtZS0+cGFpbnRlckZvclNjcm9sbGJhcih2
ZXJ0aWNhbFNjcm9sbGJhcikgOiAwOworICAgIFNjcm9sbGJhclBhaW50ZXIgaG9yaXpvbnRhbFBh
aW50ZXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyID8gbWFjVGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxi
YXIoaG9yaXpvbnRhbFNjcm9sbGJhcikgOiAwOworCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxi
YXJQYWludGVyID09IHZlcnRpY2FsUGFpbnRlciAmJiBtX2hvcml6b250YWxTY3JvbGxiYXJQYWlu
dGVyID09IGhvcml6b250YWxQYWludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyUGFpbnRlciA9IHZlcnRpY2FsUGFpbnRlcjsKKyAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXJQYWludGVyID0gaG9yaXpvbnRhbFBhaW50ZXI7CisKKyAgICBzZXRQcm9wZXJ0eUNo
YW5nZWQoUGFpbnRlckZvclNjcm9sbGJhcik7CisgICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVl
KQorICAgICAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXMo
dHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMu
aAkocmV2aXNpb24gMTU3MjMyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogCiAjaW5jbHVkZSAiU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZU1hYy5o
IgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgiCiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogCkBAIC04NCw2ICs4NSw4IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRy
PENBTGF5ZXI+IG1fY291bnRlclNjcm9sbGluZ0xheWVyOwogICAgIFJldGFpblB0cjxDQUxheWVy
PiBtX2hlYWRlckxheWVyOwogICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2Zvb3RlckxheWVyOwor
ICAgIFNjcm9sbGJhclBhaW50ZXIgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXI7CisgICAgU2Ny
b2xsYmFyUGFpbnRlciBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyOwogICAgIEludFBvaW50
IG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX2xhc3RTY3Jv
bGxIYWRVbmZpbGxlZFBpeGVsczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjLm1tCShyZXZpc2lvbiAxNTcyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTIzLDI0ICsyMywyNiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5oIgorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZU1hYy5oIgogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKIAot
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgot
I2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVHJl
ZS5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgotI2luY2x1ZGUgIlNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJUaWxlTGF5ZXIu
aCIKLQotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIk5TU2Nyb2xsZXJJ
bXBEZXRhaWxzLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbXBvcnQgIlNj
cm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW1wb3J0ICJTY3JvbGxpbmdUcmVlLmgiCisjaW1wb3J0
ICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbXBvcnQgIlNldHRpbmdzLmgiCisjaW1wb3J0ICJU
aWxlQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViVGlsZUxheWVyLmgiCisKKyNpbXBvcnQgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW1w
b3J0IDx3dGYvRGVxdWUuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01
Niw2ICs1OCw4IEBAIFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU+IFMKIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1h
YyhTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQog
ICAgIDogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUoc2Nyb2xsaW5nVHJlZSwgbm9kZUlEKQog
ICAgICwgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcih0aGlzKQorICAgICwgbV92ZXJ0aWNh
bFNjcm9sbGJhclBhaW50ZXIoMCkKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIo
MCkKICAgICAsIG1fbGFzdFNjcm9sbEhhZFVuZmlsbGVkUGl4ZWxzKGZhbHNlKQogewogfQpAQCAt
ODMsNiArODcsMTEgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYQog
ICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OkZvb3RlckxheWVyKSkKICAgICAgICAgbV9mb290ZXJMYXllciA9
IHNjcm9sbGluZ1N0YXRlTm9kZS0+Zm9vdGVyUGxhdGZvcm1MYXllcigpOwogCisgICAgaWYgKHNj
cm9sbGluZ1N0YXRlTm9kZS0+aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6UGFpbnRlckZvclNjcm9sbGJhcikpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhclBhaW50ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUtPnZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRl
cigpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyID0gc2Nyb2xsaW5nU3Rh
dGVOb2RlLT5ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlcigpOworICAgIH0KKwogICAgIGlmIChz
Y3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpKSB7
CiAgICAgICAgIHVuc2lnbmVkIG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zID0gdGhpcy0+c2hv
dWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwogCkBAIC0zMjMsMTAg
KzMzMiwzNSBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzZXRTCiAgICAg
aWYgKG1fZm9vdGVyTGF5ZXIpCiAgICAgICAgIG1fZm9vdGVyTGF5ZXIuZ2V0KCkucG9zaXRpb24g
PSBGbG9hdFBvaW50KGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIsIHRvdGFsQ29udGVu
dHNTaXplKCkuaGVpZ2h0KCkgLSBmb290ZXJIZWlnaHQoKSk7CiAKKyAgICBJbnRSZWN0IHZpZXdw
b3J0UmVjdCA9IHRoaXMtPnZpZXdwb3J0UmVjdCgpOworCisgICAgaWYgKG1fdmVydGljYWxTY3Jv
bGxiYXJQYWludGVyKSB7CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAgICAg
W0NBVHJhbnNhY3Rpb24gbG9ja107CisgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRl
ciBzZXRVc2VQcmVzZW50YXRpb25WYWx1ZTpZRVNdOworICAgICAgICBmbG9hdCBwcmVzZW50YXRp
b25WYWx1ZTsKKyAgICAgICAgZmxvYXQgb3ZlcmhhbmdBbW91bnQ7CisgICAgICAgIFNjcm9sbGFi
bGVBcmVhOjpjb21wdXRlU2Nyb2xsYmFyVmFsdWVBbmRPdmVyaGFuZyhwb3NpdGlvbi55KCksIHRv
dGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCksIHZpZXdwb3J0UmVjdC5oZWlnaHQoKSwgcHJlc2Vu
dGF0aW9uVmFsdWUsIG92ZXJoYW5nQW1vdW50KTsKKyAgICAgICAgW21fdmVydGljYWxTY3JvbGxi
YXJQYWludGVyIHNldFByZXNlbnRhdGlvblZhbHVlOnByZXNlbnRhdGlvblZhbHVlXTsKKyAgICAg
ICAgW0NBVHJhbnNhY3Rpb24gdW5sb2NrXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0
XTsKKyAgICB9CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlcikgeworICAg
ICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGxvY2td
OworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlciBzZXRVc2VQcmVzZW50YXRp
b25WYWx1ZTpZRVNdOworICAgICAgICBmbG9hdCBwcmVzZW50YXRpb25WYWx1ZTsKKyAgICAgICAg
ZmxvYXQgb3ZlcmhhbmdBbW91bnQ7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Ny
b2xsYmFyVmFsdWVBbmRPdmVyaGFuZyhwb3NpdGlvbi54KCksIHRvdGFsQ29udGVudHNTaXplKCku
d2lkdGgoKSwgdmlld3BvcnRSZWN0LndpZHRoKCksIHByZXNlbnRhdGlvblZhbHVlLCBvdmVyaGFu
Z0Ftb3VudCk7CisgICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyIHNldFByZXNl
bnRhdGlvblZhbHVlOnByZXNlbnRhdGlvblZhbHVlXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24g
dW5sb2NrXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICB9CisKICAgICBp
ZiAoIW1fY2hpbGRyZW4pCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3Qgdmlld3BvcnRS
ZWN0ID0gdGhpcy0+dmlld3BvcnRSZWN0KCk7CiAgICAgdmlld3BvcnRSZWN0LnNldExvY2F0aW9u
KEludFBvaW50KHNjcm9sbE9mZnNldEZvckZpeGVkQ2hpbGRyZW4pKTsKIAogICAgIHNpemVfdCBz
aXplID0gbV9jaGlsZHJlbi0+c2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAxNTcyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIo
U2Nyb2xsYmFyKikgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGljYWxTY3JvbGxiYXJMYXll
ckRpZENoYW5nZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UoKSB7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTY3JvbGxiYXJQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRl
bHRhKSB7IFVOVVNFRF9QQVJBTShkZWx0YSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDE1NzIzMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDYg
KzM0NCwxOCBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29yCiAgICAg
aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QocmVjdCk7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCit2b2lkIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKCkKK3sKKyAgICBzY3JvbGxBbmltYXRvcigpLT52ZXJ0aWNhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSgpCit7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS0+aG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7Cit9CisjZW5kaWYKKwogYm9vbCBTY3JvbGxh
YmxlQXJlYTo6aGFzTGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKIHsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC00NTAsNCArNDYyLDI3IEBAIEludFBvaW50
IFNjcm9sbGFibGVBcmVhOjpjb25zdHJhaW5TY3JvbGwKICAgICByZXR1cm4gY29uc3RyYWluU2Ny
b2xsUG9zaXRpb25Gb3JPdmVyaGFuZyh2aXNpYmxlQ29udGVudFJlY3QoKSwgdG90YWxDb250ZW50
c1NpemUoKSwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbigpLCBoZWFkZXJIZWlnaHQoKSwg
Zm9vdGVySGVpZ2h0KCkpOwogfQogCit2b2lkIFNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xs
YmFyVmFsdWVBbmRPdmVyaGFuZyhmbG9hdCBjdXJyZW50UG9zaXRpb24sIGZsb2F0IHRvdGFsU2l6
ZSwgZmxvYXQgdmlzaWJsZVNpemUsIGZsb2F0JiBkb3VibGVWYWx1ZSwgZmxvYXQmIG92ZXJoYW5n
QW1vdW50KQoreworICAgIGRvdWJsZVZhbHVlID0gMDsKKyAgICBvdmVyaGFuZ0Ftb3VudCA9IDA7
CisgICAgZmxvYXQgbWF4aW11bSA9IHRvdGFsU2l6ZSAtIHZpc2libGVTaXplOworCisgICAgaWYg
KGN1cnJlbnRQb3NpdGlvbiA8IDApIHsKKyAgICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgdG9w
LgorICAgICAgICBkb3VibGVWYWx1ZSA9IDA7CisgICAgICAgIG92ZXJoYW5nQW1vdW50ID0gLWN1
cnJlbnRQb3NpdGlvbjsKKyAgICB9IGVsc2UgaWYgKHZpc2libGVTaXplICsgY3VycmVudFBvc2l0
aW9uID4gdG90YWxTaXplKSB7CisgICAgICAgIC8vIFNjcm9sbGVkIHBhc3QgdGhlIGJvdHRvbS4K
KyAgICAgICAgZG91YmxlVmFsdWUgPSAxOworICAgICAgICBvdmVyaGFuZ0Ftb3VudCA9IGN1cnJl
bnRQb3NpdGlvbiArIHZpc2libGVTaXplIC0gdG90YWxTaXplOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIFdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBzY3JvbGxhYmxlIGFyZWEuCisgICAgICAg
IGlmIChtYXhpbXVtID4gMCkKKyAgICAgICAgICAgIGRvdWJsZVZhbHVlID0gY3VycmVudFBvc2l0
aW9uIC8gbWF4aW11bTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG91YmxlVmFsdWUgPSAw
OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiAxNTcyMzIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAs
NiArMTEwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKGNv
bnN0IEludFJlY3QmKTsKIAorICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVzU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZCgpIGNvbnN0ID0gMDsKKwogICAgIC8vIENvbnZlcnQgcG9pbnRzIGFu
ZCByZWN0cyBiZXR3ZWVuIHRoZSBzY3JvbGxiYXIgYW5kIGl0cyBjb250YWluaW5nIHZpZXcuCiAg
ICAgLy8gVGhlIGNsaWVudCBuZWVkcyB0byBpbXBsZW1lbnQgdGhlc2UgaW4gb3JkZXIgdG8gYmUg
YXdhcmUgb2YgbGF5b3V0IGVmZmVjdHMKICAgICAvLyBsaWtlIENTUyB0cmFuc2Zvcm1zLgpAQCAt
MTcyLDYgKzE3NCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEludFBvaW50IGNvbnN0cmFpblNj
cm9sbFBvc2l0aW9uRm9yT3ZlcmhhbmcoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0
LCBjb25zdCBJbnRTaXplJiB0b3RhbENvbnRlbnRzU2l6ZSwgY29uc3QgSW50UG9pbnQmIHNjcm9s
bFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luLCBpbnQgaGVhZGVySGVpZ2h0
LCBpbnQgZm9vdGV0SGVpZ2h0KTsKICAgICBJbnRQb2ludCBjb25zdHJhaW5TY3JvbGxQb3NpdGlv
bkZvck92ZXJoYW5nKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CiAKKyAgICAvLyBD
b21wdXRlcyB0aGUgc28tY2FsbGVkIGRvdWJsZSB2YWx1ZSBmb3IgdGhlIHNjcm9sbGJhcidzIGN1
cnJlbnQgcG9zaXRpb24gYW5kIHRoZSBjdXJyZW50IG92ZXJoYW5nIGFtb3VudC4KKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYyBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUg
bWFpbiB0aHJlYWQgb3IgdGhlIHNjcm9sbGluZyB0aHJlYWQuCisgICAgc3RhdGljIHZvaWQgY29t
cHV0ZVNjcm9sbGJhclZhbHVlQW5kT3ZlcmhhbmcoZmxvYXQgY3VycmVudFBvc2l0aW9uLCBmbG9h
dCB0b3RhbFNpemUsIGZsb2F0IHZpc2libGVTaXplLCBmbG9hdCYgZG91YmxlVmFsdWUsIGZsb2F0
JiBvdmVyaGFuZ0Ftb3VudCk7CisKICAgICAvLyBMZXQgc3ViY2xhc3NlcyBwcm92aWRlIGEgd2F5
IG9mIGFza2luZyBmb3IgYW5kIHNlcnZpY2luZyBzY3JvbGwKICAgICAvLyBhbmltYXRpb25zLgog
ICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZUFuaW1hdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CkBA
IC0xODAsNiArMTg2LDEyIEBAIHB1YmxpYzoKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpIHsgcmV0dXJuIDA7
IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBHcmFwaGlj
c0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
CisgICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7CisgICAgdm9pZCBo
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6
CkBAIC0xOTUsOCArMjA3LDYgQEAgcHJvdGVjdGVkOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICBmcmllbmQgY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiAgICAgdmly
dHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KLSAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXIqIGxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBH
cmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
ICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBs
YXllckZvck92ZXJoYW5nQXJlYXMoKSBjb25zdCB7IHJldHVybiAwOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDE1NzIzMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4OSw0ICs1
ODksMTUgQEAgSW50UG9pbnQgU2Nyb2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbgogICAgIHJl
dHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UG9pbnQpOwogfQog
Citib29sIFNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpIGNvbnN0
Cit7CisgICAgLy8gSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3
aXRoIGFuIGlmZGVmLiBJZGVhbGx5IHRoZXJlIHdvdWxkIGJlIGFibGUgdG8gZmVhdHVyZS1kZXRl
Y3QKKyAgICAvLyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQgd2l0aGluIEFwcEtpdC4KKyNpZiBQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwICYm
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEg
PyAhbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQoKSA6IGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJ
KHJldmlzaW9uIDE1NzIzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0FscGhhTG9ja2VkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0FscGhhTG9j
a2VkOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldElzQWxwaGFMb2NrZWQoYm9vbCBmbGFnKSBPVkVS
UklERSB7IG1faXNBbHBoYUxvY2tlZCA9IGZsYWc7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBT
Y3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemUsIFNjcm9sbGJhclRoZW1lKiA9IDApOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ2xpZW50LmgJKHJldmlzaW9uIDE1NzIzMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg3LDYgKzg3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0Fs
cGhhTG9ja2VkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FscGhhTG9ja2Vk
KGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5
VGhyZWFkKCkgY29uc3QgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+U2Nyb2xsYmFy
VGhlbWVDbGllbnQoKSB7IH0KIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
TlNTY3JvbGxlckltcERldGFpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMuaAkocmV2aXNpb24gMTU3MjMyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDYgKzM5LDggQEAgQGludGVyZmFjZSBOU09iamVjdCAoU2Nyb2xsYmFyUGFp
bnRlcikKIC0gKHZvaWQpc2V0RW5hYmxlZDooQk9PTCllbmFibGVkOwogLSAodm9pZClzZXRCb3Vu
ZHNTaXplOihOU1NpemUpYm91bmRzU2l6ZTsKIC0gKHZvaWQpc2V0RG91YmxlVmFsdWU6KGRvdWJs
ZSlkb3VibGVWYWx1ZTsKKy0gKHZvaWQpc2V0UHJlc2VudGF0aW9uVmFsdWU6KGRvdWJsZSlwcmVz
ZW50YXRpb25WYWx1ZTsKKy0gKHZvaWQpc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6KEJPT0wpdXNl
UHJlc2VudGF0aW9uVmFsdWU7CiAtICh2b2lkKXNldEtub2JQcm9wb3J0aW9uOihDR0Zsb2F0KXBy
b3BvcnRpb247CiAtICh2b2lkKXNldEtub2JTdHlsZTooTlNTY3JvbGxlcktub2JTdHlsZSlrbm9i
U3R5bGU7CiAtICh2b2lkKXNldEV4cGFuZGVkOihCT09MKWV4cGFuZGVkOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHJldmlzaW9u
IDE1NzIzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKICAgICB2aXJ0
dWFsIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgdmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHZp
cnR1YWwgdm9pZCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKKwogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxi
YXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0
IEZsb2F0U2l6ZSYgZGVsdGEpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24gMTU3MjMyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJCbG9ja0V4Y2VwdGlvbnMuaCIK
ICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2lu
Y2x1ZGUgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJl
RXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKQEAgLTQzOCw5ICs0Mzks
MTQgQEAgLSAoQ0FMYXllciAqKWxheWVyCiAgICAgaWYgKCFTY3JvbGxiYXJUaGVtZU1hYzo6aXND
dXJyZW50bHlEcmF3aW5nSW50b0xheWVyKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYXR0ZW1wdCB0byByZXR1cm4gYW4gYWN0dWFsIGxheWVyLgor
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyOworICAgIGlmIChfc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNj
cm9sbGFibGVBcmVhKCktPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBlbHNlCisg
ICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCk7CisKICAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9IFtb
Q0FMYXllciBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIGR1bW15TGF5ZXI7CisgICAgcmV0dXJu
IGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IGR1bW15TGF5ZXI7CiB9CiAKIC0gKE5T
UG9pbnQpbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJ
bXAKQEAgLTQ1Myw5ICs0NTksMjQgQEAgLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5TY3JvbGxl
ckZvclNjcgogICAgIHJldHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSk7
CiB9CiAKKy0gKE5TUmVjdCljb252ZXJ0UmVjdFRvTGF5ZXI6KE5TUmVjdClhUmVjdAoreworICAg
IHJldHVybiBhUmVjdDsKK30KKworLSAoQk9PTClzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3Jv
bGxlckltcDooaWQpc2Nyb2xsZXJJbXAKK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVF9VTlVTRUQoc2Nyb2xsZXJJbXAsIHNjcm9sbGVy
SW1wID09IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoX3Njcm9sbGJhcikpOworCisgICAg
cmV0dXJuIF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKTsKK30K
KwogLSAodm9pZClzZXRVcEFscGhhQW5pbWF0aW9uOihSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOihTY3Jv
bGxiYXJQYWludGVyKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0
KXBhcnQgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUlu
dGVydmFsKWR1cmF0aW9uCiB7Ci0gICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRoZSBw
YWdlLCB0aGVuIHRoZSBzY3JvbGxiYXJzIG11c3QgYmUgYW5pbWF0ZWQgaGVyZS4gCisgICAgLy8g
SWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRoZSBwYWdlLCB0aGVuIHRoZSBzY3JvbGxiYXJzIG11
c3QgYmUgYW5pbWF0ZWQgaGVyZS4KICAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgZWFybHkgcmV0
dXJucy4KICAgICBib29sIG11c3RBbmltYXRlID0gW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5oYXZl
U2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7CiAKQEAgLTQ3Niw2ICs0OTcsOSBAQCAtICh2b2lkKXNl
dFVwQWxwaGFBbmltYXRpb246KFJldGFpblB0cjxXCiAgICAgICAgIHNjcm9sbGJhclBhcnRBbmlt
YXRpb24gPSBuaWw7CiAgICAgfQogCisgICAgaWYgKFNjcm9sbGJhclRoZW1lTWFjKiBtYWNUaGVt
ZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpCisgICAgICAgIG1hY1RoZW1lLT5zZXRDdXJyZW50UGFp
bnRDaGFyYWN0ZXJpc3RpY3MoX3Njcm9sbGJhcik7CisKICAgICBpZiAocGFydCA9PSBXZWJDb3Jl
OjpUaHVtYlBhcnQgJiYgX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9s
bGJhcikgewogICAgICAgICBpZiAobmV3QWxwaGEgPT0gMSkgewogICAgICAgICAgICAgSW50UmVj
dCB0aHVtYlJlY3QgPSBJbnRSZWN0KFtzY3JvbGxlclBhaW50ZXIgcmVjdEZvclBhcnQ6TlNTY3Jv
bGxlcktub2JdKTsKQEAgLTQ4NCw3ICs1MDgsNyBAQCAtICh2b2lkKXNldFVwQWxwaGFBbmltYXRp
b246KFJldGFpblB0cjxXCiAgICAgICAgICAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnNldFZp
c2libGVTY3JvbGxlclRodW1iUmVjdChJbnRSZWN0KCkpOwogICAgIH0KIAotICAgIHNjcm9sbGJh
clBhcnRBbmltYXRpb24gPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBhbGxv
Y10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9sbGJhciAKKyAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRo
U2Nyb2xsYmFyOl9zY3JvbGxiYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVRvQW5pbWF0ZTpwYXJ0
ID09IFRodW1iUGFydCA/IFRodW1iQWxwaGEgOiBUcmFja0FscGhhCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYW5pbWF0ZUZyb206cGFydCA9PSBUaHVtYlBhcnQgPyBbc2Nyb2xsZXJQYWludGVyIGtub2JB
bHBoYV0gOiBbc2Nyb2xsZXJQYWludGVyIHRyYWNrQWxwaGFdCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbmltYXRlVG86bmV3QWxwaGEgCkBAIC01MDYsNiArNTMwLDkgQEAgLSAodm9pZClzY3JvbGxl
ckltcDooaWQpc2Nyb2xsZXJJbXAgYW5pbQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAg
aWYgKG5ld0tub2JBbHBoYSA9PSAwKQorICAgICAgICBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVBy
ZXNlbnRhdGlvblZhbHVlOk5PXTsKKwogICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X2tu
b2JBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2Vi
Q29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJh
dGlvbl07CiB9CiAKQEAgLTUxNSw3ICs1NDIsNyBAQCAtICh2b2lkKXNjcm9sbGVySW1wOihpZClz
Y3JvbGxlckltcCBhbmltCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChzY3JvbGxlcklt
cCA9PSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKF9zY3JvbGxiYXIpKTsKLSAgICAKKwog
ICAgIFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsZXJQYWludGVyID0gKFNjcm9sbGJhclBhaW50ZXIp
c2Nyb2xsZXJJbXA7CiAgICAgW3NlbGYgc2V0VXBBbHBoYUFuaW1hdGlvbjpfdHJhY2tBbHBoYUFu
aW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFj
a1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9u
XTsKIH0KQEAgLTkwMiw2ICs5MjksOSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRW
ZXJ0aWNhbFNjCiAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSA9IGFkb3B0
TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFy
OnNjcm9sbGJhcl0pOwogCiAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV92ZXJ0aWNhbFNjcm9s
bGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKV07CisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpCisgICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOwor
CiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgc2V0VmVydGljYWxTY3JvbGxlcklt
cDpwYWludGVyXTsKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCiAg
ICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKQEAgLTkzMSw2ICs5NjEsOSBAQCB2b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsCiAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxl
Z2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7CiAKICAgICBbcGFpbnRl
ciBzZXREZWxlZ2F0ZTptX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCld
OworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIFtwYWludGVyIHNl
dExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOworCiAgICAgW21fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwogICAgIGlmIChz
Y3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKICAgICAgICAgW3BhaW50ZXIgc2V0S25v
YkFscGhhOjFdOwpAQCAtOTUwLDYgKzk4Myw0MCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3
aWxsUmVtb3ZlSG9yaXpvCiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgc2V0SG9y
aXpvbnRhbFNjcm9sbGVySW1wOm5pbF07CiB9CiAKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnZl
cnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gbV9zY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOworICAg
IFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxi
YXIoKTsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xs
YmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxi
YXIpOworICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxheWVy
KQorICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKKyAg
ICBlbHNlCisgICAgICAgIFtwYWludGVyIHNldExheWVyOm5pbF07Cit9CisKK3ZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCit7CisgICAg
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5sYXllckZvckhvcml6b250
YWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFy
ZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRl
ckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGxheWVyKQorICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+
cGxhdGZvcm1MYXllcigpXTsKKyAgICBlbHNlCisgICAgICAgIFtwYWludGVyIHNldExheWVyOm5p
bF07Cit9CisKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNob3VsZFNjcm9sbGJhclBhcnRpY2lw
YXRlSW5IaXRUZXN0aW5nKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAgIC8vIE5vbi1vdmVy
bGF5IHNjcm9sbGJhcnMgc2hvdWxkIGFsd2F5cyBwYXJ0aWNpcGF0ZSBpbiBoaXQgdGVzdGluZy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1h
Yy5oCShyZXZpc2lvbiAxNTcyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgU2Nyb2xsYmFyUGFpbnRlcik7CiAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyRm9yU2Ny
b2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKKyAgICB2b2lkIHNldEN1cnJlbnRQYWlu
dENoYXJhY3RlcmlzdGljcyhTY3JvbGxiYXJUaGVtZUNsaWVudCopOworCiAgICAgc3RhdGljIGJv
b2wgaXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0SXND
dXJyZW50bHlEcmF3aW5nSW50b0xheWVyKGJvb2wpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxNTcyMzIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ2MSwxMyArNDYxLDIzIEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6
OnVwZGF0ZUVuYWJsZWRTdGEKICAgICBbc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpIHNl
dEVuYWJsZWQ6c2Nyb2xsYmFyLT5lbmFibGVkKCldOwogfQogCi1zdGF0aWMgdm9pZCBzY3JvbGxi
YXJQYWludGVyUGFpbnQoU2Nyb2xsYmFyUGFpbnRlciBzY3JvbGxiYXJQYWludGVyLCBib29sIGVu
YWJsZWQsIGRvdWJsZSB2YWx1ZSwgQ0dGbG9hdCBwcm9wb3J0aW9uLCBDR1JlY3QgZnJhbWVSZWN0
KQordm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6c2V0Q3VycmVudFBhaW50Q2hhcmFjdGVyaXN0aWNz
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7Ci0gICAgW3Njcm9sbGJhclBhaW50
ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsKLSAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRCb3VuZHNT
aXplOiBOU1NpemVGcm9tQ0dTaXplKGZyYW1lUmVjdC5zaXplKV07Ci0gICAgW3Njcm9sbGJhclBh
aW50ZXIgc2V0RG91YmxlVmFsdWU6dmFsdWVdOwotICAgIFtzY3JvbGxiYXJQYWludGVyIHNldEtu
b2JQcm9wb3J0aW9uOnByb3BvcnRpb25dOworICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9
IHBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIAorICAgIGZsb2F0IHZhbHVlOworICAg
IGZsb2F0IG92ZXJoYW5nOworICAgIFNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsYmFyVmFs
dWVBbmRPdmVyaGFuZyhzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSwgc2Nyb2xsYmFyLT50b3RhbFNp
emUoKSwgc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpLCB2YWx1ZSwgb3ZlcmhhbmcpOworICAgIGZs
b2F0IHByb3BvcnRpb24gPSAoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxl
U2l6ZSgpKSAtIG92ZXJoYW5nKSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCk7CisKKyAgICBbcGFp
bnRlciBzZXRFbmFibGVkOnNjcm9sbGJhci0+ZW5hYmxlZCgpXTsKKyAgICBbcGFpbnRlciBzZXRC
b3VuZHNTaXplOnNjcm9sbGJhci0+ZnJhbWVSZWN0KCkuc2l6ZSgpXTsKKyAgICBbcGFpbnRlciBz
ZXREb3VibGVWYWx1ZTp2YWx1ZV07CisgICAgW3BhaW50ZXIgc2V0S25vYlByb3BvcnRpb246cHJv
cG9ydGlvbl07Cit9CisKK3N0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50ZXJQYWludChTY3JvbGxi
YXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIsIGJvb2wgZW5hYmxlZCkKK3sKICAgICAvLyBVc2Ug
cmVjdEZvclBhcnQ6IGhlcmU7IGl0IHdpbGwgdGFrZSB0aGUgZXhwYW5zaW9uIHRyYW5zaXRpb24g
cHJvZ3Jlc3MgaW50byBhY2NvdW50LgogICAgIE5TUmVjdCB0cmFja1JlY3QgPSBbc2Nyb2xsYmFy
UGFpbnRlciByZWN0Rm9yUGFydDpOU1Njcm9sbGVyS25vYlNsb3RdOwogICAgIFtzY3JvbGxiYXJQ
YWludGVyIGRyYXdLbm9iU2xvdEluUmVjdDp0cmFja1JlY3QgaGlnaGxpZ2h0Ok5PXTsKQEAgLTQ4
MCwzNyArNDkwLDE4IEBAIHN0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50ZXJQYWludChTY3JvbGwK
IAogYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KQogewotICAgIGZsb2F0IHZhbHVlID0gMDsKLSAgICBmbG9hdCBvdmVyaGFuZyA9IDA7Cisg
ICAgc2V0Q3VycmVudFBhaW50Q2hhcmFjdGVyaXN0aWNzKHNjcm9sbGJhcik7CiAKLSAgICBpZiAo
c2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPCAwKSB7Ci0gICAgICAgIC8vIFNjcm9sbGVkIHBhc3Qg
dGhlIHRvcC4KLSAgICAgICAgdmFsdWUgPSAwOwotICAgICAgICBvdmVyaGFuZyA9IC1zY3JvbGxi
YXItPmN1cnJlbnRQb3MoKTsKLSAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+dmlzaWJsZVNpemUo
KSArIHNjcm9sbGJhci0+Y3VycmVudFBvcygpID4gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSkgewot
ICAgICAgICAvLyBTY3JvbGxlZCBwYXN0IHRoZSBib3R0b20uCi0gICAgICAgIHZhbHVlID0gMTsK
LSAgICAgICAgb3ZlcmhhbmcgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSArIHNjcm9sbGJhci0+
dmlzaWJsZVNpemUoKSAtIHNjcm9sbGJhci0+dG90YWxTaXplKCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gV2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHNjcm9sbGFibGUgYXJlYS4KLSAgICAg
ICAgaW50IG1heGltdW0gPSBzY3JvbGxiYXItPm1heGltdW0oKTsKLSAgICAgICAgaWYgKG1heGlt
dW0gPiAwKQotICAgICAgICAgICAgdmFsdWUgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAvIG1h
eGltdW07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICBpZiAoIXNj
cm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKSB7CisgICAgICAgIFRl
bXBvcmFyeUNoYW5nZTxib29sPiBpc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoZ19pc0N1cnJl
bnRseURyYXdpbmdJbnRvTGF5ZXIsIGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7CisgICAg
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7
CisgICAgICAgIGNvbnRleHQtPmNsaXAoZGFtYWdlUmVjdCk7CisgICAgICAgIGNvbnRleHQtPnRy
YW5zbGF0ZShzY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KS55KCkpOworICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0
KGNvbnRleHQpOworICAgICAgICBzY3JvbGxiYXJQYWludGVyUGFpbnQoc2Nyb2xsYmFyTWFwKCkt
PmdldChzY3JvbGxiYXIpLmdldCgpLCBzY3JvbGxiYXItPmVuYWJsZWQoKSk7CiAgICAgfQogCi0g
ICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGlzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihnX2lz
Q3VycmVudGx5RHJhd2luZ0ludG9MYXllciwgY29udGV4dC0+aXNDQUxheWVyQ29udGV4dCgpKTsK
LSAgICAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQp
OwotICAgIGNvbnRleHQtPmNsaXAoZGFtYWdlUmVjdCk7Ci0gICAgY29udGV4dC0+dHJhbnNsYXRl
KHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSk7
Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250ZXh0KTsK
LSAgICBzY3JvbGxiYXJQYWludGVyUGFpbnQoc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIp
LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhci0+ZW5hYmxlZCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDxDR0Zsb2F0PihzY3JvbGxiYXItPnZpc2libGVTaXplKCkp
IC0gb3ZlcmhhbmcpIC8gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkocmV2
aXNpb24gMTU3MjMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEludFNp
emUgY29udGVudHNTaXplKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBJbnRSZWN0IHNj
cm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVh
LgogICAgIHZvaWQgc2Nyb2xsVG8oaW50IG9mZnNldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDE1NzIzMikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDAsNiAr
MTQwMCwxNiBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5kCiAgICAg
cmV0dXJuIHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKIH0KIAorYm9vbCBS
ZW5kZXJMYXllcjo6dXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25z
dAoreworICAgIGlmIChQYWdlKiBwYWdlID0gcmVuZGVyZXIoKS5mcmFtZSgpLnBhZ2UoKSkgewor
ICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
cGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxp
bmdDb29yZGluYXRvci0+c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZCgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ1RyYW5zZm9ybWVkQW5jZXN0b3IoKSBjb25zdAogewogICAgIFJlbmRl
ckxheWVyKiBjdXJyID0gcGFyZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaAkocmV2aXNpb24gMTU3MjMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjksNiArMTAyOSw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdC
b3goKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlc1Njcm9sbExheWVy
UG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIC8vIFJlY3Rhbmds
ZSBlbmNvbXBhc3NpbmcgdGhlIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIgcmVjdC4KICAgICBJ
bnRSZWN0IHNjcm9sbENvcm5lckFuZFJlc2l6ZXJSZWN0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2
aXNpb24gMTU3MjMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OTMsMTAgKzI2OTMsMTMgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbAogICAgICAgICAgICAgbV9sYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXll
ckZhY3RvcnkoKSwgdGhpcyk7CiAgICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhci0+c2V0U2hvd0RlYnVnQm9yZGVyKG1fc2hvd0RlYnVnQm9yZGVycyk7CiAjaWZuZGVmIE5E
RUJVRwotICAgICAgICAgICAgbV9sYXllckZvckhvcml6b250YWxTY3JvbGxiYXItPnNldE5hbWUo
Imhvcml6b250YWwgc2Nyb2xsYmFyIik7CisgICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhci0+c2V0TmFtZSgiaG9yaXpvbnRhbCBzY3JvbGxiYXIgY29udGFpbmVyIik7CisK
ICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKENBKQogICAgICAgICAgICAgbV9sYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyhhY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkKCkpOworICAgICAgICAgICAgbV9sYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgICAgICAgICBtX2xheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwogI2VuZGlm
CiAgICAgICAgICAgICBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXItPmFkZENoaWxkKG1fbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpKTsKIApAQCAtMjcxNiwxMCArMjcxOSwxMiBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlT3ZlcmZsCiAgICAgICAgICAgICBt
X2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhp
Y3NMYXllckZhY3RvcnkoKSwgdGhpcyk7CiAgICAgICAgICAgICBtX2xheWVyRm9yVmVydGljYWxT
Y3JvbGxiYXItPnNldFNob3dEZWJ1Z0JvcmRlcihtX3Nob3dEZWJ1Z0JvcmRlcnMpOwogI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+c2V0TmFt
ZSgidmVydGljYWwgc2Nyb2xsYmFyIik7CisgICAgICAgICAgICBtX2xheWVyRm9yVmVydGljYWxT
Y3JvbGxiYXItPnNldE5hbWUoInZlcnRpY2FsIHNjcm9sbGJhciBjb250YWluZXIiKTsKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKENBKQogICAgICAgICAgICAgbV9sYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoYWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCgpKTsKKyAgICAgICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+c2V0
RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICAgICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwogI2VuZGlmCiAgICAgICAgICAg
ICBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXItPmFkZENoaWxkKG1fbGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhci5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaAkocmV2aXNpb24gMTU3MjMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDYgKzEyMyw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkgY29uc3Qg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3Qg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25z
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZXNTY3JvbGxMYXllclBv
c2l0aW9uT25NYWluVGhyZWFkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgdmlydHVhbCBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25z
dCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eCgpIGNvbnN0IE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MjM3KQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTMtMTAtMTAgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFNj
cm9sbGJhcnMgYXJlIHVwZGF0ZWQgb24gdGhlIG1haW4gdGhyZWFkIHJhdGhlciB0aGFuIHRoZSBz
Y3JvbGxpbmcgdGhyZWFkIAorICAgICAgICAoY2F1c2luZyBzY3JvbGwgYmFycyBub3QgdG8gYXBw
ZWFyL3VwZGF0ZSBxdWlja2x5IGluIHNvbWUgY2FzZXMpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI1ODUKKyAgICAgICAgLWFuZCBjb3JyZXNwb25k
aW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MTA3NzU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHB1cmUgdmlydHVhbCBmdW5jdGlv
bi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorCiAyMDEz
LTEwLTEwICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAg
QnVpbGRmaXggZm9yIG5vbiBNYWMgcGxhdGZvcm1zIHdpdGggZW5hYmxlZCBOZXR3b3JrUHJvY2Vz
cwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5oCShyZXZpc2lvbiAxNTcyMzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNiArMTk4LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxi
YXJQb2ludCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xs
YmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBQREZQbHVnaW4g
ZnVuY3Rpb25zLgogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOwo=
</data>
<flag name="review"
          id="236355"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213927</attachid>
            <date>2013-10-10 14:14:48 -0700</date>
            <delta_ts>2013-10-10 14:19:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>47603</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNSBAQAorMjAxMy0xMC0xMCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2Nyb2xsYmFycyBhcmUgdXBkYXRl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQgcmF0aGVyIHRoYW4gdGhlIHNjcm9sbGluZyB0aHJlYWQgCisg
ICAgICAgIChjYXVzaW5nIHNjcm9sbCBiYXJzIG5vdCB0byBhcHBlYXIvdXBkYXRlIHF1aWNrbHkg
aW4gc29tZSBjYXNlcykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMjU4NQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8xMDcxMDc3NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgYSBmZXcgdGhpbmdzIGluIG9yZGVyIHRvIGFs
bG93IHNjcm9sbGJhcnMgdG8gYmUgdXBkYXRlZCBvbiB0aGUgCisgICAgICAgIHNjcm9sbGluZyB0
aHJlYWQ6CisKKyAgICAgICAgMS4gVGhpcyBwYXRjaCBhZGRzIHRoZSBhYmlsaXR5IHRvIGtub3cg
aWYgdGhlIGxvd2VyLWxldmVsIEFQSXMgbmVjZXNzYXJ5IHRvIGdldCAKKyAgICAgICAgdGhpcyB0
byB3b3JrIHJpZ2h0IGFyZSBhdmFpbGFibGUsIEFORCBpZiB0aGUgY29udGVudCBpcyBhY3R1YWxs
eSBjYXBhYmxlIG9mIHRha2luZyAKKyAgICAgICAgYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZS4g
VGhpcyBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMgCisgICAgICAgIFNjcm9sbGJhcjo6c3Vw
cG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpIHdoaWNoIG1ha2VzIHVzZSBvZiBhIG5ldyAK
KyAgICAgICAgU2Nyb2xsYWJsZUFyZWEgZnVuY3Rpb24gY2FsbGVkIHVwZGF0ZXNTY3JvbGxMYXll
clBvc2l0aW9uT25NYWluVGhyZWFkKCkKKyAgICAgICAgCisgICAgICAgIDIuIFRvIHVwZGF0ZSBv
biB0aGUgc2Nyb2xsaW5nIHRocmVhZCwgdGhlIHNjcm9sbGluZyB0cmVlIG5lZWRzIHRvIGtub3cg
YWJvdXQgdGhlIAorICAgICAgICBTY3JvbGxiYXJQYWludGVycy4KKyAgICAgICAgCisgICAgICAg
IDMuIE9uY2UgaXQga25vd3MgYWJvdXQgdGhlbSwgaXQgc2hvdWxkIHVwZGF0ZSB0aGUgcHJlc2Vu
dGF0aW9uIHZhbHVlIHdoZW5ldmVyIHRoZSAKKyAgICAgICAgbGF5ZXIgcG9zaXRpb24gY2hhbmdl
cy4KKyAgICAgICAgCisgICAgICAgIDQuIFByZXNlbnRhdGlvbiB2YWx1ZSBpcyBiYXNpY2FsbHkg
dGhlIHNhbWUgdGhpbmcgYXMgZG91YmxlIHZhbHVlLiBUaGVyZSBpcyBhIGJpdCAKKyAgICAgICAg
b2YgY29kZSB3ZSBtYWludGFpbiBjdXJyZW50bHkgdG8gY29tcHV0ZSB0aGF0LiBUaGlzIHBhdGNo
IG1vdmVzIHRoYXQgY29kZSB0byBhIAorICAgICAgICBzdGF0aWMgZnVuY3Rpb24gb24gU2Nyb2xs
YWJsZUFyZWEgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB0aGUgbWFpbiB0aHJlYWQgYW5k
IAorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgCisgICAgICAgIDUuIFNj
cm9sbGJhclBhaW50ZXIgQVBJIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIGxheWVycyB3ZSBoYXZl
IGNyZWF0ZWQgZm9yIHRoZSAKKyAgICAgICAgdmVydGljYWwgYW5kIGhvcml6b250YWwgc2Nyb2xs
YmFycywgdGhlbiB0aGV5IHdpbGwgdXNlIHRob3NlIGxheWVycyBhbmQgdGhlIAorICAgICAgICBw
cmVzZW50YXRpb24gdmFsdWUgdGhhdCB3ZSBzZXQgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQgdG8g
bW92ZSB0aGUgbGF5ZXJzIGFyb3VuZC4KKworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgIzEgYWJv
dmUuIAorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6dXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAg
ICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mICMyLiBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVzIG5vdyBoYXZlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFs
IAorICAgICAgICBTY3JvbGxiYXJQYWludGVycyBmb3IgTWFjIG9ubHkuCisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
dmVydGljYWxTY3JvbGxiYXJQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6aG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIpOgorCisgICAgICAg
IEFsc28gcGFydCBvZiAjMi4gTWFrZSBzdXJlIHRvIHNldCB0aGUgU2Nyb2xsYmFyUGFpbnRlcnMg
Zm9yIHNjcm9sbGluZyBub2RlcyB3aGVuIAorICAgICAgICBhcHByb3ByaWF0ZS4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaDoKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRl
ZCk6CisKKyAgICAgICAgSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdGhhdCB3YXMganVzdCBzdHVi
YmVkIG91dCBiZWZvcmUuIFRoaXMgaXMgcGFydCBvZiAjNSBpbiAKKyAgICAgICAgdGhhdCBpcyB3
aWxsIGFsbG93IHRoZSBTY3JvbGxiYXJQYWludGVyIEFQSSB0byBrbm93IGFib3V0IGFueSBsYXll
ciBjaGFuZ2VzLiAKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpz
Y3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKworICAgICAgICBCYWNrIHRv
ICMyLCBtYWtpbmcgc3VyZSB3ZSBwcm9wZXJseSBzZXQgdGhlIFNjcm9sbGJhclBhaW50ZXJzIHRv
IHNlbmQgb3ZlciB0byB0aGUgCisgICAgICAgIHNjcm9sbGluZyB0aHJlYWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2Nyb2xsYmFyUGFpbnRlcnNGb3JO
b2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpzZXRTY3JvbGxiYXJQYWludGVycyk6CisKKyAgICAgICAgVGhpcyBjb2RlIGFjaGlldmVz
ICMzLiBJdCB1c2VzIG5ldyBTY3JvbGxiYXJQYWludGVyIEFQSSB0byBhZGp1c3QgdGhlIHBvc2l0
aW9uIG9mIAorICAgICAgICB0aGUgc2Nyb2xsYmFycyBmcm9tIHRoZSBzY3JvbGxpbmcgdGhyZWFk
LgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZU1hYy5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYyk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNldFNjcm9s
bExheWVyUG9zaXRpb24pOgorCisgICAgICAgIFRoaXMgaXMgZm9yICM1LiBTY3JvbGxiYXJQYWlu
dGVyIG5lZWRzIHRvIGtub3cgYWJvdXQgb3VyIHNjcm9sbGJhciBsYXllcnMuCisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFu
Z2UpOgorCisgICAgICAgIFRoaXMgaXMgZm9yICM0LiBUaGlzIGNvZGUgY29tcHV0ZXMgdGhlIHNj
cm9sbGJhcuKAmXMgdmFsdWUgYW5kIGN1cnJlbnQgb3ZlcmhhbmcgCisgICAgICAgIGFtb3VudC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsYmFyVmFsdWVB
bmRPdmVyaGFuZyk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yU2Nyb2xs
aW5nKToKKworICAgICAgICBUaGlzIGlzIGZvciAjMS4gV2UgbmVlZCB0byBrbm93IGlmIHdlIGhh
dmUgdGhlIGFiaWxpdHkgdG8gdXBkYXRlIHNjcm9sbGJhcnMgb24gYSAKKyAgICAgICAgZGlmZmVy
ZW50IHRocmVhZC4gV2UgY2FuIGRvIHRoYXQgb25seSBvbiBjZXJ0YWluIHZlcnNpb25zIG9mIHRo
ZSBPUywgb25seSB3aGVuIAorICAgICAgICB0aHJlYWRlZCBzY3JvbGxpbmcgaXMgZW5hYmxlZCwg
YW5kIG9ubHkgd2hlbiB0aGUgY3VycmVudCBwYWdlIGlzIGFjdHVhbGx5IHVzaW5nIAorICAgICAg
ICB0aGUgc2Nyb2xsaW5nIHRocmVhZCB0byBzY3JvbGwuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVP
blNlY29uZGFyeVRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDbGllbnQuaDoKKworICAgICAgICBOZXcgU2Ny
b2xsYmFyUGFpbnRlciBBUElzLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1w
RGV0YWlscy5oOgorCisgICAgICAgIFRoaXMgaXMgZm9yICM1LCBsZXR0aW5nIHRoZSBTY3JvbGxi
YXJQYWludGVyIEFQSSAga25vdyBhYm91dCB0aGUgbGF5ZXJzLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGxh
eWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBjb252ZXJ0UmVj
dFRvTGF5ZXI6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzaG91
bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlckltcDpdKToKKworICAgICAgICBCZWZvcmUgd2Ug
a2ljayBvZmYgYSBzY3JvbGwgYW5pbWF0aW9uLCBzZXQgdGhlIGN1cnJlbnQgcGFpbnRpbmcgY2hh
cmFjdGVyaXN0aWNzIHNvIAorICAgICAgICB0aGV5IGFyZSB1cC10by1kYXRlIGluIGNhc2Ugd2Ug
YXJlIHNjcm9sbGluZyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIHNldFVwQWxwaGFBbmltYXRpb246c2Nyb2xsZXJQYWludGVy
OnBhcnQ6V2ViQ29yZTo6YW5pbWF0ZUFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25vYkFscGhhVG86
ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3Jv
bGxlckltcDphbmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorCisgICAgICAgIE9ubHkgcGFpbnQgdGhl
IHNjcm9sbGJhcnMgdGhyb3VnaCBTY3JvbGxiYXJUaGVtZU1hYyBpZiB0aGV5IGFyZSBOT1QgYmVp
bmcgdXBkYXRlZCAKKyAgICAgICAgYnkgdGhlIHNjcm9sbGluZyB0aHJlYWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L1Njcm9sbGJhclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVN
YWM6OnNldEN1cnJlbnRQYWludENoYXJhY3RlcmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpz
Y3JvbGxiYXJQYWludGVyUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVN
YWM6OnBhaW50KToKKworICAgICAgICBCYWNrIHRvICMxLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlc1Nj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVPdmVyZmxv
d0NvbnRyb2xzTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgor
CiAyMDEzLTEwLTEwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IE1ha2UgYWxsIGZ1bmN0aW9ucyBvZiBFdmVudERpc3BhdGNoZXIgc3RhdGljCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxNTcyNTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMTQsNiArMzAxNCwxNiBA
QCBib29sIEZyYW1lVmlldzo6aXNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBwYWdlICYmIHBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7CiB9CiAKK2Jvb2wgRnJhbWVWaWV3Ojp1
cGRhdGVzU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpIGNvbnN0Cit7CisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKSkgeworICAgICAgICBpZiAoU2Nyb2xsaW5nQ29v
cmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+c2hvdWxkVXBk
YXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCiB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3
T2Zmc2V0KQogewogICAgIExheW91dFNpemUgb2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDE1NzI1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw2ICs0MDEsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVzU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRo
cmVhZCgpIGNvbnN0IE9WRVJSSURFOwogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAg
IEdyYXBoaWNzTGF5ZXIqIHNldFdhbnRzTGF5ZXJGb3JUb3BPdmVySGFuZ0FyZWEoYm9vbCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAJKHJldmlzaW9uIDE1NzI1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3QKICAgICAsIG1fY291bnRlclNjcm9sbGluZ0xheWVyKDAp
CiAgICAgLCBtX2hlYWRlckxheWVyKDApCiAgICAgLCBtX2Zvb3RlckxheWVyKDApCisjaWYgUExB
VEZPUk0oTUFDKQorICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIoMCkKKyAgICAsIG1f
aG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIoMCkKKyNlbmRpZgogICAgICwgbV9mcmFtZVNjYWxl
RmFjdG9yKDEpCiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkKICAgICAsIG1fc2hv
dWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgwKQpAQCAtNjEsNiArNjUs
MTAgQEAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdAogCiBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShjb25zdCBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIHN0YXRlTm9kZSkKICAgICA6IFNjcm9sbGluZ1N0
YXRlTm9kZShzdGF0ZU5vZGUpCisjaWYgUExBVEZPUk0oTUFDKQorICAgICwgbV92ZXJ0aWNhbFNj
cm9sbGJhclBhaW50ZXIoc3RhdGVOb2RlLnZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlcigpKQorICAg
ICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlcihzdGF0ZU5vZGUuaG9yaXpvbnRhbFNjcm9s
bGJhclBhaW50ZXIoKSkKKyNlbmRpZgogICAgICwgbV92aWV3cG9ydFJlY3Qoc3RhdGVOb2RlLnZp
ZXdwb3J0UmVjdCgpKQogICAgICwgbV90b3RhbENvbnRlbnRzU2l6ZShzdGF0ZU5vZGUudG90YWxD
b250ZW50c1NpemUoKSkKICAgICAsIG1fZnJhbWVTY2FsZUZhY3RvcihzdGF0ZU5vZGUuZnJhbWVT
Y2FsZUZhY3RvcigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHJldmlzaW9uIDE1NzI1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTUgQEAKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIgogI2luY2x1ZGUgIlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3Jv
bGxiYXI7CisKIGNsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSA6IHB1YmxpYyBTY3Jv
bGxpbmdTdGF0ZU5vZGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZT4gY3JlYXRlKFNjcm9sbGluZ1N0YXRlVHJlZSosIFNjcm9sbGlu
Z05vZGVJRCk7CkBAIC02NCw3ICs2Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgSGVhZGVySGVpZ2h0
LAogICAgICAgICBGb290ZXJIZWlnaHQsCiAgICAgICAgIEhlYWRlckxheWVyLAotICAgICAgICBG
b290ZXJMYXllcgorICAgICAgICBGb290ZXJMYXllciwKKyAgICAgICAgUGFpbnRlckZvclNjcm9s
bGJhcgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxpbmdOb2RlKCkgT1ZFUlJJ
REUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTMyLDYgKzEzNiwxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRGb290ZXJMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgUGxhdGZvcm1MYXllciogZm9v
dGVyUGxhdGZvcm1MYXllcigpIGNvbnN0OwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFNjcm9s
bGJhclBhaW50ZXIgdmVydGljYWxTY3JvbGxiYXJQYWludGVyKCkgY29uc3QgeyByZXR1cm4gbV92
ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXI7IH0KKyAgICBTY3JvbGxiYXJQYWludGVyIGhvcml6b250
YWxTY3JvbGxiYXJQYWludGVyKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
UGFpbnRlcjsgfQorI2VuZGlmCisgICAgdm9pZCBzZXRTY3JvbGxiYXJQYWludGVyc0Zyb21TY3Jv
bGxiYXJzKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIsIFNjcm9sbGJhciogaG9yaXpvbnRh
bFNjcm9sbGJhcik7CisKICAgICBib29sIHJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uUmVwcmVzZW50
c1Byb2dyYW1tYXRpY1Njcm9sbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdGVkU2Nyb2xsUG9z
aXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0IE9WRVJSSURFOwpA
QCAtMTQ3LDYgKzE1Nyw4IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+
IG1fY291bnRlclNjcm9sbGluZ1BsYXRmb3JtTGF5ZXI7CiAgICAgUmV0YWluUHRyPFBsYXRmb3Jt
TGF5ZXI+IG1faGVhZGVyUGxhdGZvcm1MYXllcjsKICAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXll
cj4gbV9mb290ZXJQbGF0Zm9ybUxheWVyOworICAgIFNjcm9sbGJhclBhaW50ZXIgbV92ZXJ0aWNh
bFNjcm9sbGJhclBhaW50ZXI7CisgICAgU2Nyb2xsYmFyUGFpbnRlciBtX2hvcml6b250YWxTY3Jv
bGxiYXJQYWludGVyOwogI2VuZGlmCiAgICAgCiAgICAgSW50UmVjdCBtX3ZpZXdwb3J0UmVjdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGlu
YXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCShyZXZpc2lvbiAxNTcyNTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIFNjcm9sbGJhcjsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlTm9kZTsKIGNsYXNzIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKQEAgLTEyMiw2
ICsxMjMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q291bnRlclNjcm9sbGluZ0xheWVyRm9y
Tm9kZShHcmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAgICAg
dm9pZCBzZXRIZWFkZXJMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciosIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSopOwogICAgIHZvaWQgc2V0Rm9vdGVyTGF5ZXJGb3JOb2RlKEdyYXBoaWNz
TGF5ZXIqLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFNjcm9s
bGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnNGb3JOb2RlKFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciwgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUo
Y29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAgICAgdm9pZCBz
ZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHJldmlzaW9u
IDE1NzI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdD
b29yZGluYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMxLDExICsxMzEsMTcgQEAgdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3TAogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IGZyYW1l
Vmlldy0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3Jv
bGxiYXIgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBpZiAoKHZlcnRp
Y2FsU2Nyb2xsYmFyICYmIHZlcnRpY2FsU2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25k
YXJ5VGhyZWFkKCkpCisgICAgICAgIHx8IChob3Jpem9udGFsU2Nyb2xsYmFyICYmIGhvcml6b250
YWxTY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkpCisgICAgICAg
IHNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnNGb3JOb2RlKHZlcnRpY2FsU2Nyb2xs
YmFyLCBob3Jpem9udGFsU2Nyb2xsYmFyLCBub2RlKTsKKwogICAgIFNjcm9sbFBhcmFtZXRlcnMg
c2Nyb2xsUGFyYW1ldGVyczsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxF
bGFzdGljaXR5ID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOwogICAg
IHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT52
ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKTsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJs
ZWRIb3Jpem9udGFsU2Nyb2xsYmFyID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkg
JiYgZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmVuYWJsZWQoKTsKLSAgICBzY3Jv
bGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+dmVy
dGljYWxTY3JvbGxiYXIoKSAmJiBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPmVuYWJs
ZWQoKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFy
ID0gaG9yaXpvbnRhbFNjcm9sbGJhciAmJiBob3Jpem9udGFsU2Nyb2xsYmFyLT5lbmFibGVkKCk7
CisgICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSB2ZXJ0
aWNhbFNjcm9sbGJhciAmJiB2ZXJ0aWNhbFNjcm9sbGJhci0+ZW5hYmxlZCgpOwogICAgIHNjcm9s
bFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBmcmFtZVZpZXctPmhvcml6b250
YWxTY3JvbGxiYXJNb2RlKCk7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpOwogCkBAIC0xNzgsNyAr
MTg0LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3UgogICAgIHNl
dEZvb3RlckxheWVyRm9yTm9kZShmb290ZXJMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBu
b2RlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2Nyb2xsYWJsZUFyZWFT
Y3JvbGxiYXJMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNj
cm9sbGJhck9yaWVudGF0aW9uKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2Nyb2xs
YWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJs
ZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fcGFnZSk7CkBAIC0xODYsNyArMTkyLDEwIEBA
IHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGFibGUKICAgICBpZiAoc2Nyb2xs
YWJsZUFyZWEgIT0gc3RhdGljX2Nhc3Q8U2Nyb2xsYWJsZUFyZWEqPihtX3BhZ2UtPm1haW5GcmFt
ZSgpLnZpZXcoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
CisgICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBzY3Jv
bGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIGVsc2UK
KyAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5n
ZSgpOwogfQogCiBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZXF1ZXN0U2Nyb2xsUG9z
aXRpb25VcGRhdGUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQ
b3NpdGlvbikKQEAgLTI3OCw2ICsyODcsMTIgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1h
Yzo6c2V0Rm9vdGVyTAogICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9sbGJh
cnNGb3JOb2RlKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIsIFNjcm9sbGJhciogaG9yaXpv
bnRhbFNjcm9sbGJhciwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQoreworICAg
IG5vZGUtPnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnModmVydGljYWxTY3JvbGxi
YXIsIGhvcml6b250YWxTY3JvbGxiYXIpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7
Cit9CisKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldE5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24mIHJlZ2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKiBub2RlKQogewogICAgIG5vZGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJl
Z2lvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlz
aW9uIDE1NzI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDgg
QEAKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCIKIAogI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZU1hYy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogCiAjaWYg
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKQEAgLTkwLDYgKzkyLDI3IEBAIHZvaWQgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRGb28KICAgICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUpOwogfQogCit2b2lkIFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsYmFyUGFpbnRlcnNGcm9tU2Nyb2xsYmFycyhTY3Jv
bGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyLCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIp
Cit7CisgICAgU2Nyb2xsYmFyVGhlbWUqIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCk7CisgICAgaWYgKHNjcm9sbGJhclRoZW1lLT5pc01vY2tUaGVtZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgU2Nyb2xsYmFyVGhlbWVNYWMqIG1hY1RoZW1lID0gc3RhdGljX2Nhc3Q8
U2Nyb2xsYmFyVGhlbWVNYWMqPihzY3JvbGxiYXJUaGVtZSk7CisKKyAgICBTY3JvbGxiYXJQYWlu
dGVyIHZlcnRpY2FsUGFpbnRlciA9IHZlcnRpY2FsU2Nyb2xsYmFyID8gbWFjVGhlbWUtPnBhaW50
ZXJGb3JTY3JvbGxiYXIodmVydGljYWxTY3JvbGxiYXIpIDogMDsKKyAgICBTY3JvbGxiYXJQYWlu
dGVyIGhvcml6b250YWxQYWludGVyID0gaG9yaXpvbnRhbFNjcm9sbGJhciA/IG1hY1RoZW1lLT5w
YWludGVyRm9yU2Nyb2xsYmFyKGhvcml6b250YWxTY3JvbGxiYXIpIDogMDsKKworICAgIGlmICht
X3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlciA9PSB2ZXJ0aWNhbFBhaW50ZXIgJiYgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyUGFpbnRlciA9PSBob3Jpem9udGFsUGFpbnRlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIgPSB2ZXJ0aWNhbFBhaW50ZXI7Cisg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlciA9IGhvcml6b250YWxQYWludGVyOworCisg
ICAgc2V0UHJvcGVydHlDaGFuZ2VkKFBhaW50ZXJGb3JTY3JvbGxiYXIpOworICAgIGlmIChtX3Nj
cm9sbGluZ1N0YXRlVHJlZSkKKyAgICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0No
YW5nZWRQcm9wZXJ0aWVzKHRydWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlTWFjLmgJKHJldmlzaW9uIDE1NzI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
IAogI2luY2x1ZGUgIlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWVNYWMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5o
IgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtODQsNiArODUsOCBAQCBwcml2YXRl
OgogICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2NvdW50ZXJTY3JvbGxpbmdMYXllcjsKICAgICBS
ZXRhaW5QdHI8Q0FMYXllcj4gbV9oZWFkZXJMYXllcjsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4g
bV9mb290ZXJMYXllcjsKKyAgICBTY3JvbGxiYXJQYWludGVyIG1fdmVydGljYWxTY3JvbGxiYXJQ
YWludGVyOworICAgIFNjcm9sbGJhclBhaW50ZXIgbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRl
cjsKICAgICBJbnRQb2ludCBtX3Byb2JhYmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uOwogICAg
IGJvb2wgbV9sYXN0U2Nyb2xsSGFkVW5maWxsZWRQaXhlbHM7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQkocmV2aXNpb24gMTU3MjUwKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywyNCArMjMsMjYgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaCIKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaCIKIAogI2lmIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCiAKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgotI2luY2x1
ZGUgIlNjcm9sbGluZ1RyZWUuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKLSNp
bmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlRpbGVDb250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiV2ViVGlsZUxheWVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9ydCAiRnJhbWVWaWV3LmgiCisjaW1w
b3J0ICJOU1Njcm9sbGVySW1wRGV0YWlscy5oIgorI2ltcG9ydCAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCisjaW1wb3J0ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgorI2ltcG9ydCAiU2Nyb2xsaW5n
VHJlZS5oIgorI2ltcG9ydCAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisjaW1wb3J0ICJTZXR0aW5n
cy5oIgorI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldlYlRpbGVMYXllci5o
IgorCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPHd0Zi9DdXJy
ZW50VGltZS5oPgorI2ltcG9ydCA8d3RmL0RlcXVlLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTYsNiArNTgsOCBAQCBQYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlPiBTCiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVNYWMoU2Nyb2xsaW5nVHJlZSogc2Nyb2xsaW5nVHJlZSwgU2Nyb2xsaW5n
Tm9kZUlEIG5vZGVJRCkKICAgICA6IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlKHNjcm9sbGlu
Z1RyZWUsIG5vZGVJRCkKICAgICAsIG1fc2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIodGhpcykK
KyAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyKDApCisgICAgLCBtX2hvcml6b250YWxT
Y3JvbGxiYXJQYWludGVyKDApCiAgICAgLCBtX2xhc3RTY3JvbGxIYWRVbmZpbGxlZFBpeGVscyhm
YWxzZSkKIHsKIH0KQEAgLTgzLDYgKzg3LDExIEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWM6OnVwZGEKICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLT5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpGb290ZXJMYXllcikpCiAgICAgICAg
IG1fZm9vdGVyTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUtPmZvb3RlclBsYXRmb3JtTGF5ZXIo
KTsKIAorICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlBhaW50ZXJGb3JTY3JvbGxiYXIpKSB7CisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLT52ZXJ0aWNh
bFNjcm9sbGJhclBhaW50ZXIoKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRl
ciA9IHNjcm9sbGluZ1N0YXRlTm9kZS0+aG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIoKTsKKyAg
ICB9CisKICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9u
T25NYWluVGhyZWFkKSkgewogICAgICAgICB1bnNpZ25lZCBtYWluVGhyZWFkU2Nyb2xsaW5nUmVh
c29ucyA9IHRoaXMtPnNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQo
KTsKIApAQCAtMzIzLDEwICszMzIsMzQgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZU1hYzo6c2V0UwogICAgIGlmIChtX2Zvb3RlckxheWVyKQogICAgICAgICBtX2Zvb3RlckxheWVy
LmdldCgpLnBvc2l0aW9uID0gRmxvYXRQb2ludChob3Jpem9udGFsU2Nyb2xsT2Zmc2V0Rm9yQmFu
bmVyLCB0b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gZm9vdGVySGVpZ2h0KCkpOwogCisg
ICAgSW50UmVjdCB2aWV3cG9ydFJlY3QgPSB0aGlzLT52aWV3cG9ydFJlY3QoKTsKKworICAgIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlciB8fCBtX2hvcml6b250YWxTY3JvbGxiYXJQYWlu
dGVyKSB7CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAgICAgW0NBVHJhbnNh
Y3Rpb24gbG9ja107CisKKyAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyKSB7
CisgICAgICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIgc2V0VXNlUHJlc2VudGF0
aW9uVmFsdWU6WUVTXTsKKyAgICAgICAgICAgIGZsb2F0IHByZXNlbnRhdGlvblZhbHVlOworICAg
ICAgICAgICAgZmxvYXQgb3ZlcmhhbmdBbW91bnQ7CisgICAgICAgICAgICBTY3JvbGxhYmxlQXJl
YTo6Y29tcHV0ZVNjcm9sbGJhclZhbHVlQW5kT3ZlcmhhbmcocG9zaXRpb24ueSgpLCB0b3RhbENv
bnRlbnRzU2l6ZSgpLmhlaWdodCgpLCB2aWV3cG9ydFJlY3QuaGVpZ2h0KCksIHByZXNlbnRhdGlv
blZhbHVlLCBvdmVyaGFuZ0Ftb3VudCk7CisgICAgICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJh
clBhaW50ZXIgc2V0UHJlc2VudGF0aW9uVmFsdWU6cHJlc2VudGF0aW9uVmFsdWVdOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIpIHsKKyAgICAg
ICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZh
bHVlOllFU107CisgICAgICAgICAgICBmbG9hdCBwcmVzZW50YXRpb25WYWx1ZTsKKyAgICAgICAg
ICAgIGZsb2F0IG92ZXJoYW5nQW1vdW50OworICAgICAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OmNv
bXB1dGVTY3JvbGxiYXJWYWx1ZUFuZE92ZXJoYW5nKHBvc2l0aW9uLngoKSwgdG90YWxDb250ZW50
c1NpemUoKS53aWR0aCgpLCB2aWV3cG9ydFJlY3Qud2lkdGgoKSwgcHJlc2VudGF0aW9uVmFsdWUs
IG92ZXJoYW5nQW1vdW50KTsKKyAgICAgICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJQYWlu
dGVyIHNldFByZXNlbnRhdGlvblZhbHVlOnByZXNlbnRhdGlvblZhbHVlXTsKKyAgICAgICAgfQor
ICAgICAgICBbQ0FUcmFuc2FjdGlvbiB1bmxvY2tdOworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOworICAgIH0KKwogICAgIGlmICghbV9jaGlsZHJlbikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSW50UmVjdCB2aWV3cG9ydFJlY3QgPSB0aGlzLT52aWV3cG9ydFJlY3QoKTsKICAgICB2
aWV3cG9ydFJlY3Quc2V0TG9jYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRDaGls
ZHJlbikpOwogCiAgICAgc2l6ZV90IHNpemUgPSBtX2NoaWxkcmVuLT5zaXplKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDE1NzI1MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDYgKzkyLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVt
b3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSB7IH0KIAorICAgIHZpcnR1YWwgdm9p
ZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpIHsgfQorCiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKFNjcm9sbGJhciopIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9s
bGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgVU5VU0VEX1BBUkFNKGRlbHRhKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkocmV2aXNpb24g
MTU3MjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDQsNiArMzQ0LDE4IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Omlu
dmFsaWRhdGVTY3JvbGxDb3IKICAgICBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChyZWN0KTsK
IH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgU2Nyb2xsYWJsZUFy
ZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQoreworICAgIHNjcm9sbEFuaW1h
dG9yKCktPnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKK30KKwordm9pZCBTY3Jv
bGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKK3sKKyAgICBz
Y3JvbGxBbmltYXRvcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKK30K
KyNlbmRpZgorCiBib29sIFNjcm9sbGFibGVBcmVhOjpoYXNMYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSBjb25zdAogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTQ1
MCw0ICs0NjIsMjcgQEAgSW50UG9pbnQgU2Nyb2xsYWJsZUFyZWE6OmNvbnN0cmFpblNjcm9sbAog
ICAgIHJldHVybiBjb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvck92ZXJoYW5nKHZpc2libGVDb250
ZW50UmVjdCgpLCB0b3RhbENvbnRlbnRzU2l6ZSgpLCBzY3JvbGxQb3NpdGlvbiwgc2Nyb2xsT3Jp
Z2luKCksIGhlYWRlckhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSk7CiB9CiAKK3ZvaWQgU2Nyb2xs
YWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxiYXJWYWx1ZUFuZE92ZXJoYW5nKGZsb2F0IGN1cnJlbnRQ
b3NpdGlvbiwgZmxvYXQgdG90YWxTaXplLCBmbG9hdCB2aXNpYmxlU2l6ZSwgZmxvYXQmIGRvdWJs
ZVZhbHVlLCBmbG9hdCYgb3ZlcmhhbmdBbW91bnQpCit7CisgICAgZG91YmxlVmFsdWUgPSAwOwor
ICAgIG92ZXJoYW5nQW1vdW50ID0gMDsKKyAgICBmbG9hdCBtYXhpbXVtID0gdG90YWxTaXplIC0g
dmlzaWJsZVNpemU7CisKKyAgICBpZiAoY3VycmVudFBvc2l0aW9uIDwgMCkgeworICAgICAgICAv
LyBTY3JvbGxlZCBwYXN0IHRoZSB0b3AuCisgICAgICAgIGRvdWJsZVZhbHVlID0gMDsKKyAgICAg
ICAgb3ZlcmhhbmdBbW91bnQgPSAtY3VycmVudFBvc2l0aW9uOworICAgIH0gZWxzZSBpZiAodmlz
aWJsZVNpemUgKyBjdXJyZW50UG9zaXRpb24gPiB0b3RhbFNpemUpIHsKKyAgICAgICAgLy8gU2Ny
b2xsZWQgcGFzdCB0aGUgYm90dG9tLgorICAgICAgICBkb3VibGVWYWx1ZSA9IDE7CisgICAgICAg
IG92ZXJoYW5nQW1vdW50ID0gY3VycmVudFBvc2l0aW9uICsgdmlzaWJsZVNpemUgLSB0b3RhbFNp
emU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHNj
cm9sbGFibGUgYXJlYS4KKyAgICAgICAgaWYgKG1heGltdW0gPiAwKQorICAgICAgICAgICAgZG91
YmxlVmFsdWUgPSBjdXJyZW50UG9zaXRpb24gLyBtYXhpbXVtOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBkb3VibGVWYWx1ZSA9IDA7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlz
aW9uIDE1NzI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJ
bnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxDb3JuZXIoY29uc3QgSW50UmVjdCYpOwogCisgICAgdmlydHVhbCBib29s
IHVwZGF0ZXNTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCkgY29uc3QgPSAwOworCiAg
ICAgLy8gQ29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhlIHNjcm9sbGJhciBhbmQg
aXRzIGNvbnRhaW5pbmcgdmlldy4KICAgICAvLyBUaGUgY2xpZW50IG5lZWRzIHRvIGltcGxlbWVu
dCB0aGVzZSBpbiBvcmRlciB0byBiZSBhd2FyZSBvZiBsYXlvdXQgZWZmZWN0cwogICAgIC8vIGxp
a2UgQ1NTIHRyYW5zZm9ybXMuCkBAIC0xNzIsNiArMTc0LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgSW50UG9pbnQgY29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JPdmVyaGFuZyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRvdGFsQ29udGVudHNTaXpl
LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBzY3JvbGxP
cmlnaW4sIGludCBoZWFkZXJIZWlnaHQsIGludCBmb290ZXRIZWlnaHQpOwogICAgIEludFBvaW50
IGNvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yT3ZlcmhhbmcoY29uc3QgSW50UG9pbnQmIHNjcm9s
bFBvc2l0aW9uKTsKIAorICAgIC8vIENvbXB1dGVzIHRoZSBkb3VibGUgdmFsdWUgZm9yIHRoZSBz
Y3JvbGxiYXIncyBjdXJyZW50IHBvc2l0aW9uIGFuZCB0aGUgY3VycmVudCBvdmVyaGFuZyBhbW91
bnQuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBzdGF0aWMgc28gdGhhdCBpdCBjYW4gYmUgY2Fs
bGVkIGZyb20gdGhlIG1haW4gdGhyZWFkIG9yIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgorICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVTY3JvbGxiYXJWYWx1ZUFuZE92ZXJoYW5nKGZsb2F0IGN1cnJlbnRQ
b3NpdGlvbiwgZmxvYXQgdG90YWxTaXplLCBmbG9hdCB2aXNpYmxlU2l6ZSwgZmxvYXQmIGRvdWJs
ZVZhbHVlLCBmbG9hdCYgb3ZlcmhhbmdBbW91bnQpOworCiAgICAgLy8gTGV0IHN1YmNsYXNzZXMg
cHJvdmlkZSBhIHdheSBvZiBhc2tpbmcgZm9yIGFuZCBzZXJ2aWNpbmcgc2Nyb2xsCiAgICAgLy8g
YW5pbWF0aW9ucy4KICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVBbmltYXRpb24oKSB7IHJldHVy
biBmYWxzZTsgfQpAQCAtMTgwLDYgKzE4NiwxMiBAQCBwdWJsaWM6CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmco
KSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllciog
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKworICAgIHZvaWQgdmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgp
OworICAgIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7CiAjZW5kaWYK
IAogcHJvdGVjdGVkOgpAQCAtMTk1LDggKzIwNyw2IEBAIHByb3RlY3RlZDoKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOwogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxpbmcoKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBHcmFwaGlj
c0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCB7
IHJldHVybiAwOyB9CiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIHZpcnR1YWwgR3Jh
cGhpY3NMYXllciogbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzKCkgY29uc3QgeyByZXR1cm4gMDsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAxNTcyNTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01ODksNCArNTg5LDE1IEBAIEludFBvaW50IFNjcm9sbGJhcjo6Y29udmVydEZyb21Db250
YWluaW4KICAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVu
dFBvaW50KTsKIH0KIAorYm9vbCBTY3JvbGxiYXI6OnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlU
aHJlYWQoKSBjb25zdAoreworICAgIC8vIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB0aGlzIG5lZWRz
IHRvIGJlIGRvbmUgd2l0aCBhbiBpZmRlZi4gSWRlYWxseSB0aGVyZSB3b3VsZCBiZSBhYmxlIHRv
IGZlYXR1cmUtZGV0ZWN0CisgICAgLy8gdGhlIG5lY2Vzc2FyeSBzdXBwb3J0IHdpdGhpbiBBcHBL
aXQuCisjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTAwMCAmJiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhID8gIW1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZXNTY3JvbGxMYXllclBvc2l0
aW9uT25NYWluVGhyZWFkKCkgOiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhci5oCShyZXZpc2lvbiAxNTcyNTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgaXNBbHBoYUxvY2tlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1faXNBbHBoYUxvY2tlZDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FscGhhTG9ja2VkKGJv
b2wgZmxhZykgT1ZFUlJJREUgeyBtX2lzQWxwaGFMb2NrZWQgPSBmbGFnOyB9CiAKKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpIGNvbnN0OworCiBwcm90
ZWN0ZWQ6CiAgICAgU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRp
b24sIFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3JvbGxiYXJUaGVtZSogPSAwKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNsaWVudC5oCShyZXZp
c2lvbiAxNTcyNTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNBbHBoYUxvY2tlZCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SXNBbHBoYUxvY2tlZChib29sKSA9IDA7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNVcGRh
dGVPblNlY29uZGFyeVRocmVhZCgpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgflNjcm9sbGJhclRoZW1lQ2xpZW50KCkgeyB9CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCShyZXZpc2lvbiAxNTcy
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxMiBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWUuaCIKIAorI2lmIFBMQVRGT1JNKE1BQykKK3R5cGVkZWYgaWQgU2Nyb2xsYmFyUGFpbnRl
cjsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFNjcm9sbGJhclBhaW50ZXI7CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSA6IHB1Ymxp
YyBTY3JvbGxiYXJUaGVtZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNT
Y3JvbGxlckltcERldGFpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMuaAkocmV2aXNpb24gMTU3MjUwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDggQEAgQGludGVyZmFjZSBOU09iamVjdCAoU2Nyb2xsYmFyUGFpbnRl
cikKIC0gKHZvaWQpc2V0RW5hYmxlZDooQk9PTCllbmFibGVkOwogLSAodm9pZClzZXRCb3VuZHNT
aXplOihOU1NpemUpYm91bmRzU2l6ZTsKIC0gKHZvaWQpc2V0RG91YmxlVmFsdWU6KGRvdWJsZSlk
b3VibGVWYWx1ZTsKKy0gKHZvaWQpc2V0UHJlc2VudGF0aW9uVmFsdWU6KGRvdWJsZSlwcmVzZW50
YXRpb25WYWx1ZTsKKy0gKHZvaWQpc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6KEJPT0wpdXNlUHJl
c2VudGF0aW9uVmFsdWU7CiAtICh2b2lkKXNldEtub2JQcm9wb3J0aW9uOihDR0Zsb2F0KXByb3Bv
cnRpb247CiAtICh2b2lkKXNldEtub2JTdHlsZTooTlNTY3JvbGxlcktub2JTdHlsZSlrbm9iU3R5
bGU7CiAtICh2b2lkKXNldEV4cGFuZGVkOihCT09MKWV4cGFuZGVkOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHJldmlzaW9uIDE1
NzI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFs
IHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAKKyAgICB2
aXJ0dWFsIHZvaWQgdmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHZpcnR1
YWwgdm9pZCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKKwogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIq
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZs
b2F0U2l6ZSYgZGVsdGEpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24gMTU3MjUwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1
ZGUgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZl
bnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKQEAgLTQzOCw5ICs0MzksMTQg
QEAgLSAoQ0FMYXllciAqKWxheWVyCiAgICAgaWYgKCFTY3JvbGxiYXJUaGVtZU1hYzo6aXNDdXJy
ZW50bHlEcmF3aW5nSW50b0xheWVyKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYXR0ZW1wdCB0byByZXR1cm4gYW4gYWN0dWFsIGxheWVyLgorICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyOworICAgIGlmIChfc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9s
bGFibGVBcmVhKCktPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBlbHNlCisgICAg
ICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCk7CisKICAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9IFtbQ0FM
YXllciBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIGR1bW15TGF5ZXI7CisgICAgcmV0dXJuIGxh
eWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IGR1bW15TGF5ZXI7CiB9CiAKIC0gKE5TUG9p
bnQpbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAK
QEAgLTQ1Myw5ICs0NTksMjQgQEAgLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZv
clNjcgogICAgIHJldHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KF9z
Y3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSk7CiB9
CiAKKy0gKE5TUmVjdCljb252ZXJ0UmVjdFRvTGF5ZXI6KE5TUmVjdClyZWN0Cit7CisgICAgcmV0
dXJuIHJlY3Q7Cit9CisKKy0gKEJPT0wpc2hvdWxkVXNlTGF5ZXJQZXJQYXJ0Rm9yU2Nyb2xsZXJJ
bXA6KGlkKXNjcm9sbGVySW1wCit7CisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGVySW1wLCBzY3JvbGxlckltcCA9
PSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKF9zY3JvbGxiYXIpKTsKKworICAgIHJldHVy
biBfc2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCk7Cit9CisKIC0g
KHZvaWQpc2V0VXBBbHBoYUFuaW1hdGlvbjooUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmlt
YXRpb24+JilzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjooU2Nyb2xsYmFy
UGFpbnRlcilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0
IGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZh
bClkdXJhdGlvbgogewotICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB0aGUgcGFnZSwg
dGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJlIGFuaW1hdGVkIGhlcmUuIAorICAgIC8vIElmIHRo
ZSB1c2VyIGhhcyBzY3JvbGxlZCB0aGUgcGFnZSwgdGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJl
IGFuaW1hdGVkIGhlcmUuCiAgICAgLy8gVGhpcyBvdmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMu
CiAgICAgYm9vbCBtdXN0QW5pbWF0ZSA9IFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+aGF2ZVNjcm9s
bGVkU2luY2VQYWdlTG9hZCgpOwogCkBAIC00NzYsNiArNDk3LDkgQEAgLSAodm9pZClzZXRVcEFs
cGhhQW5pbWF0aW9uOihSZXRhaW5QdHI8VwogICAgICAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
ID0gbmlsOwogICAgIH0KIAorICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogbWFjVGhlbWUgPSBt
YWNTY3JvbGxiYXJUaGVtZSgpKQorICAgICAgICBtYWNUaGVtZS0+c2V0Q3VycmVudFBhaW50Q2hh
cmFjdGVyaXN0aWNzRm9yU2Nyb2xsYmFyKF9zY3JvbGxiYXIpOworCiAgICAgaWYgKHBhcnQgPT0g
V2ViQ29yZTo6VGh1bWJQYXJ0ICYmIF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaWYgKG5ld0FscGhhID09IDEpIHsKICAgICAgICAgICAg
IEludFJlY3QgdGh1bWJSZWN0ID0gSW50UmVjdChbc2Nyb2xsZXJQYWludGVyIHJlY3RGb3JQYXJ0
Ok5TU2Nyb2xsZXJLbm9iXSk7CkBAIC00ODQsNyArNTA4LDcgQEAgLSAodm9pZClzZXRVcEFscGhh
QW5pbWF0aW9uOihSZXRhaW5QdHI8VwogICAgICAgICAgICAgW3NlbGYgc2Nyb2xsQW5pbWF0b3Jd
LT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoSW50UmVjdCgpKTsKICAgICB9CiAKLSAgICBz
Y3JvbGxiYXJQYXJ0QW5pbWF0aW9uID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRp
b24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIgCisgICAgc2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBp
bml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1h
dGU6cGFydCA9PSBUaHVtYlBhcnQgPyBUaHVtYkFscGhhIDogVHJhY2tBbHBoYQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFuaW1hdGVGcm9tOnBhcnQgPT0gVGh1bWJQYXJ0ID8gW3Njcm9sbGVyUGFpbnRl
ciBrbm9iQWxwaGFdIDogW3Njcm9sbGVyUGFpbnRlciB0cmFja0FscGhhXQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYW5pbWF0ZVRvOm5ld0FscGhhIApAQCAtNTA2LDYgKzUzMCwxMiBAQCAtICh2b2lk
KXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBhbmltCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKKyAgICAvLyBJZiB3ZSBhcmUgZmFkaW5nIHRoZSBzY3JvbGxiYXIgYXdheSwgdGhhdCBpcyBh
IGdvb2QgaW5kaWNhdGlvbiB0aGF0IHdlIGFyZSBubyBsb25nZXIgZ29pbmcgdG8KKyAgICAvLyBi
ZSBtb3ZpbmcgaXQgYXJvdW5kIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBDYWxsaW5nIFtzY3Jv
bGxlclBhaW50ZXIgc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dCisgICAgLy8gd2lsbCBwYXNz
IHRoYXQgaW5mb3JtYXRpb24gb24gdG8gdGhlIFNjcm9sbGJhclBhaW50ZXIgQVBJLgorICAgIGlm
IChuZXdLbm9iQWxwaGEgPT0gMCkKKyAgICAgICAgW3Njcm9sbGVyUGFpbnRlciBzZXRVc2VQcmVz
ZW50YXRpb25WYWx1ZTpOT107CisKICAgICBbc2VsZiBzZXRVcEFscGhhQW5pbWF0aW9uOl9rbm9i
QWxwaGFBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNv
cmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEgZHVyYXRpb246ZHVyYXRp
b25dOwogfQogCkBAIC01MTUsNyArNTQ1LDcgQEAgLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Ny
b2xsZXJJbXAgYW5pbQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoc2Nyb2xsZXJJbXAg
PT0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihfc2Nyb2xsYmFyKSk7Ci0gICAgCisKICAg
ICBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGVyUGFpbnRlciA9IChTY3JvbGxiYXJQYWludGVyKXNj
cm9sbGVySW1wOwogICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X3RyYWNrQWxwaGFBbmlt
YXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OkJhY2tU
cmFja1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07
CiB9CkBAIC05MDIsNiArOTMyLDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVy
dGljYWxTYwogICAgIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgPSBhZG9wdE5T
KFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpz
Y3JvbGxiYXJdKTsKIAogICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1fdmVydGljYWxTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9
IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
KQorICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKKwog
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6
cGFpbnRlcl07CiAgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQogICAg
ICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CkBAIC05MzEsNiArOTY0LDkgQEAgdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbAogICAgIG1faG9yaXpvbnRhbFNjcm9s
bGJhclBhaW50ZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwogCiAgICAgW3BhaW50ZXIg
c2V0RGVsZWdhdGU6bV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsK
KyAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVh
KCktPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBbcGFpbnRlciBzZXRM
YXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKKwogICAgIFttX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKICAgICBpZiAoc2Ny
b2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCiAgICAgICAgIFtwYWludGVyIHNldEtub2JB
bHBoYToxXTsKQEAgLTk1MCw2ICs5ODYsMzQgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2ls
bFJlbW92ZUhvcml6bwogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldEhvcml6
b250YWxTY3JvbGxlckltcDpuaWxdOwogfQogCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0
aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBT
Y3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFy
KCk7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGJh
clBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFy
KTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtwYWludGVyIHNl
dExheWVyOmxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG5pbF07Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCit7
CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5sYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xs
YWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFy
UGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIGlmICghcGFpbnRlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXIgPyBsYXllci0+cGxhdGZv
cm1MYXllcigpIDogbmlsXTsKK30KKwogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2hvdWxkU2Ny
b2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAg
ICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFycyBzaG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGlu
IGhpdCB0ZXN0aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJh
clRoZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhclRoZW1lTWFjLmgJKHJldmlzaW9uIDE1NzI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsy
OCw2IEBACiAKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIgogCi10eXBlZGVm
IGlkIFNjcm9sbGJhclBhaW50ZXI7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Ny
b2xsYmFyVGhlbWVNYWMgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgewpAQCAtNjEs
NiArNTksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNj
cm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFpbnRlcik7CiAgICAgU2Nyb2xsYmFyUGFp
bnRlciBwYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKKyAgICB2
b2lkIHNldEN1cnJlbnRQYWludENoYXJhY3RlcmlzdGljc0ZvclNjcm9sbGJhcihTY3JvbGxiYXJU
aGVtZUNsaWVudCopOworCiAgICAgc3RhdGljIGJvb2wgaXNDdXJyZW50bHlEcmF3aW5nSW50b0xh
eWVyKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0SXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyKGJv
b2wpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJh
clRoZW1lTWFjLm1tCShyZXZpc2lvbiAxNTcyNTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2MSwxMyArNDYx
LDIzIEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRTdGEKICAgICBbc2Ny
b2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpIHNldEVuYWJsZWQ6c2Nyb2xsYmFyLT5lbmFibGVk
KCldOwogfQogCi1zdGF0aWMgdm9pZCBzY3JvbGxiYXJQYWludGVyUGFpbnQoU2Nyb2xsYmFyUGFp
bnRlciBzY3JvbGxiYXJQYWludGVyLCBib29sIGVuYWJsZWQsIGRvdWJsZSB2YWx1ZSwgQ0dGbG9h
dCBwcm9wb3J0aW9uLCBDR1JlY3QgZnJhbWVSZWN0KQordm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6
c2V0Q3VycmVudFBhaW50Q2hhcmFjdGVyaXN0aWNzRm9yU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIpCiB7Ci0gICAgW3Njcm9sbGJhclBhaW50ZXIgc2V0RW5hYmxlZDpl
bmFibGVkXTsKLSAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRCb3VuZHNTaXplOiBOU1NpemVGcm9t
Q0dTaXplKGZyYW1lUmVjdC5zaXplKV07Ci0gICAgW3Njcm9sbGJhclBhaW50ZXIgc2V0RG91Ymxl
VmFsdWU6dmFsdWVdOwotICAgIFtzY3JvbGxiYXJQYWludGVyIHNldEtub2JQcm9wb3J0aW9uOnBy
b3BvcnRpb25dOworICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHBhaW50ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKIAorICAgIGZsb2F0IHZhbHVlOworICAgIGZsb2F0IG92ZXJoYW5n
OworICAgIFNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsYmFyVmFsdWVBbmRPdmVyaGFuZyhz
Y3JvbGxiYXItPmN1cnJlbnRQb3MoKSwgc2Nyb2xsYmFyLT50b3RhbFNpemUoKSwgc2Nyb2xsYmFy
LT52aXNpYmxlU2l6ZSgpLCB2YWx1ZSwgb3ZlcmhhbmcpOworICAgIGZsb2F0IHByb3BvcnRpb24g
PSAoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAtIG92ZXJo
YW5nKSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCk7CisKKyAgICBbcGFpbnRlciBzZXRFbmFibGVk
OnNjcm9sbGJhci0+ZW5hYmxlZCgpXTsKKyAgICBbcGFpbnRlciBzZXRCb3VuZHNTaXplOnNjcm9s
bGJhci0+ZnJhbWVSZWN0KCkuc2l6ZSgpXTsKKyAgICBbcGFpbnRlciBzZXREb3VibGVWYWx1ZTp2
YWx1ZV07CisgICAgW3BhaW50ZXIgc2V0S25vYlByb3BvcnRpb246cHJvcG9ydGlvbl07Cit9CisK
K3N0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50ZXJQYWludChTY3JvbGxiYXJQYWludGVyIHNjcm9s
bGJhclBhaW50ZXIsIGJvb2wgZW5hYmxlZCkKK3sKICAgICAvLyBVc2UgcmVjdEZvclBhcnQ6IGhl
cmU7IGl0IHdpbGwgdGFrZSB0aGUgZXhwYW5zaW9uIHRyYW5zaXRpb24gcHJvZ3Jlc3MgaW50byBh
Y2NvdW50LgogICAgIE5TUmVjdCB0cmFja1JlY3QgPSBbc2Nyb2xsYmFyUGFpbnRlciByZWN0Rm9y
UGFydDpOU1Njcm9sbGVyS25vYlNsb3RdOwogICAgIFtzY3JvbGxiYXJQYWludGVyIGRyYXdLbm9i
U2xvdEluUmVjdDp0cmFja1JlY3QgaGlnaGxpZ2h0Ok5PXTsKQEAgLTQ4MCwzNyArNDkwLDE4IEBA
IHN0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50ZXJQYWludChTY3JvbGwKIAogYm9vbCBTY3JvbGxi
YXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogewotICAgIGZs
b2F0IHZhbHVlID0gMDsKLSAgICBmbG9hdCBvdmVyaGFuZyA9IDA7CisgICAgc2V0Q3VycmVudFBh
aW50Q2hhcmFjdGVyaXN0aWNzRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAKLSAgICBpZiAoc2Ny
b2xsYmFyLT5jdXJyZW50UG9zKCkgPCAwKSB7Ci0gICAgICAgIC8vIFNjcm9sbGVkIHBhc3QgdGhl
IHRvcC4KLSAgICAgICAgdmFsdWUgPSAwOwotICAgICAgICBvdmVyaGFuZyA9IC1zY3JvbGxiYXIt
PmN1cnJlbnRQb3MoKTsKLSAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSAr
IHNjcm9sbGJhci0+Y3VycmVudFBvcygpID4gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSkgewotICAg
ICAgICAvLyBTY3JvbGxlZCBwYXN0IHRoZSBib3R0b20uCi0gICAgICAgIHZhbHVlID0gMTsKLSAg
ICAgICAgb3ZlcmhhbmcgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSArIHNjcm9sbGJhci0+dmlz
aWJsZVNpemUoKSAtIHNjcm9sbGJhci0+dG90YWxTaXplKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gV2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHNjcm9sbGFibGUgYXJlYS4KLSAgICAgICAg
aW50IG1heGltdW0gPSBzY3JvbGxiYXItPm1heGltdW0oKTsKLSAgICAgICAgaWYgKG1heGltdW0g
PiAwKQotICAgICAgICAgICAgdmFsdWUgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAvIG1heGlt
dW07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICBpZiAoIXNjcm9s
bGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKSB7CisgICAgICAgIFRlbXBv
cmFyeUNoYW5nZTxib29sPiBpc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoZ19pc0N1cnJlbnRs
eURyYXdpbmdJbnRvTGF5ZXIsIGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7CisgICAgCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7Cisg
ICAgICAgIGNvbnRleHQtPmNsaXAoZGFtYWdlUmVjdCk7CisgICAgICAgIGNvbnRleHQtPnRyYW5z
bGF0ZShzY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55
KCkpOworICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KGNv
bnRleHQpOworICAgICAgICBzY3JvbGxiYXJQYWludGVyUGFpbnQoc2Nyb2xsYmFyTWFwKCktPmdl
dChzY3JvbGxiYXIpLmdldCgpLCBzY3JvbGxiYXItPmVuYWJsZWQoKSk7CiAgICAgfQogCi0gICAg
VGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGlzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihnX2lzQ3Vy
cmVudGx5RHJhd2luZ0ludG9MYXllciwgY29udGV4dC0+aXNDQUxheWVyQ29udGV4dCgpKTsKLSAg
ICAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwot
ICAgIGNvbnRleHQtPmNsaXAoZGFtYWdlUmVjdCk7Ci0gICAgY29udGV4dC0+dHJhbnNsYXRlKHNj
cm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSk7Ci0g
ICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250ZXh0KTsKLSAg
ICBzY3JvbGxiYXJQYWludGVyUGFpbnQoc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdl
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhci0+ZW5hYmxlZCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDxDR0Zsb2F0PihzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIC0g
b3ZlcmhhbmcpIC8gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkocmV2aXNp
b24gMTU3MjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGludCB2aXNpYmxlV2lkdGgoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEludFNpemUg
Y29udGVudHNTaXplKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBJbnRSZWN0IHNjcm9s
bGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlc1Njcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgog
ICAgIHZvaWQgc2Nyb2xsVG8oaW50IG9mZnNldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTU3MjUwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjksNiArMTAyOSw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3Qg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25z
KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3goKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlc1Njcm9s
bExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVl
OyB9CiAKICAgICAvLyBSZWN0YW5nbGUgZW5jb21wYXNzaW5nIHRoZSBzY3JvbGwgY29ybmVyIGFu
ZCByZXNpemVyIHJlY3QuCiAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgp
IGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDE1NzI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjkz
LDcgKzI2OTMsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlT3ZlcmZsCiAg
ICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzKTsKICAgICAgICAgICAgIG1fbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTaG93RGVidWdCb3JkZXIobV9zaG93RGVidWdC
b3JkZXJzKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhci0+c2V0TmFtZSgiaG9yaXpvbnRhbCBzY3JvbGxiYXIiKTsKKyAgICAgICAgICAg
IG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLT5zZXROYW1lKCJob3Jpem9udGFsIHNjcm9s
bGJhciBjb250YWluZXIiKTsKKwogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0Ep
CiAgICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0QWNjZWxlcmF0
ZXNEcmF3aW5nKGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7CkBAIC0yNzE2LDcgKzI3MTcs
NyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlT3ZlcmZsCiAgICAgICAgICAg
ICBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3Jh
cGhpY3NMYXllckZhY3RvcnkoKSwgdGhpcyk7CiAgICAgICAgICAgICBtX2xheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXItPnNldFNob3dEZWJ1Z0JvcmRlcihtX3Nob3dEZWJ1Z0JvcmRlcnMpOwogI2lm
bmRlZiBOREVCVUcKLSAgICAgICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+c2V0
TmFtZSgidmVydGljYWwgc2Nyb2xsYmFyIik7CisgICAgICAgICAgICBtX2xheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXItPnNldE5hbWUoInZlcnRpY2FsIHNjcm9sbGJhciBjb250YWluZXIiKTsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKENBKQogICAgICAgICAgICAgbV9sYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoYWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guaAkocmV2aXNpb24gMTU3MjUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDYgKzEyMyw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZXNTY3JvbGxMYXllclBvc2l0aW9u
T25NYWluVGhyZWFkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmly
dHVhbCBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNv
bnN0IE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MjUwKQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMt
MTAtMTAgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFNjcm9sbGJh
cnMgYXJlIHVwZGF0ZWQgb24gdGhlIG1haW4gdGhyZWFkIHJhdGhlciB0aGFuIHRoZSBzY3JvbGxp
bmcgdGhyZWFkIAorICAgICAgICAoY2F1c2luZyBzY3JvbGwgYmFycyBub3QgdG8gYXBwZWFyL3Vw
ZGF0ZSBxdWlja2x5IGluIHNvbWUgY2FzZXMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI1ODUKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MTA3NzU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHB1cmUgdmlydHVhbCBmdW5jdGlvbi4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorCiAyMDEzLTEwLTEw
ICBTZXJnaW8gQ29ycmVpYSAgPHNlcmdpby5jb3JyZWlhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAg
ICAgQ29udmVydCBzb21lIE93blB0ci9QYXNzT3duUHRyIGluIENvb3JkaW5hdGVkR3JhcGhpY3Mg
Y29kZSB0byBzdGQ6OnVuaXF1ZV9wdHIncwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCShyZXZpc2lvbiAxNTcyNTApCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTgsNiArMTk4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBh
cmVudFBvaW50KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlc1Njcm9s
bExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVl
OyB9CiAKICAgICAvLyBQREZQbHVnaW4gZnVuY3Rpb25zLgogICAgIHZvaWQgdXBkYXRlU2Nyb2xs
YmFycygpOwo=
</data>
<flag name="review"
          id="236379"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>