<?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>208904</bug_id>
          
          <creation_ts>2020-03-10 21:00:09 -0700</creation_ts>
          <short_desc>Safari sometimes crashes when switch video into PiP mode</short_desc>
          <delta_ts>2020-04-06 13:19:40 -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>Media</component>
          <version>WebKit 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="Peng Liu">peng.liu6</reporter>
          <assigned_to name="Peng Liu">peng.liu6</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1628510</commentid>
    <comment_count>0</comment_count>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-10 21:00:09 -0700</bug_when>
    <thetext>Safari sometimes crash when switch video into PiP mode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628511</commentid>
    <comment_count>1</comment_count>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-10 21:00:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/59837202&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628515</commentid>
    <comment_count>2</comment_count>
      <attachid>393203</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-10 21:11:14 -0700</bug_when>
    <thetext>Created attachment 393203
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628521</commentid>
    <comment_count>3</comment_count>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-10 21:36:19 -0700</bug_when>
    <thetext>The assertion &quot;ASSERT(clipRectsContext.rootLayer == m_clipRectsCache-&gt;m_clipRectsRoot[clipRectsType]);&quot; in RenderLayer.cpp fails with the following stack trace:

ASSERTION FAILED: clipRectsContext.rootLayer == m_clipRectsCache-&gt;m_clipRectsRoot[clipRectsType]
./rendering/RenderLayer.cpp(5702) : Ref&lt;WebCore::ClipRects&gt; WebCore::RenderLayer::updateClipRects(const WebCore::RenderLayer::ClipRectsContext &amp;)
1   0x2c7e18219 WTFCrash
2   0x2acf32f2b WTFCrashWithInfo(int, char const*, char const*, int)
3   0x2b0b8a1f5 WebCore::RenderLayer::updateClipRects(WebCore::RenderLayer::ClipRectsContext const&amp;)
4   0x2b0b8a7d2 WebCore::RenderLayer::parentClipRects(WebCore::RenderLayer::ClipRectsContext const&amp;) const
5   0x2b0b7f99e WebCore::RenderLayer::backgroundClipRect(WebCore::RenderLayer::ClipRectsContext const&amp;) const
6   0x2b0b85cd9 WebCore::RenderLayer::calculateRects(WebCore::RenderLayer::ClipRectsContext const&amp;, WebCore::LayoutRect const&amp;, WebCore::LayoutRect&amp;, WebCore::ClipRect&amp;, WebCore::ClipRect&amp;, WebCore::LayoutSize const&amp;) const
7   0x2b0b83834 WebCore::RenderLayer::collectFragments(WTF::Vector&lt;WebCore::LayerFragment, 1ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;&amp;, WebCore::RenderLayer const*, WebCore::LayoutRect const&amp;, WebCore::RenderLayer::PaginationInclusionMode, WebCore::ClipRectsType, WebCore::OverlayScrollbarSizeRelevancy, WebCore::ShouldRespectOverflowClip, WebCore::LayoutSize const&amp;, WebCore::LayoutRect const*, WebCore::ShouldApplyRootOffsetToFragments)
8   0x2b0b80dfa WebCore::RenderLayer::paintLayerContents(WebCore::GraphicsContext&amp;, WebCore::RenderLayer::LayerPaintingInfo const&amp;, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;)
9   0x2b0b80184 WebCore::RenderLayer::paintLayerContentsAndReflection(WebCore::GraphicsContext&amp;, WebCore::RenderLayer::LayerPaintingInfo const&amp;, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;)
10  0x2b0b7f13b WebCore::RenderLayer::paintLayerWithEffects(WebCore::GraphicsContext&amp;, WebCore::RenderLayer::LayerPaintingInfo const&amp;, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;)
11  0x2b0b7e37b WebCore::RenderLayer::paintLayer(WebCore::GraphicsContext&amp;, WebCore::RenderLayer::LayerPaintingInfo const&amp;, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;)
12  0x2b0b845e4 WebCore::RenderLayer::paintList(WebCore::RenderLayer::LayerList, WebCore::GraphicsContext&amp;, WebCore::RenderLayer::LayerPaintingInfo const&amp;, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;)
13  0x2b0b810f4 WebCore::RenderLayer::paintLayerContents(WebCore::GraphicsContext&amp;, WebCore::RenderLayer::LayerPaintingInfo const&amp;, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;)
14  0x2b0b80184 WebCore::RenderLayer::paintLayerContentsAndReflection(WebCore::GraphicsContext&amp;, WebCore::RenderLayer::LayerPaintingInfo const&amp;, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;)
15  0x2b0b7f13b WebCore::RenderLayer::paintLayerWithEffects(WebCore::GraphicsContext&amp;, WebCore::RenderLayer::LayerPaintingInfo const&amp;, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;)
16  0x2b0b7e37b WebCore::RenderLayer::paintLayer(WebCore::GraphicsContext&amp;, WebCore::RenderLayer::LayerPaintingInfo const&amp;, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;)
17  0x2b0b7e085 WebCore::RenderLayer::paint(WebCore::GraphicsContext&amp;, WebCore::LayoutRect const&amp;, WebCore::LayoutSize const&amp;, WTF::OptionSet&lt;WebCore::PaintBehavior&gt;, WebCore::RenderObject*, WTF::OptionSet&lt;WebCore::RenderLayer::PaintLayerFlag&gt;, WebCore::RenderLayer::SecurityOriginPaintPolicy)
18  0x2afd68df2 WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage()
19  0x2afd68fa6 non-virtual thunk to WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage()
20  0x2ae6b36af WebCore::TextTrackRepresentationCocoa::update()
21  0x2afd679ec WebCore::MediaControlTextTrackContainerElement::updateTextTrackRepresentation()
22  0x2afd68fe9 WebCore::MediaControlTextTrackContainerElement::textTrackRepresentationBoundsChanged(WebCore::IntRect const&amp;)
23  0x2ae6bf5a5 WebCore::TextTrackRepresentationCocoa::boundsChanged()::$_0::operator()() const
24  0x2ae6bf52e WTF::Detail::CallableWrapper&lt;WebCore::TextTrackRepresentationCocoa::boundsChanged()::$_0, void&gt;::call()
25  0x2acf456d2 WTF::Function&lt;void ()&gt;::operator()() const
26  0x2ad1f0c05 WebCore::GenericTaskQueue&lt;WebCore::Timer&gt;::enqueueTask(WTF::Function&lt;void ()&gt;&amp;&amp;)::&apos;lambda&apos;()::operator()() const
27  0x2ad1f0a3e WTF::Detail::CallableWrapper&lt;WebCore::GenericTaskQueue&lt;WebCore::Timer&gt;::enqueueTask(WTF::Function&lt;void ()&gt;&amp;&amp;)::&apos;lambda&apos;(), void&gt;::call()
28  0x2acf456d2 WTF::Function&lt;void ()&gt;::operator()() const
29  0x2b04e36ef WebCore::TaskDispatcher&lt;WebCore::Timer&gt;::dispatchOneTask()
30  0x2b04e33c5 WebCore::TaskDispatcher&lt;WebCore::Timer&gt;::sharedTimerFired()
31  0x2b04e7c81 WebCore::TaskDispatcher&lt;WebCore::Timer&gt;::sharedTimer()::$_1::operator()() const</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628524</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-03-10 21:41:28 -0700</bug_when>
    <thetext>This looks to me the wrong direction. Is there a reason why we don&apos;t address this issue properly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628525</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-03-10 21:42:17 -0700</bug_when>
    <thetext>(In reply to Peng Liu from comment #2)
&gt; Created attachment 393203 [details]
&gt; WIP patch
If it&apos;s a WIP patch, why the r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628527</commentid>
    <comment_count>6</comment_count>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-10 21:46:53 -0700</bug_when>
    <thetext>(In reply to zalan from comment #5)
&gt; (In reply to Peng Liu from comment #2)
&gt; &gt; Created attachment 393203 [details]
&gt; &gt; WIP patch
&gt; If it&apos;s a WIP patch, why the r?

I am not sure whether the assertion is valid or not in the specific scenario and would like to get some comments. The patch works by removing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628533</commentid>
    <comment_count>7</comment_count>
      <attachid>393203</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-10 21:58:37 -0700</bug_when>
    <thetext>Comment on attachment 393203
WIP patch

The assertion still indicates that this isn&apos;t right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628978</commentid>
    <comment_count>8</comment_count>
      <attachid>393324</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-11 18:37:18 -0700</bug_when>
    <thetext>Created attachment 393324
WIP patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629038</commentid>
    <comment_count>9</comment_count>
      <attachid>393338</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-11 21:33:57 -0700</bug_when>
    <thetext>Created attachment 393338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629045</commentid>
    <comment_count>10</comment_count>
      <attachid>393338</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-11 21:59:43 -0700</bug_when>
    <thetext>Comment on attachment 393338
Patch

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

&gt; Source/WebCore/dom/Document.h:1807
&gt; +    WeakPtr&lt;HTMLMediaElement&gt; m_mediaElementShowingTextTrack;

Is there only ever one?

&gt; Source/WebCore/html/HTMLMediaElement.cpp:6385
&gt; +    if (!m_haveVisibleTextTrack &amp;&amp; !hasMediaControls())
&gt; +        return;
&gt; +    if (!hasMediaControls() &amp;&amp; !createMediaControls())
&gt; +        return;

The two adjacent !hasMediaControls() checks are weird.

&gt; Source/WebCore/html/shadow/MediaControlElements.h:489
&gt; +    void layoutIfNeeded();
&gt; +    void paintIfNeeded();

These are not things that elements should know about. Renderers layout and paint. Elements are just input into render tree creation (along with style).

&gt; Source/WebCore/html/shadow/MediaControls.cpp:426
&gt; +void MediaControls::paintTextTrackIfNeeded()
&gt; +{
&gt; +    if (m_textDisplayContainer)
&gt; +        m_textDisplayContainer-&gt;paintIfNeeded();
&gt; +}

Let&apos;s call this &quot;update text track image&quot; or something.

&gt; Source/WebCore/rendering/RenderMediaControlElements.cpp:106
&gt;      LayoutStateDisabler layoutStateDisabler(view().frameView().layoutContext());

I&apos;m really thrown by the fact that this class is called RenderTextTrackContainerElement. It&apos;s not an Element. Can we rename it in a first step, to RenderTextTrackContainer ?

&gt; Source/WebCore/rendering/RenderMediaControlElements.cpp:107
&gt; +    static_cast&lt;MediaControlTextTrackContainerElement*&gt;(element())-&gt;layoutIfNeeded();

Elements don&apos;t do layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629047</commentid>
    <comment_count>11</comment_count>
      <attachid>393338</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-03-11 22:07:41 -0700</bug_when>
    <thetext>Comment on attachment 393338
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderMediaControlElements.cpp:107
&gt;&gt; +    static_cast&lt;MediaControlTextTrackContainerElement*&gt;(element())-&gt;layoutIfNeeded();
&gt; 
&gt; Elements don&apos;t do layout.

I am sure we can do better than static_cast&lt;&gt;-&gt;layout().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629313</commentid>
    <comment_count>12</comment_count>
      <attachid>393399</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-12 12:48:02 -0700</bug_when>
    <thetext>Created attachment 393399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629315</commentid>
    <comment_count>13</comment_count>
      <attachid>393338</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-12 12:52:24 -0700</bug_when>
    <thetext>Comment on attachment 393338
Patch

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

&gt;&gt; Source/WebCore/dom/Document.h:1807
&gt;&gt; +    WeakPtr&lt;HTMLMediaElement&gt; m_mediaElementShowingTextTrack;
&gt; 
&gt; Is there only ever one?

Yes, there is only one video element showing text track (in video fullscreen or PiP mode).

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:6385
&gt;&gt; +        return;
&gt; 
&gt; The two adjacent !hasMediaControls() checks are weird.

Yes. I merged them.

&gt;&gt; Source/WebCore/html/shadow/MediaControlElements.h:489
&gt;&gt; +    void paintIfNeeded();
&gt; 
&gt; These are not things that elements should know about. Renderers layout and paint. Elements are just input into render tree creation (along with style).

Right. Renamed them to updateTextTrackSizeAndStyle() and updateTextTrackRepresentationImageIfNeeded().

&gt;&gt; Source/WebCore/html/shadow/MediaControls.cpp:426
&gt;&gt; +}
&gt; 
&gt; Let&apos;s call this &quot;update text track image&quot; or something.

OK. Renamed it to updateTextTrackRepresentationImageIfNeeded().

&gt;&gt; Source/WebCore/rendering/RenderMediaControlElements.cpp:106
&gt;&gt;      LayoutStateDisabler layoutStateDisabler(view().frameView().layoutContext());
&gt; 
&gt; I&apos;m really thrown by the fact that this class is called RenderTextTrackContainerElement. It&apos;s not an Element. Can we rename it in a first step, to RenderTextTrackContainer ?

Good idea. Let&apos;s rename it to RenderMediaControlTextTrackContainer.
Filed a bug webkit.org/b/209008 to cleanup this file.

&gt;&gt;&gt; Source/WebCore/rendering/RenderMediaControlElements.cpp:107
&gt;&gt;&gt; +    static_cast&lt;MediaControlTextTrackContainerElement*&gt;(element())-&gt;layoutIfNeeded();
&gt;&gt; 
&gt;&gt; Elements don&apos;t do layout.
&gt; 
&gt; I am sure we can do better than static_cast&lt;&gt;-&gt;layout().

Ditto. Renamed the functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629407</commentid>
    <comment_count>14</comment_count>
      <attachid>393399</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-12 16:18:38 -0700</bug_when>
    <thetext>Comment on attachment 393399
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:5814
&gt; +        document().clearMediaElementShowingTextTrack();

I don&apos;t see a call to clearMediaElementShowingTextTrack() if the media element is removed from the document. There probably needs to be another call from HTMLMediaElement::removedFromAncestor() or something.

&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:1216
&gt; +void MediaControlTextTrackContainerElement::updateTextTrackSizeAndStyle()

This is called &quot;size and style&quot; but it doesn&apos;t do anything with style (which is a good thing).

&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:1237
&gt; +void MediaControlTextTrackContainerElement::updateTextTrackRepresentationImageIfNeeded()
&gt; +{
&gt; +    if (!m_needsPaint)
&gt; +        return;
&gt; +
&gt; +    m_needsPaint = false;
&gt; +
&gt; +    // We can only call m_textTrackRepresentation-&gt;update() after the layout
&gt; +    // is clean, because m_textTrackRepresentation-&gt;update() will call
&gt; +    // createTextTrackRepresentationImage() to paint the subtree of
&gt; +    // RenderTextTrackContainerElement to an image buffer.
&gt; +    if (m_textTrackRepresentation)
&gt; +        m_textTrackRepresentation-&gt;update();

m_needsPaint should be named to reflect the functions that get called when it changes state. That&apos;s called &quot;update&quot; here, which is vague. It&apos;s more like &quot;generate text track representation&quot;. The fact that it&apos;s painting into an image buffer is implementation detail.

&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:1447
&gt;      updateActiveCuesFontSize();
&gt; -    updateDisplay();
&gt;      updateTextStrokeStyle();

It looks like there&apos;s style changing happening here, which should really happen along with other style changes on the document (before styleResolve). If so, please file a bug to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629713</commentid>
    <comment_count>15</comment_count>
      <attachid>393507</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-13 11:12:49 -0700</bug_when>
    <thetext>Created attachment 393507
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629740</commentid>
    <comment_count>16</comment_count>
      <attachid>393399</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-03-13 11:50:59 -0700</bug_when>
    <thetext>Comment on attachment 393399
Patch

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

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:5814
&gt;&gt; +        document().clearMediaElementShowingTextTrack();
&gt; 
&gt; I don&apos;t see a call to clearMediaElementShowingTextTrack() if the media element is removed from the document. There probably needs to be another call from HTMLMediaElement::removedFromAncestor() or something.

The text track representation is used to show captions in video fullscreen or picture-in-picture mode, and only one media element can be in fullscreen or picture-in-picture mode (for now). When a media element exit fullscreen (the element will exit fullscreen or picture-in-picture if it is removed from the document) it will be removed from the document.

&gt;&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:1216
&gt;&gt; +void MediaControlTextTrackContainerElement::updateTextTrackSizeAndStyle()
&gt; 
&gt; This is called &quot;size and style&quot; but it doesn&apos;t do anything with style (which is a good thing).

I found we do not need to call this function from RenderMediaControlTextTrackContainer::layout(), so I removed this function.

&gt;&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:1237
&gt;&gt; +        m_textTrackRepresentation-&gt;update();
&gt; 
&gt; m_needsPaint should be named to reflect the functions that get called when it changes state. That&apos;s called &quot;update&quot; here, which is vague. It&apos;s more like &quot;generate text track representation&quot;. The fact that it&apos;s painting into an image buffer is implementation detail.

Good points. I renamed m_needsPaint to m_needsGenerateTextTrackRepresentation and updated the comments.

&gt;&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:1447
&gt;&gt;      updateTextStrokeStyle();
&gt; 
&gt; It looks like there&apos;s style changing happening here, which should really happen along with other style changes on the document (before styleResolve). If so, please file a bug to fix.

Right. I refactored the code to avoid updating styles during layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629848</commentid>
    <comment_count>17</comment_count>
      <attachid>393507</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-13 14:49:37 -0700</bug_when>
    <thetext>Comment on attachment 393507
Patch for landing

Clearing flags on attachment: 393507

Committed r258434: &lt;https://trac.webkit.org/changeset/258434&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638272</commentid>
    <comment_count>18</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2020-04-06 13:19:40 -0700</bug_when>
    <thetext>*** Bug 208864 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393203</attachid>
            <date>2020-03-10 21:11:14 -0700</date>
            <delta_ts>2020-03-11 18:37:15 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-208904-20200310211113.patch</filename>
            <type>text/plain</type>
            <size>3449</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQyZWYwZjExYzM1OTY0
MzUyNTUwOGUzMDIzZDg3YjJmOTJkN2Y2OC4uMjM4MzU4YTgwYTAyNTNhY2YxYmI1NmEzY2EwZDk5
Mjg4NDg4YzUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTAzLTEwICBQZW5n
IExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CisKKyAgICAgICAgU2FmYXJpIHNvbWV0aW1lcyBj
cmFzaCB3aGVuIHN3aXRjaCB2aWRlbyBpbnRvIFBpUCBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg5MDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWxsIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRp
b24tPnVwZGF0ZSgpIGFuZCB1cGRhdGVDdWVTdHlsZXMoKSBmcm9tIGEgdGFzayBxdWV1ZQorICAg
ICAgICB0byBhdm9pZCBpbnRlcmZlcmVuY2Ugd2l0aCB0aGUgbGF5b3V0LgorCisgICAgICAgICog
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bGF5b3V0SWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlQ2xpcFJlY3RzKToKKwogMjAyMC0w
My0xMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSB0aGUgc3BlY2lhbCBEaXNwbGF5TGlzdCBoYW5kbGluZyBpbiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggNmQwZjM3OWQ1ZjcxMWIyN2EzNDFlZGYwOTdh
YzRlZTAzMGNmOWE5Yy4uZGNiOGZiZTI0Yjg2Nzg3MmU4NDVmYjU2ZTNmNDVjMTI5MTdlNzhkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcApAQCAtMTM3MSwxNiArMTM3MSwxMyBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OmV4aXRlZEZ1bGxzY3JlZW4oKQogdm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpsYXlvdXRJZk5lY2Vzc2FyeSgpCiB7CiAgICAgbV93
YWl0aW5nRm9yRmlyc3RMYXlvdXQgPSBmYWxzZTsKLQotICAgIGF1dG8gc2l6ZUNoYW5nZWQgPSB1
cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCk7Ci0gICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRp
b24pCi0gICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOwotCi0gICAg
aWYgKCFzaXplQ2hhbmdlZCkKKyAgICBpZiAoIXVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUUgKDEyMTE3MCk6IFRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIGR1cmluZyBsYXlvdXQsIGFuZCBzaG91bGQgbGF5IG91dCB0aGUgdGV4dCB0cmFja3Mg
aW1tZWRpYXRlbHkuCiAgICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdICgpIHsKKyAg
ICAgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCisgICAgICAgICAgICBtX3RleHRU
cmFja1JlcHJlc2VudGF0aW9uLT51cGRhdGUoKTsKICAgICAgICAgdXBkYXRlQ3VlU3R5bGVzKCk7
CiAgICAgfSk7CiB9CkBAIC0xNDE4LDcgKzE0MTUsOSBAQCBib29sIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKQogdm9pZCBNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVTaXplcyhGb3JjZVVwZGF0
ZSBmb3JjZSkKIHsKICAgICBpZiAodXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpIHx8IGZvcmNlID09
IEZvcmNlVXBkYXRlOjpZZXMpCi0gICAgICAgIHVwZGF0ZUN1ZVN0eWxlcygpOworICAgICAgICBt
X3Rhc2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpc10gKCkgeworICAgICAgICAgICAgdXBkYXRlQ3Vl
U3R5bGVzKCk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUN1ZVN0eWxlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAppbmRleCBiOTY4NzRlYzYxYzA4MmUyZTFhMDY3ZTc2YjkxZTRmMDlh
ZWM0NDA1Li40ZWU1MDEyMTI5NGNkNjdmMGYwYjYyZGFiMjhhODI2MGU0NWI3Nzc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTU2OTksNyArNTY5OSw3IEBA
IFJlZjxDbGlwUmVjdHM+IFJlbmRlckxheWVyOjp1cGRhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJl
Y3RzQ29udGV4dCYgY2xpcFJlY3RzQ29uCiAgICAgQVNTRVJUKGNsaXBSZWN0c1R5cGUgPCBOdW1D
YWNoZWRDbGlwUmVjdHNUeXBlcyk7CiAgICAgaWYgKG1fY2xpcFJlY3RzQ2FjaGUpIHsKICAgICAg
ICAgaWYgKGF1dG8qIGNsaXBSZWN0cyA9IG1fY2xpcFJlY3RzQ2FjaGUtPmdldENsaXBSZWN0cyhj
bGlwUmVjdHNUeXBlLCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXApKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIgPT0gbV9jbGlwUmVj
dHNDYWNoZS0+bV9jbGlwUmVjdHNSb290W2NsaXBSZWN0c1R5cGVdKTsKKyAgICAgICAgICAgIC8v
IEFTU0VSVChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciA9PSBtX2NsaXBSZWN0c0NhY2hlLT5t
X2NsaXBSZWN0c1Jvb3RbY2xpcFJlY3RzVHlwZV0pOwogICAgICAgICAgICAgQVNTRVJUKG1fY2xp
cFJlY3RzQ2FjaGUtPm1fc2Nyb2xsYmFyUmVsZXZhbmN5W2NsaXBSZWN0c1R5cGVdID09IGNsaXBS
ZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kpOwogICAgICAgICAKICNp
ZmRlZiBDSEVDS19DQUNIRURfQ0xJUF9SRUNUUwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393324</attachid>
            <date>2020-03-11 18:37:18 -0700</date>
            <delta_ts>2020-03-11 21:33:55 -0700</delta_ts>
            <desc>WIP patch v2</desc>
            <filename>bug-208904-20200311183717.patch</filename>
            <type>text/plain</type>
            <size>25582</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQyZWYwZjExYzM1OTY0
MzUyNTUwOGUzMDIzZDg3YjJmOTJkN2Y2OC4uMDkxMTYxODEyNDM0ZmVkNjVhY2NmZDJmYTljMzc1
ZTNiZDBhMjE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIwLTAzLTExICBQZW5n
IExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CisKKyAgICAgICAgU2FmYXJpIHNvbWV0aW1lcyBj
cmFzaGVzIHdoZW4gc3dpdGNoIHZpZGVvIGludG8gUGlQIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODkwNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQgb25seSBzZXRzIG1fbmVlZHNQYWludCB0byB0cnVlCisgICAgICAgIGlmIHRo
ZSBjdWVzIGFyZSB1cGRhdGVkLCBhbmQgcGFpbnRzIGl0cyBzdWJ0cmVlIHRvIGFuIGltYWdlIGJ1
ZmZlcgorICAgICAgICBhdCB0aGUgZW5kIG9mIFBhZ2U6OnVwZGF0ZVJlbmRlcmluZygpLiBBZnRl
ciB0aGF0LCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hCisgICAgICAgIHdpbGwgdXNlIHRo
ZSBpbWFnZSBidWZmZXIgdG8gc2V0IHRoZSBjb250ZW50IG9mIHRoZSBsYXllciBmb3IgY2FwdGlv
bnMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnBhaW50VGV4dFRyYWNr
SWZOZWVkZWQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xz
SG9zdC5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2V0TWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6Y2xlYXJNZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWludFRleHRUcmFja0lmTmVlZGVkKToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0VGV4dFRyYWNrUmVwcmVzZW50
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrc0Fy
ZVJlYWR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRU
cmFja1JlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6cGFpbnRUZXh0VHJhY2tJZk5lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1M
TWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6dXBkYXRlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpzZXROZWVkc1BhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnBhaW50SWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50Ojp1cGRhdGVTaXplcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVDdWVzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxheW91dElmTmVjZXNzYXJ5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OnVwZGF0ZUN1ZVN0eWxlcyk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaDoKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OnBhaW50VGV4
dFRyYWNrSWZOZWVkZWQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaDoK
KyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXBkYXRl
UmVuZGVyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6bGF5b3V0KToKKwogMjAyMC0wMy0xMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgc3BlY2lhbCBEaXNwbGF5TGlzdCBo
YW5kbGluZyBpbiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNw
cAppbmRleCBjZWIzMDVkNGYzNTU5OGQ0MTQxNGU0ODkwMjZjN2M1OTZkYmI3MmE4Li4yMjhlMGU0
NWZhODc2NzA3YmFlZGEzZWU1YTRkYzU3NDE5NTVkYWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAK
QEAgLTE3Miw2ICsxNzIsMTIgQEAgdm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6dXBkYXRlVGV4dFRy
YWNrQ29udGFpbmVyKCkKICAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXItPnVwZGF0ZURpc3Bs
YXkoKTsKIH0KIAordm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6cGFpbnRUZXh0VHJhY2tJZk5lZWRl
ZCgpCit7CisgICAgaWYgKG1fdGV4dFRyYWNrQ29udGFpbmVyKQorICAgICAgICBtX3RleHRUcmFj
a0NvbnRhaW5lci0+cGFpbnRJZk5lZWRlZCgpOworfQorCiB2b2lkIE1lZGlhQ29udHJvbHNIb3N0
OjplbnRlcmVkRnVsbHNjcmVlbigpCiB7CiAgICAgaWYgKG1fdGV4dFRyYWNrQ29udGFpbmVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29u
dHJvbHNIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFD
b250cm9sc0hvc3QuaAppbmRleCA0Y2FlMDAwMmQ4Y2IxODk0MTg1OTQ4ZTZmNDcxMzEzNzhmM2M4
ODBiLi4zMjJmNDczMDViZGIxOTg4ZGYzYTEyZDc5M2I2MGEwYTFhYmI1MTEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9s
c0hvc3QuaApAQCAtNzEsNiArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIEZvcmNl
VXBkYXRlIHsgWWVzLCBObyB9OwogICAgIHZvaWQgdXBkYXRlQ2FwdGlvbkRpc3BsYXlTaXplcyhG
b3JjZVVwZGF0ZSA9IEZvcmNlVXBkYXRlOjpObyk7CisgICAgdm9pZCBwYWludFRleHRUcmFja0lm
TmVlZGVkKCk7CiAgICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigpOwogICAgIHZvaWQgZXhpdGVk
RnVsbHNjcmVlbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBmMmI2ZWRlODEyNTkz
OWQ2MjUzNmQ5NmJiYWRiY2E4ODYxNjVjYzI4Li4zODY0MzExMDRhYzU4MDRkZGNkNGE2YzM5ZDJk
YTJlNTljMzg0ZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU0NTEsNiArNTQ1MSwy
MiBAQCB2b2lkIERvY3VtZW50OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKICAgICAgICAg
ZWxlbWVudC0+Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogfQogCit2b2lkIERvY3VtZW50
OjpzZXRNZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQm
IGVsZW1lbnQpCit7CisgICAgbV9tZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrID0gbWFrZVdl
YWtQdHIoZWxlbWVudCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmNsZWFyTWVkaWFFbGVtZW50U2hv
d2luZ1RleHRUcmFjaygpCit7CisgICAgbV9tZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrID0g
bnVsbHB0cjsKK30KKwordm9pZCBEb2N1bWVudDo6cGFpbnRUZXh0VHJhY2tJZk5lZWRlZCgpCit7
CisgICAgaWYgKG1fbWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjaykKKyAgICAgICAgbV9tZWRp
YUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrLT5wYWludFRleHRUcmFja0lmTmVlZGVkKCk7Cit9CisK
ICNlbmRpZgogCiB2b2lkIERvY3VtZW50OjpzZXRTaG91bGRDcmVhdGVSZW5kZXJlcnMoYm9vbCBm
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAwZjdiYTg0Mjk1Y2M5ZjcxZjA5ZGUxNTgzNDk2Y2I3
MGM2NjlkNDU3Li42OThhMGM5YjQwNmNmMDhjOTllNzE1ODY0MGY1MzJmZDI5ZmZhYzVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaApAQCAtMTExNSw2ICsxMTE1LDkgQEAgcHVibGljOgogICAgIHZvaWQg
cmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVs
ZW1lbnQmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2Vk
Q2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIGNhcHRpb25QcmVmZXJlbmNl
c0NoYW5nZWQoKTsKKyAgICB2b2lkIHNldE1lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJhY2soY29u
c3QgSFRNTE1lZGlhRWxlbWVudCYpOworICAgIHZvaWQgY2xlYXJNZWRpYUVsZW1lbnRTaG93aW5n
VGV4dFRyYWNrKCk7CisgICAgdm9pZCBwYWludFRleHRUcmFja0lmTmVlZGVkKCk7CiAjZW5kaWYK
IAogICAgIHZvaWQgcmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZp
c2liaWxpdHlDaGFuZ2VDbGllbnQmKTsKQEAgLTE4MDEsNiArMTgwNCw3IEBAIHByaXZhdGU6CiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4g
bV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHM7CisgICAgV2Vha1B0cjxIVE1MTWVk
aWFFbGVtZW50PiBtX21lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJhY2s7CiAjZW5kaWYKIAogICAg
IEVsZW1lbnQqIG1fbWFpbkFydGljbGVFbGVtZW50IHsgbnVsbHB0ciB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggMGVmNTRhY2FmMjlhODk0YTA5ZjE0YWNk
MWFmMzdhOWZmMWM5YmNmZS4uYjA3ODM1YzQ5MjA3YmYzZWIxNjdmZTJmOWMyZTU1ODJhNjA4Njkz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0xODc2LDQ1
ICsxODc2LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVBY3RpdmVUZXh0VHJhY2tD
dWVzKGNvbnN0IE1lZGlhVGltZSYgbW92aWVUaW1lKQogICAgICAgICB1cGRhdGVUZXh0VHJhY2tE
aXNwbGF5KCk7CiB9CiAKLWJvb2wgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrc0FyZVJlYWR5
KCkgY29uc3QKLXsKLSAgICAvLyA0LjguMTAuMTIuMSBUZXh0IHRyYWNrIG1vZGVsCi0gICAgLy8g
Li4uCi0gICAgLy8gVGhlIHRleHQgdHJhY2tzIG9mIGEgbWVkaWEgZWxlbWVudCBhcmUgcmVhZHkg
aWYgYWxsIHRoZSB0ZXh0IHRyYWNrcyB3aG9zZSBtb2RlIHdhcyBub3QKLSAgICAvLyBpbiB0aGUg
ZGlzYWJsZWQgc3RhdGUgd2hlbiB0aGUgZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdv
cml0aG0gbGFzdCBzdGFydGVkIG5vdwotICAgIC8vIGhhdmUgYSB0ZXh0IHRyYWNrIHJlYWRpbmVz
cyBzdGF0ZSBvZiBsb2FkZWQgb3IgZmFpbGVkIHRvIGxvYWQuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChtX3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdh
bltpXS0+cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6OkxvYWRpbmcKLSAgICAgICAgICAg
IHx8IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuW2ldLT5yZWFkaW5lc3NT
dGF0ZSgpID09IFRleHRUcmFjazo6Tm90TG9hZGVkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCi17Ci0gICAgaWYg
KHRyYWNrLT5yZWFkaW5lc3NTdGF0ZSgpICE9IFRleHRUcmFjazo6TG9hZGluZwotICAgICAgICAm
JiB0cmFjay0+bW9kZSgpICE9IFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQpIHsKLSAgICAgICAg
Ly8gVGhlIGRpc3BsYXkgdHJlZXMgZXhpc3QgYXMgbG9uZyBhcyB0aGUgdHJhY2sgaXMgYWN0aXZl
LCBpbiB0aGlzIGNhc2UsCi0gICAgICAgIC8vIGFuZCBpZiB0aGUgc2FtZSB0cmFjayBpcyBsb2Fk
ZWQgYWdhaW4gKGZvciBleGFtcGxlIGlmIHRoZSBzcmMgYXR0cmlidXRlIHdhcyBjaGFuZ2VkKSwK
LSAgICAgICAgLy8gY3VlcyBjYW4gYmUgYWNjdW11bGF0ZWQgd2l0aCB0aGUgb2xkIG9uZXMsIHRo
YXQncyB3aHkgdGhleSBuZWVkcyB0byBiZSBmbHVzaGVkCi0gICAgICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNsZWFyVGV4dERpc3BsYXlD
b250YWluZXIoKTsKLSAgICAgICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIH0KLSAg
ICBpZiAobV9wbGF5ZXIgJiYgbV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW4u
Y29udGFpbnModHJhY2spKSB7Ci0gICAgICAgIGlmICh0cmFjay0+cmVhZGluZXNzU3RhdGUoKSAh
PSBUZXh0VHJhY2s6OkxvYWRpbmcpCi0gICAgICAgICAgICBzZXRSZWFkeVN0YXRlKG1fcGxheWVy
LT5yZWFkeVN0YXRlKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFRoZSB0cmFjayByZWFk
aW5lc3Mgc3RhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSB1c2VyCi0g
ICAgICAgIC8vIGNsaWNraW5nIHRoZSBjYXB0aW9ucyBidXR0b24uIEluIHRoaXMgY2FzZSwgYSBj
aGVjayB3aGV0aGVyIGFsbCB0aGUKLSAgICAgICAgLy8gcmVzb3VyY2VzIGhhdmUgZmFpbGVkIGxv
YWRpbmcgc2hvdWxkIGJlIGRvbmUgaW4gb3JkZXIgdG8gaGlkZSB0aGUgQ0MgYnV0dG9uLgotICAg
ICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpICYmIHRyYWNrLT5yZWFkaW5lc3NTdGF0ZSgpID09
IFRleHRUcmFjazo6RmFpbGVkVG9Mb2FkKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5y
ZWZyZXNoQ2xvc2VkQ2FwdGlvbnNCdXR0b25WaXNpYmlsaXR5KCk7Ci0gICAgfQotfQotCiB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmF1ZGlvVHJhY2tFbmFibGVkQ2hhbmdlZChBdWRpb1RyYWNrJiB0
cmFjaykKIHsKICAgICBpZiAobV9hdWRpb1RyYWNrcyAmJiBtX2F1ZGlvVHJhY2tzLT5jb250YWlu
cyh0cmFjaykpCkBAIC01ODQ2LDYgKzU4MDcsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmUK
IHsKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT5zZXRUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbihyZXByZXNlbnRhdGlvbik7CisKKyAgICBpZiAocmVwcmVzZW50YXRpb24pCisg
ICAgICAgIGRvY3VtZW50KCkuc2V0TWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjaygqdGhpcyk7
CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudCgpLmNsZWFyTWVkaWFFbGVtZW50U2hvd2luZ1Rl
eHRUcmFjaygpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN5bmNUZXh0VHJhY2tCb3Vu
ZHMoKQpAQCAtNjM0MCw2ICs2MzA2LDkxIEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKCkgY29uc3QKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAorYm9v
bCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tzQXJlUmVhZHkoKSBjb25zdAoreworICAgIC8v
IDQuOC4xMC4xMi4xIFRleHQgdHJhY2sgbW9kZWwKKyAgICAvLyAuLi4KKyAgICAvLyBUaGUgdGV4
dCB0cmFja3Mgb2YgYSBtZWRpYSBlbGVtZW50IGFyZSByZWFkeSBpZiBhbGwgdGhlIHRleHQgdHJh
Y2tzIHdob3NlIG1vZGUgd2FzIG5vdAorICAgIC8vIGluIHRoZSBkaXNhYmxlZCBzdGF0ZSB3aGVu
IHRoZSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobSBsYXN0IHN0YXJ0ZWQg
bm93CisgICAgLy8gaGF2ZSBhIHRleHQgdHJhY2sgcmVhZGluZXNzIHN0YXRlIG9mIGxvYWRlZCBv
ciBmYWlsZWQgdG8gbG9hZC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJh
Y2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuW2ldLT5yZWFkaW5lc3NTdGF0
ZSgpID09IFRleHRUcmFjazo6TG9hZGluZworICAgICAgICAgICAgfHwgbV90ZXh0VHJhY2tzV2hl
blJlc291cmNlU2VsZWN0aW9uQmVnYW5baV0tPnJlYWRpbmVzc1N0YXRlKCkgPT0gVGV4dFRyYWNr
OjpOb3RMb2FkZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrUmVhZHlTdGF0
ZUNoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAodHJhY2stPnJlYWRpbmVzc1N0
YXRlKCkgIT0gVGV4dFRyYWNrOjpMb2FkaW5nCisgICAgICAgICYmIHRyYWNrLT5tb2RlKCkgIT0g
VGV4dFRyYWNrOjpNb2RlOjpEaXNhYmxlZCkgeworICAgICAgICAvLyBUaGUgZGlzcGxheSB0cmVl
cyBleGlzdCBhcyBsb25nIGFzIHRoZSB0cmFjayBpcyBhY3RpdmUsIGluIHRoaXMgY2FzZSwKKyAg
ICAgICAgLy8gYW5kIGlmIHRoZSBzYW1lIHRyYWNrIGlzIGxvYWRlZCBhZ2FpbiAoZm9yIGV4YW1w
bGUgaWYgdGhlIHNyYyBhdHRyaWJ1dGUgd2FzIGNoYW5nZWQpLAorICAgICAgICAvLyBjdWVzIGNh
biBiZSBhY2N1bXVsYXRlZCB3aXRoIHRoZSBvbGQgb25lcywgdGhhdCdzIHdoeSB0aGV5IG5lZWRz
IHRvIGJlIGZsdXNoZWQKKyAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xlYXJUZXh0RGlzcGxheUNvbnRhaW5lcigpOworICAgICAg
ICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgfQorICAgIGlmIChtX3BsYXllciAmJiBt
X3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdhbi5jb250YWlucyh0cmFjaykpIHsK
KyAgICAgICAgaWYgKHRyYWNrLT5yZWFkaW5lc3NTdGF0ZSgpICE9IFRleHRUcmFjazo6TG9hZGlu
ZykKKyAgICAgICAgICAgIHNldFJlYWR5U3RhdGUobV9wbGF5ZXItPnJlYWR5U3RhdGUoKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIHRyYWNrIHJlYWRpbmVzcyBzdGF0ZSBtaWdodCBo
YXZlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIHVzZXIKKyAgICAgICAgLy8gY2xpY2tpbmcg
dGhlIGNhcHRpb25zIGJ1dHRvbi4gSW4gdGhpcyBjYXNlLCBhIGNoZWNrIHdoZXRoZXIgYWxsIHRo
ZQorICAgICAgICAvLyByZXNvdXJjZXMgaGF2ZSBmYWlsZWQgbG9hZGluZyBzaG91bGQgYmUgZG9u
ZSBpbiBvcmRlciB0byBoaWRlIHRoZSBDQyBidXR0b24uCisgICAgICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkgJiYgdHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgPT0gVGV4dFRyYWNrOjpGYWlsZWRU
b0xvYWQpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlZnJlc2hDbG9zZWRDYXB0aW9u
c0J1dHRvblZpc2liaWxpdHkoKTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheShUZXh0VHJhY2tWaXNpYmlsaXR5Q2hlY2tUeXBlIGNo
ZWNrVHlwZSkKK3sKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsIGNoZWNrVHlwZSk7Cisg
ICAgQVNTRVJUKG1fdGV4dFRyYWNrcyk7CisKKyAgICBpZiAobV9wcm9jZXNzaW5nUHJlZmVyZW5j
ZUNoYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRvY3VtZW50KCkuYWN0aXZlRE9N
T2JqZWN0c0FyZVN0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBoYXZlVmlz
aWJsZVRleHRUcmFjayA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Rl
eHRUcmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdGV4dFRyYWNrcy0+aXRl
bShpKS0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgeworICAgICAgICAgICAg
aGF2ZVZpc2libGVUZXh0VHJhY2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoY2hlY2tUeXBlID09IENoZWNrVGV4dFRyYWNrVmlzaWJpbGl0
eSAmJiBtX2hhdmVWaXNpYmxlVGV4dFRyYWNrID09IGhhdmVWaXNpYmxlVGV4dFRyYWNrKSB7Cisg
ICAgICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVudE1lZGlhVGltZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZl
VmlzaWJsZVRleHRUcmFjazsKKyAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZp
c2libGVUZXh0VHJhY2s7CisKKyNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQorICAg
IGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgZW5z
dXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKKyAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5
KCk7CisjZWxzZQorICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVkaWFD
b250cm9scygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkg
JiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVkaWFD
b250cm9scygpLT5jaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCk7CisKKyAgICB1cGRh
dGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgdXBkYXRlQWN0aXZlVGV4dFRyYWNrQ3VlcyhjdXJy
ZW50TWVkaWFUaW1lKCkpOworI2VuZGlmCit9CisKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBk
YXRlVGV4dFRyYWNrRGlzcGxheSgpCiB7CiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQ
VCkKQEAgLTYzNTUsNiArNjQwNiwyMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVRl
eHRUcmFja0Rpc3BsYXkoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGFp
bnRUZXh0VHJhY2tJZk5lZWRlZCgpCit7CisjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQ
VCkKKyAgICBlbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOworICAgIGlmICghbV9tZWRp
YUNvbnRyb2xzSG9zdCkKKyAgICAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdCA9IE1lZGlhQ29udHJv
bHNIb3N0OjpjcmVhdGUoKnRoaXMpOworICAgIG1fbWVkaWFDb250cm9sc0hvc3QtPnBhaW50VGV4
dFRyYWNrSWZOZWVkZWQoKTsKKyNlbHNlCisgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVkaWFDb250
cm9scygpLT5wYWludFRleHRUcmFja0lmTmVlZGVkKCk7CisjZW5kaWYKK30KKwogI2VuZGlmCiAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgY2xv
c2VkQ2FwdGlvblZpc2libGUpCkBAIC02NTk1LDUxICs2NjYxLDYgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbnRyb2xzKCkKIH0KIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheShU
ZXh0VHJhY2tWaXNpYmlsaXR5Q2hlY2tUeXBlIGNoZWNrVHlwZSkKLXsKLSAgICBBTFdBWVNfTE9H
KExPR0lERU5USUZJRVIsIGNoZWNrVHlwZSk7Ci0gICAgQVNTRVJUKG1fdGV4dFRyYWNrcyk7Ci0K
LSAgICBpZiAobV9wcm9jZXNzaW5nUHJlZmVyZW5jZUNoYW5nZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGRvY3VtZW50KCkuYWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXZlVmlzaWJsZVRleHRUcmFjayA9IGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3MtPmxlbmd0aCgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fdGV4dFRyYWNrcy0+aXRlbShpKS0+bW9kZSgpID09IFRleHRUcmFjazo6
TW9kZTo6U2hvd2luZykgewotICAgICAgICAgICAgaGF2ZVZpc2libGVUZXh0VHJhY2sgPSB0cnVl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2hlY2tU
eXBlID09IENoZWNrVGV4dFRyYWNrVmlzaWJpbGl0eSAmJiBtX2hhdmVWaXNpYmxlVGV4dFRyYWNr
ID09IGhhdmVWaXNpYmxlVGV4dFRyYWNrKSB7Ci0gICAgICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFj
a0N1ZXMoY3VycmVudE1lZGlhVGltZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRUcmFjazsKLSAgICBtX2Ns
b3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZpc2libGVUZXh0VHJhY2s7Ci0KLSNpZiBFTkFC
TEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFj
aykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3Qo
KTsKLSAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZWxzZQotICAgIGlmICghbV9oYXZl
VmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkQ2xvc2VkQ2Fw
dGlvbnNWaXNpYmlsaXR5KCk7Ci0KLSAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAg
dXBkYXRlQWN0aXZlVGV4dFRyYWNrQ3VlcyhjdXJyZW50TWVkaWFUaW1lKCkpOwotI2VuZGlmCi19
CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDc2MTdiNGU3YTc2NDJh
YjVjM2YzZTM5MmVmYWMzMjAyOGM3NWFmMWYuLjIxY2RmNmU2YTRiMzE4NGNlZmM3YzZjOTdhMjdk
N2MxMDFjNDljNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC0z
NzksMTYgKzM3OSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0VHJhY2so
VGV4dFRyYWNrKik7CiAKLSAgICBib29sIHRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0OwotICAg
IHVzaW5nIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VGV4dFRyYWNrVmlzaWJpbGl0eUNoZWNrVHlw
ZTsKLSAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRyYWNrVmlzaWJpbGl0
eUNoZWNrVHlwZSBjaGVja1R5cGUgPSBDaGVja1RleHRUcmFja1Zpc2liaWxpdHkpOwotICAgIHZv
aWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotCiAgICAgLy8gQXVkaW9UcmFja0NsaWVudAog
ICAgIHZvaWQgYXVkaW9UcmFja0VuYWJsZWRDaGFuZ2VkKEF1ZGlvVHJhY2smKSBmaW5hbDsKIAot
ICAgIHZvaWQgdGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoVGV4dFRyYWNrKik7Ci0KICAgICAv
LyBUZXh0VHJhY2tDbGllbnQKICAgICB2b2lkIHRleHRUcmFja0tpbmRDaGFuZ2VkKFRleHRUcmFj
ayYpIG92ZXJyaWRlOwogICAgIHZvaWQgdGV4dFRyYWNrTW9kZUNoYW5nZWQoVGV4dFRyYWNrJikg
b3ZlcnJpZGU7CkBAIC00MDUsNiArMzk4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc3luY1RleHRU
cmFja0JvdW5kcygpOwogCiAgICAgdm9pZCBjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Cisg
ICAgdXNpbmcgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpUZXh0VHJhY2tWaXNpYmlsaXR5Q2hlY2tU
eXBlOworICAgIHZvaWQgdGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoVGV4dFRyYWNrKik7Cisg
ICAgdm9pZCBwYWludFRleHRUcmFja0lmTmVlZGVkKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCkBAIC04MTAsNiArODA2LDEwIEBAIHByaXZhdGU6CiAg
ICAgZW51bSBSZWNvbmZpZ3VyZU1vZGUgeyBJbW1lZGlhdGVseSwgQWZ0ZXJEZWxheSB9OwogICAg
IHZvaWQgbWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkKFJlY29uZmln
dXJlTW9kZSk7CiAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2Rl
IGNhcHRpb25EaXNwbGF5TW9kZSgpOworCisgICAgYm9vbCB0ZXh0VHJhY2tzQXJlUmVhZHkoKSBj
b25zdDsKKyAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRyYWNrVmlzaWJp
bGl0eUNoZWNrVHlwZSA9IENoZWNrVGV4dFRyYWNrVmlzaWJpbGl0eSk7CisgICAgdm9pZCB1cGRh
dGVUZXh0VHJhY2tEaXNwbGF5KCk7CiAjZW5kaWYKIAogICAgIC8vIFRoZXNlICJpbnRlcm5hbCIg
ZnVuY3Rpb25zIGRvIG5vdCBjaGVjayB1c2VyIGdlc3R1cmUgcmVzdHJpY3Rpb25zLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmlu
ZGV4IDZkMGYzNzlkNWY3MTFiMjdhMzQxZWRmMDk3YWM0ZWUwMzBjZjlhOWMuLjEzMmY1NGMwMjIx
MDA0ODEyZjA3ZDZmZWRlNzVkYmQzMmNkN2FmMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTEyMDYsOCArMTIwNiwz
NyBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURp
c3BsYXkoKQogICAgIGVsc2UKICAgICAgICAgaGlkZSgpOwogCi0gICAgaWYgKG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24gfHwgdmlkZW8ucmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigp
KQorICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uIHx8IHZpZGVvLnJlcXVpcmVzVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24oKSkgewogICAgICAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpOworICAgICAgICBpZiAoaGFzQ2hpbGROb2RlcygpKQorICAgICAgICAgICAgbV9u
ZWVkc1BhaW50ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6c2V0TmVlZHNQYWludCgpCit7CisgICAgYXV0byBzaXplQ2hhbmdl
ZCA9IHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKTsKKyAgICBpZiAoIXNpemVDaGFuZ2VkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX25lZWRzUGFpbnQgPSB0cnVlOworCisgICAgLy8gRklYTUUg
KDEyMTE3MCk6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBsYXlvdXQsIGFuZCBzaG91
bGQgbGF5IG91dCB0aGUgdGV4dCB0cmFja3MgaW1tZWRpYXRlbHkuCit9CisKK3ZvaWQgTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cGFpbnRJZk5lZWRlZCgpCit7CisgICAg
aWYgKCFtX25lZWRzUGFpbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNQYWludCA9
IGZhbHNlOworCisgICAgLy8gV2UgY2FuIG9ubHkgY2FsbCBtX3RleHRUcmFja1JlcHJlc2VudGF0
aW9uLT51cGRhdGUoKSBhZnRlciB0aGUgbGF5b3V0CisgICAgLy8gaXMgY2xlYW4sIGJlY2F1c2Ug
bV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCkgd2lsbCBjYWxsCisgICAgLy8gY3Jl
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpIHRvIHBhaW50IHRoZSBzdWJ0cmVlIG9m
CisgICAgLy8gUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCB0byBhbiBpbWFnZSBidWZm
ZXIuCisgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCisgICAgICAgIG1fdGV4dFRy
YWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nlc3NBY3RpdmVWVFRDdWUoVlRUQ3VlJiBjdWUpCkBA
IC0xMjk2LDEwICsxMzI1LDkgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCiAgICAgYXV0byByZXF1aXJl
c1RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gbWVkaWFFbGVtZW50LT5yZXF1aXJlc1RleHRUcmFj
a1JlcHJlc2VudGF0aW9uKCk7CiAgICAgaWYgKCFoYXNDaGlsZE5vZGVzKCkgfHwgIXJlcXVpcmVz
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24pIHsKLSAgICAgICAgICAgIGlmICghcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbikgeworICAgICAgICAgICAgaWYgKCFyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9u
KQogICAgICAgICAgICAgICAgIGNsZWFyVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKLSAgICAg
ICAgICAgICAgICB1cGRhdGVTaXplcyhGb3JjZVVwZGF0ZTo6WWVzKTsKLSAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG1fdGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24tPnNldEhpZGRlbih0cnVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CkBA
IC0xMzA4LDE4ICsxMzM2LDE0IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKQogICAgIGlmICghbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbikgewogICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIp
OwogCi0gICAgICAgIG1fd2FpdGluZ0ZvckZpcnN0TGF5b3V0ID0gdHJ1ZTsKICAgICAgICAgbV90
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uOjpjcmVhdGUo
KnRoaXMpOwogICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCkpCiAgICAgICAgICAgICBtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRDb250ZW50U2NhbGUoZG9jdW1lbnQoKS5wYWdlKCkt
PmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgICAgICBtZWRpYUVsZW1lbnQtPnNldFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24uZ2V0KCkpOwotICAgICAg
ICB1cGRhdGVTaXplcygpOwogICAgICAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvblN0
eWxlKCk7CiAgICAgfQogCiAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+c2V0SGlkZGVu
KGZhbHNlKTsKLSAgICBpZiAoIW1fd2FpdGluZ0ZvckZpcnN0TGF5b3V0KQotICAgICAgICBtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uLT51cGRhdGUoKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjbGVhclRleHRUcmFja1JlcHJlc2VudGF0aW9uKCkK
QEAgLTEzMjksNyArMTM1Myw2IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCiAKICAgICBBTFdBWVNfTE9H
KExPR0lERU5USUZJRVIpOwogCi0gICAgbV93YWl0aW5nRm9yRmlyc3RMYXlvdXQgPSB0cnVlOwog
ICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBudWxscHRyOwogICAgIGlmIChhdXRvIG1l
ZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKSkKICAgICAgICAgbWVkaWFFbGVt
ZW50LT5zZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbihudWxscHRyKTsKQEAgLTEzNjgsMjMgKzEz
OTEsNiBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmV4aXRl
ZEZ1bGxzY3JlZW4oKQogICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZZXMpOwogfQogCi12
b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxheW91dElmTmVjZXNz
YXJ5KCkKLXsKLSAgICBtX3dhaXRpbmdGb3JGaXJzdExheW91dCA9IGZhbHNlOwotCi0gICAgYXV0
byBzaXplQ2hhbmdlZCA9IHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKTsKLSAgICBpZiAobV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbikKLSAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+
dXBkYXRlKCk7Ci0KLSAgICBpZiAoIXNpemVDaGFuZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRSAoMTIxMTcwKTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGxheW91
dCwgYW5kIHNob3VsZCBsYXkgb3V0IHRoZSB0ZXh0IHRyYWNrcyBpbW1lZGlhdGVseS4KLSAgICBt
X3Rhc2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpc10gKCkgewotICAgICAgICB1cGRhdGVDdWVTdHls
ZXMoKTsKLSAgICB9KTsKLX0KLQogYm9vbCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50Ojp1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCkKIHsKICAgICBpZiAoIWRvY3VtZW50KCku
cGFnZSgpKQpAQCAtMTQxNywxMSArMTQyMywxNyBAQCBib29sIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKQogCiB2b2lkIE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVNpemVzKEZvcmNlVXBkYXRl
IGZvcmNlKQogewotICAgIGlmICh1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCkgfHwgZm9yY2UgPT0g
Rm9yY2VVcGRhdGU6OlllcykKLSAgICAgICAgdXBkYXRlQ3VlU3R5bGVzKCk7CisgICAgaWYgKHVw
ZGF0ZVZpZGVvRGlzcGxheVNpemUoKSB8fCBmb3JjZSA9PSBGb3JjZVVwZGF0ZTo6WWVzKSB7Cisg
ICAgICAgIG1fbmVlZHNQYWludCA9IHRydWU7CisKKyAgICAgICAgLy8gRklYTUU6CisgICAgICAg
IG1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzXSAoKSB7CisgICAgICAgICAgICB1cGRhdGVD
dWVzKCk7CisgICAgICAgIH0pOworICAgIH0KIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVDdWVTdHlsZXMoKQordm9pZCBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVDdWVzKCkKIHsKICAgICBpZiAoIWRvY3Vt
ZW50KCkucGFnZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDM2LDggKzE0NDgsOCBAQCB2b2lk
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUN1ZVN0eWxlcygp
CiAgICAgICAgIGFjdGl2ZUN1ZS5kYXRhKCktPnJlY2FsY3VsYXRlU3R5bGVzKCk7CiAKICAgICB1
cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB1cGRhdGVEaXNwbGF5KCk7CiAgICAgdXBk
YXRlVGV4dFN0cm9rZVN0eWxlKCk7CisgICAgdXBkYXRlRGlzcGxheSgpOwogfQogCiBSZWZQdHI8
SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgKaW5kZXggMjMzMDdiNjY1YjU3NjdhNDljMDI2NzYw
NzlhNWQ2ZDRmNzc1MzcyZi4uNjY0MzNmNDNkYTQ1YWZmNmMwNjViODVhMWJmYTRmZDczNzk2YjQ0
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5oCkBAIC00ODMsMjQgKzQ4MywzMCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIEZv
cmNlVXBkYXRlIHsgWWVzLCBObyB9OwogICAgIHZvaWQgdXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGUg
Zm9yY2UgPSBGb3JjZVVwZGF0ZTo6Tm8pOwotICAgIHZvaWQgbGF5b3V0SWZOZWNlc3NhcnkoKTsK
LQogICAgIHZvaWQgdXBkYXRlRGlzcGxheSgpOworCisgICAgdm9pZCBzZXROZWVkc1BhaW50KCk7
CisgICAgdm9pZCBwYWludElmTmVlZGVkKCk7CisKICAgICB2b2lkIGVudGVyZWRGdWxsc2NyZWVu
KCk7CiAgICAgdm9pZCBleGl0ZWRGdWxsc2NyZWVuKCk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwogCisg
ICAgLy8gRWxlbWVudAorICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50
UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJp
ZGU7CisKKyAgICAvLyBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNsaWVudAorICAgIFJlZlB0cjxJ
bWFnZT4gY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpIG92ZXJyaWRlOworICAg
IHZvaWQgdGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFuZ2VkKGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRlQ3VlcygpOwogICAgIGJvb2wgdXBkYXRlVmlk
ZW9EaXNwbGF5U2l6ZSgpOwotICAgIHZvaWQgdXBkYXRlQ3VlU3R5bGVzKCk7CiAgICAgdm9pZCB1
cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKICAgICB2b2lkIHVwZGF0ZVRleHRTdHJva2VTdHls
ZSgpOwogICAgIHZvaWQgcHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmKTsKLSAgICBSZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNv
bnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEltYWdlPiBj
cmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKICAgICB2b2lk
IGNsZWFyVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKICAgICB2b2lkIHVwZGF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uU3R5bGUoKTsKQEAgLTUyMCw3ICs1MjYsNyBAQCBwcml2YXRlOgogICAg
IEludFJlY3QgbV92aWRlb0Rpc3BsYXlTaXplOwogICAgIGludCBtX2ZvbnRTaXplIHsgMCB9Owog
ICAgIGJvb2wgbV9mb250U2l6ZUlzSW1wb3J0YW50IHsgZmFsc2UgfTsKLSAgICBib29sIG1fd2Fp
dGluZ0ZvckZpcnN0TGF5b3V0IHsgdHJ1ZSB9OworICAgIGJvb2wgbV9uZWVkc1BhaW50IHsgZmFs
c2UgfTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xzLmNwcAppbmRleCA2NGM4OGU1NmJkYjhkMzgxMTNmOTA3NzM4ZjA4NjViYTliYzBmNDU4
Li5iNDViYmRiZjNmNjg1MWMwMTg3YWQyZTM1YjJiNDNlMzEwMmQ3NDZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApAQCAtNDA1LDcgKzQwNSw3IEBA
IHZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpCiAKICAgICBtX3Rl
eHREaXNwbGF5Q29udGFpbmVyLT51cGRhdGVEaXNwbGF5KCk7CiB9Ci0gICAgCisKIHZvaWQgTWVk
aWFDb250cm9sczo6dGV4dFRyYWNrUHJlZmVyZW5jZXNDaGFuZ2VkKCkKIHsKICAgICBjbG9zZWRD
YXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwpAQCAtNDE5LDYgKzQxOSwxMiBAQCB2b2lkIE1lZGlhQ29u
dHJvbHM6OmNsZWFyVGV4dERpc3BsYXlDb250YWluZXIoKQogICAgICAgICBtX3RleHREaXNwbGF5
Q29udGFpbmVyLT5yZW1vdmVDaGlsZHJlbigpOwogfQogCit2b2lkIE1lZGlhQ29udHJvbHM6OnBh
aW50VGV4dFRyYWNrSWZOZWVkZWQoKQoreworICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVy
KQorICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5wYWludElmTmVlZGVkKCk7Cit9CisK
ICNlbmRpZgogCiB2b2lkIE1lZGlhQ29udHJvbHM6OnNldFNsaWRlclZvbHVtZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKaW5kZXggZjRmMGQxYzBlMjcwNGIx
YTEwOGVlOWNlOWMxNGI4NDQ0MGYxNGJmNy4uYjhjZmQ3ZjYyN2RlYTE1ZmQ4ZTEyMDkxZWUzNDEz
MDFjMzlhYTFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9scy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMu
aApAQCAtOTgsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRU
cmFja0Rpc3BsYXkoKTsKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFRyYWNrUHJlZmVyZW5jZXNDaGFu
Z2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyVGV4dERpc3BsYXlDb250YWluZXIoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0VHJhY2tJZk5lZWRlZCgpOwogI2VuZGlmCiAKIHByb3Rl
Y3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGEzODNhMWNiMDIyZTgwYmY2OWZjZTU0NDZjNWE5
MzRiMmMzYzY0OWQuLmVkNjZjM2RmOGQzMDFlMzljMTAzNjY3NGU3ZjMzODlmNmZkOTFlOGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtMTM1NSwxMCArMTM1NSwxNiBAQCB2b2lkIFBhZ2U6OnVwZGF0
ZVJlbmRlcmluZygpCiAjZW5kaWYKIAogICAgIGxheW91dElmTmVlZGVkKCk7Ci0gICAgCisKICAg
ICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewogICAgICAgICBkb2N1
bWVudC51cGRhdGVIaWdobGlnaHRQb3NpdGlvbnMoKTsKICAgICB9KTsKKworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkg
eworICAgICAgICBkb2N1bWVudC5wYWludFRleHRUcmFja0lmTmVlZGVkKCk7CisgICAgfSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBQYWdlOjpzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25zKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwCmluZGV4IDhhMDg3NTU3OGJhZjc2MDAxM2NiNzkxOTNiMWM0NjdjNTE4YTYxZDYuLjY3
ZGIxMWMxNGIwOWZmNDU0MjY4ZjFhNmNkNDVjOTYzNGVlZWUwYWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApA
QCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
bGF5b3V0KCkKICAgICBBU1NFUlQobWVkaWFDb250cm9sRWxlbWVudFR5cGUoZWxlbWVudCgpKSA9
PSBNZWRpYVRleHRUcmFja0Rpc3BsYXlDb250YWluZXIpOwogCiAgICAgTGF5b3V0U3RhdGVEaXNh
YmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0
KCkpOwotICAgIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQqPihlbGVtZW50KCkpLT5sYXlvdXRJZk5lY2Vzc2FyeSgpOworICAgIHN0YXRpY19jYXN0PE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQqPihlbGVtZW50KCkpLT5zZXROZWVk
c1BhaW50KCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393338</attachid>
            <date>2020-03-11 21:33:57 -0700</date>
            <delta_ts>2020-03-12 12:54:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208904-20200311213356.patch</filename>
            <type>text/plain</type>
            <size>26634</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQyZWYwZjExYzM1OTY0
MzUyNTUwOGUzMDIzZDg3YjJmOTJkN2Y2OC4uODQ1NDkyZjNkMjIzN2QwOGExZWZkNzRiOTgyODk3
OWVmNmU2MGVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIwLTAzLTExICBQZW5n
IExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CisKKyAgICAgICAgU2FmYXJpIHNvbWV0aW1lcyBj
cmFzaGVzIHdoZW4gc3dpdGNoIHZpZGVvIGludG8gUGlQIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODkwNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgTWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCB3b24ndCBwYWludCBpdHMgc3VidHJlZQorICAg
ICAgICB0byBhbiBpbWFnZSBidWZmZXIgKGZvciB0aGUgY2FwdGlvbnMgaW4gdmlkZW8gZnVsbHNj
cmVlbiBvciBwaWN0dXJlLWluLXBpY3R1cmUgbW9kZSkKKyAgICAgICAgd2hlbiB0aGUgY3VlcyBh
cmUgdXBkYXRlZC4gSW5zdGVhZCwgaXQgb25seSBzZXRzIHRoZSBmbGFnIG1fbmVlZHNQYWludCB0
byB0cnVlCisgICAgICAgIGFmdGVyIHJ1bm5pbmcgbGF5b3V0IGJhc2VkIG9uIHRoZSBuZXcgY3Vl
cy4gQWZ0ZXIgdGhhdCwgaXQgcGFpbnRzIGl0cyBzdWJ0cmVlCisgICAgICAgIHRvIGFuIGltYWdl
IGJ1ZmZlciBhdCB0aGUgZW5kIG9mIFBhZ2U6OnVwZGF0ZVJlbmRlcmluZygpIHdoZW4gdGhlIGxh
eW91dCBpcyBjbGVhbi4KKyAgICAgICAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYSB3aWxs
IHVzZSB0aGUgaW1hZ2UgYnVmZmVyIHRvIHNldCB0aGUgY29udGVudCBvZiB0aGUgbGF5ZXIKKyAg
ICAgICAgZm9yIGNhcHRpb25zIGluIHZpZGVvIGZ1bGxzY3JlZW4gb3IgcGljdHVyZS1pbi1waWN0
dXJlIG1vZGUuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9s
c0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnBhaW50VGV4
dFRyYWNrSWZOZWVkZWQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNv
bnRyb2xzSG9zdC5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6c2V0TWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6Y2xlYXJNZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWludFRleHRUcmFja0lmTmVlZGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKworICAgICAgICBGdW5jdGlvbnMgdGV4dFRyYWNrc0Fy
ZVJlYWR5KCksIHRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKCkgYW5kIGNvbmZpZ3VyZVRleHRU
cmFja0Rpc3BsYXkoKQorICAgICAgICBzaG91bGQgYmUgd3JhcHBlZCB3aXRoICIjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKSIuCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldFRleHRUcmFja1JlcHJlc2VudGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVS
ZWFkeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJh
Y2tSZWFkeVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
Ojpjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnBhaW50VGV4dFRyYWNrSWZOZWVkZWQpOgorICAgICAgICAqIGh0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oOgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6dXBkYXRlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpzZXROZWVkc1BhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnBhaW50SWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y2xlYXJUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50Ojp1cGRhdGVTaXplcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVDdWVzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxheW91dElmTmVjZXNzYXJ5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OnVwZGF0ZUN1ZVN0eWxlcyk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaDoKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OnBhaW50VGV4
dFRyYWNrSWZOZWVkZWQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaDoK
KyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXBkYXRl
UmVuZGVyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6bGF5b3V0KToKKwogMjAyMC0wMy0xMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgc3BlY2lhbCBEaXNwbGF5TGlzdCBo
YW5kbGluZyBpbiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNw
cAppbmRleCBjZWIzMDVkNGYzNTU5OGQ0MTQxNGU0ODkwMjZjN2M1OTZkYmI3MmE4Li4yMjhlMGU0
NWZhODc2NzA3YmFlZGEzZWU1YTRkYzU3NDE5NTVkYWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAK
QEAgLTE3Miw2ICsxNzIsMTIgQEAgdm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6dXBkYXRlVGV4dFRy
YWNrQ29udGFpbmVyKCkKICAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXItPnVwZGF0ZURpc3Bs
YXkoKTsKIH0KIAordm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6cGFpbnRUZXh0VHJhY2tJZk5lZWRl
ZCgpCit7CisgICAgaWYgKG1fdGV4dFRyYWNrQ29udGFpbmVyKQorICAgICAgICBtX3RleHRUcmFj
a0NvbnRhaW5lci0+cGFpbnRJZk5lZWRlZCgpOworfQorCiB2b2lkIE1lZGlhQ29udHJvbHNIb3N0
OjplbnRlcmVkRnVsbHNjcmVlbigpCiB7CiAgICAgaWYgKG1fdGV4dFRyYWNrQ29udGFpbmVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29u
dHJvbHNIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFD
b250cm9sc0hvc3QuaAppbmRleCA0Y2FlMDAwMmQ4Y2IxODk0MTg1OTQ4ZTZmNDcxMzEzNzhmM2M4
ODBiLi4zMjJmNDczMDViZGIxOTg4ZGYzYTEyZDc5M2I2MGEwYTFhYmI1MTEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9s
c0hvc3QuaApAQCAtNzEsNiArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIEZvcmNl
VXBkYXRlIHsgWWVzLCBObyB9OwogICAgIHZvaWQgdXBkYXRlQ2FwdGlvbkRpc3BsYXlTaXplcyhG
b3JjZVVwZGF0ZSA9IEZvcmNlVXBkYXRlOjpObyk7CisgICAgdm9pZCBwYWludFRleHRUcmFja0lm
TmVlZGVkKCk7CiAgICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigpOwogICAgIHZvaWQgZXhpdGVk
RnVsbHNjcmVlbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBmMmI2ZWRlODEyNTkz
OWQ2MjUzNmQ5NmJiYWRiY2E4ODYxNjVjYzI4Li4zODY0MzExMDRhYzU4MDRkZGNkNGE2YzM5ZDJk
YTJlNTljMzg0ZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU0NTEsNiArNTQ1MSwy
MiBAQCB2b2lkIERvY3VtZW50OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKICAgICAgICAg
ZWxlbWVudC0+Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogfQogCit2b2lkIERvY3VtZW50
OjpzZXRNZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQm
IGVsZW1lbnQpCit7CisgICAgbV9tZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrID0gbWFrZVdl
YWtQdHIoZWxlbWVudCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmNsZWFyTWVkaWFFbGVtZW50U2hv
d2luZ1RleHRUcmFjaygpCit7CisgICAgbV9tZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrID0g
bnVsbHB0cjsKK30KKwordm9pZCBEb2N1bWVudDo6cGFpbnRUZXh0VHJhY2tJZk5lZWRlZCgpCit7
CisgICAgaWYgKG1fbWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjaykKKyAgICAgICAgbV9tZWRp
YUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrLT5wYWludFRleHRUcmFja0lmTmVlZGVkKCk7Cit9CisK
ICNlbmRpZgogCiB2b2lkIERvY3VtZW50OjpzZXRTaG91bGRDcmVhdGVSZW5kZXJlcnMoYm9vbCBm
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAwZjdiYTg0Mjk1Y2M5ZjcxZjA5ZGUxNTgzNDk2Y2I3
MGM2NjlkNDU3Li42OThhMGM5YjQwNmNmMDhjOTllNzE1ODY0MGY1MzJmZDI5ZmZhYzVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaApAQCAtMTExNSw2ICsxMTE1LDkgQEAgcHVibGljOgogICAgIHZvaWQg
cmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVs
ZW1lbnQmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2Vk
Q2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIGNhcHRpb25QcmVmZXJlbmNl
c0NoYW5nZWQoKTsKKyAgICB2b2lkIHNldE1lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJhY2soY29u
c3QgSFRNTE1lZGlhRWxlbWVudCYpOworICAgIHZvaWQgY2xlYXJNZWRpYUVsZW1lbnRTaG93aW5n
VGV4dFRyYWNrKCk7CisgICAgdm9pZCBwYWludFRleHRUcmFja0lmTmVlZGVkKCk7CiAjZW5kaWYK
IAogICAgIHZvaWQgcmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZp
c2liaWxpdHlDaGFuZ2VDbGllbnQmKTsKQEAgLTE4MDEsNiArMTgwNCw3IEBAIHByaXZhdGU6CiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4g
bV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHM7CisgICAgV2Vha1B0cjxIVE1MTWVk
aWFFbGVtZW50PiBtX21lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJhY2s7CiAjZW5kaWYKIAogICAg
IEVsZW1lbnQqIG1fbWFpbkFydGljbGVFbGVtZW50IHsgbnVsbHB0ciB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggMGVmNTRhY2FmMjlhODk0YTA5ZjE0YWNk
MWFmMzdhOWZmMWM5YmNmZS4uYjA3ODM1YzQ5MjA3YmYzZWIxNjdmZTJmOWMyZTU1ODJhNjA4Njkz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0xODc2LDQ1
ICsxODc2LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVBY3RpdmVUZXh0VHJhY2tD
dWVzKGNvbnN0IE1lZGlhVGltZSYgbW92aWVUaW1lKQogICAgICAgICB1cGRhdGVUZXh0VHJhY2tE
aXNwbGF5KCk7CiB9CiAKLWJvb2wgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrc0FyZVJlYWR5
KCkgY29uc3QKLXsKLSAgICAvLyA0LjguMTAuMTIuMSBUZXh0IHRyYWNrIG1vZGVsCi0gICAgLy8g
Li4uCi0gICAgLy8gVGhlIHRleHQgdHJhY2tzIG9mIGEgbWVkaWEgZWxlbWVudCBhcmUgcmVhZHkg
aWYgYWxsIHRoZSB0ZXh0IHRyYWNrcyB3aG9zZSBtb2RlIHdhcyBub3QKLSAgICAvLyBpbiB0aGUg
ZGlzYWJsZWQgc3RhdGUgd2hlbiB0aGUgZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdv
cml0aG0gbGFzdCBzdGFydGVkIG5vdwotICAgIC8vIGhhdmUgYSB0ZXh0IHRyYWNrIHJlYWRpbmVz
cyBzdGF0ZSBvZiBsb2FkZWQgb3IgZmFpbGVkIHRvIGxvYWQuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChtX3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdh
bltpXS0+cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6OkxvYWRpbmcKLSAgICAgICAgICAg
IHx8IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuW2ldLT5yZWFkaW5lc3NT
dGF0ZSgpID09IFRleHRUcmFjazo6Tm90TG9hZGVkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCi17Ci0gICAgaWYg
KHRyYWNrLT5yZWFkaW5lc3NTdGF0ZSgpICE9IFRleHRUcmFjazo6TG9hZGluZwotICAgICAgICAm
JiB0cmFjay0+bW9kZSgpICE9IFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQpIHsKLSAgICAgICAg
Ly8gVGhlIGRpc3BsYXkgdHJlZXMgZXhpc3QgYXMgbG9uZyBhcyB0aGUgdHJhY2sgaXMgYWN0aXZl
LCBpbiB0aGlzIGNhc2UsCi0gICAgICAgIC8vIGFuZCBpZiB0aGUgc2FtZSB0cmFjayBpcyBsb2Fk
ZWQgYWdhaW4gKGZvciBleGFtcGxlIGlmIHRoZSBzcmMgYXR0cmlidXRlIHdhcyBjaGFuZ2VkKSwK
LSAgICAgICAgLy8gY3VlcyBjYW4gYmUgYWNjdW11bGF0ZWQgd2l0aCB0aGUgb2xkIG9uZXMsIHRo
YXQncyB3aHkgdGhleSBuZWVkcyB0byBiZSBmbHVzaGVkCi0gICAgICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNsZWFyVGV4dERpc3BsYXlD
b250YWluZXIoKTsKLSAgICAgICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotICAgIH0KLSAg
ICBpZiAobV9wbGF5ZXIgJiYgbV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW4u
Y29udGFpbnModHJhY2spKSB7Ci0gICAgICAgIGlmICh0cmFjay0+cmVhZGluZXNzU3RhdGUoKSAh
PSBUZXh0VHJhY2s6OkxvYWRpbmcpCi0gICAgICAgICAgICBzZXRSZWFkeVN0YXRlKG1fcGxheWVy
LT5yZWFkeVN0YXRlKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFRoZSB0cmFjayByZWFk
aW5lc3Mgc3RhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSB1c2VyCi0g
ICAgICAgIC8vIGNsaWNraW5nIHRoZSBjYXB0aW9ucyBidXR0b24uIEluIHRoaXMgY2FzZSwgYSBj
aGVjayB3aGV0aGVyIGFsbCB0aGUKLSAgICAgICAgLy8gcmVzb3VyY2VzIGhhdmUgZmFpbGVkIGxv
YWRpbmcgc2hvdWxkIGJlIGRvbmUgaW4gb3JkZXIgdG8gaGlkZSB0aGUgQ0MgYnV0dG9uLgotICAg
ICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpICYmIHRyYWNrLT5yZWFkaW5lc3NTdGF0ZSgpID09
IFRleHRUcmFjazo6RmFpbGVkVG9Mb2FkKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5y
ZWZyZXNoQ2xvc2VkQ2FwdGlvbnNCdXR0b25WaXNpYmlsaXR5KCk7Ci0gICAgfQotfQotCiB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmF1ZGlvVHJhY2tFbmFibGVkQ2hhbmdlZChBdWRpb1RyYWNrJiB0
cmFjaykKIHsKICAgICBpZiAobV9hdWRpb1RyYWNrcyAmJiBtX2F1ZGlvVHJhY2tzLT5jb250YWlu
cyh0cmFjaykpCkBAIC01ODQ2LDYgKzU4MDcsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmUK
IHsKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT5zZXRUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbihyZXByZXNlbnRhdGlvbik7CisKKyAgICBpZiAocmVwcmVzZW50YXRpb24pCisg
ICAgICAgIGRvY3VtZW50KCkuc2V0TWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjaygqdGhpcyk7
CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudCgpLmNsZWFyTWVkaWFFbGVtZW50U2hvd2luZ1Rl
eHRUcmFjaygpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN5bmNUZXh0VHJhY2tCb3Vu
ZHMoKQpAQCAtNjM0MCw2ICs2MzA2LDkxIEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKCkgY29uc3QKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAorYm9v
bCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tzQXJlUmVhZHkoKSBjb25zdAoreworICAgIC8v
IDQuOC4xMC4xMi4xIFRleHQgdHJhY2sgbW9kZWwKKyAgICAvLyAuLi4KKyAgICAvLyBUaGUgdGV4
dCB0cmFja3Mgb2YgYSBtZWRpYSBlbGVtZW50IGFyZSByZWFkeSBpZiBhbGwgdGhlIHRleHQgdHJh
Y2tzIHdob3NlIG1vZGUgd2FzIG5vdAorICAgIC8vIGluIHRoZSBkaXNhYmxlZCBzdGF0ZSB3aGVu
IHRoZSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobSBsYXN0IHN0YXJ0ZWQg
bm93CisgICAgLy8gaGF2ZSBhIHRleHQgdHJhY2sgcmVhZGluZXNzIHN0YXRlIG9mIGxvYWRlZCBv
ciBmYWlsZWQgdG8gbG9hZC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJh
Y2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuW2ldLT5yZWFkaW5lc3NTdGF0
ZSgpID09IFRleHRUcmFjazo6TG9hZGluZworICAgICAgICAgICAgfHwgbV90ZXh0VHJhY2tzV2hl
blJlc291cmNlU2VsZWN0aW9uQmVnYW5baV0tPnJlYWRpbmVzc1N0YXRlKCkgPT0gVGV4dFRyYWNr
OjpOb3RMb2FkZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrUmVhZHlTdGF0
ZUNoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAodHJhY2stPnJlYWRpbmVzc1N0
YXRlKCkgIT0gVGV4dFRyYWNrOjpMb2FkaW5nCisgICAgICAgICYmIHRyYWNrLT5tb2RlKCkgIT0g
VGV4dFRyYWNrOjpNb2RlOjpEaXNhYmxlZCkgeworICAgICAgICAvLyBUaGUgZGlzcGxheSB0cmVl
cyBleGlzdCBhcyBsb25nIGFzIHRoZSB0cmFjayBpcyBhY3RpdmUsIGluIHRoaXMgY2FzZSwKKyAg
ICAgICAgLy8gYW5kIGlmIHRoZSBzYW1lIHRyYWNrIGlzIGxvYWRlZCBhZ2FpbiAoZm9yIGV4YW1w
bGUgaWYgdGhlIHNyYyBhdHRyaWJ1dGUgd2FzIGNoYW5nZWQpLAorICAgICAgICAvLyBjdWVzIGNh
biBiZSBhY2N1bXVsYXRlZCB3aXRoIHRoZSBvbGQgb25lcywgdGhhdCdzIHdoeSB0aGV5IG5lZWRz
IHRvIGJlIGZsdXNoZWQKKyAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAg
ICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xlYXJUZXh0RGlzcGxheUNvbnRhaW5lcigpOworICAgICAg
ICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgfQorICAgIGlmIChtX3BsYXllciAmJiBt
X3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdhbi5jb250YWlucyh0cmFjaykpIHsK
KyAgICAgICAgaWYgKHRyYWNrLT5yZWFkaW5lc3NTdGF0ZSgpICE9IFRleHRUcmFjazo6TG9hZGlu
ZykKKyAgICAgICAgICAgIHNldFJlYWR5U3RhdGUobV9wbGF5ZXItPnJlYWR5U3RhdGUoKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIHRyYWNrIHJlYWRpbmVzcyBzdGF0ZSBtaWdodCBo
YXZlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIHVzZXIKKyAgICAgICAgLy8gY2xpY2tpbmcg
dGhlIGNhcHRpb25zIGJ1dHRvbi4gSW4gdGhpcyBjYXNlLCBhIGNoZWNrIHdoZXRoZXIgYWxsIHRo
ZQorICAgICAgICAvLyByZXNvdXJjZXMgaGF2ZSBmYWlsZWQgbG9hZGluZyBzaG91bGQgYmUgZG9u
ZSBpbiBvcmRlciB0byBoaWRlIHRoZSBDQyBidXR0b24uCisgICAgICAgIGlmIChoYXNNZWRpYUNv
bnRyb2xzKCkgJiYgdHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgPT0gVGV4dFRyYWNrOjpGYWlsZWRU
b0xvYWQpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlZnJlc2hDbG9zZWRDYXB0aW9u
c0J1dHRvblZpc2liaWxpdHkoKTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheShUZXh0VHJhY2tWaXNpYmlsaXR5Q2hlY2tUeXBlIGNo
ZWNrVHlwZSkKK3sKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsIGNoZWNrVHlwZSk7Cisg
ICAgQVNTRVJUKG1fdGV4dFRyYWNrcyk7CisKKyAgICBpZiAobV9wcm9jZXNzaW5nUHJlZmVyZW5j
ZUNoYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRvY3VtZW50KCkuYWN0aXZlRE9N
T2JqZWN0c0FyZVN0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBoYXZlVmlz
aWJsZVRleHRUcmFjayA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Rl
eHRUcmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdGV4dFRyYWNrcy0+aXRl
bShpKS0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgeworICAgICAgICAgICAg
aGF2ZVZpc2libGVUZXh0VHJhY2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoY2hlY2tUeXBlID09IENoZWNrVGV4dFRyYWNrVmlzaWJpbGl0
eSAmJiBtX2hhdmVWaXNpYmxlVGV4dFRyYWNrID09IGhhdmVWaXNpYmxlVGV4dFRyYWNrKSB7Cisg
ICAgICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVudE1lZGlhVGltZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZl
VmlzaWJsZVRleHRUcmFjazsKKyAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZp
c2libGVUZXh0VHJhY2s7CisKKyNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQorICAg
IGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgZW5z
dXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKKyAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5
KCk7CisjZWxzZQorICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVkaWFD
b250cm9scygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkg
JiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVkaWFD
b250cm9scygpLT5jaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCk7CisKKyAgICB1cGRh
dGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgdXBkYXRlQWN0aXZlVGV4dFRyYWNrQ3VlcyhjdXJy
ZW50TWVkaWFUaW1lKCkpOworI2VuZGlmCit9CisKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBk
YXRlVGV4dFRyYWNrRGlzcGxheSgpCiB7CiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQ
VCkKQEAgLTYzNTUsNiArNjQwNiwyMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVRl
eHRUcmFja0Rpc3BsYXkoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGFp
bnRUZXh0VHJhY2tJZk5lZWRlZCgpCit7CisjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQ
VCkKKyAgICBlbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOworICAgIGlmICghbV9tZWRp
YUNvbnRyb2xzSG9zdCkKKyAgICAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdCA9IE1lZGlhQ29udHJv
bHNIb3N0OjpjcmVhdGUoKnRoaXMpOworICAgIG1fbWVkaWFDb250cm9sc0hvc3QtPnBhaW50VGV4
dFRyYWNrSWZOZWVkZWQoKTsKKyNlbHNlCisgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYg
IWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVkaWFDb250
cm9scygpLT5wYWludFRleHRUcmFja0lmTmVlZGVkKCk7CisjZW5kaWYKK30KKwogI2VuZGlmCiAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgY2xv
c2VkQ2FwdGlvblZpc2libGUpCkBAIC02NTk1LDUxICs2NjYxLDYgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbnRyb2xzKCkKIH0KIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheShU
ZXh0VHJhY2tWaXNpYmlsaXR5Q2hlY2tUeXBlIGNoZWNrVHlwZSkKLXsKLSAgICBBTFdBWVNfTE9H
KExPR0lERU5USUZJRVIsIGNoZWNrVHlwZSk7Ci0gICAgQVNTRVJUKG1fdGV4dFRyYWNrcyk7Ci0K
LSAgICBpZiAobV9wcm9jZXNzaW5nUHJlZmVyZW5jZUNoYW5nZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGRvY3VtZW50KCkuYWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXZlVmlzaWJsZVRleHRUcmFjayA9IGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3MtPmxlbmd0aCgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fdGV4dFRyYWNrcy0+aXRlbShpKS0+bW9kZSgpID09IFRleHRUcmFjazo6
TW9kZTo6U2hvd2luZykgewotICAgICAgICAgICAgaGF2ZVZpc2libGVUZXh0VHJhY2sgPSB0cnVl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2hlY2tU
eXBlID09IENoZWNrVGV4dFRyYWNrVmlzaWJpbGl0eSAmJiBtX2hhdmVWaXNpYmxlVGV4dFRyYWNr
ID09IGhhdmVWaXNpYmxlVGV4dFRyYWNrKSB7Ci0gICAgICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFj
a0N1ZXMoY3VycmVudE1lZGlhVGltZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRUcmFjazsKLSAgICBtX2Ns
b3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZpc2libGVUZXh0VHJhY2s7Ci0KLSNpZiBFTkFC
TEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFj
aykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3Qo
KTsKLSAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZWxzZQotICAgIGlmICghbV9oYXZl
VmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkQ2xvc2VkQ2Fw
dGlvbnNWaXNpYmlsaXR5KCk7Ci0KLSAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAg
dXBkYXRlQWN0aXZlVGV4dFRyYWNrQ3VlcyhjdXJyZW50TWVkaWFUaW1lKCkpOwotI2VuZGlmCi19
CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDc2MTdiNGU3YTc2NDJh
YjVjM2YzZTM5MmVmYWMzMjAyOGM3NWFmMWYuLjIxY2RmNmU2YTRiMzE4NGNlZmM3YzZjOTdhMjdk
N2MxMDFjNDljNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC0z
NzksMTYgKzM3OSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0VHJhY2so
VGV4dFRyYWNrKik7CiAKLSAgICBib29sIHRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0OwotICAg
IHVzaW5nIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VGV4dFRyYWNrVmlzaWJpbGl0eUNoZWNrVHlw
ZTsKLSAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRyYWNrVmlzaWJpbGl0
eUNoZWNrVHlwZSBjaGVja1R5cGUgPSBDaGVja1RleHRUcmFja1Zpc2liaWxpdHkpOwotICAgIHZv
aWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotCiAgICAgLy8gQXVkaW9UcmFja0NsaWVudAog
ICAgIHZvaWQgYXVkaW9UcmFja0VuYWJsZWRDaGFuZ2VkKEF1ZGlvVHJhY2smKSBmaW5hbDsKIAot
ICAgIHZvaWQgdGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoVGV4dFRyYWNrKik7Ci0KICAgICAv
LyBUZXh0VHJhY2tDbGllbnQKICAgICB2b2lkIHRleHRUcmFja0tpbmRDaGFuZ2VkKFRleHRUcmFj
ayYpIG92ZXJyaWRlOwogICAgIHZvaWQgdGV4dFRyYWNrTW9kZUNoYW5nZWQoVGV4dFRyYWNrJikg
b3ZlcnJpZGU7CkBAIC00MDUsNiArMzk4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc3luY1RleHRU
cmFja0JvdW5kcygpOwogCiAgICAgdm9pZCBjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Cisg
ICAgdXNpbmcgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpUZXh0VHJhY2tWaXNpYmlsaXR5Q2hlY2tU
eXBlOworICAgIHZvaWQgdGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoVGV4dFRyYWNrKik7Cisg
ICAgdm9pZCBwYWludFRleHRUcmFja0lmTmVlZGVkKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCkBAIC04MTAsNiArODA2LDEwIEBAIHByaXZhdGU6CiAg
ICAgZW51bSBSZWNvbmZpZ3VyZU1vZGUgeyBJbW1lZGlhdGVseSwgQWZ0ZXJEZWxheSB9OwogICAg
IHZvaWQgbWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkKFJlY29uZmln
dXJlTW9kZSk7CiAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2Rl
IGNhcHRpb25EaXNwbGF5TW9kZSgpOworCisgICAgYm9vbCB0ZXh0VHJhY2tzQXJlUmVhZHkoKSBj
b25zdDsKKyAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRyYWNrVmlzaWJp
bGl0eUNoZWNrVHlwZSA9IENoZWNrVGV4dFRyYWNrVmlzaWJpbGl0eSk7CisgICAgdm9pZCB1cGRh
dGVUZXh0VHJhY2tEaXNwbGF5KCk7CiAjZW5kaWYKIAogICAgIC8vIFRoZXNlICJpbnRlcm5hbCIg
ZnVuY3Rpb25zIGRvIG5vdCBjaGVjayB1c2VyIGdlc3R1cmUgcmVzdHJpY3Rpb25zLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmlu
ZGV4IDZkMGYzNzlkNWY3MTFiMjdhMzQxZWRmMDk3YWM0ZWUwMzBjZjlhOWMuLmQ4MDI4MmU4NzY4
MDI3ZTc1MjY5MmM0N2VkOTQ2NWNmZGU2ZGNmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTEyMDYsOCArMTIwNiwz
NSBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURp
c3BsYXkoKQogICAgIGVsc2UKICAgICAgICAgaGlkZSgpOwogCi0gICAgaWYgKG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24gfHwgdmlkZW8ucmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigp
KQorICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uIHx8IHZpZGVvLnJlcXVpcmVzVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24oKSkgewogICAgICAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpOworICAgICAgICBpZiAoaGFzQ2hpbGROb2RlcygpKQorICAgICAgICAgICAgbV9u
ZWVkc1BhaW50ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6bGF5b3V0SWZOZWVkZWQoKQoreworICAgIGF1dG8gc2l6ZUNoYW5n
ZWQgPSB1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCk7CisgICAgaWYgKCFzaXplQ2hhbmdlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9uZWVkc1BhaW50ID0gdHJ1ZTsKK30KKwordm9pZCBNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpwYWludElmTmVlZGVkKCkKK3sKKyAg
ICBpZiAoIW1fbmVlZHNQYWludCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZWVkc1BhaW50
ID0gZmFsc2U7CisKKyAgICAvLyBXZSBjYW4gb25seSBjYWxsIG1fdGV4dFRyYWNrUmVwcmVzZW50
YXRpb24tPnVwZGF0ZSgpIGFmdGVyIHRoZSBsYXlvdXQKKyAgICAvLyBpcyBjbGVhbiwgYmVjYXVz
ZSBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT51cGRhdGUoKSB3aWxsIGNhbGwKKyAgICAvLyBj
cmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkgdG8gcGFpbnQgdGhlIHN1YnRyZWUg
b2YKKyAgICAvLyBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IHRvIGFuIGltYWdlIGJ1
ZmZlci4KKyAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikKKyAgICAgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0FjdGl2ZVZUVEN1ZShWVFRDdWUmIGN1ZSkK
QEAgLTEyOTYsMTAgKzEzMjMsOSBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uKCkKICAgICBhdXRvIHJlcXVp
cmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBtZWRpYUVsZW1lbnQtPnJlcXVpcmVzVGV4dFRy
YWNrUmVwcmVzZW50YXRpb24oKTsKICAgICBpZiAoIWhhc0NoaWxkTm9kZXMoKSB8fCAhcmVxdWly
ZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewogICAgICAgICBpZiAobV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbikgewotICAgICAgICAgICAgaWYgKCFyZXF1aXJlc1RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKSB7CisgICAgICAgICAgICBpZiAoIXJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRp
b24pCiAgICAgICAgICAgICAgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOwotICAg
ICAgICAgICAgICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZZXMpOwotICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi0+c2V0SGlkZGVuKHRydWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
QEAgLTEzMDgsMTggKzEzMzQsMTQgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCiAgICAgaWYgKCFtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uKSB7CiAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
Uik7CiAKLSAgICAgICAgbV93YWl0aW5nRm9yRmlyc3RMYXlvdXQgPSB0cnVlOwogICAgICAgICBt
X3RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb246OmNyZWF0
ZSgqdGhpcyk7CiAgICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSkKICAgICAgICAgICAgIG1f
dGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldENvbnRlbnRTY2FsZShkb2N1bWVudCgpLnBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgIG1lZGlhRWxlbWVudC0+c2V0VGV4dFRy
YWNrUmVwcmVzZW50YXRpb24obV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5nZXQoKSk7Ci0gICAg
ICAgIHVwZGF0ZVNpemVzKCk7CiAgICAgICAgIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9u
U3R5bGUoKTsKICAgICB9CiAKICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT5zZXRIaWRk
ZW4oZmFsc2UpOwotICAgIGlmICghbV93YWl0aW5nRm9yRmlyc3RMYXlvdXQpCi0gICAgICAgIG1f
dGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOwogfQogCiB2b2lkIE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNsZWFyVGV4dFRyYWNrUmVwcmVzZW50YXRpb24o
KQpAQCAtMTMyOSw3ICsxMzUxLDYgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50OjpjbGVhclRleHRUcmFja1JlcHJlc2VudGF0aW9uKCkKIAogICAgIEFMV0FZU19M
T0coTE9HSURFTlRJRklFUik7CiAKLSAgICBtX3dhaXRpbmdGb3JGaXJzdExheW91dCA9IHRydWU7
CiAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51bGxwdHI7CiAgICAgaWYgKGF1dG8g
bWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMpKQogICAgICAgICBtZWRpYUVs
ZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG51bGxwdHIpOwpAQCAtMTM2OCwyMyAr
MTM4OSw2IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6ZXhp
dGVkRnVsbHNjcmVlbigpCiAgICAgdXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGU6Olllcyk7CiB9CiAK
LXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bGF5b3V0SWZOZWNl
c3NhcnkoKQotewotICAgIG1fd2FpdGluZ0ZvckZpcnN0TGF5b3V0ID0gZmFsc2U7Ci0KLSAgICBh
dXRvIHNpemVDaGFuZ2VkID0gdXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpOwotICAgIGlmIChtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uKQotICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9u
LT51cGRhdGUoKTsKLQotICAgIGlmICghc2l6ZUNoYW5nZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEZJWE1FICgxMjExNzApOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgbGF5
b3V0LCBhbmQgc2hvdWxkIGxheSBvdXQgdGhlIHRleHQgdHJhY2tzIGltbWVkaWF0ZWx5LgotICAg
IG1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzXSAoKSB7Ci0gICAgICAgIHVwZGF0ZUN1ZVN0
eWxlcygpOwotICAgIH0pOwotfQotCiBib29sIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKQogewogICAgIGlmICghZG9jdW1lbnQo
KS5wYWdlKCkpCkBAIC0xNDE3LDExICsxNDIxLDE1IEBAIGJvb2wgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpCiAKIHZvaWQgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlU2l6ZXMoRm9yY2VVcGRh
dGUgZm9yY2UpCiB7Ci0gICAgaWYgKHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKSB8fCBmb3JjZSA9
PSBGb3JjZVVwZGF0ZTo6WWVzKQotICAgICAgICB1cGRhdGVDdWVTdHlsZXMoKTsKKyAgICBpZiAo
dXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpIHx8IGZvcmNlID09IEZvcmNlVXBkYXRlOjpZZXMpIHsK
KyAgICAgICAgbV9uZWVkc1BhaW50ID0gdHJ1ZTsKKyAgICAgICAgbV90YXNrUXVldWUuZW5xdWV1
ZVRhc2soW3RoaXNdICgpIHsKKyAgICAgICAgICAgIHVwZGF0ZUN1ZXMoKTsKKyAgICAgICAgfSk7
CisgICAgfQogfQogCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OnVwZGF0ZUN1ZVN0eWxlcygpCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZUN1ZXMoKQogewogICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE0MzYsOCArMTQ0NCw4IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlQ3VlU3R5bGVzKCkKICAgICAgICAgYWN0aXZlQ3Vl
LmRhdGEoKS0+cmVjYWxjdWxhdGVTdHlsZXMoKTsKIAogICAgIHVwZGF0ZUFjdGl2ZUN1ZXNGb250
U2l6ZSgpOwotICAgIHVwZGF0ZURpc3BsYXkoKTsKICAgICB1cGRhdGVUZXh0U3Ryb2tlU3R5bGUo
KTsKKyAgICB1cGRhdGVEaXNwbGF5KCk7CiB9CiAKIFJlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
bWFnZSgpCkBAIC0xNDcxLDcgKzE0NzksOSBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGxheWVyLT5wYWlu
dChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0LCBMYXlvdXRTaXplKCksIHsgUGFpbnRC
ZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzLCBQYWludEJlaGF2aW9yOjpTbmFwc2hv
dHRpbmcgfSwgbnVsbHB0ciwgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0
aW5nQWxsUGhhc2VzRmxhZ3MoKSk7CisgICAgYXV0byBwYWludEZsYWdzID0gUmVuZGVyTGF5ZXI6
OnBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQWxsUGhhc2VzRmxhZ3MoKTsKKyAgICBwYWlu
dEZsYWdzLmFkZChSZW5kZXJMYXllcjo6UGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cyk7Cisg
ICAgbGF5ZXItPnBhaW50KGJ1ZmZlci0+Y29udGV4dCgpLCBwYWludGluZ1JlY3QsIExheW91dFNp
emUoKSwgeyBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMsIFBhaW50QmVo
YXZpb3I6OlNuYXBzaG90dGluZyB9LCBudWxscHRyLCBwYWludEZsYWdzKTsKIAogICAgIHJldHVy
biBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgKaW5kZXgg
MjMzMDdiNjY1YjU3NjdhNDljMDI2NzYwNzlhNWQ2ZDRmNzc1MzcyZi4uM2RiN2JlNmNjOTZlNjg3
NzFhZjlkYjhlMmQ3ODNjZmVlMGI1MGNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCkBAIC00ODMsMjQgKzQ4MywzMCBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIGNsYXNzIEZvcmNlVXBkYXRlIHsgWWVzLCBObyB9OwogICAgIHZvaWQg
dXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGUgZm9yY2UgPSBGb3JjZVVwZGF0ZTo6Tm8pOwotICAgIHZv
aWQgbGF5b3V0SWZOZWNlc3NhcnkoKTsKLQogICAgIHZvaWQgdXBkYXRlRGlzcGxheSgpOworCisg
ICAgdm9pZCBsYXlvdXRJZk5lZWRlZCgpOworICAgIHZvaWQgcGFpbnRJZk5lZWRlZCgpOworCiAg
ICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigpOwogICAgIHZvaWQgZXhpdGVkRnVsbHNjcmVlbigp
OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQoRG9jdW1lbnQmKTsKIAorICAgIC8vIEVsZW1lbnQKKyAgICBSZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJl
bmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOworCisgICAgLy8gVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25DbGllbnQKKyAgICBSZWZQdHI8SW1hZ2U+IGNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0
aW9uSW1hZ2UoKSBvdmVycmlkZTsKKyAgICB2b2lkIHRleHRUcmFja1JlcHJlc2VudGF0aW9uQm91
bmRzQ2hhbmdlZChjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVwZGF0ZUN1
ZXMoKTsKICAgICBib29sIHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKTsKLSAgICB2b2lkIHVwZGF0
ZUN1ZVN0eWxlcygpOwogICAgIHZvaWQgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7CiAgICAg
dm9pZCB1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKTsKICAgICB2b2lkIHByb2Nlc3NBY3RpdmVWVFRD
dWUoVlRUQ3VlJik7Ci0gICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRS
ZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlk
ZTsKIAotICAgIFJlZlB0cjxJbWFnZT4gY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFn
ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFu
Z2VkKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uKCk7CiAgICAgdm9pZCBjbGVhclRleHRUcmFja1JlcHJlc2VudGF0aW9uKCk7
CiAgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvblN0eWxlKCk7CkBAIC01MjAs
NyArNTI2LDcgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fdmlkZW9EaXNwbGF5U2l6ZTsKICAg
ICBpbnQgbV9mb250U2l6ZSB7IDAgfTsKICAgICBib29sIG1fZm9udFNpemVJc0ltcG9ydGFudCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX3dhaXRpbmdGb3JGaXJzdExheW91dCB7IHRydWUgfTsKKyAg
ICBib29sIG1fbmVlZHNQYWludCB7IGZhbHNlIH07CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKaW5kZXggNjRjODhlNTZiZGI4ZDM4
MTEzZjkwNzczOGYwODY1YmE5YmMwZjQ1OC4uYjQ1YmJkYmYzZjY4NTFjMDE4N2FkMmUzNWIyYjQz
ZTMxMDJkNzQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
cy5jcHAKQEAgLTQwNSw3ICs0MDUsNyBAQCB2b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRleHRU
cmFja0Rpc3BsYXkoKQogCiAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+dXBkYXRlRGlzcGxh
eSgpOwogfQotICAgIAorCiB2b2lkIE1lZGlhQ29udHJvbHM6OnRleHRUcmFja1ByZWZlcmVuY2Vz
Q2hhbmdlZCgpCiB7CiAgICAgY2xvc2VkQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKQEAgLTQxOSw2
ICs0MTksMTIgQEAgdm9pZCBNZWRpYUNvbnRyb2xzOjpjbGVhclRleHREaXNwbGF5Q29udGFpbmVy
KCkKICAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+cmVtb3ZlQ2hpbGRyZW4oKTsKIH0K
IAordm9pZCBNZWRpYUNvbnRyb2xzOjpwYWludFRleHRUcmFja0lmTmVlZGVkKCkKK3sKKyAgICBp
ZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikKKyAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5l
ci0+cGFpbnRJZk5lZWRlZCgpOworfQorCiAjZW5kaWYKIAogdm9pZCBNZWRpYUNvbnRyb2xzOjpz
ZXRTbGlkZXJWb2x1bWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
cy5oCmluZGV4IGY0ZjBkMWMwZTI3MDRiMWExMDhlZTljZTljMTRiODQ0NDBmMTRiZjcuLmI4Y2Zk
N2Y2MjdkZWExNWZkOGUxMjA5MWVlMzQxMzAxYzM5YWExYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKQEAgLTk4LDYgKzk4LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CiAgICAgdmlydHVhbCB2b2lk
IHRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhclRl
eHREaXNwbGF5Q29udGFpbmVyKCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGV4dFRyYWNrSWZO
ZWVkZWQoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBhMzgz
YTFjYjAyMmU4MGJmNjlmY2U1NDQ2YzVhOTM0YjJjM2M2NDlkLi5lZDY2YzNkZjhkMzAxZTM5YzEw
MzY2NzRlN2YzMzg5ZjZmZDkxZThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEzNTUsMTAgKzEz
NTUsMTYgQEAgdm9pZCBQYWdlOjp1cGRhdGVSZW5kZXJpbmcoKQogI2VuZGlmCiAKICAgICBsYXlv
dXRJZk5lZWRlZCgpOwotICAgIAorCiAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYg
ZG9jdW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQudXBkYXRlSGlnaGxpZ2h0UG9zaXRpb25zKCk7
CiAgICAgfSk7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgZm9yRWFjaERvY3VtZW50
KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQucGFpbnRUZXh0VHJh
Y2tJZk5lZWRlZCgpOworICAgIH0pOworI2VuZGlmCiB9CiAKIHZvaWQgUGFnZTo6c3VzcGVuZFNj
cmlwdGVkQW5pbWF0aW9ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCA4YTA4NzU1NzhiYWY3NjAwMTNj
Yjc5MTkzYjFjNDY3YzUxOGE2MWQ2Li5kOWM5NTQ0YTliYzE4YWZhMDA0ZGZiOGZlN2NjOTBhMjlk
MTdjYWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIFJlbmRlclRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxheW91dCgpCiAgICAgQVNTRVJUKG1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlKGVsZW1lbnQoKSkgPT0gTWVkaWFUZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVy
KTsKIAogICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcih2aWV3KCku
ZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpKTsKLSAgICBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCgpKS0+bGF5b3V0SWZOZWNlc3Nh
cnkoKTsKKyAgICBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Kj4oZWxlbWVudCgpKS0+bGF5b3V0SWZOZWVkZWQoKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJM
RShWSURFT19UUkFDSykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393399</attachid>
            <date>2020-03-12 12:48:02 -0700</date>
            <delta_ts>2020-03-12 16:18:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208904-20200312124801.patch</filename>
            <type>text/plain</type>
            <size>29969</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQyZWYwZjExYzM1OTY0
MzUyNTUwOGUzMDIzZDg3YjJmOTJkN2Y2OC4uNjg3YmJhOTJiZTJmNThlODM0Nzk5N2MyYWE3ZjAx
YmQxOGQyOTMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIwLTAzLTEyICBQZW5n
IExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CisKKyAgICAgICAgU2FmYXJpIHNvbWV0aW1lcyBj
cmFzaGVzIHdoZW4gc3dpdGNoIHZpZGVvIGludG8gUGlQIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODkwNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgTWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCB3b24ndCBwYWludCBpdHMgc3VidHJlZQorICAg
ICAgICB0byBhbiBpbWFnZSBidWZmZXIgKGZvciB0aGUgY2FwdGlvbnMgaW4gdmlkZW8gZnVsbHNj
cmVlbiBvciBwaWN0dXJlLWluLXBpY3R1cmUgbW9kZSkKKyAgICAgICAgd2hlbiB0aGUgY3VlcyBh
cmUgdXBkYXRlZC4gSW5zdGVhZCwgaXQgb25seSBzZXRzIHRoZSBmbGFnIG1fbmVlZHNQYWludCB0
byB0cnVlCisgICAgICAgIGFmdGVyIHJ1bm5pbmcgbGF5b3V0IGJhc2VkIG9uIHRoZSBuZXcgY3Vl
cy4gQWZ0ZXIgdGhhdCwgaXQgcGFpbnRzIGl0cyBzdWJ0cmVlCisgICAgICAgIHRvIGFuIGltYWdl
IGJ1ZmZlciBhdCB0aGUgZW5kIG9mIFBhZ2U6OnVwZGF0ZVJlbmRlcmluZygpIHdoZW4gdGhlIGxh
eW91dCBpcyBjbGVhbi4KKyAgICAgICAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYSB3aWxs
IHVzZSB0aGUgaW1hZ2UgYnVmZmVyIHRvIHNldCB0aGUgY29udGVudCBvZiB0aGUgbGF5ZXIKKyAg
ICAgICAgZm9yIGNhcHRpb25zIGluIHZpZGVvIGZ1bGxzY3JlZW4gb3IgcGljdHVyZS1pbi1waWN0
dXJlIG1vZGUuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9s
c0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnVwZGF0ZVRl
eHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRNZWRpYUVsZW1lbnRTaG93aW5n
VGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjbGVhck1lZGlhRWxlbWVu
dFNob3dpbmdUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZVRl
eHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50Lmg6CisKKyAgICAgICAgRnVuY3Rpb25zIHRleHRUcmFja3NBcmVSZWFkeSgpLCB0ZXh0VHJh
Y2tSZWFkeVN0YXRlQ2hhbmdlZCgpIGFuZCBjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KCkKKyAg
ICAgICAgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aCAiI2lmIEVOQUJMRShWSURFT19UUkFDSykiLgor
ICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpzZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tzQXJlUmVhZHkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRy
YWNrRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIGh0bWwvSFRN
TE1lZGlhRWxlbWVudC5oOgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBk
YXRlVGV4dFRyYWNrU2l6ZUFuZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9u
SW1hZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjbGVhclRl
eHRUcmFja1JlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUN1ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3Jl
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpsYXlvdXRJZk5lY2Vzc2FyeSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50Ojp1cGRhdGVDdWVTdHlsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRzLmg6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjp1cGRhdGVUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01l
ZGlhQ29udHJvbHMuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZTo6dXBkYXRlUmVuZGVyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyOjpSZW5kZXJNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpsYXlvdXQpOiBE
ZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
OgorCiAyMDIwLTAzLTEwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBzcGVjaWFsIERpc3BsYXlMaXN0IGhhbmRsaW5nIGlu
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCmluZGV4IGNl
YjMwNWQ0ZjM1NTk4ZDQxNDE0ZTQ4OTAyNmM3YzU5NmRiYjcyYTguLjUwOGI5YTE4ZWVmMjM4M2Fi
NjFiOTljZjY1ZjU2NTJiY2I5NTc2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcApAQCAtMTcyLDYg
KzE3MiwxMiBAQCB2b2lkIE1lZGlhQ29udHJvbHNIb3N0Ojp1cGRhdGVUZXh0VHJhY2tDb250YWlu
ZXIoKQogICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lci0+dXBkYXRlRGlzcGxheSgpOwogfQog
Cit2b2lkIE1lZGlhQ29udHJvbHNIb3N0Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklt
YWdlSWZOZWVkZWQoKQoreworICAgIGlmIChtX3RleHRUcmFja0NvbnRhaW5lcikKKyAgICAgICAg
bV90ZXh0VHJhY2tDb250YWluZXItPnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJ
Zk5lZWRlZCgpOworfQorCiB2b2lkIE1lZGlhQ29udHJvbHNIb3N0OjplbnRlcmVkRnVsbHNjcmVl
bigpCiB7CiAgICAgaWYgKG1fdGV4dFRyYWNrQ29udGFpbmVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAppbmRl
eCA0Y2FlMDAwMmQ4Y2IxODk0MTg1OTQ4ZTZmNDcxMzEzNzhmM2M4ODBiLi4xNDIzMDdlMjUzN2Ni
MzhjNzBmZWM4NDBmYWVmMDliZmMzNWMxMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaApAQCAtNzEsNiAr
NzEsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIEZvcmNlVXBkYXRlIHsgWWVzLCBObyB9
OwogICAgIHZvaWQgdXBkYXRlQ2FwdGlvbkRpc3BsYXlTaXplcyhGb3JjZVVwZGF0ZSA9IEZvcmNl
VXBkYXRlOjpObyk7CisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdl
SWZOZWVkZWQoKTsKICAgICB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7CiAgICAgdm9pZCBleGl0
ZWRGdWxsc2NyZWVuKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGYyYjZlZGU4MTI1
OTM5ZDYyNTM2ZDk2YmJhZGJjYTg4NjE2NWNjMjguLmNiNDkzMWU0NTU2ZWIxZGQwN2FkNzc1Mjlm
OWRiZjA1MjcwMmZmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTQ1MSw2ICs1NDUx
LDIyIEBAIHZvaWQgRG9jdW1lbnQ6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQogICAgICAg
ICBlbGVtZW50LT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiB9CiAKK3ZvaWQgRG9jdW1l
bnQ6OnNldE1lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJhY2soY29uc3QgSFRNTE1lZGlhRWxlbWVu
dCYgZWxlbWVudCkKK3sKKyAgICBtX21lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJhY2sgPSBtYWtl
V2Vha1B0cihlbGVtZW50KTsKK30KKwordm9pZCBEb2N1bWVudDo6Y2xlYXJNZWRpYUVsZW1lbnRT
aG93aW5nVGV4dFRyYWNrKCkKK3sKKyAgICBtX21lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJhY2sg
PSBudWxscHRyOworfQorCit2b2lkIERvY3VtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkltYWdlSWZOZWVkZWQoKQoreworICAgIGlmIChtX21lZGlhRWxlbWVudFNob3dpbmdUZXh0
VHJhY2spCisgICAgICAgIG1fbWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjay0+dXBkYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7Cit9CisKICNlbmRpZgogCiB2b2lk
IERvY3VtZW50OjpzZXRTaG91bGRDcmVhdGVSZW5kZXJlcnMoYm9vbCBmKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAppbmRleCAwZjdiYTg0Mjk1Y2M5ZjcxZjA5ZGUxNTgzNDk2Y2I3MGM2NjlkNDU3Li41NTlh
OTgzOGI2N2E2ZmY0MWY3MjhkMjZmNTA3ODk3NTQxNDE5YzM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aApAQCAtMTExNSw2ICsxMTE1LDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJGb3JDYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICB2
b2lkIHVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxN
ZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIGNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAg
ICB2b2lkIHNldE1lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJhY2soY29uc3QgSFRNTE1lZGlhRWxl
bWVudCYpOworICAgIHZvaWQgY2xlYXJNZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrKCk7Cisg
ICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKICNl
bmRpZgogCiAgICAgdm9pZCByZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFj
a3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCYpOwpAQCAtMTgwMSw2ICsxODA0LDcgQEAgcHJpdmF0
ZToKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBIYXNoU2V0PEhUTUxNZWRpYUVsZW1l
bnQqPiBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50czsKKyAgICBXZWFrUHRyPEhU
TUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjazsKICNlbmRpZgog
CiAgICAgRWxlbWVudCogbV9tYWluQXJ0aWNsZUVsZW1lbnQgeyBudWxscHRyIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAwZWY1NGFjYWYyOWE4OTRhMDlm
MTRhY2QxYWYzN2E5ZmYxYzliY2ZlLi5lNGQyOGFlOTJhZjY1MGJhNTJmMzFhYzY5ZDU5MGNjM2Rm
MDA3N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTE4
NzYsNDUgKzE4NzYsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUFjdGl2ZVRleHRU
cmFja0N1ZXMoY29uc3QgTWVkaWFUaW1lJiBtb3ZpZVRpbWUpCiAgICAgICAgIHVwZGF0ZVRleHRU
cmFja0Rpc3BsYXkoKTsKIH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tzQXJl
UmVhZHkoKSBjb25zdAotewotICAgIC8vIDQuOC4xMC4xMi4xIFRleHQgdHJhY2sgbW9kZWwKLSAg
ICAvLyAuLi4KLSAgICAvLyBUaGUgdGV4dCB0cmFja3Mgb2YgYSBtZWRpYSBlbGVtZW50IGFyZSBy
ZWFkeSBpZiBhbGwgdGhlIHRleHQgdHJhY2tzIHdob3NlIG1vZGUgd2FzIG5vdAotICAgIC8vIGlu
IHRoZSBkaXNhYmxlZCBzdGF0ZSB3aGVuIHRoZSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0aW9u
IGFsZ29yaXRobSBsYXN0IHN0YXJ0ZWQgbm93Ci0gICAgLy8gaGF2ZSBhIHRleHQgdHJhY2sgcmVh
ZGluZXNzIHN0YXRlIG9mIGxvYWRlZCBvciBmYWlsZWQgdG8gbG9hZC4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW4uc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlv
bkJlZ2FuW2ldLT5yZWFkaW5lc3NTdGF0ZSgpID09IFRleHRUcmFjazo6TG9hZGluZwotICAgICAg
ICAgICAgfHwgbV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW5baV0tPnJlYWRp
bmVzc1N0YXRlKCkgPT0gVGV4dFRyYWNrOjpOb3RMb2FkZWQpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6dGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKLXsKLSAg
ICBpZiAodHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgIT0gVGV4dFRyYWNrOjpMb2FkaW5nCi0gICAg
ICAgICYmIHRyYWNrLT5tb2RlKCkgIT0gVGV4dFRyYWNrOjpNb2RlOjpEaXNhYmxlZCkgewotICAg
ICAgICAvLyBUaGUgZGlzcGxheSB0cmVlcyBleGlzdCBhcyBsb25nIGFzIHRoZSB0cmFjayBpcyBh
Y3RpdmUsIGluIHRoaXMgY2FzZSwKLSAgICAgICAgLy8gYW5kIGlmIHRoZSBzYW1lIHRyYWNrIGlz
IGxvYWRlZCBhZ2FpbiAoZm9yIGV4YW1wbGUgaWYgdGhlIHNyYyBhdHRyaWJ1dGUgd2FzIGNoYW5n
ZWQpLAotICAgICAgICAvLyBjdWVzIGNhbiBiZSBhY2N1bXVsYXRlZCB3aXRoIHRoZSBvbGQgb25l
cywgdGhhdCdzIHdoeSB0aGV5IG5lZWRzIHRvIGJlIGZsdXNoZWQKLSAgICAgICAgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2xlYXJUZXh0RGlz
cGxheUNvbnRhaW5lcigpOwotICAgICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0gICAg
fQotICAgIGlmIChtX3BsYXllciAmJiBtX3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25C
ZWdhbi5jb250YWlucyh0cmFjaykpIHsKLSAgICAgICAgaWYgKHRyYWNrLT5yZWFkaW5lc3NTdGF0
ZSgpICE9IFRleHRUcmFjazo6TG9hZGluZykKLSAgICAgICAgICAgIHNldFJlYWR5U3RhdGUobV9w
bGF5ZXItPnJlYWR5U3RhdGUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIHRyYWNr
IHJlYWRpbmVzcyBzdGF0ZSBtaWdodCBoYXZlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIHVz
ZXIKLSAgICAgICAgLy8gY2xpY2tpbmcgdGhlIGNhcHRpb25zIGJ1dHRvbi4gSW4gdGhpcyBjYXNl
LCBhIGNoZWNrIHdoZXRoZXIgYWxsIHRoZQotICAgICAgICAvLyByZXNvdXJjZXMgaGF2ZSBmYWls
ZWQgbG9hZGluZyBzaG91bGQgYmUgZG9uZSBpbiBvcmRlciB0byBoaWRlIHRoZSBDQyBidXR0b24u
Ci0gICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkgJiYgdHJhY2stPnJlYWRpbmVzc1N0YXRl
KCkgPT0gVGV4dFRyYWNrOjpGYWlsZWRUb0xvYWQpCi0gICAgICAgICAgICBtZWRpYUNvbnRyb2xz
KCktPnJlZnJlc2hDbG9zZWRDYXB0aW9uc0J1dHRvblZpc2liaWxpdHkoKTsKLSAgICB9Ci19Ci0K
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YXVkaW9UcmFja0VuYWJsZWRDaGFuZ2VkKEF1ZGlvVHJh
Y2smIHRyYWNrKQogewogICAgIGlmIChtX2F1ZGlvVHJhY2tzICYmIG1fYXVkaW9UcmFja3MtPmNv
bnRhaW5zKHRyYWNrKSkKQEAgLTU4NDYsNiArNTgwNywxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKFRleHRUcmFja1JlcHJlc2VudGF0aW9uKiBy
ZXByZQogewogICAgIGlmIChtX3BsYXllcikKICAgICAgICAgbV9wbGF5ZXItPnNldFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uKHJlcHJlc2VudGF0aW9uKTsKKworICAgIGlmIChyZXByZXNlbnRhdGlv
bikKKyAgICAgICAgZG9jdW1lbnQoKS5zZXRNZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrKCp0
aGlzKTsKKyAgICBlbHNlCisgICAgICAgIGRvY3VtZW50KCkuY2xlYXJNZWRpYUVsZW1lbnRTaG93
aW5nVGV4dFRyYWNrKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c3luY1RleHRUcmFj
a0JvdW5kcygpCkBAIC02MzQwLDYgKzYzMDYsODkgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojpj
bG9zZWRDYXB0aW9uc1Zpc2libGUoKSBjb25zdAogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQog
Citib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0Cit7Cisg
ICAgLy8gNC44LjEwLjEyLjEgVGV4dCB0cmFjayBtb2RlbAorICAgIC8vIC4uLgorICAgIC8vIFRo
ZSB0ZXh0IHRyYWNrcyBvZiBhIG1lZGlhIGVsZW1lbnQgYXJlIHJlYWR5IGlmIGFsbCB0aGUgdGV4
dCB0cmFja3Mgd2hvc2UgbW9kZSB3YXMgbm90CisgICAgLy8gaW4gdGhlIGRpc2FibGVkIHN0YXRl
IHdoZW4gdGhlIGVsZW1lbnQncyByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGxhc3Qgc3Rh
cnRlZCBub3cKKyAgICAvLyBoYXZlIGEgdGV4dCB0cmFjayByZWFkaW5lc3Mgc3RhdGUgb2YgbG9h
ZGVkIG9yIGZhaWxlZCB0byBsb2FkLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Rl
eHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdhbi5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAobV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW5baV0tPnJlYWRpbmVz
c1N0YXRlKCkgPT0gVGV4dFRyYWNrOjpMb2FkaW5nCisgICAgICAgICAgICB8fCBtX3RleHRUcmFj
a3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdhbltpXS0+cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0
VHJhY2s6Ok5vdExvYWRlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tSZWFk
eVN0YXRlQ2hhbmdlZChUZXh0VHJhY2sqIHRyYWNrKQoreworICAgIGlmICh0cmFjay0+cmVhZGlu
ZXNzU3RhdGUoKSAhPSBUZXh0VHJhY2s6OkxvYWRpbmcKKyAgICAgICAgJiYgdHJhY2stPm1vZGUo
KSAhPSBUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkKSB7CisgICAgICAgIC8vIFRoZSBkaXNwbGF5
IHRyZWVzIGV4aXN0IGFzIGxvbmcgYXMgdGhlIHRyYWNrIGlzIGFjdGl2ZSwgaW4gdGhpcyBjYXNl
LAorICAgICAgICAvLyBhbmQgaWYgdGhlIHNhbWUgdHJhY2sgaXMgbG9hZGVkIGFnYWluIChmb3Ig
ZXhhbXBsZSBpZiB0aGUgc3JjIGF0dHJpYnV0ZSB3YXMgY2hhbmdlZCksCisgICAgICAgIC8vIGN1
ZXMgY2FuIGJlIGFjY3VtdWxhdGVkIHdpdGggdGhlIG9sZCBvbmVzLCB0aGF0J3Mgd2h5IHRoZXkg
bmVlZHMgdG8gYmUgZmx1c2hlZAorICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAg
ICAgICAgICAgbWVkaWFDb250cm9scygpLT5jbGVhclRleHREaXNwbGF5Q29udGFpbmVyKCk7Cisg
ICAgICAgIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICB9CisgICAgaWYgKG1fcGxheWVy
ICYmIG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLmNvbnRhaW5zKHRyYWNr
KSkgeworICAgICAgICBpZiAodHJhY2stPnJlYWRpbmVzc1N0YXRlKCkgIT0gVGV4dFRyYWNrOjpM
b2FkaW5nKQorICAgICAgICAgICAgc2V0UmVhZHlTdGF0ZShtX3BsYXllci0+cmVhZHlTdGF0ZSgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGUgdHJhY2sgcmVhZGluZXNzIHN0YXRlIG1p
Z2h0IGhhdmUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUgdXNlcgorICAgICAgICAvLyBjbGlj
a2luZyB0aGUgY2FwdGlvbnMgYnV0dG9uLiBJbiB0aGlzIGNhc2UsIGEgY2hlY2sgd2hldGhlciBh
bGwgdGhlCisgICAgICAgIC8vIHJlc291cmNlcyBoYXZlIGZhaWxlZCBsb2FkaW5nIHNob3VsZCBi
ZSBkb25lIGluIG9yZGVyIHRvIGhpZGUgdGhlIENDIGJ1dHRvbi4KKyAgICAgICAgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSAmJiB0cmFjay0+cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6OkZh
aWxlZFRvTG9hZCkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVmcmVzaENsb3NlZENh
cHRpb25zQnV0dG9uVmlzaWJpbGl0eSgpOworICAgIH0KK30KKwordm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojpjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KFRleHRUcmFja1Zpc2liaWxpdHlDaGVja1R5
cGUgY2hlY2tUeXBlKQoreworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgY2hlY2tUeXBl
KTsKKyAgICBBU1NFUlQobV90ZXh0VHJhY2tzKTsKKworICAgIGlmIChtX3Byb2Nlc3NpbmdQcmVm
ZXJlbmNlQ2hhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZG9jdW1lbnQoKS5hY3Rp
dmVET01PYmplY3RzQXJlU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhh
dmVWaXNpYmxlVGV4dFRyYWNrID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdGV4dFRyYWNrcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAobV90ZXh0VHJhY2tz
LT5pdGVtKGkpLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKSB7CisgICAgICAg
ICAgICBoYXZlVmlzaWJsZVRleHRUcmFjayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChjaGVja1R5cGUgPT0gQ2hlY2tUZXh0VHJhY2tWaXNp
YmlsaXR5ICYmIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPT0gaGF2ZVZpc2libGVUZXh0VHJhY2sp
IHsKKyAgICAgICAgdXBkYXRlQWN0aXZlVGV4dFRyYWNrQ3VlcyhjdXJyZW50TWVkaWFUaW1lKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9oYXZlVmlzaWJsZVRleHRUcmFjayA9
IGhhdmVWaXNpYmxlVGV4dFRyYWNrOworICAgIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlID0gbV9o
YXZlVmlzaWJsZVRleHRUcmFjazsKKworI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQp
CisgICAgaWYgKCFtX2hhdmVWaXNpYmxlVGV4dFRyYWNrKQorICAgICAgICByZXR1cm47CisKKyAg
ICBlbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOworICAgIHVwZGF0ZVRleHRUcmFja0Rp
c3BsYXkoKTsKKyNlbHNlCisgICAgaWYgKCFtX2hhdmVWaXNpYmxlVGV4dFRyYWNrICYmICFoYXNN
ZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5
KCk7CisKKyAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgdXBkYXRlQWN0aXZlVGV4
dFRyYWNrQ3VlcyhjdXJyZW50TWVkaWFUaW1lKCkpOworI2VuZGlmCit9CisKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpCiB7CiAjaWYgRU5BQkxFKE1FRElB
X0NPTlRST0xTX1NDUklQVCkKQEAgLTYzNTUsNiArNjQwNCwyMSBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCkK
K3sKKyNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQorICAgIGVuc3VyZU1lZGlhQ29u
dHJvbHNTaGFkb3dSb290KCk7CisgICAgaWYgKCFtX21lZGlhQ29udHJvbHNIb3N0KQorICAgICAg
ICBtX21lZGlhQ29udHJvbHNIb3N0ID0gTWVkaWFDb250cm9sc0hvc3Q6OmNyZWF0ZSgqdGhpcyk7
CisgICAgbV9tZWRpYUNvbnRyb2xzSG9zdC0+dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
bWFnZUlmTmVlZGVkKCk7CisjZWxzZQorICAgIGlmICghaGFzTWVkaWFDb250cm9scygpICYmICFj
cmVhdGVNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1lZGlhQ29udHJv
bHMoKS0+dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7CisjZW5k
aWYKK30KKwogI2VuZGlmCiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0Q2xvc2VkQ2FwdGlv
bnNWaXNpYmxlKGJvb2wgY2xvc2VkQ2FwdGlvblZpc2libGUpCkBAIC02NTk1LDUxICs2NjU5LDYg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbnRyb2xzKCkKIH0KIAog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJl
VGV4dFRyYWNrRGlzcGxheShUZXh0VHJhY2tWaXNpYmlsaXR5Q2hlY2tUeXBlIGNoZWNrVHlwZSkK
LXsKLSAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsIGNoZWNrVHlwZSk7Ci0gICAgQVNTRVJU
KG1fdGV4dFRyYWNrcyk7Ci0KLSAgICBpZiAobV9wcm9jZXNzaW5nUHJlZmVyZW5jZUNoYW5nZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRvY3VtZW50KCkuYWN0aXZlRE9NT2JqZWN0c0Fy
ZVN0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXZlVmlzaWJsZVRleHRU
cmFjayA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3Mt
Pmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdGV4dFRyYWNrcy0+aXRlbShpKS0+bW9k
ZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgewotICAgICAgICAgICAgaGF2ZVZpc2li
bGVUZXh0VHJhY2sgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoY2hlY2tUeXBlID09IENoZWNrVGV4dFRyYWNrVmlzaWJpbGl0eSAmJiBtX2hh
dmVWaXNpYmxlVGV4dFRyYWNrID09IGhhdmVWaXNpYmxlVGV4dFRyYWNrKSB7Ci0gICAgICAgIHVw
ZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVudE1lZGlhVGltZSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRl
eHRUcmFjazsKLSAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZpc2libGVUZXh0
VHJhY2s7Ci0KLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIGlmICghbV9o
YXZlVmlzaWJsZVRleHRUcmFjaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW5zdXJlTWVkaWFD
b250cm9sc1NoYWRvd1Jvb3QoKTsKLSAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0jZWxz
ZQotICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjayAmJiAhaGFzTWVkaWFDb250cm9scygp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0
ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFDb250cm9scygp
LT5jaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCk7Ci0KLSAgICB1cGRhdGVUZXh0VHJh
Y2tEaXNwbGF5KCk7Ci0gICAgdXBkYXRlQWN0aXZlVGV4dFRyYWNrQ3VlcyhjdXJyZW50TWVkaWFU
aW1lKCkpOwotI2VuZGlmCi19CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmlu
ZGV4IDc2MTdiNGU3YTc2NDJhYjVjM2YzZTM5MmVmYWMzMjAyOGM3NWFmMWYuLjAyYWExOGE0ZDI5
YTFmMTJjZjg3OTZkNjNjYWMwYWM0NTRlNjgwNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCkBAIC0zNzksMTYgKzM3OSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0
U2VsZWN0ZWRUZXh0VHJhY2soVGV4dFRyYWNrKik7CiAKLSAgICBib29sIHRleHRUcmFja3NBcmVS
ZWFkeSgpIGNvbnN0OwotICAgIHVzaW5nIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VGV4dFRyYWNr
VmlzaWJpbGl0eUNoZWNrVHlwZTsKLSAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXko
VGV4dFRyYWNrVmlzaWJpbGl0eUNoZWNrVHlwZSBjaGVja1R5cGUgPSBDaGVja1RleHRUcmFja1Zp
c2liaWxpdHkpOwotICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwotCiAgICAgLy8g
QXVkaW9UcmFja0NsaWVudAogICAgIHZvaWQgYXVkaW9UcmFja0VuYWJsZWRDaGFuZ2VkKEF1ZGlv
VHJhY2smKSBmaW5hbDsKIAotICAgIHZvaWQgdGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoVGV4
dFRyYWNrKik7Ci0KICAgICAvLyBUZXh0VHJhY2tDbGllbnQKICAgICB2b2lkIHRleHRUcmFja0tp
bmRDaGFuZ2VkKFRleHRUcmFjayYpIG92ZXJyaWRlOwogICAgIHZvaWQgdGV4dFRyYWNrTW9kZUNo
YW5nZWQoVGV4dFRyYWNrJikgb3ZlcnJpZGU7CkBAIC00MDUsNiArMzk4LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgc3luY1RleHRUcmFja0JvdW5kcygpOwogCiAgICAgdm9pZCBjYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkKCk7CisgICAgdXNpbmcgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpUZXh0VHJh
Y2tWaXNpYmlsaXR5Q2hlY2tUeXBlOworICAgIHZvaWQgdGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5n
ZWQoVGV4dFRyYWNrKik7CisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklt
YWdlSWZOZWVkZWQoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkKQEAgLTgxMCw2ICs4MDYsMTAgQEAgcHJpdmF0ZToKICAgICBlbnVtIFJlY29uZmlndXJl
TW9kZSB7IEltbWVkaWF0ZWx5LCBBZnRlckRlbGF5IH07CiAgICAgdm9pZCBtYXJrQ2FwdGlvbkFu
ZFN1YnRpdGxlVHJhY2tzQXNVbmNvbmZpZ3VyZWQoUmVjb25maWd1cmVNb2RlKTsKICAgICBDYXB0
aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgY2FwdGlvbkRpc3BsYXlNb2Rl
KCk7CisKKyAgICBib29sIHRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0OworICAgIHZvaWQgY29u
ZmlndXJlVGV4dFRyYWNrRGlzcGxheShUZXh0VHJhY2tWaXNpYmlsaXR5Q2hlY2tUeXBlID0gQ2hl
Y2tUZXh0VHJhY2tWaXNpYmlsaXR5KTsKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXko
KTsKICNlbmRpZgogCiAgICAgLy8gVGhlc2UgImludGVybmFsIiBmdW5jdGlvbnMgZG8gbm90IGNo
ZWNrIHVzZXIgZ2VzdHVyZSByZXN0cmljdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggNmQwZjM3OWQ1ZjcxMWIy
N2EzNDFlZGYwOTdhYzRlZTAzMGNmOWE5Yy4uMDEzZmJmMTJkYTNjNWEwYmM2MTFjNzA0MzU1MjQ0
OWY1NDQ1NThkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcApAQCAtMTEwNiw3ICsxMTA2LDcgQEAgUmVmPE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQKIAogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0
eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQogewotICAgIHJldHVybiBjcmVhdGVSZW5k
ZXJlcjxSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50PigqdGhpcywgV1RGTW92ZShzdHls
ZSkpOworICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKIHN0YXRpYyBib29sIGNv
bXBhcmVDdWVJbnRlcnZhbEZvckRpc3BsYXkoY29uc3QgQ3VlSW50ZXJ2YWwmIG9uZSwgY29uc3Qg
Q3VlSW50ZXJ2YWwmIHR3bykKQEAgLTEyMDYsOCArMTIwNiwzNSBAQCB2b2lkIE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkoKQogICAgIGVsc2UKICAg
ICAgICAgaGlkZSgpOwogCi0gICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24gfHwgdmlk
ZW8ucmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpKQorICAgIGlmIChtX3RleHRUcmFj
a1JlcHJlc2VudGF0aW9uIHx8IHZpZGVvLnJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24o
KSkgewogICAgICAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOworICAgICAgICBp
ZiAoaGFzQ2hpbGROb2RlcygpKQorICAgICAgICAgICAgbV9uZWVkc1BhaW50ID0gdHJ1ZTsKKyAg
ICB9Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBk
YXRlVGV4dFRyYWNrU2l6ZUFuZFN0eWxlKCkKK3sKKyAgICBhdXRvIHNpemVDaGFuZ2VkID0gdXBk
YXRlVmlkZW9EaXNwbGF5U2l6ZSgpOworICAgIGlmICghc2l6ZUNoYW5nZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fbmVlZHNQYWludCA9IHRydWU7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
bWFnZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fbmVlZHNQYWludCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9uZWVkc1BhaW50ID0gZmFsc2U7CisKKyAgICAvLyBXZSBjYW4gb25seSBjYWxs
IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpIGFmdGVyIHRoZSBsYXlvdXQKKyAg
ICAvLyBpcyBjbGVhbiwgYmVjYXVzZSBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT51cGRhdGUo
KSB3aWxsIGNhbGwKKyAgICAvLyBjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkg
dG8gcGFpbnQgdGhlIHN1YnRyZWUgb2YKKyAgICAvLyBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50IHRvIGFuIGltYWdlIGJ1ZmZlci4KKyAgICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRh
dGlvbikKKyAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBkYXRlKCk7CiB9CiAK
IHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0FjdGl2
ZVZUVEN1ZShWVFRDdWUmIGN1ZSkKQEAgLTEyOTYsMTAgKzEzMjMsOSBAQCB2b2lkIE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0
aW9uKCkKICAgICBhdXRvIHJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBtZWRpYUVs
ZW1lbnQtPnJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKICAgICBpZiAoIWhhc0No
aWxkTm9kZXMoKSB8fCAhcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewogICAgICAg
ICBpZiAobV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewotICAgICAgICAgICAgaWYgKCFyZXF1
aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7CisgICAgICAgICAgICBpZiAoIXJlcXVpcmVz
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCiAgICAgICAgICAgICAgICAgY2xlYXJUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbigpOwotICAgICAgICAgICAgICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRl
OjpZZXMpOwotICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+c2V0SGlkZGVuKHRydWUpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKQEAgLTEzMDgsMTggKzEzMzQsMTQgQEAgdm9pZCBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbigpCiAgICAgaWYgKCFtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7CiAgICAgICAgIEFM
V0FZU19MT0coTE9HSURFTlRJRklFUik7CiAKLSAgICAgICAgbV93YWl0aW5nRm9yRmlyc3RMYXlv
dXQgPSB0cnVlOwogICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gVGV4dFRyYWNr
UmVwcmVzZW50YXRpb246OmNyZWF0ZSgqdGhpcyk7CiAgICAgICAgIGlmIChkb2N1bWVudCgpLnBh
Z2UoKSkKICAgICAgICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldENvbnRlbnRT
Y2FsZShkb2N1bWVudCgpLnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgIG1l
ZGlhRWxlbWVudC0+c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24obV90ZXh0VHJhY2tSZXByZXNl
bnRhdGlvbi5nZXQoKSk7Ci0gICAgICAgIHVwZGF0ZVNpemVzKCk7CiAgICAgICAgIHVwZGF0ZVRl
eHRUcmFja1JlcHJlc2VudGF0aW9uU3R5bGUoKTsKICAgICB9CiAKICAgICBtX3RleHRUcmFja1Jl
cHJlc2VudGF0aW9uLT5zZXRIaWRkZW4oZmFsc2UpOwotICAgIGlmICghbV93YWl0aW5nRm9yRmly
c3RMYXlvdXQpCi0gICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOwog
fQogCiB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNsZWFyVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24oKQpAQCAtMTMyOSw3ICsxMzUxLDYgQEAgdm9pZCBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjbGVhclRleHRUcmFja1JlcHJlc2VudGF0
aW9uKCkKIAogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAKLSAgICBtX3dhaXRpbmdG
b3JGaXJzdExheW91dCA9IHRydWU7CiAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbiA9IG51
bGxwdHI7CiAgICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHRo
aXMpKQogICAgICAgICBtZWRpYUVsZW1lbnQtPnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKG51
bGxwdHIpOwpAQCAtMTM2OCwyMyArMTM4OSw2IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6ZXhpdGVkRnVsbHNjcmVlbigpCiAgICAgdXBkYXRlU2l6ZXMoRm9y
Y2VVcGRhdGU6Olllcyk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6bGF5b3V0SWZOZWNlc3NhcnkoKQotewotICAgIG1fd2FpdGluZ0ZvckZpcnN0TGF5
b3V0ID0gZmFsc2U7Ci0KLSAgICBhdXRvIHNpemVDaGFuZ2VkID0gdXBkYXRlVmlkZW9EaXNwbGF5
U2l6ZSgpOwotICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKQotICAgICAgICBtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uLT51cGRhdGUoKTsKLQotICAgIGlmICghc2l6ZUNoYW5nZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FICgxMjExNzApOiBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBkdXJpbmcgbGF5b3V0LCBhbmQgc2hvdWxkIGxheSBvdXQgdGhlIHRleHQgdHJh
Y2tzIGltbWVkaWF0ZWx5LgotICAgIG1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzXSAoKSB7
Ci0gICAgICAgIHVwZGF0ZUN1ZVN0eWxlcygpOwotICAgIH0pOwotfQotCiBib29sIE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKQog
ewogICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCkBAIC0xNDE3LDExICsxNDIxLDE1IEBAIGJv
b2wgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVmlkZW9EaXNw
bGF5U2l6ZSgpCiAKIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
dXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGUgZm9yY2UpCiB7Ci0gICAgaWYgKHVwZGF0ZVZpZGVvRGlz
cGxheVNpemUoKSB8fCBmb3JjZSA9PSBGb3JjZVVwZGF0ZTo6WWVzKQotICAgICAgICB1cGRhdGVD
dWVTdHlsZXMoKTsKKyAgICBpZiAodXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpIHx8IGZvcmNlID09
IEZvcmNlVXBkYXRlOjpZZXMpIHsKKyAgICAgICAgbV9uZWVkc1BhaW50ID0gdHJ1ZTsKKyAgICAg
ICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdICgpIHsKKyAgICAgICAgICAgIHVwZGF0
ZUN1ZXMoKTsKKyAgICAgICAgfSk7CisgICAgfQogfQogCi12b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUN1ZVN0eWxlcygpCit2b2lkIE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUN1ZXMoKQogewogICAgIGlmICghZG9j
dW1lbnQoKS5wYWdlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzYsOCArMTQ0NCw4IEBAIHZv
aWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlQ3VlU3R5bGVz
KCkKICAgICAgICAgYWN0aXZlQ3VlLmRhdGEoKS0+cmVjYWxjdWxhdGVTdHlsZXMoKTsKIAogICAg
IHVwZGF0ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpOwotICAgIHVwZGF0ZURpc3BsYXkoKTsKICAgICB1
cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKTsKKyAgICB1cGRhdGVEaXNwbGF5KCk7CiB9CiAKIFJlZlB0
cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpCkBAIC0xNDcxLDcgKzE0NzksOSBAQCBSZWZQdHI8
SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aQogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0LCBM
YXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzLCBQ
YWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQWxsUGhhc2VzRmxhZ3MoKSk7CisgICAgYXV0byBwYWlu
dEZsYWdzID0gUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQWxsUGhh
c2VzRmxhZ3MoKTsKKyAgICBwYWludEZsYWdzLmFkZChSZW5kZXJMYXllcjo6UGFpbnRMYXllclRl
bXBvcmFyeUNsaXBSZWN0cyk7CisgICAgbGF5ZXItPnBhaW50KGJ1ZmZlci0+Y29udGV4dCgpLCBw
YWludGluZ1JlY3QsIExheW91dFNpemUoKSwgeyBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9z
aXRpbmdMYXllcnMsIFBhaW50QmVoYXZpb3I6OlNuYXBzaG90dGluZyB9LCBudWxscHRyLCBwYWlu
dEZsYWdzKTsKIAogICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShXVEZNb3Zl
KGJ1ZmZlcikpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbEVsZW1lbnRzLmgKaW5kZXggMjMzMDdiNjY1YjU3NjdhNDljMDI2NzYwNzlhNWQ2ZDRmNzc1
MzcyZi4uMDAwNDQxZTliODU4NzQxNDE4NjA5ZWM4MjA5NmI3N2M1ODRjYWVkYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCkBAIC00
ODMsMjQgKzQ4MywzMCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIEZvcmNlVXBkYXRlIHsg
WWVzLCBObyB9OwogICAgIHZvaWQgdXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGUgZm9yY2UgPSBGb3Jj
ZVVwZGF0ZTo6Tm8pOwotICAgIHZvaWQgbGF5b3V0SWZOZWNlc3NhcnkoKTsKLQogICAgIHZvaWQg
dXBkYXRlRGlzcGxheSgpOworCisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tTaXplQW5kU3R5bGUo
KTsKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgp
OworCiAgICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigpOwogICAgIHZvaWQgZXhpdGVkRnVsbHNj
cmVlbigpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsKIAorICAgIC8vIEVsZW1lbnQKKyAgICBSZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNv
bnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOworCisgICAgLy8gVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25DbGllbnQKKyAgICBSZWZQdHI8SW1hZ2U+IGNyZWF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2UoKSBvdmVycmlkZTsKKyAgICB2b2lkIHRleHRUcmFja1JlcHJlc2VudGF0
aW9uQm91bmRzQ2hhbmdlZChjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVw
ZGF0ZUN1ZXMoKTsKICAgICBib29sIHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKTsKLSAgICB2b2lk
IHVwZGF0ZUN1ZVN0eWxlcygpOwogICAgIHZvaWQgdXBkYXRlQWN0aXZlQ3Vlc0ZvbnRTaXplKCk7
CiAgICAgdm9pZCB1cGRhdGVUZXh0U3Ryb2tlU3R5bGUoKTsKICAgICB2b2lkIHByb2Nlc3NBY3Rp
dmVWVFRDdWUoVlRUQ3VlJik7Ci0gICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVs
ZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBv
dmVycmlkZTsKIAotICAgIFJlZlB0cjxJbWFnZT4gY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JbWFnZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3Vu
ZHNDaGFuZ2VkKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uKCk7CiAgICAgdm9pZCBjbGVhclRleHRUcmFja1JlcHJlc2VudGF0
aW9uKCk7CiAgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvblN0eWxlKCk7CkBA
IC01MjAsNyArNTI2LDcgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fdmlkZW9EaXNwbGF5U2l6
ZTsKICAgICBpbnQgbV9mb250U2l6ZSB7IDAgfTsKICAgICBib29sIG1fZm9udFNpemVJc0ltcG9y
dGFudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3dhaXRpbmdGb3JGaXJzdExheW91dCB7IHRydWUg
fTsKKyAgICBib29sIG1fbmVlZHNQYWludCB7IGZhbHNlIH07CiB9OwogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKaW5kZXggNjRjODhlNTZi
ZGI4ZDM4MTEzZjkwNzczOGYwODY1YmE5YmMwZjQ1OC4uMzk5MjdiOTdiZmU2ZDI5ZTllNGY4NDc0
NzQ2N2QyYjQyNTRjMzYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9scy5jcHAKQEAgLTQwNSw3ICs0MDUsNyBAQCB2b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0
ZVRleHRUcmFja0Rpc3BsYXkoKQogCiAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+dXBkYXRl
RGlzcGxheSgpOwogfQotICAgIAorCiB2b2lkIE1lZGlhQ29udHJvbHM6OnRleHRUcmFja1ByZWZl
cmVuY2VzQ2hhbmdlZCgpCiB7CiAgICAgY2xvc2VkQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKQEAg
LTQxOSw2ICs0MTksMTIgQEAgdm9pZCBNZWRpYUNvbnRyb2xzOjpjbGVhclRleHREaXNwbGF5Q29u
dGFpbmVyKCkKICAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+cmVtb3ZlQ2hpbGRyZW4o
KTsKIH0KIAordm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlSWZOZWVkZWQoKQoreworICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAg
ICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlSWZOZWVkZWQoKTsKK30KKwogI2VuZGlmCiAKIHZvaWQgTWVkaWFDb250cm9sczo6c2V0
U2xpZGVyVm9sdW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbHMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMu
aAppbmRleCBmNGYwZDFjMGUyNzA0YjFhMTA4ZWU5Y2U5YzE0Yjg0NDQwZjE0YmY3Li5hYmJjYjU3
NGIyZjBhMjM5MjhlZThjMTc5ODY1Nzk5NWNmN2JkOTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9scy5oCkBAIC05OCw2ICs5OCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwogICAgIHZpcnR1YWwgdm9pZCB0
ZXh0VHJhY2tQcmVmZXJlbmNlc0NoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJUZXh0
RGlzcGxheUNvbnRhaW5lcigpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAppbmRleCBhMzgzYTFjYjAyMmU4MGJmNjlmY2U1NDQ2YzVhOTM0YjJjM2M2NDlkLi41
ZTRiOWE5MmU5NjBjMDY2NTc3MGM0NWNmZTFiZjY5NjVlYjRlMzgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKQEAgLTEzNTUsMTAgKzEzNTUsMTYgQEAgdm9pZCBQYWdlOjp1cGRhdGVSZW5kZXJpbmcoKQog
I2VuZGlmCiAKICAgICBsYXlvdXRJZk5lZWRlZCgpOwotICAgIAorCiAgICAgZm9yRWFjaERvY3Vt
ZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQudXBkYXRlSGln
aGxpZ2h0UG9zaXRpb25zKCk7CiAgICAgfSk7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisg
ICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9j
dW1lbnQudXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7CisgICAg
fSk7CisjZW5kaWYKIH0KIAogdm9pZCBQYWdlOjpzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25zKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCmluZGV4IDhhMDg3NTU3OGJhZjc2MDAxM2NiNzkxOTNiMWM0NjdjNTE4YTYx
ZDYuLjg0NzI2MTgwNzAyYTUzNWNkODk5NzRmZWMyNzY0YTZmZjg0ZDc2YmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIpOwogV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVy
KTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk7CitXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoUmVuZGVyTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyKTsKICNlbmRpZgogCiBS
ZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjo6UmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJD
b250YWluZXIoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKQEAgLTkwLDEy
ICs5MCwxMiBAQCB2b2lkIFJlbmRlck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyOjpsYXlv
dXQoKQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogCi1SZW5kZXJUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50OjpSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCitSZW5kZXJNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXI6OlJlbmRlck1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lcihFbGVtZW50JiBlbGVt
ZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQs
IFdURk1vdmUoc3R5bGUpKQogewogfQogCi12b2lkIFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OmxheW91dCgpCit2b2lkIFJlbmRlck1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
cjo6bGF5b3V0KCkKIHsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dCgpOwogICAgIGlmIChz
dHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Tm9uZSkKQEAgLTEwNCw3ICsxMDQsNyBA
QCB2b2lkIFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxheW91dCgpCiAgICAgQVNT
RVJUKG1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKGVsZW1lbnQoKSkgPT0gTWVkaWFUZXh0VHJhY2tE
aXNwbGF5Q29udGFpbmVyKTsKIAogICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVE
aXNhYmxlcih2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpKTsKLSAgICBzdGF0aWNf
Y2FzdDxNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCgpKS0+
bGF5b3V0SWZOZWNlc3NhcnkoKTsKKyAgICBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCgpKS0+dXBkYXRlVGV4dFRyYWNrU2l6ZUFuZFN0
eWxlKCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oCmluZGV4
IGQyMjNmZWEwMjBlNmJiMGY4OTljOTFjNjNiYTFhNjc1NzM2NTc4ZDAuLmQxYmYxYjMxNmZhMWQ2
M2VjNDIyNGEzNzk3YmU3MTQ4NDA1MGI4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oCkBAIC01OSwxMCArNTksMTAg
QEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAotY2xhc3MgUmVuZGVyVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dCk7CitjbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXIgZmluYWwgOiBw
dWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRl
ck1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lcik7CiBwdWJsaWM6Ci0gICAgUmVuZGVyVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CisgICAgUmVu
ZGVyTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyKEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYm
KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwo=
</data>
<flag name="review"
          id="408779"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393507</attachid>
            <date>2020-03-13 11:12:49 -0700</date>
            <delta_ts>2020-03-13 14:49:37 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-208904-20200313111248.patch</filename>
            <type>text/plain</type>
            <size>32869</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4MzgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Y0MWY0MDM4OWUxNjc1
ZDg2OGMzMTUyNmJjNWQ4ZDg4ZGI5M2YxYS4uODY4MjZlNDgyYjUxOThiYzRhZjA2Nzg3MGQyMDIx
YTI4OTRmMGYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTAzLTEzICBQZW5n
IExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CisKKyAgICAgICAgU2FmYXJpIHNvbWV0aW1lcyBj
cmFzaGVzIHdoZW4gc3dpdGNoIHZpZGVvIGludG8gUGlQIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODkwNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgd29uJ3QgcGFpbnQgaXRzIHN1YnRyZWUKKyAgICAg
ICAgdG8gYW4gaW1hZ2UgYnVmZmVyIChmb3IgdGhlIGNhcHRpb25zIGluIHZpZGVvIGZ1bGxzY3Jl
ZW4gb3IgcGljdHVyZS1pbi1waWN0dXJlIG1vZGUpCisgICAgICAgIHdoZW4gdGhlIGN1ZXMgYXJl
IHVwZGF0ZWQuIEluc3RlYWQsIGl0IG9ubHkgc2V0cyB0aGUgZmxhZyBtX25lZWRzR2VuZXJhdGVU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbgorICAgICAgICB0byB0cnVlIGFmdGVyIHJ1bm5pbmcgbGF5
b3V0IGJhc2VkIG9uIHRoZSBuZXcgY3Vlcy4gQWZ0ZXIgdGhhdCwgaXQgcGFpbnRzIGl0cyBzdWJ0
cmVlCisgICAgICAgIHRvIGFuIGltYWdlIGJ1ZmZlciBpZiBuZWVkZWQgYXQgdGhlIGVuZCBvZiBQ
YWdlOjp1cGRhdGVSZW5kZXJpbmcoKSB3aGVuIHRoZSBsYXlvdXQgaXMgY2xlYW4uCisgICAgICAg
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2Egd2lsbCB1c2UgdGhlIGltYWdlIGJ1ZmZlciB0
byBzZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGxheWVyCisgICAgICAgIGZvciBjYXB0aW9ucyBpbiB2
aWRlbyBmdWxsc2NyZWVuIG9yIHBpY3R1cmUtaW4tcGljdHVyZSBtb2RlLgorCisgICAgICAgIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQgY2xhc3MgaXMgcmVzcG9uc2libGUg
Zm9yIHJlbmRlcmluZyB0aGUgY2FwdGlvbnMgaW4gYm90aDoKKyAgICAgICAgMSkgYSB2aWRlbyBw
bGF5ZXIgaW4gdGhlIGlubGluZSBtb2RlLgorICAgICAgICAyKSBhIHZpZGVvIHBsYXllciBpbiAi
dmlkZW8gZnVsbHNjcmVlbiIgb3IgcGljdHVyZS1pbi1waWN0dXJlIG1vZGUuCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVmYWN0b3JzIHNvbWUgZnVuY3Rpb25zIHRvIG1ha2UgdGhlaXIgcmVzcG9uc2li
aWxpdGllcyBjbGVhci4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNv
bnRyb2xzSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6dXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaDoKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldE1lZGlhRWxlbWVudFNo
b3dpbmdUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNsZWFyTWVkaWFF
bGVtZW50U2hvd2luZ1RleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuaDoKKworICAgICAgICBGdW5jdGlvbnMgdGV4dFRyYWNrc0FyZVJlYWR5KCksIHRl
eHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKCkgYW5kIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXko
KQorICAgICAgICBzaG91bGQgYmUgd3JhcHBlZCB3aXRoICIjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KSIuCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tSZWFkeVN0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVU
ZXh0VHJhY2tEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVw
ZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogaHRt
bC9IVE1MTWVkaWFFbGVtZW50Lmg6CisKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjbGVhclRleHRUcmFja1JlcHJlc2VudGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmVudGVyZWRGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0
ZVZpZGVvRGlzcGxheVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojp0ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6
dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25TdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpsYXlvdXRJZk5lY2Vzc2FyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Ojp1cGRhdGVDdWVTdHlsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01l
ZGlhQ29udHJvbEVsZW1lbnRzLmg6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjp1cGRhdGVUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlh
Q29udHJvbHMuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6dXBkYXRlUmVuZGVyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyOjpSZW5kZXJNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudDo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpsYXlvdXQpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oOgor
CiAyMDIwLTAzLTEyICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KIAogICAg
ICAgICBSRUdSRVNTSU9OKHIyNTU5NTcpOiBFbGVtZW50IHdpdGggc2Nyb2xsLWJlaGF2aW9yOnNt
b290aCBpc24ndCBkcmFnZ2FibGUgYWZ0ZXIgcjI1NTk1NwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5k
ZXggY2ViMzA1ZDRmMzU1OThkNDE0MTRlNDg5MDI2YzdjNTk2ZGJiNzJhOC4uNTA4YjlhMThlZWYy
MzgzYWI2MWI5OWNmNjVmNTY1MmJjYjk1NzY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC0x
NzIsNiArMTcyLDEyIEBAIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnVwZGF0ZVRleHRUcmFja0Nv
bnRhaW5lcigpCiAgICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyLT51cGRhdGVEaXNwbGF5KCk7
CiB9CiAKK3ZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0
aW9uSW1hZ2VJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fdGV4dFRyYWNrQ29udGFpbmVyKQorICAg
ICAgICBtX3RleHRUcmFja0NvbnRhaW5lci0+dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
bWFnZUlmTmVlZGVkKCk7Cit9CisKIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OmVudGVyZWRGdWxs
c2NyZWVuKCkKIHsKICAgICBpZiAobV90ZXh0VHJhY2tDb250YWluZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5o
CmluZGV4IGRjZjZjNzExNTQ2ZDFhZTgwOGUxN2QzZGIzMGNlMjBkYWUyZWRiZjAuLmU0MGY1MWYz
M2NmMThkZmJlNTI2OGZlYTExYzc1MDkyZDU3MWFiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCkBAIC03
Myw2ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3MgRm9yY2VVcGRhdGUgeyBZZXMs
IE5vIH07CiAgICAgdm9pZCB1cGRhdGVDYXB0aW9uRGlzcGxheVNpemVzKEZvcmNlVXBkYXRlID0g
Rm9yY2VVcGRhdGU6Ok5vKTsKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9u
SW1hZ2VJZk5lZWRlZCgpOwogICAgIHZvaWQgZW50ZXJlZEZ1bGxzY3JlZW4oKTsKICAgICB2b2lk
IGV4aXRlZEZ1bGxzY3JlZW4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZWNkNzc3
OWE3NDgwNWE4OGE3OGJlNGJhMGQwMDhmZGY3OTc4Y2RhMS4uNjg3OWZkMTU5Y2VkMjg1ZjYxNGZm
OGE1NWRhMjIyOTBmMmQwNmNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01NDUxLDYg
KzU0NTEsMjIgQEAgdm9pZCBEb2N1bWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiAg
ICAgICAgIGVsZW1lbnQtPmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKIH0KIAordm9pZCBE
b2N1bWVudDo6c2V0TWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjayhjb25zdCBIVE1MTWVkaWFF
bGVtZW50JiBlbGVtZW50KQoreworICAgIG1fbWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjayA9
IG1ha2VXZWFrUHRyKGVsZW1lbnQpOworfQorCit2b2lkIERvY3VtZW50OjpjbGVhck1lZGlhRWxl
bWVudFNob3dpbmdUZXh0VHJhY2soKQoreworICAgIG1fbWVkaWFFbGVtZW50U2hvd2luZ1RleHRU
cmFjayA9IG51bGxwdHI7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50U2hvd2lu
Z1RleHRUcmFjaykKKyAgICAgICAgbV9tZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrLT51cGRh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKK30KKwogI2VuZGlmCiAK
IHZvaWQgRG9jdW1lbnQ6OnNldFNob3VsZENyZWF0ZVJlbmRlcmVycyhib29sIGYpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCmluZGV4IDBmN2JhODQyOTVjYzlmNzFmMDlkZTE1ODM0OTZjYjcwYzY2OWQ0NTcu
LjU1OWE5ODM4YjY3YTZmZjQxZjcyOGQyNmY1MDc4OTc1NDE0MTljMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCkBAIC0xMTE1LDYgKzExMTUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlckZv
ckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwog
ICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3Mo
SFRNTE1lZGlhRWxlbWVudCYpOwogICAgIHZvaWQgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgp
OworICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50U2hvd2luZ1RleHRUcmFjayhjb25zdCBIVE1MTWVk
aWFFbGVtZW50Jik7CisgICAgdm9pZCBjbGVhck1lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJhY2so
KTsKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgp
OwogI2VuZGlmCiAKICAgICB2b2lkIHJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENh
bGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Jik7CkBAIC0xODAxLDYgKzE4MDQsNyBAQCBw
cml2YXRlOgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIEhhc2hTZXQ8SFRNTE1lZGlh
RWxlbWVudCo+IG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzOworICAgIFdlYWtQ
dHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnRTaG93aW5nVGV4dFRyYWNrOwogI2Vu
ZGlmCiAKICAgICBFbGVtZW50KiBtX21haW5BcnRpY2xlRWxlbWVudCB7IG51bGxwdHIgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGY0ZWQ0M2QyZjkzMWY0
M2YwODk3MjE3MjNjZTQxYjc2Yzk5MmNlZGMuLmJkZjQ1OWFlNjM2ZDJmMTNiOTA0MmViMzg0ODFm
Nzg5MGU4YzM3ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApA
QCAtMTg3Niw0NSArMTg3Niw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQWN0aXZl
VGV4dFRyYWNrQ3Vlcyhjb25zdCBNZWRpYVRpbWUmIG1vdmllVGltZSkKICAgICAgICAgdXBkYXRl
VGV4dFRyYWNrRGlzcGxheSgpOwogfQogCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a3NBcmVSZWFkeSgpIGNvbnN0Ci17Ci0gICAgLy8gNC44LjEwLjEyLjEgVGV4dCB0cmFjayBtb2Rl
bAotICAgIC8vIC4uLgotICAgIC8vIFRoZSB0ZXh0IHRyYWNrcyBvZiBhIG1lZGlhIGVsZW1lbnQg
YXJlIHJlYWR5IGlmIGFsbCB0aGUgdGV4dCB0cmFja3Mgd2hvc2UgbW9kZSB3YXMgbm90Ci0gICAg
Ly8gaW4gdGhlIGRpc2FibGVkIHN0YXRlIHdoZW4gdGhlIGVsZW1lbnQncyByZXNvdXJjZSBzZWxl
Y3Rpb24gYWxnb3JpdGhtIGxhc3Qgc3RhcnRlZCBub3cKLSAgICAvLyBoYXZlIGEgdGV4dCB0cmFj
ayByZWFkaW5lc3Mgc3RhdGUgb2YgbG9hZGVkIG9yIGZhaWxlZCB0byBsb2FkLgotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdh
bi5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2Vs
ZWN0aW9uQmVnYW5baV0tPnJlYWRpbmVzc1N0YXRlKCkgPT0gVGV4dFRyYWNrOjpMb2FkaW5nCi0g
ICAgICAgICAgICB8fCBtX3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdhbltpXS0+
cmVhZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6Ok5vdExvYWRlZCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp0ZXh0VHJhY2tSZWFkeVN0YXRlQ2hhbmdlZChUZXh0VHJhY2sqIHRyYWNrKQot
ewotICAgIGlmICh0cmFjay0+cmVhZGluZXNzU3RhdGUoKSAhPSBUZXh0VHJhY2s6OkxvYWRpbmcK
LSAgICAgICAgJiYgdHJhY2stPm1vZGUoKSAhPSBUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkKSB7
Ci0gICAgICAgIC8vIFRoZSBkaXNwbGF5IHRyZWVzIGV4aXN0IGFzIGxvbmcgYXMgdGhlIHRyYWNr
IGlzIGFjdGl2ZSwgaW4gdGhpcyBjYXNlLAotICAgICAgICAvLyBhbmQgaWYgdGhlIHNhbWUgdHJh
Y2sgaXMgbG9hZGVkIGFnYWluIChmb3IgZXhhbXBsZSBpZiB0aGUgc3JjIGF0dHJpYnV0ZSB3YXMg
Y2hhbmdlZCksCi0gICAgICAgIC8vIGN1ZXMgY2FuIGJlIGFjY3VtdWxhdGVkIHdpdGggdGhlIG9s
ZCBvbmVzLCB0aGF0J3Mgd2h5IHRoZXkgbmVlZHMgdG8gYmUgZmx1c2hlZAotICAgICAgICBpZiAo
aGFzTWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5jbGVhclRl
eHREaXNwbGF5Q29udGFpbmVyKCk7Ci0gICAgICAgIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsK
LSAgICB9Ci0gICAgaWYgKG1fcGxheWVyICYmIG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVj
dGlvbkJlZ2FuLmNvbnRhaW5zKHRyYWNrKSkgewotICAgICAgICBpZiAodHJhY2stPnJlYWRpbmVz
c1N0YXRlKCkgIT0gVGV4dFRyYWNrOjpMb2FkaW5nKQotICAgICAgICAgICAgc2V0UmVhZHlTdGF0
ZShtX3BsYXllci0+cmVhZHlTdGF0ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGUg
dHJhY2sgcmVhZGluZXNzIHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0
aGUgdXNlcgotICAgICAgICAvLyBjbGlja2luZyB0aGUgY2FwdGlvbnMgYnV0dG9uLiBJbiB0aGlz
IGNhc2UsIGEgY2hlY2sgd2hldGhlciBhbGwgdGhlCi0gICAgICAgIC8vIHJlc291cmNlcyBoYXZl
IGZhaWxlZCBsb2FkaW5nIHNob3VsZCBiZSBkb25lIGluIG9yZGVyIHRvIGhpZGUgdGhlIENDIGJ1
dHRvbi4KLSAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSAmJiB0cmFjay0+cmVhZGluZXNz
U3RhdGUoKSA9PSBUZXh0VHJhY2s6OkZhaWxlZFRvTG9hZCkKLSAgICAgICAgICAgIG1lZGlhQ29u
dHJvbHMoKS0+cmVmcmVzaENsb3NlZENhcHRpb25zQnV0dG9uVmlzaWJpbGl0eSgpOwotICAgIH0K
LX0KLQogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphdWRpb1RyYWNrRW5hYmxlZENoYW5nZWQoQXVk
aW9UcmFjayYgdHJhY2spCiB7CiAgICAgaWYgKG1fYXVkaW9UcmFja3MgJiYgbV9hdWRpb1RyYWNr
cy0+Y29udGFpbnModHJhY2spKQpAQCAtNTg1MSw2ICs1ODEyLDExIEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24oVGV4dFRyYWNrUmVwcmVzZW50YXRp
b24qIHJlcHJlCiB7CiAgICAgaWYgKG1fcGxheWVyKQogICAgICAgICBtX3BsYXllci0+c2V0VGV4
dFRyYWNrUmVwcmVzZW50YXRpb24ocmVwcmVzZW50YXRpb24pOworCisgICAgaWYgKHJlcHJlc2Vu
dGF0aW9uKQorICAgICAgICBkb2N1bWVudCgpLnNldE1lZGlhRWxlbWVudFNob3dpbmdUZXh0VHJh
Y2soKnRoaXMpOworICAgIGVsc2UKKyAgICAgICAgZG9jdW1lbnQoKS5jbGVhck1lZGlhRWxlbWVu
dFNob3dpbmdUZXh0VHJhY2soKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzeW5jVGV4
dFRyYWNrQm91bmRzKCkKQEAgLTYzNDUsNiArNjMxMSw4OSBAQCBib29sIEhUTUxNZWRpYUVsZW1l
bnQ6OmNsb3NlZENhcHRpb25zVmlzaWJsZSgpIGNvbnN0CiAKICNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCiAKK2Jvb2wgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrc0FyZVJlYWR5KCkgY29uc3QK
K3sKKyAgICAvLyA0LjguMTAuMTIuMSBUZXh0IHRyYWNrIG1vZGVsCisgICAgLy8gLi4uCisgICAg
Ly8gVGhlIHRleHQgdHJhY2tzIG9mIGEgbWVkaWEgZWxlbWVudCBhcmUgcmVhZHkgaWYgYWxsIHRo
ZSB0ZXh0IHRyYWNrcyB3aG9zZSBtb2RlIHdhcyBub3QKKyAgICAvLyBpbiB0aGUgZGlzYWJsZWQg
c3RhdGUgd2hlbiB0aGUgZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0gbGFz
dCBzdGFydGVkIG5vdworICAgIC8vIGhhdmUgYSB0ZXh0IHRyYWNrIHJlYWRpbmVzcyBzdGF0ZSBv
ZiBsb2FkZWQgb3IgZmFpbGVkIHRvIGxvYWQuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdhbltpXS0+cmVh
ZGluZXNzU3RhdGUoKSA9PSBUZXh0VHJhY2s6OkxvYWRpbmcKKyAgICAgICAgICAgIHx8IG1fdGV4
dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuW2ldLT5yZWFkaW5lc3NTdGF0ZSgpID09
IFRleHRUcmFjazo6Tm90TG9hZGVkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCit7CisgICAgaWYgKHRyYWNrLT5y
ZWFkaW5lc3NTdGF0ZSgpICE9IFRleHRUcmFjazo6TG9hZGluZworICAgICAgICAmJiB0cmFjay0+
bW9kZSgpICE9IFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQpIHsKKyAgICAgICAgLy8gVGhlIGRp
c3BsYXkgdHJlZXMgZXhpc3QgYXMgbG9uZyBhcyB0aGUgdHJhY2sgaXMgYWN0aXZlLCBpbiB0aGlz
IGNhc2UsCisgICAgICAgIC8vIGFuZCBpZiB0aGUgc2FtZSB0cmFjayBpcyBsb2FkZWQgYWdhaW4g
KGZvciBleGFtcGxlIGlmIHRoZSBzcmMgYXR0cmlidXRlIHdhcyBjaGFuZ2VkKSwKKyAgICAgICAg
Ly8gY3VlcyBjYW4gYmUgYWNjdW11bGF0ZWQgd2l0aCB0aGUgb2xkIG9uZXMsIHRoYXQncyB3aHkg
dGhleSBuZWVkcyB0byBiZSBmbHVzaGVkCisgICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkp
CisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNsZWFyVGV4dERpc3BsYXlDb250YWluZXIo
KTsKKyAgICAgICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIH0KKyAgICBpZiAobV9w
bGF5ZXIgJiYgbV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW4uY29udGFpbnMo
dHJhY2spKSB7CisgICAgICAgIGlmICh0cmFjay0+cmVhZGluZXNzU3RhdGUoKSAhPSBUZXh0VHJh
Y2s6OkxvYWRpbmcpCisgICAgICAgICAgICBzZXRSZWFkeVN0YXRlKG1fcGxheWVyLT5yZWFkeVN0
YXRlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRoZSB0cmFjayByZWFkaW5lc3Mgc3Rh
dGUgbWlnaHQgaGF2ZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSB1c2VyCisgICAgICAgIC8v
IGNsaWNraW5nIHRoZSBjYXB0aW9ucyBidXR0b24uIEluIHRoaXMgY2FzZSwgYSBjaGVjayB3aGV0
aGVyIGFsbCB0aGUKKyAgICAgICAgLy8gcmVzb3VyY2VzIGhhdmUgZmFpbGVkIGxvYWRpbmcgc2hv
dWxkIGJlIGRvbmUgaW4gb3JkZXIgdG8gaGlkZSB0aGUgQ0MgYnV0dG9uLgorICAgICAgICBpZiAo
aGFzTWVkaWFDb250cm9scygpICYmIHRyYWNrLT5yZWFkaW5lc3NTdGF0ZSgpID09IFRleHRUcmFj
azo6RmFpbGVkVG9Mb2FkKQorICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5yZWZyZXNoQ2xv
c2VkQ2FwdGlvbnNCdXR0b25WaXNpYmlsaXR5KCk7CisgICAgfQorfQorCit2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoVGV4dFRyYWNrVmlzaWJpbGl0eUNo
ZWNrVHlwZSBjaGVja1R5cGUpCit7CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCBjaGVj
a1R5cGUpOworICAgIEFTU0VSVChtX3RleHRUcmFja3MpOworCisgICAgaWYgKG1fcHJvY2Vzc2lu
Z1ByZWZlcmVuY2VDaGFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkb2N1bWVudCgp
LmFjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJv
b2wgaGF2ZVZpc2libGVUZXh0VHJhY2sgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV90ZXh0VHJhY2tzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3RleHRU
cmFja3MtPml0ZW0oaSktPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpIHsKKyAg
ICAgICAgICAgIGhhdmVWaXNpYmxlVGV4dFRyYWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNoZWNrVHlwZSA9PSBDaGVja1RleHRUcmFj
a1Zpc2liaWxpdHkgJiYgbV9oYXZlVmlzaWJsZVRleHRUcmFjayA9PSBoYXZlVmlzaWJsZVRleHRU
cmFjaykgeworICAgICAgICB1cGRhdGVBY3RpdmVUZXh0VHJhY2tDdWVzKGN1cnJlbnRNZWRpYVRp
bWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2hhdmVWaXNpYmxlVGV4dFRy
YWNrID0gaGF2ZVZpc2libGVUZXh0VHJhY2s7CisgICAgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUg
PSBtX2hhdmVWaXNpYmxlVGV4dFRyYWNrOworCisjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKKyAgICBpZiAoIW1faGF2ZVZpc2libGVUZXh0VHJhY2spCisgICAgICAgIHJldHVybjsK
KworICAgIGVuc3VyZU1lZGlhQ29udHJvbHNTaGFkb3dSb290KCk7CisgICAgdXBkYXRlVGV4dFRy
YWNrRGlzcGxheSgpOworI2Vsc2UKKyAgICBpZiAoIW1faGF2ZVZpc2libGVUZXh0VHJhY2sgJiYg
IWhhc01lZGlhQ29udHJvbHMoKSAmJiAhY3JlYXRlTWVkaWFDb250cm9scygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtZWRpYUNvbnRyb2xzKCktPmNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2li
aWxpdHkoKTsKKworICAgIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICB1cGRhdGVBY3Rp
dmVUZXh0VHJhY2tDdWVzKGN1cnJlbnRNZWRpYVRpbWUoKSk7CisjZW5kaWYKK30KKwogdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCkKIHsKICNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQpAQCAtNjM2MCw2ICs2NDA5LDIxIEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpCiAjZW5kaWYKIH0KIAordm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVk
ZWQoKQoreworI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCisgICAgZW5zdXJlTWVk
aWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKKyAgICBpZiAoIW1fbWVkaWFDb250cm9sc0hvc3QpCisg
ICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xzSG9zdDo6Y3JlYXRlKCp0
aGlzKTsKKyAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkltYWdlSWZOZWVkZWQoKTsKKyNlbHNlCisgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkg
JiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVkaWFD
b250cm9scygpLT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsK
KyNlbmRpZgorfQorCiAjZW5kaWYKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUoYm9vbCBjbG9zZWRDYXB0aW9uVmlzaWJsZSkKQEAgLTY2MDAsNTEgKzY2
NjQsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKQog
fQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25m
aWd1cmVUZXh0VHJhY2tEaXNwbGF5KFRleHRUcmFja1Zpc2liaWxpdHlDaGVja1R5cGUgY2hlY2tU
eXBlKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgY2hlY2tUeXBlKTsKLSAgICBB
U1NFUlQobV90ZXh0VHJhY2tzKTsKLQotICAgIGlmIChtX3Byb2Nlc3NpbmdQcmVmZXJlbmNlQ2hh
bmdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZG9jdW1lbnQoKS5hY3RpdmVET01PYmpl
Y3RzQXJlU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGhhdmVWaXNpYmxl
VGV4dFRyYWNrID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGV4dFRy
YWNrcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAobV90ZXh0VHJhY2tzLT5pdGVtKGkp
LT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKSB7Ci0gICAgICAgICAgICBoYXZl
VmlzaWJsZVRleHRUcmFjayA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChjaGVja1R5cGUgPT0gQ2hlY2tUZXh0VHJhY2tWaXNpYmlsaXR5ICYm
IG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPT0gaGF2ZVZpc2libGVUZXh0VHJhY2spIHsKLSAgICAg
ICAgdXBkYXRlQWN0aXZlVGV4dFRyYWNrQ3VlcyhjdXJyZW50TWVkaWFUaW1lKCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9oYXZlVmlzaWJsZVRleHRUcmFjayA9IGhhdmVWaXNp
YmxlVGV4dFRyYWNrOwotICAgIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlID0gbV9oYXZlVmlzaWJs
ZVRleHRUcmFjazsKLQotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0gICAgaWYg
KCFtX2hhdmVWaXNpYmxlVGV4dFRyYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbnN1cmVN
ZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwotICAgIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsK
LSNlbHNlCi0gICAgaWYgKCFtX2hhdmVWaXNpYmxlVGV4dFRyYWNrICYmICFoYXNNZWRpYUNvbnRy
b2xzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWhhc01lZGlhQ29udHJvbHMoKSAmJiAh
Y3JlYXRlTWVkaWFDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtZWRpYUNvbnRy
b2xzKCktPmNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxpdHkoKTsKLQotICAgIHVwZGF0ZVRl
eHRUcmFja0Rpc3BsYXkoKTsKLSAgICB1cGRhdGVBY3RpdmVUZXh0VHJhY2tDdWVzKGN1cnJlbnRN
ZWRpYVRpbWUoKSk7Ci0jZW5kaWYKLX0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjYXB0aW9u
UHJlZmVyZW5jZXNDaGFuZ2VkKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKaW5kZXggYWQwYTJiYWU0YzJiNzdmNDJhMGRmZWY0MjRhOTk1MGNiNDFiZDg4Yi4uZDRhNDhk
MGNkZDQyNzdlNDQ4YmIzMTYwZDAzOTEwNTEyOTBmN2Y0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgKQEAgLTM3OSwxNiArMzc5LDkgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRTZWxlY3RlZFRleHRUcmFjayhUZXh0VHJhY2sqKTsKIAotICAgIGJvb2wgdGV4dFRyYWNr
c0FyZVJlYWR5KCkgY29uc3Q7Ci0gICAgdXNpbmcgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpUZXh0
VHJhY2tWaXNpYmlsaXR5Q2hlY2tUeXBlOwotICAgIHZvaWQgY29uZmlndXJlVGV4dFRyYWNrRGlz
cGxheShUZXh0VHJhY2tWaXNpYmlsaXR5Q2hlY2tUeXBlIGNoZWNrVHlwZSA9IENoZWNrVGV4dFRy
YWNrVmlzaWJpbGl0eSk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Ci0KICAg
ICAvLyBBdWRpb1RyYWNrQ2xpZW50CiAgICAgdm9pZCBhdWRpb1RyYWNrRW5hYmxlZENoYW5nZWQo
QXVkaW9UcmFjayYpIGZpbmFsOwogCi0gICAgdm9pZCB0ZXh0VHJhY2tSZWFkeVN0YXRlQ2hhbmdl
ZChUZXh0VHJhY2sqKTsKLQogICAgIC8vIFRleHRUcmFja0NsaWVudAogICAgIHZvaWQgdGV4dFRy
YWNrS2luZENoYW5nZWQoVGV4dFRyYWNrJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB0ZXh0VHJhY2tN
b2RlQ2hhbmdlZChUZXh0VHJhY2smKSBvdmVycmlkZTsKQEAgLTQwNSw2ICszOTgsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzeW5jVGV4dFRyYWNrQm91bmRzKCk7CiAKICAgICB2b2lkIGNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICB1c2luZyBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlRl
eHRUcmFja1Zpc2liaWxpdHlDaGVja1R5cGU7CisgICAgdm9pZCB0ZXh0VHJhY2tSZWFkeVN0YXRl
Q2hhbmdlZChUZXh0VHJhY2sqKTsKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0
aW9uSW1hZ2VJZk5lZWRlZCgpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJB
Q0tfVEFSR0VUKQpAQCAtODExLDYgKzgwNywxMCBAQCBwcml2YXRlOgogICAgIGVudW0gUmVjb25m
aWd1cmVNb2RlIHsgSW1tZWRpYXRlbHksIEFmdGVyRGVsYXkgfTsKICAgICB2b2lkIG1hcmtDYXB0
aW9uQW5kU3VidGl0bGVUcmFja3NBc1VuY29uZmlndXJlZChSZWNvbmZpZ3VyZU1vZGUpOwogICAg
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW9kZSBjYXB0aW9uRGlzcGxh
eU1vZGUoKTsKKworICAgIGJvb2wgdGV4dFRyYWNrc0FyZVJlYWR5KCkgY29uc3Q7CisgICAgdm9p
ZCBjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KFRleHRUcmFja1Zpc2liaWxpdHlDaGVja1R5cGUg
PSBDaGVja1RleHRUcmFja1Zpc2liaWxpdHkpOworICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrRGlz
cGxheSgpOwogI2VuZGlmCiAKICAgICAvLyBUaGVzZSAiaW50ZXJuYWwiIGZ1bmN0aW9ucyBkbyBu
b3QgY2hlY2sgdXNlciBnZXN0dXJlIHJlc3RyaWN0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCA2ZDBmMzc5ZDVm
NzExYjI3YTM0MWVkZjA5N2FjNGVlMDMwY2Y5YTljLi5jYTYwMmUzM2YyODQwOGE2NDZmNGFlZGYy
MDcyMWYzMTc0YzZlMTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xMTA2LDcgKzExMDYsNyBAQCBSZWY8TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudAogCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxl
JiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZVJlbmRlcmVyPFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+KCp0aGlzLCBXVEZNb3Zl
KHN0eWxlKSk7CisgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlck1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lcj4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKIH0KIAogc3RhdGljIGJv
b2wgY29tcGFyZUN1ZUludGVydmFsRm9yRGlzcGxheShjb25zdCBDdWVJbnRlcnZhbCYgb25lLCBj
b25zdCBDdWVJbnRlcnZhbCYgdHdvKQpAQCAtMTE4NCw3ICsxMTg0LDcgQEAgdm9pZCBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVEaXNwbGF5KCkKICAgICBzdGQ6
OnNvcnQoYWN0aXZlQ3Vlcy5iZWdpbigpLCBhY3RpdmVDdWVzLmVuZCgpLCAmY29tcGFyZUN1ZUlu
dGVydmFsRm9yRGlzcGxheSk7CiAKICAgICBpZiAobWVkaWFDb250cm9sbGVyKCktPmNsb3NlZENh
cHRpb25zVmlzaWJsZSgpKSB7Ci0gICAgICAgIC8vIDEwLiBGb3IgZWFjaCB0ZXh0IHRyYWNrIGN1
ZSBjdWUgaW4gY3VlcyB0aGF0IGhhcyBub3QgeWV0IGhhZAorICAgICAgICAvLyAxMC4gRm9yIGVh
Y2ggdGV4dCB0cmFjayBjdWUgaW4gY3VlcyB0aGF0IGhhcyBub3QgeWV0IGhhZAogICAgICAgICAv
LyBjb3JyZXNwb25kaW5nIENTUyBib3hlcyBhZGRlZCB0byBvdXRwdXQsIGluIHRleHQgdHJhY2sg
Y3VlIG9yZGVyLCBydW4gdGhlCiAgICAgICAgIC8vIGZvbGxvd2luZyBzdWJzdGVwczoKICAgICAg
ICAgZm9yIChhdXRvJiBpbnRlcnZhbCA6IGFjdGl2ZUN1ZXMpIHsKQEAgLTEyMDYsOCArMTIwNiwy
MiBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZURp
c3BsYXkoKQogICAgIGVsc2UKICAgICAgICAgaGlkZSgpOwogCi0gICAgaWYgKG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb24gfHwgdmlkZW8ucmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigp
KQotICAgICAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOworICAgIHVwZGF0ZVRl
eHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQoKTsKKyAgICB1cGRhdGVUZXh0VHJhY2tTdHls
ZSgpOworICAgIG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsK
K30KKwordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKQoreworICAgIGlmICghbV9uZWVk
c0dlbmVyYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbmVlZHNHZW5lcmF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uID0gZmFsc2U7CisKKyAgICAv
LyBXZSBzaG91bGQgY2FsbCBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uLT51cGRhdGUoKSB0byBw
YWludCB0aGUgc3VidHJlZSBvZgorICAgIC8vIHRoZSBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50IGFmdGVyIHRoZSBsYXlvdXQgaXMgY2xlYW4uCisgICAgaWYgKG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24pCisgICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgp
OwogfQogCiB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnByb2Nl
c3NBY3RpdmVWVFRDdWUoVlRUQ3VlJiBjdWUpCkBAIC0xMjg3LDcgKzEzMDEsNyBAQCB2b2lkIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRTdHJva2VTdHls
ZSgpCiAgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlTdHJva2VXaWR0
aCwgc3Ryb2tlV2lkdGgsIENTU1VuaXRUeXBlOjpDU1NfUFgsIGltcG9ydGFudCk7CiB9CiAKLXZv
aWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNr
UmVwcmVzZW50YXRpb24oKQordm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCkKIHsKICAgICBhdXRv
IG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKICAgICBpZiAoIW1lZGlh
RWxlbWVudCkKQEAgLTEyOTYsMTAgKzEzMTAsOSBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uKCkKICAgICBh
dXRvIHJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24gPSBtZWRpYUVsZW1lbnQtPnJlcXVp
cmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKTsKICAgICBpZiAoIWhhc0NoaWxkTm9kZXMoKSB8
fCAhcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbikgewogICAgICAgICBpZiAobV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbikgewotICAgICAgICAgICAgaWYgKCFyZXF1aXJlc1RleHRUcmFj
a1JlcHJlc2VudGF0aW9uKSB7CisgICAgICAgICAgICBpZiAoIXJlcXVpcmVzVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24pCiAgICAgICAgICAgICAgICAgY2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bigpOwotICAgICAgICAgICAgICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZZXMpOwotICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbi0+c2V0SGlkZGVuKHRydWUpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKQEAgLTEzMDgsMTggKzEzMjEsMTMgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpCiAgICAg
aWYgKCFtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uKSB7CiAgICAgICAgIEFMV0FZU19MT0coTE9H
SURFTlRJRklFUik7CiAKLSAgICAgICAgbV93YWl0aW5nRm9yRmlyc3RMYXlvdXQgPSB0cnVlOwog
ICAgICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gVGV4dFRyYWNrUmVwcmVzZW50YXRp
b246OmNyZWF0ZSgqdGhpcyk7CiAgICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSkKICAgICAg
ICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnNldENvbnRlbnRTY2FsZShkb2N1bWVu
dCgpLnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgIG1lZGlhRWxlbWVudC0+
c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24obV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5nZXQo
KSk7Ci0gICAgICAgIHVwZGF0ZVNpemVzKCk7Ci0gICAgICAgIHVwZGF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uU3R5bGUoKTsKICAgICB9CiAKICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9u
LT5zZXRIaWRkZW4oZmFsc2UpOwotICAgIGlmICghbV93YWl0aW5nRm9yRmlyc3RMYXlvdXQpCi0g
ICAgICAgIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24tPnVwZGF0ZSgpOwogfQogCiB2b2lkIE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNsZWFyVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24oKQpAQCAtMTMyOSwyMCArMTMzNywxNyBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OmNsZWFyVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKQogCiAg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKIAotICAgIG1fd2FpdGluZ0ZvckZpcnN0TGF5
b3V0ID0gdHJ1ZTsKICAgICBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uID0gbnVsbHB0cjsKICAg
ICBpZiAoYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQodGhpcykpCiAgICAg
ICAgIG1lZGlhRWxlbWVudC0+c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24obnVsbHB0cik7Ci0g
ICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25TdHlsZSgpOwotICAgIHVwZGF0ZUFjdGl2
ZUN1ZXNGb250U2l6ZSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uU3R5bGUoKQordm9pZCBNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tTdHlsZSgp
CiB7CiAgICAgaWYgKG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pIHsKKyAgICAgICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZUFic29sdXRlKTsK
ICAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBtX3ZpZGVv
RGlzcGxheVNpemUuc2l6ZSgpLndpZHRoKCksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgICAg
ICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBtX3ZpZGVvRGlzcGxh
eVNpemUuc2l6ZSgpLmhlaWdodCgpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgc2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZUFic29sdXRl
KTsKICAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIDAsIENT
U1VuaXRUeXBlOjpDU1NfUFgpOwogICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5VG9wLCAwLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MTM1Nyw4ICsxMzYyLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Ojp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvblN0eWxlKCkKIAogdm9pZCBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjplbnRlcmVkRnVsbHNjcmVlbigpCiB7Ci0g
ICAgaWYgKGhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50
YXRpb24oKTsKKyAgICB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklmTmVlZGVkKCk7CiAg
ICAgdXBkYXRlU2l6ZXMoRm9yY2VVcGRhdGU6Olllcyk7CiB9CiAKQEAgLTEzNjgsMjMgKzEzNzIs
NiBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmV4aXRlZEZ1
bGxzY3JlZW4oKQogICAgIHVwZGF0ZVNpemVzKEZvcmNlVXBkYXRlOjpZZXMpOwogfQogCi12b2lk
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxheW91dElmTmVjZXNzYXJ5
KCkKLXsKLSAgICBtX3dhaXRpbmdGb3JGaXJzdExheW91dCA9IGZhbHNlOwotCi0gICAgYXV0byBz
aXplQ2hhbmdlZCA9IHVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKTsKLSAgICBpZiAobV90ZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbikKLSAgICAgICAgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi0+dXBk
YXRlKCk7Ci0KLSAgICBpZiAoIXNpemVDaGFuZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBGSVhNRSAoMTIxMTcwKTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGxheW91dCwg
YW5kIHNob3VsZCBsYXkgb3V0IHRoZSB0ZXh0IHRyYWNrcyBpbW1lZGlhdGVseS4KLSAgICBtX3Rh
c2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpc10gKCkgewotICAgICAgICB1cGRhdGVDdWVTdHlsZXMo
KTsKLSAgICB9KTsKLX0KLQogYm9vbCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Ojp1cGRhdGVWaWRlb0Rpc3BsYXlTaXplKCkKIHsKICAgICBpZiAoIWRvY3VtZW50KCkucGFn
ZSgpKQpAQCAtMTQxMCwxOSArMTM5NywxNCBAQCBib29sIE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVZpZGVvRGlzcGxheVNpemUoKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBtX3ZpZGVvRGlzcGxheVNpemUgPSB2aWRlb0JveDsKLSAgICB1cGRhdGVU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvblN0eWxlKCk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
dm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVTaXplcyhG
b3JjZVVwZGF0ZSBmb3JjZSkKIHsKLSAgICBpZiAodXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpIHx8
IGZvcmNlID09IEZvcmNlVXBkYXRlOjpZZXMpCi0gICAgICAgIHVwZGF0ZUN1ZVN0eWxlcygpOwot
fQorICAgIGlmICghdXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpICYmIGZvcmNlICE9IEZvcmNlVXBk
YXRlOjpZZXMpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojp1cGRhdGVDdWVTdHlsZXMoKQotewogICAgIGlmICghZG9jdW1lbnQo
KS5wYWdlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQzMiwxMiArMTQxNCwxNCBAQCB2b2lk
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZUN1ZVN0eWxlcygp
CiAKICAgICBtZWRpYUVsZW1lbnQtPnN5bmNUZXh0VHJhY2tCb3VuZHMoKTsKIAorICAgIHVwZGF0
ZUFjdGl2ZUN1ZXNGb250U2l6ZSgpOworICAgIHVwZGF0ZVRleHRTdHJva2VTdHlsZSgpOwogICAg
IGZvciAoYXV0byYgYWN0aXZlQ3VlIDogbWVkaWFFbGVtZW50LT5jdXJyZW50bHlBY3RpdmVDdWVz
KCkpCiAgICAgICAgIGFjdGl2ZUN1ZS5kYXRhKCktPnJlY2FsY3VsYXRlU3R5bGVzKCk7CiAKLSAg
ICB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB1cGRhdGVEaXNwbGF5KCk7Ci0gICAg
dXBkYXRlVGV4dFN0cm9rZVN0eWxlKCk7CisgICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3Ro
aXNdICgpIHsKKyAgICAgICAgdXBkYXRlRGlzcGxheSgpOworICAgIH0pOwogfQogCiBSZWZQdHI8
SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKQpAQCAtMTQ3MSwxNSArMTQ1NSwxNiBAQCBSZWZQdHI8
SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aQogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0LCBM
YXlvdXRTaXplKCksIHsgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzLCBQ
YWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgfSwgbnVsbHB0ciwgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQWxsUGhhc2VzRmxhZ3MoKSk7CisgICAgYXV0byBwYWlu
dEZsYWdzID0gUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQWxsUGhh
c2VzRmxhZ3MoKTsKKyAgICBwYWludEZsYWdzLmFkZChSZW5kZXJMYXllcjo6UGFpbnRMYXllclRl
bXBvcmFyeUNsaXBSZWN0cyk7CisgICAgbGF5ZXItPnBhaW50KGJ1ZmZlci0+Y29udGV4dCgpLCBw
YWludGluZ1JlY3QsIExheW91dFNpemUoKSwgeyBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9z
aXRpbmdMYXllcnMsIFBhaW50QmVoYXZpb3I6OlNuYXBzaG90dGluZyB9LCBudWxscHRyLCBwYWlu
dEZsYWdzKTsKIAogICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShXVEZNb3Zl
KGJ1ZmZlcikpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQ6OnRleHRUcmFja1JlcHJlc2VudGF0aW9uQm91bmRzQ2hhbmdlZChjb25zdCBJbnRSZWN0JikK
IHsKLSAgICBpZiAoaGFzQ2hpbGROb2RlcygpKQotICAgICAgICB1cGRhdGVUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbigpOworICAgIHVwZGF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSWZOZWVkZWQo
KTsKICAgICB1cGRhdGVTaXplcygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaAppbmRleCAyMzMwN2I2NjViNTc2N2E0OWMwMjY3
NjA3OWE1ZDZkNGY3NzUzNzJmLi43NmIxNGQ2ZjUyYmU2YTBlNzM4MTkxNzI5M2Q1Mzc3OWJjZjkx
ZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmgKQEAgLTQ4MywyNyArNDgzLDMxIEBAIHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3Mg
Rm9yY2VVcGRhdGUgeyBZZXMsIE5vIH07CiAgICAgdm9pZCB1cGRhdGVTaXplcyhGb3JjZVVwZGF0
ZSBmb3JjZSA9IEZvcmNlVXBkYXRlOjpObyk7Ci0gICAgdm9pZCBsYXlvdXRJZk5lY2Vzc2FyeSgp
OwotCiAgICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7CisKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSW1hZ2VJZk5lZWRlZCgpOworCiAgICAgdm9pZCBlbnRlcmVkRnVsbHNj
cmVlbigpOwogICAgIHZvaWQgZXhpdGVkRnVsbHNjcmVlbigpOwogCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsK
IAotICAgIGJvb2wgdXBkYXRlVmlkZW9EaXNwbGF5U2l6ZSgpOwotICAgIHZvaWQgdXBkYXRlQ3Vl
U3R5bGVzKCk7Ci0gICAgdm9pZCB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsKLSAgICB2b2lk
IHVwZGF0ZVRleHRTdHJva2VTdHlsZSgpOwotICAgIHZvaWQgcHJvY2Vzc0FjdGl2ZVZUVEN1ZShW
VFRDdWUmKTsKKyAgICAvLyBFbGVtZW50CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNy
ZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRp
b24mKSBvdmVycmlkZTsKIAorICAgIC8vIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50CiAg
ICAgUmVmUHRyPEltYWdlPiBjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCB0ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkJvdW5kc0NoYW5nZWQoY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50
YXRpb24oKTsKKworICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JZk5lZWRl
ZCgpOwogICAgIHZvaWQgY2xlYXJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpOwotICAgIHZvaWQg
dXBkYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25TdHlsZSgpOworCisgICAgYm9vbCB1cGRhdGVW
aWRlb0Rpc3BsYXlTaXplKCk7CisgICAgdm9pZCB1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUoKTsK
KyAgICB2b2lkIHVwZGF0ZVRleHRTdHJva2VTdHlsZSgpOworICAgIHZvaWQgcHJvY2Vzc0FjdGl2
ZVZUVEN1ZShWVFRDdWUmKTsKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja1N0eWxlKCk7CiAKICNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0
IGZpbmFsOwpAQCAtNTIwLDcgKzUyNCw3IEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3ZpZGVv
RGlzcGxheVNpemU7CiAgICAgaW50IG1fZm9udFNpemUgeyAwIH07CiAgICAgYm9vbCBtX2ZvbnRT
aXplSXNJbXBvcnRhbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV93YWl0aW5nRm9yRmlyc3RMYXlv
dXQgeyB0cnVlIH07CisgICAgYm9vbCBtX25lZWRzR2VuZXJhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbiB7IGZhbHNlIH07CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9scy5jcHAKaW5kZXggNjRjODhlNTZiZGI4ZDM4MTEzZjkwNzczOGYwODY1
YmE5YmMwZjQ1OC4uMzk5MjdiOTdiZmU2ZDI5ZTllNGY4NDc0NzQ2N2QyYjQyNTRjMzYzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKQEAgLTQwNSw3
ICs0MDUsNyBAQCB2b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKQog
CiAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+dXBkYXRlRGlzcGxheSgpOwogfQotICAgIAor
CiB2b2lkIE1lZGlhQ29udHJvbHM6OnRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpCiB7CiAg
ICAgY2xvc2VkQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKQEAgLTQxOSw2ICs0MTksMTIgQEAgdm9p
ZCBNZWRpYUNvbnRyb2xzOjpjbGVhclRleHREaXNwbGF5Q29udGFpbmVyKCkKICAgICAgICAgbV90
ZXh0RGlzcGxheUNvbnRhaW5lci0+cmVtb3ZlQ2hpbGRyZW4oKTsKIH0KIAordm9pZCBNZWRpYUNv
bnRyb2xzOjp1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKQorewor
ICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBtX3RleHREaXNwbGF5Q29u
dGFpbmVyLT51cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVkZWQoKTsKK30K
KwogI2VuZGlmCiAKIHZvaWQgTWVkaWFDb250cm9sczo6c2V0U2xpZGVyVm9sdW1lKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAppbmRleCBmNGYwZDFjMGUyNzA0
YjFhMTA4ZWU5Y2U5YzE0Yjg0NDQwZjE0YmY3Li5hYmJjYjU3NGIyZjBhMjM5MjhlZThjMTc5ODY1
Nzk5NWNmN2JkOTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
cy5oCkBAIC05OCw2ICs5OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4
dFRyYWNrRGlzcGxheSgpOwogICAgIHZpcnR1YWwgdm9pZCB0ZXh0VHJhY2tQcmVmZXJlbmNlc0No
YW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJUZXh0RGlzcGxheUNvbnRhaW5lcigpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlSWZOZWVk
ZWQoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBiYmUwYWU1
NjA5NmRlZWY0OTE0ODVkZjQ4NzI1YzQ1N2FiYTM5MzdjLi5kMTA1NGU1MzRmNDk0OWQzMTJjNjNi
NmEwMWY5MzQ1YWVmMWQ1OTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEzNTUsMTAgKzEzNTUs
MTYgQEAgdm9pZCBQYWdlOjp1cGRhdGVSZW5kZXJpbmcoKQogI2VuZGlmCiAKICAgICBsYXlvdXRJ
Zk5lZWRlZCgpOwotICAgIAorCiAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9j
dW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQudXBkYXRlSGlnaGxpZ2h0UG9zaXRpb25zKCk7CiAg
ICAgfSk7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgZm9yRWFjaERvY3VtZW50KFtd
IChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQudXBkYXRlVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JbWFnZUlmTmVlZGVkKCk7CisgICAgfSk7CisjZW5kaWYKIH0KIAogdm9p
ZCBQYWdlOjpzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25zKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IDhh
MDg3NTU3OGJhZjc2MDAxM2NiNzkxOTNiMWM0NjdjNTE4YTYxZDYuLjg5N2FiY2YyZTRkNTk2ZWYx
YWZjODllODIyMDAyOTI4ZjhjMjZkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtNDEsNyArNDEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVy
TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIpOwogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KFJlbmRlck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyKTsKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVyVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk7CitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVyTWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyKTsKICNlbmRpZgogCiBSZW5kZXJNZWRpYVZvbHVtZVNsaWRl
ckNvbnRhaW5lcjo6UmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoRWxlbWVudCYgZWxl
bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKQEAgLTkwLDEyICs5MCwxMiBAQCB2b2lkIFJlbmRl
ck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyOjpsYXlvdXQoKQogCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogCi1SZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpSZW5kZXJUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5
bGUpCitSZW5kZXJNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXI6OlJlbmRlck1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lcihFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0
eWxlKQogICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQogewog
fQogCi12b2lkIFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmxheW91dCgpCit2b2lk
IFJlbmRlck1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lcjo6bGF5b3V0KCkKIHsKICAgICBS
ZW5kZXJCbG9ja0Zsb3c6OmxheW91dCgpOwogICAgIGlmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBE
aXNwbGF5VHlwZTo6Tm9uZSkKQEAgLTEwNCw3ICsxMDQsNiBAQCB2b2lkIFJlbmRlclRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OmxheW91dCgpCiAgICAgQVNTRVJUKG1lZGlhQ29udHJvbEVsZW1l
bnRUeXBlKGVsZW1lbnQoKSkgPT0gTWVkaWFUZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyKTsKIAog
ICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcih2aWV3KCkuZnJhbWVW
aWV3KCkubGF5b3V0Q29udGV4dCgpKTsKLSAgICBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCgpKS0+bGF5b3V0SWZOZWNlc3NhcnkoKTsK
IH0KIAogI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmgKaW5kZXggZDIyM2Zl
YTAyMGU2YmIwZjg5OWM5MWM2M2JhMWE2NzU3MzY1NzhkMC4uZDFiZjFiMzE2ZmExZDYzZWM0MjI0
YTM3OTdiZTcxNDg0MDUwYjg2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmgKQEAgLTU5LDEwICs1OSwxMCBAQCBwcml2
YXRlOgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogCi1jbGFzcyBSZW5kZXJUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50IGZpbmFsIDogcHVibGljIFJlbmRlckJsb2NrRmxvdyB7Ci0gICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KTsKK2Ns
YXNzIFJlbmRlck1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lciBmaW5hbCA6IHB1YmxpYyBS
ZW5kZXJCbG9ja0Zsb3cgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUmVuZGVyTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyKTsKIHB1YmxpYzoKLSAgICBSZW5kZXJUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKKyAgICBSZW5kZXJNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXIoRWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOwogCiBw
cml2YXRlOgogICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>