<?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>210840</bug_id>
          
          <creation_ts>2020-04-21 20:01:14 -0700</creation_ts>
          <short_desc>[GStreamer][MediaStream] fast/mediastream/play-newly-added-audio-track.html is failing since added in r260380</short_desc>
          <delta_ts>2021-04-19 03:14:53 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=210498</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Lauro Moura">lmoura</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1644168</commentid>
    <comment_count>0</comment_count>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2020-04-21 20:01:14 -0700</bug_when>
    <thetext>It is also flaky crashing with a similar backtrace to bug210498.

Diff:

--- /home/slave/webkitgtk/gtk-linux-64-release-tests/build/layout-test-results/fast/mediastream/play-newly-added-audio-track-expected.txt
+++ /home/slave/webkitgtk/gtk-linux-64-release-tests/build/layout-test-results/fast/mediastream/play-newly-added-audio-track-actual.txt
@@ -1,5 +1,5 @@
 
 
-PASS Add an audio track while playing video 
-PASS Add an audio track while playing audio 
+FAIL Add an audio track while playing video promise_test: Unhandled rejection with value: object &quot;TypeError: Argument 1 (&apos;track&apos;) to Internals.shouldAudioTrackPlay must be an instance of AudioTrack&quot;
+FAIL Add an audio track while playing audio promise_test: Unhandled rejection with value: object &quot;TypeError: Argument 1 (&apos;track&apos;) to Internals.shouldAudioTrackPlay must be an instance of AudioTrack&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644355</commentid>
    <comment_count>1</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-04-22 09:48:32 -0700</bug_when>
    <thetext>This is a new test from r260380</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743146</commentid>
    <comment_count>2</comment_count>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2021-03-23 21:36:17 -0700</bug_when>
    <thetext>Flaky timing out since r273754 (first timeout).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751005</commentid>
    <comment_count>3</comment_count>
      <attachid>426203</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-04-16 03:05:50 -0700</bug_when>
    <thetext>Created attachment 426203
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751076</commentid>
    <comment_count>4</comment_count>
      <attachid>426203</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-04-16 07:59:06 -0700</bug_when>
    <thetext>Comment on attachment 426203
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1660
&gt; +        webkitMediaStreamSrcConfigureAudioTracks(WEBKIT_MEDIA_STREAM_SRC(m_source.get()), volume(), isMuted(), !m_isPaused);

Can&apos;t we _CAST here?

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:125
&gt; +    InternalSource(GstElement* parent, MediaStreamTrackPrivate&amp; track, String padName)

You can take a const String&amp; here and let assignment to the attribute do the copy.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:482
&gt; +        GST_OBJECT_UNLOCK(self);
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    auto upstreamId = priv-&gt;stream ? priv-&gt;stream-&gt;id() : createCanonicalUUIDString();
&gt; +    priv-&gt;streamCollection = adoptGRef(gst_stream_collection_new(upstreamId.ascii().data()));
&gt; +    for (auto&amp; track : priv-&gt;tracks) {
&gt; +        if (!track-&gt;isActive())
&gt; +            continue;
&gt; +        gst_stream_collection_add_stream(priv-&gt;streamCollection.get(), webkitMediaStreamNew(track.get()));
&gt; +    }
&gt; +
&gt; +    GST_OBJECT_UNLOCK(self);

For these cases I would like to use ScopeExit on Scope.h. That way you could create the ScopeExit to run the GST_OBJECT_UNLOCK and forget to UNLOCK in the first place. In case you need to add more early returns, you&apos;re covered.

The problem is that ScopeExit does not have a runEarlyAndRelease method yet that you would need for the second UNLOCK. If you feel like adding it, you have my blessing. The patter would be similar to the unlockEarly of the LockHolder.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:523
&gt; +    const String&amp; padName;

ProbeData is most probably not going to outlive the InternalSource but it would be safer to not have const String&amp; and just a String here. We just make a copy of the String object, the StringImpl does the refcounting and everybody is happier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751403</commentid>
    <comment_count>5</comment_count>
      <attachid>426203</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-04-17 02:54:11 -0700</bug_when>
    <thetext>Comment on attachment 426203
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1660
&gt;&gt; +        webkitMediaStreamSrcConfigureAudioTracks(WEBKIT_MEDIA_STREAM_SRC(m_source.get()), volume(), isMuted(), !m_isPaused);
&gt; 
&gt; Can&apos;t we _CAST here?

We had no such variant, until now. I&apos;m adding it.

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:482
&gt;&gt; +    GST_OBJECT_UNLOCK(self);
&gt; 
&gt; For these cases I would like to use ScopeExit on Scope.h. That way you could create the ScopeExit to run the GST_OBJECT_UNLOCK and forget to UNLOCK in the first place. In case you need to add more early returns, you&apos;re covered.
&gt; 
&gt; The problem is that ScopeExit does not have a runEarlyAndRelease method yet that you would need for the second UNLOCK. If you feel like adding it, you have my blessing. The patter would be similar to the unlockEarly of the LockHolder.

I agree improving ScopeExit would be nice but for this code it wouldn&apos;t be useful anyway. The runEarlyAndRelease() would need to be called before gst_element_post_message() to avoid a deadlock, so that defeats the purpose of using ScopeExit here :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751405</commentid>
    <comment_count>6</comment_count>
      <attachid>426328</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-04-17 03:22:53 -0700</bug_when>
    <thetext>Created attachment 426328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751412</commentid>
    <comment_count>7</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-04-17 04:23:33 -0700</bug_when>
    <thetext>Committed r276197 (236679@main): &lt;https://commits.webkit.org/236679@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751722</commentid>
    <comment_count>8</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-04-19 03:14:53 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #5)
&gt; &gt; The problem is that ScopeExit does not have a runEarlyAndRelease method yet that you would need for the second UNLOCK. If you feel like adding it, you have my blessing. The patter would be similar to the unlockEarly of the LockHolder.
&gt; 
&gt; I agree improving ScopeExit would be nice but for this code it wouldn&apos;t be
&gt; useful anyway. The runEarlyAndRelease() would need to be called before
&gt; gst_element_post_message() to avoid a deadlock, so that defeats the purpose
&gt; of using ScopeExit here :)

It&apos;s true that it defeats the purpose &quot;in this case&quot;, but GStreamer codes is used to having structure of early return that force you to release resources before returning, either locks, buffers or objects. This is an easy case with one lock, release close to the end and one early return. If I prefer the ScopeExit is because it prevents errors in case you add another early return if you happen to forget to release the lock. Am I overprotective, won&apos;t deny it either :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426203</attachid>
            <date>2021-04-16 03:05:50 -0700</date>
            <delta_ts>2021-04-17 03:22:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210840-20210416030548.patch</filename>
            <type>text/plain</type>
            <size>43434</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY4OTY4YmM3NWQ4NzVj
YWYyMDMwM2Q0Y2IzMzQ1ZGJhYTA2NmRjZC4uYTE0OTQxM2U0ZTkxMjdmNmYxYTc1NmI0NWM3OTcw
ZGVjZmRlOGI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIxLTA0LTE2ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XVtNZWRpYVN0cmVhbV0gZmFzdC9tZWRpYXN0cmVhbS9wbGF5LW5ld2x5LWFkZGVkLWF1ZGlvLXRy
YWNrLmh0bWwgaXMgZmFpbGluZyBzaW5jZSBhZGRlZCBpbiByMjYwMzgwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA4NDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgdGVzdCB3YXMgZmFpbGluZyBt
YWlubHkgYmVjYXVzZSBvdXIgbWVkaWFzdHJlYW1zcmMgR1N0cmVhbWVyIGVsZW1lbnQgd2Fzbid0
IGNyZWF0aW5nIHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIEF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTdHJlYW0gb2JqZWN0LiBUaGUgbWVkaWEgcGxheWVyIHNob3VsZCBwcm9wYWdhdGUgaXRzCisg
ICAgICAgIHZvbHVtZS9tdXRlL2lzLXBsYXlpbmcgc3RhdGVzIHRvIHRoZSBzb3VyY2UgZWxlbWVu
dC4gQW5kIGFsc28gdW50aWwgbm93IG91ciBtZWRpYXN0cmVhbXNyYworICAgICAgICBlbGVtZW50
IHdhcyBoYW5kbGluZyBhdCBtb3N0IG9uZSBhdWRpbyB0cmFjayBhbmQgYXQgbW9zdCBvbmUgYXVk
aW8gdHJhY2ssIGJ1dCBpdCB0dXJucyBvdXQKKyAgICAgICAgbXVsdGlwbGUgYXVkaW8gdHJhY2tz
IGNhbiBiZSBhZGRlZCBhY3R1YWxseS4gU28gSSByZWZhY3RvcmVkIHRoZSBlbGVtZW50IGludGVy
bmFscworICAgICAgICBhY2NvcmRpbmdseS4gVGhlIEludGVybmFsU291cmNlIGlzIG5vdyBkaXJl
Y3RseSBvYnNlcnZpbmcgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNv
dXJjZSwgd2hpY2ggc2ltcGxpZmllZCBzb21lIGNvZGUuIE9ic2VydmluZyBpcyBhbHNvIG5vdyBz
dXNwZW5kZWQvcmVzdW1lZAorICAgICAgICBkZXBlbmRpbmcgb24gdGhlIGVsZW1lbnQgc3RhdGUu
CisKKyAgICAgICAgV2UgZG9uJ3QgaW1wbGVtZW50IGEgR1N0cmVhbWVyIEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyIGNsYXNzIHlldCwgYmVjYXVzZSBhY3R1YWwKKyAgICAgICAgcmVuZGVy
aW5nIGlzIHN0aWxsIHBlcmZvcm1lZCBmcm9tIHRoZSBXZWJQcm9jZXNzLCBzbyBlYXJseSByZXR1
cm5zIHdlcmUgYWRkZWQgaW4KKyAgICAgICAgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbSB0
byBoYW5kbGUgdGhpcyBjYXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbmZpZ3VyZU1lZGlhU3RyZWFtQXVk
aW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRWb2x1bWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmRpZEVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6Y3JlYXRlUmVuZGVyZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c2V0TG9nZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OnNldFZvbHVt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpzZXRB
dWRpb091dHB1dERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1l
ZGlhU3RyZWFtOjp2b2x1bWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9UcmFja1By
aXZhdGVNZWRpYVN0cmVhbTo6YXVkaW9TYW1wbGVzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OnN0YXJ0UmVuZGVyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c3RvcFJlbmRlcmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OmNyZWF0ZU5l
d1JlbmRlcmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAobWVkaWFTdHJlYW1UcmFja1By
aXZhdGVHZXRUYWdzKToKKyAgICAgICAgKFdlYktpdE1lZGlhU3RyZWFtT2JzZXJ2ZXI6OmRpZFJl
bW92ZVRyYWNrKToKKyAgICAgICAgKHdlYmtpdE1lZGlhU3RyZWFtU3JjQ29uc3RydWN0ZWQpOgor
ICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1TcmNEaXNwb3NlKToKKyAgICAgICAgKHdlYmtpdE1l
ZGlhU3RyZWFtU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1TcmNQ
b3N0U3RyZWFtQ29sbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFBh
ZCk6CisgICAgICAgIChQcm9iZURhdGE6OlByb2JlRGF0YSk6CisgICAgICAgICh3ZWJraXRNZWRp
YVN0cmVhbVNyY1BhZFByb2JlQ2IpOgorICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1TcmNBZGRU
cmFjayk6CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbSk6CisgICAgICAg
ICh3ZWJraXRNZWRpYVN0cmVhbVNyY1RyYWNrRW5kZWQpOgorICAgICAgICAoSW50ZXJuYWxTb3Vy
Y2U6OnRyYWNrRW5kZWQpOgorICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1TcmNDb25maWd1cmVB
dWRpb1RyYWNrcyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmg6CisKIDIwMjEtMDQtMTYgIFlvdWVubiBGYWJsZXQg
IDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBhIG5vIGxvbmdlciBuZWNlc3Nh
cnkgY2FsbE9uTWFpblRocmVhZCBpbiBXb3JrZXI6OmNyZWF0ZVJUQ1J0cFNjcmlwdFRyYW5zZm9y
bWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmlu
ZGV4IDlkNjY0YjU3YjY0YzkzOTRiZjhjZTdkNWExYWM1NTBjODVlM2YxMmIuLmU4MmUzNjg1Njg5
YjlkZGQ4ZTdhNTBhNmE3NjE1M2FkMTNhMTZhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNTExLDkgKzE1MTEsMTAgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyhjb25zdCBHUmVmUHRyPEdz
dFN0cmVhbUNvbGxlY3Rpb24KIAogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJJbnNwZWN0aW5nICVzIHRyYWNrIHdpdGggSUQgJXMiLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25h
bWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIGlmICh0eXBlICYg
R1NUX1NUUkVBTV9UWVBFX0FVRElPKQorICAgICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQ
RV9BVURJTykgewogICAgICAgICAgICAgQ1JFQVRFX1RSQUNLKGF1ZGlvLCBBdWRpbyk7Ci0gICAg
ICAgIGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8gJiYgbV9wbGF5ZXItPmlz
VmlkZW9QbGF5ZXIoKSkKKyAgICAgICAgICAgIGNvbmZpZ3VyZU1lZGlhU3RyZWFtQXVkaW9UcmFj
a3MoKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1ZJREVPICYm
IG1fcGxheWVyLT5pc1ZpZGVvUGxheWVyKCkpCiAgICAgICAgICAgICBDUkVBVEVfVFJBQ0sodmlk
ZW8sIFZpZGVvKTsKICAgICAgICAgZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9URVhU
ICYmICF1c2VNZWRpYVNvdXJjZSkgewogICAgICAgICAgICAgYXV0byB0cmFjayA9IEluYmFuZFRl
eHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZSh0ZXh0VHJhY2tJbmRleCsrLCBzdHJlYW0p
OwpAQCAtMTY1Myw2ICsxNjU0LDEyIEBAIEZsb2F0U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV92aWRlb1NpemU7CiB9CiAK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb25maWd1cmVNZWRpYVN0cmVhbUF1
ZGlvVHJhY2tzKCkKK3sKKyAgICBpZiAoV0VCS0lUX0lTX01FRElBX1NUUkVBTV9TUkMobV9zb3Vy
Y2UuZ2V0KCkpKQorICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY0NvbmZpZ3VyZUF1ZGlvVHJh
Y2tzKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG1fc291cmNlLmdldCgpKSwgdm9sdW1lKCksIGlz
TXV0ZWQoKSwgIW1faXNQYXVzZWQpOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKICAgICBpZiAoIW1fdm9sdW1lRWxlbWVu
dCkKQEAgLTE2NjAsNiArMTY2Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiU2V0dGluZyB2b2x1bWU6ICVmIiwgdm9sdW1lKTsKICAgICBnc3Rfc3RyZWFtX3ZvbHVt
ZV9zZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9S
TUFUX0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2b2x1bWUpKTsKKyAgICBjb25maWd1cmVN
ZWRpYVN0cmVhbUF1ZGlvVHJhY2tzKCk7CiB9CiAKIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6dm9sdW1lKCkgY29uc3QKQEAgLTE3MTcsNiArMTcyNSw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZChib29sIHNob3VsZE11dGUpCiAKICAgICBH
U1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgbXV0ZWQgc3RhdGUgdG8gJXMiLCBi
b29sRm9yUHJpbnRpbmcoc2hvdWxkTXV0ZSkpOwogICAgIGdfb2JqZWN0X3NldChtX3ZvbHVtZUVs
ZW1lbnQuZ2V0KCksICJtdXRlIiwgc2hvdWxkTXV0ZSwgbnVsbHB0cik7CisgICAgY29uZmlndXJl
TWVkaWFTdHJlYW1BdWRpb1RyYWNrcygpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKQEAgLTIyNTgsNiArMjI2Nyw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogCiAgICAgTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKICAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwor
ICAgIGJvb2wgb2xkSXNQYXVzZWQgPSBtX2lzUGF1c2VkOwogICAgIEdzdFN0YXRlIHBlbmRpbmcs
IHN0YXRlOwogICAgIGJvb2wgc3RhdGVSZWFsbHlDaGFuZ2VkID0gZmFsc2U7CiAKQEAgLTI0MjQs
NiArMjQzNCw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0
ZXMoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKG9sZElzUGF1
c2VkICE9IG1faXNQYXVzZWQpCisgICAgICAgIGNvbmZpZ3VyZU1lZGlhU3RyZWFtQXVkaW9UcmFj
a3MoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1lZGlhTG9jYXRp
b25DaGFuZ2VkKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCkBAIC0yNTU5LDYgKzI1NzIsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKCkKICAgICAgICAgbV9pc1BhdXNl
ZCA9IHRydWU7CiAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1JFQURZKTsK
ICAgICAgICAgbV9kaWREb3dubG9hZEZpbmlzaCA9IGZhbHNlOworICAgICAgICBjb25maWd1cmVN
ZWRpYVN0cmVhbUF1ZGlvVHJhY2tzKCk7CiAKICNpZiBVU0UoV1BFX1ZJREVPX1BMQU5FX0RJU1BM
QVlfRE1BQlVGKQogICAgICAgICB3cGVfdmlkZW9fcGxhbmVfZGlzcGxheV9kbWFidWZfc291cmNl
X2VuZF9vZl9zdHJlYW0obV93cGVWaWRlb1BsYW5lRGlzcGxheURtYUJ1Zi5nZXQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggMDAwOTRhY2M4
OWIxNzMyZGU2NWE5N2ZlZDAxYTc4Mzg1NWJlMGIxYy4uZmQ3ZmY0MTZlZGI2MWZmZDYyNDgwNTcz
NzcyOTYxNzIzODIwYTYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuaApAQCAtNDU4LDYgKzQ1OCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCB3YWl0Rm9y
Q0RNQXR0YWNobWVudCgpOwogI2VuZGlmCiAKKyAgICB2b2lkIGNvbmZpZ3VyZU1lZGlhU3RyZWFt
QXVkaW9UcmFja3MoKTsKKwogICAgIEF0b21pYzxib29sPiBtX2lzUGxheWVyU2h1dHRpbmdEb3du
OwogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV90ZXh0U2luazsKICAgICBHc3RTdHJ1Y3R1cmUq
IG1fbWVkaWFMb2NhdGlvbnMgeyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0F1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTdHJlYW0uY3BwCmluZGV4IDJlOTU0NzRmY2I2ODA1ODk3NDJlMTAyZGIxMmUxZWFiNTIxZGM0
NTMuLjA5MWZkNzJjNzk1ZDIzMTRjM2I0OWE3MTIxM2QzZDFiM2Q5NDg0ZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0F1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0F1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uY3BwCkBAIC01MSw2ICs1MSw4IEBAIEF1ZGlvVHJh
Y2tQcml2YXRlTWVkaWFTdHJlYW06On5BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtKCkKIHN0
ZDo6dW5pcXVlX3B0cjxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcj4gQXVkaW9UcmFja1By
aXZhdGVNZWRpYVN0cmVhbTo6Y3JlYXRlUmVuZGVyZXIoQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0
cmVhbSYgc3RyZWFtKQogewogICAgIGF1dG8gcmVuZGVyZXIgPSBBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlcjo6Y3JlYXRlKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgcmVuZGVyZXItPnNldENyYXNoQ2FsbGJhY2soW3N0cmVhbSA9IG1ha2VX
ZWFrUHRyKHN0cmVhbSldIHsKICAgICAgICAgaWYgKHN0cmVhbSkKICAgICAgICAgICAgIHN0cmVh
bS0+Y3JlYXRlTmV3UmVuZGVyZXIoKTsKQEAgLTYyLDcgKzY0LDggQEAgc3RkOjp1bmlxdWVfcHRy
PEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyPiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3Ry
ZWFtOjpjcmUKIHZvaWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c2V0TG9nZ2VyKGNv
bnN0IExvZ2dlciYgbG9nZ2VyLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKQogewogICAgIFRyYWNr
UHJpdmF0ZUJhc2U6OnNldExvZ2dlcihsb2dnZXIsIGlkZW50aWZpZXIpOwotICAgIG1fcmVuZGVy
ZXItPnNldExvZ2dlcihsb2dnZXIsIGlkZW50aWZpZXIpOworICAgIGlmIChtX3JlbmRlcmVyKQor
ICAgICAgICBtX3JlbmRlcmVyLT5zZXRMb2dnZXIobG9nZ2VyLCBpZGVudGlmaWVyKTsKIH0KICNl
bmRpZgogCkBAIC03Nyw3ICs4MCw4IEBAIHZvaWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bTo6Y2xlYXIoKQogICAgICAgICBtX2F1ZGlvU291cmNlLT5yZW1vdmVBdWRpb1NhbXBsZU9ic2Vy
dmVyKCp0aGlzKTsKIAogICAgIHN0cmVhbVRyYWNrKCkucmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwot
ICAgIG1fcmVuZGVyZXItPmNsZWFyKCk7CisgICAgaWYgKG1fcmVuZGVyZXIpCisgICAgICAgIG1f
cmVuZGVyZXItPmNsZWFyKCk7CiB9CiAKIHZvaWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bTo6cGxheSgpCkBAIC0xMDMsMjQgKzEwNywyOSBAQCB2b2lkIEF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTdHJlYW06OnNldE11dGVkKGJvb2wgbXV0ZWQpCiAKIHZvaWQgQXVkaW9UcmFja1ByaXZhdGVN
ZWRpYVN0cmVhbTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKLSAgICBtX3JlbmRlcmVyLT5z
ZXRWb2x1bWUodm9sdW1lKTsKKyAgICBpZiAobV9yZW5kZXJlcikKKyAgICAgICAgbV9yZW5kZXJl
ci0+c2V0Vm9sdW1lKHZvbHVtZSk7CiAgICAgdXBkYXRlUmVuZGVyZXIoKTsKIH0KIAogdm9pZCBB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpzZXRBdWRpb091dHB1dERldmljZShjb25zdCBT
dHJpbmcmIGRldmljZUlkKQogewotICAgIG1fcmVuZGVyZXItPnNldEF1ZGlvT3V0cHV0RGV2aWNl
KGRldmljZUlkKTsKKyAgICBpZiAobV9yZW5kZXJlcikKKyAgICAgICAgbV9yZW5kZXJlci0+c2V0
QXVkaW9PdXRwdXREZXZpY2UoZGV2aWNlSWQpOwogfQogCiBmbG9hdCBBdWRpb1RyYWNrUHJpdmF0
ZU1lZGlhU3RyZWFtOjp2b2x1bWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3JlbmRlcmVyLT52
b2x1bWUoKTsKKyAgICBpZiAobV9yZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG1fcmVuZGVyZXIt
PnZvbHVtZSgpOworICAgIHJldHVybiAxOwogfQogCiAvLyBNYXkgZ2V0IGNhbGxlZCBvbiBhIGJh
Y2tncm91bmQgdGhyZWFkLgogdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjphdWRp
b1NhbXBsZXNBdmFpbGFibGUoY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBQbGF0
Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRhLCBjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbiwgc2l6ZV90IHNhbXBsZUNvdW50KQogewotICAgIG1fcmVuZGVyZXItPnB1c2hT
YW1wbGVzKHNhbXBsZVRpbWUsIGF1ZGlvRGF0YSwgZGVzY3JpcHRpb24sIHNhbXBsZUNvdW50KTsK
KyAgICBpZiAobV9yZW5kZXJlcikKKyAgICAgICAgbV9yZW5kZXJlci0+cHVzaFNhbXBsZXMoc2Ft
cGxlVGltZSwgYXVkaW9EYXRhLCBkZXNjcmlwdGlvbiwgc2FtcGxlQ291bnQpOwogfQogCiB2b2lk
IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OnRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJikKQEAgLTE1NCw3ICsxNjMsOCBAQCB2b2lkIEF1ZGlvVHJhY2tQcml2
YXRlTWVkaWFTdHJlYW06OnN0YXJ0UmVuZGVyZXIoKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2lzUGxheWluZyA9IHRydWU7Ci0gICAgbV9yZW5kZXJlci0+c3RhcnQoKTsKKyAgICBpZiAobV9y
ZW5kZXJlcikKKyAgICAgICAgbV9yZW5kZXJlci0+c3RhcnQoKTsKICAgICBtX2F1ZGlvU291cmNl
LT5hZGRBdWRpb1NhbXBsZU9ic2VydmVyKCp0aGlzKTsKIH0KIApAQCAtMTY2LDcgKzE3Niw4IEBA
IHZvaWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c3RvcFJlbmRlcmVyKCkKIAogICAg
IG1faXNQbGF5aW5nID0gZmFsc2U7CiAgICAgbV9hdWRpb1NvdXJjZS0+cmVtb3ZlQXVkaW9TYW1w
bGVPYnNlcnZlcigqdGhpcyk7Ci0gICAgbV9yZW5kZXJlci0+c3RvcCgpOworICAgIGlmIChtX3Jl
bmRlcmVyKQorICAgICAgICBtX3JlbmRlcmVyLT5zdG9wKCk7CiB9CiAKIHZvaWQgQXVkaW9UcmFj
a1ByaXZhdGVNZWRpYVN0cmVhbTo6Y3JlYXRlTmV3UmVuZGVyZXIoKQpAQCAtMTc2LDcgKzE4Nyw4
IEBAIHZvaWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6Y3JlYXRlTmV3UmVuZGVyZXIo
KQogCiAgICAgZmxvYXQgdm9sdW1lID0gdGhpcy0+dm9sdW1lKCk7CiAgICAgbV9yZW5kZXJlciA9
IGNyZWF0ZVJlbmRlcmVyKCp0aGlzKTsKLSAgICBtX3JlbmRlcmVyLT5zZXRWb2x1bWUodm9sdW1l
KTsKKyAgICBpZiAobV9yZW5kZXJlcikKKyAgICAgICAgbV9yZW5kZXJlci0+c2V0Vm9sdW1lKHZv
bHVtZSk7CiAKICAgICBpZiAoaXNQbGF5aW5nKQogICAgICAgICBzdGFydFJlbmRlcmVyKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAppbmRl
eCA2M2E2YzdhYzMyNWFlODk4OTIyMTQyN2M2YjAzNWYyMjc0YzQxMTFkLi4zNGQ2ODIwNjJlMmRi
Mzc1ZDYxYjE1YWZlNzFlN2ZjYTVlOTVlMDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKQEAgLTI2LDEzICsyNiwxMiBAQAogCiAjaWYg
RU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQog
Ci0jaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJBdWRpb1RyYWNrUHJp
dmF0ZU1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9EYXRhLmgiCiAjaW5j
bHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIu
aCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZS5oIgotI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlLmgiCisjaW5jbHVk
ZSAiVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oIgogCiAjaW5jbHVkZSA8Z3N0L2FwcC9n
c3RhcHBzcmMuaD4KICNpbmNsdWRlIDx3dGYvVVVJRC5oPgpAQCAtNDAsMjQgKzM5LDE2IEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVh
bVNyY1B1c2hWaWRlb1NhbXBsZShXZWJLaXRNZWRpYVN0cmVhbVNyYyosIEdzdFNhbXBsZSopOwot
c3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoQXVkaW9TYW1wbGUoV2ViS2l0TWVk
aWFTdHJlYW1TcmMqLCBjb25zdCBHUmVmUHRyPEdzdFNhbXBsZT4mKTsKLXN0YXRpYyB2b2lkIHdl
YmtpdE1lZGlhU3RyZWFtU3JjVHJhY2tFbmRlZChXZWJLaXRNZWRpYVN0cmVhbVNyYyosIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlJik7Ci1zdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1Jl
bW92ZVRyYWNrQnlUeXBlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiwgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZSk7Ci1zdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1JlbW92ZVRyYWNrT2Jz
ZXJ2ZXIoV2ViS2l0TWVkaWFTdHJlYW1TcmMqLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpOwot
c3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQb3N0U3RyZWFtQ29sbGVjdGlvbihXZWJL
aXRNZWRpYVN0cmVhbVNyYyopOwotc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNSZW1v
dmVQYWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMqLCBjb25zdCBjaGFyKiBwYWROYW1lKTsKLQotc3Rh
dGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BB
RF9URU1QTEFURSgidmlkZW9fc3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfU09NRVRJTUVTLAor
c3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElD
X1BBRF9URU1QTEFURSgidmlkZW9fc3JjJXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElN
RVMsCiAgICAgR1NUX1NUQVRJQ19DQVBTKCJ2aWRlby94LXJhdzt2aWRlby94LWgyNjQ7dmlkZW8v
eC12cDgiKSk7CiAKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBhdWRpb1NyY1RlbXBsYXRl
ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoImF1ZGlvX3NyYyIsIEdTVF9QQURfU1JDLCBHU1Rf
UEFEX1NPTUVUSU1FUywKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBhdWRpb1NyY1RlbXBs
YXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoImF1ZGlvX3NyYyV1IiwgR1NUX1BBRF9TUkMs
IEdTVF9QQURfU09NRVRJTUVTLAogICAgIEdTVF9TVEFUSUNfQ0FQUygiYXVkaW8veC1yYXcoQU5Z
KTsiKSk7CiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0TWVkaWFTdHJlYW1TcmNE
ZWJ1Zyk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVn
CiAKLUdSZWZQdHI8R3N0VGFnTGlzdD4gbWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlKiB0cmFjaykKK0dSZWZQdHI8R3N0VGFnTGlzdD4gbWVkaWFT
dHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiB0
cmFjaykKIHsKICAgICBhdXRvIHRhZ0xpc3QgPSBhZG9wdEdSZWYoZ3N0X3RhZ19saXN0X25ld19l
bXB0eSgpKTsKIApAQCAtMTAwLDU1ICs5MSw2IEBAIEdzdFN0cmVhbSogd2Via2l0TWVkaWFTdHJl
YW1OZXcoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrKQogICAgIHJldHVybiBzdHJlYW07
CiB9CiAKLWNsYXNzIFdlYktpdE1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcgotICAgIDogcHVibGlj
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlcgotICAgICwgcHVibGljIFJlYWx0aW1l
TWVkaWFTb3VyY2U6OkF1ZGlvU2FtcGxlT2JzZXJ2ZXIKLSAgICAsIHB1YmxpYyBSZWFsdGltZU1l
ZGlhU291cmNlOjpWaWRlb1NhbXBsZU9ic2VydmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJLaXRNZWRpYVN0cmVhbVRyYWNrT2JzZXJ2
ZXIoKSB7IH07Ci0gICAgV2ViS2l0TWVkaWFTdHJlYW1UcmFja09ic2VydmVyKEdzdEVsZW1lbnQq
IHNyYykKLSAgICAgICAgOiBtX3NyYyhzcmMpIHsgfQotICAgIHZvaWQgdHJhY2tTdGFydGVkKE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9OwotCi0gICAgdm9pZCB0cmFja0VuZGVk
KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykgZmluYWwKLSAgICB7Ci0gICAgICAgIGlm
IChtX3NyYykKLSAgICAgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjVHJhY2tFbmRlZChXRUJL
SVRfTUVESUFfU1RSRUFNX1NSQyhtX3NyYyksIHRyYWNrKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRy
YWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHRyYWNrKSBmaW5hbAot
ICAgIHsKLSAgICAgICAgbV9lbmFibGVkID0gdHJhY2suZW5hYmxlZCgpOwotICAgIH0KLQotICAg
IHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7
IH07Ci0gICAgdm9pZCB0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZSYpIGZpbmFsIHsgfTsKLSAgICB2b2lkIHJlYWR5U3RhdGVDaGFuZ2VkKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJikgZmluYWwgeyB9OwotCi0gICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShN
ZWRpYVNhbXBsZSYgc2FtcGxlKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX2VuYWJsZWQg
fHwgIW1fc3JjKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIGdzdFNhbXBs
ZSA9IHN0YXRpY19jYXN0PE1lZGlhU2FtcGxlR1N0cmVhbWVyKj4oJnNhbXBsZSktPnBsYXRmb3Jt
U2FtcGxlKCkuc2FtcGxlLmdzdFNhbXBsZTsKLSAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNQ
dXNoVmlkZW9TYW1wbGUoV0VCS0lUX01FRElBX1NUUkVBTV9TUkMobV9zcmMpLCBnc3RTYW1wbGUp
OwotICAgIH0KLQotICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IE1lZGlhVGlt
ZSYsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0IEF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mLCBzaXplX3QpIGZpbmFsCi0gICAgewotICAgICAgICBpZiAoIW1fZW5hYmxl
ZCB8fCAhbV9zcmMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byBkYXRhID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR1N0cmVhbWVyQXVkaW9EYXRhJj4oYXVkaW9EYXRhKTsKLSAgICAg
ICAgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoQXVkaW9TYW1wbGUoV0VCS0lUX01FRElBX1NUUkVB
TV9TUkMobV9zcmMpLCBkYXRhLmdldFNhbXBsZSgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
R3N0RWxlbWVudCogbV9zcmMgeyBudWxscHRyIH07Ci0gICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVl
IH07Ci19OwotCiBjbGFzcyBXZWJLaXRNZWRpYVN0cmVhbU9ic2VydmVyIDogcHVibGljIE1lZGlh
U3RyZWFtUHJpdmF0ZTo6T2JzZXJ2ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgpAQCAtMTY5LDI1ICsxMTEsMjggQEAgcHVibGljOgogICAgICAgICAgICAgd2Via2l0
TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhtX3NyYyksICZ0
cmFjaywgZmFsc2UpOwogICAgIH0KIAotICAgIHZvaWQgZGlkUmVtb3ZlVHJhY2soTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGUmIHRyYWNrKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX3NyYykK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1JlbW92
ZVRyYWNrT2JzZXJ2ZXIoV0VCS0lUX01FRElBX1NUUkVBTV9TUkMobV9zcmMpLCB0cmFjayk7Ci0g
ICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjUmVtb3ZlVHJhY2tCeVR5cGUoV0VCS0lUX01FRElB
X1NUUkVBTV9TUkMobV9zcmMpLCB0cmFjay50eXBlKCkpOwotICAgIH0KKyAgICB2b2lkIGRpZFJl
bW92ZVRyYWNrKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWw7CiAKIHByaXZhdGU6CiAg
ICAgR3N0RWxlbWVudCogbV9zcmM7CiB9OwogCi1jbGFzcyBJbnRlcm5hbFNvdXJjZSB7CitjbGFz
cyBJbnRlcm5hbFNvdXJjZSBmaW5hbCA6IHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6
T2JzZXJ2ZXIsCisgICAgcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvU2FtcGxlT2Jz
ZXJ2ZXIsCisgICAgcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvU2FtcGxlT2JzZXJ2
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEludGVybmFs
U291cmNlKGJvb2wgaXNDYXB0dXJlVHJhY2ssIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlw
ZSkKLSAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICBJbnRlcm5hbFNvdXJjZShHc3RFbGVtZW50
KiBwYXJlbnQsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaywgU3RyaW5nIHBhZE5hbWUp
CisgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICAgICAsIG1fdHJhY2sodHJhY2spCisg
ICAgICAgICwgbV9wYWROYW1lKHBhZE5hbWUpCiAgICAgeworICAgICAgICBpZiAodHJhY2sudHlw
ZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvKQorICAgICAgICAgICAgbV9h
dWRpb1RyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6Y3JlYXRlKHRyYWNrKTsK
KyAgICAgICAgZWxzZSBpZiAodHJhY2sudHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGU6OlZpZGVvKQorICAgICAgICAgICAgbV92aWRlb1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVN
ZWRpYVN0cmVhbTo6Y3JlYXRlKHRyYWNrKTsKKworICAgICAgICBib29sIGlzQ2FwdHVyZVRyYWNr
ID0gdHJhY2suaXNDYXB0dXJlVHJhY2soKTsKICAgICAgICAgbV9zcmMgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoImFwcHNyYyIsIG51bGxwdHIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9X
SVRIX01FU1NBR0UoR1NUX0lTX0FQUF9TUkMobV9zcmMuZ2V0KCkpLCAiR1N0cmVhbWVyIGFwcHNy
YyBlbGVtZW50IG5vdCBmb3VuZC4gUGxlYXNlIG1ha2Ugc3VyZSB0byBpbnN0YWxsIGdzdC1wbHVn
aW5zLWJhc2UiKTsKIApAQCAtMjAxLDI1ICsxNDYsNjYgQEAgcHVibGljOgogICAgICAgICB9KSwg
dGhpcyk7CiAgICAgfQogCi0gICAgfkludGVybmFsU291cmNlKCkKKyAgICB2aXJ0dWFsIH5JbnRl
cm5hbFNvdXJjZSgpCiAgICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQobV9zcmMuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIs
IG51bGxwdHIsIHRoaXMpOwotCi0gICAgICAgIGlmIChhdXRvIHBhcmVudCA9IGFkb3B0R1JlZihn
c3Rfb2JqZWN0X2dldF9wYXJlbnQoR1NUX09CSkVDVF9DQVNUKG1fc3JjLmdldCgpKSkpKSB7Ci0g
ICAgICAgICAgICBHU1RfU1RBVEVfTE9DSyhHU1RfRUxFTUVOVF9DQVNUKHBhcmVudC5nZXQoKSkp
OwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZShtX3NyYy5nZXQoKSwg
dHJ1ZSk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9zcmMuZ2V0KCksIEdT
VF9TVEFURV9OVUxMKTsKLSAgICAgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU5fQ0FTVChw
YXJlbnQuZ2V0KCkpLCBtX3NyYy5nZXQoKSk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRf
bG9ja2VkX3N0YXRlKG1fc3JjLmdldCgpLCBmYWxzZSk7Ci0gICAgICAgICAgICBHU1RfU1RBVEVf
VU5MT0NLKEdTVF9FTEVNRU5UX0NBU1QocGFyZW50LmdldCgpKSk7Ci0KLSAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHBhZE5hbWUgPSBtX3R5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
VmlkZW8gPyAidmlkZW9fc3JjIiA6ICJhdWRpb19zcmMiOwotICAgICAgICAgICAgd2Via2l0TWVk
aWFTdHJlYW1TcmNSZW1vdmVQYWQoV0VCS0lUX01FRElBX1NUUkVBTV9TUkMocGFyZW50LmdldCgp
KSwgcGFkTmFtZSk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RvcE9ic2VydmluZygpOworCisgICAg
ICAgIGlmIChtX3NyYykKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX3NyYy5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwg
bnVsbHB0ciwgdGhpcyk7CiAgICAgfQogCisgICAgY29uc3QgTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUmIHRyYWNrKCkgY29uc3QgeyByZXR1cm4gbV90cmFjazsgfQorICAgIGNvbnN0IFN0cmluZyYg
cGFkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFkTmFtZTsgfQogICAgIEdzdEVsZW1lbnQqIGdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjLmdldCgpOyB9CiAKKyAgICB2b2lkIHN0YXJ0T2JzZXJ2
aW5nKCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzT2JzZXJ2aW5nKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIG1fdHJhY2suYWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgICAgICBzd2l0
Y2ggKG1fdHJhY2sudHlwZSgpKSB7CisgICAgICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6QXVkaW86CisgICAgICAgICAgICBtX3RyYWNrLnNvdXJjZSgpLmFkZEF1ZGlvU2FtcGxl
T2JzZXJ2ZXIoKnRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86CisgICAgICAgICAgICBtX3RyYWNrLnNvdXJjZSgp
LmFkZFZpZGVvU2FtcGxlT2JzZXJ2ZXIoKnRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIG1faXNPYnNlcnZpbmcgPSB0
cnVlOworICAgIH0KKworICAgIHZvaWQgc3RvcE9ic2VydmluZygpCisgICAgeworICAgICAgICBp
ZiAoIW1faXNPYnNlcnZpbmcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9pc09i
c2VydmluZyA9IGZhbHNlOworICAgICAgICBzd2l0Y2ggKG1fdHJhY2sudHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86CisgICAgICAgICAgICBt
X3RyYWNrLnNvdXJjZSgpLnJlbW92ZUF1ZGlvU2FtcGxlT2JzZXJ2ZXIoKnRoaXMpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Vmlk
ZW86CisgICAgICAgICAgICBtX3RyYWNrLnNvdXJjZSgpLnJlbW92ZVZpZGVvU2FtcGxlT2JzZXJ2
ZXIoKnRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZTo6Tm9uZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgICAgIG1fdHJhY2sucmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIH0K
KworICAgIHZvaWQgY29uZmlndXJlQXVkaW9UcmFjayhmbG9hdCB2b2x1bWUsIGJvb2wgaXNNdXRl
ZCwgYm9vbCBpc1BsYXlpbmcpCisgICAgeworICAgICAgICBBU1NFUlQobV90cmFjay50eXBlKCkg
PT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pOworICAgICAgICBtX2F1ZGlvVHJh
Y2stPnNldFZvbHVtZSh2b2x1bWUpOworICAgICAgICBtX2F1ZGlvVHJhY2stPnNldE11dGVkKGlz
TXV0ZWQpOworICAgICAgICBtX2F1ZGlvVHJhY2stPnNldEVuYWJsZWQobV9hdWRpb1RyYWNrLT5z
dHJlYW1UcmFjaygpLmVuYWJsZWQoKSAmJiAhbV9hdWRpb1RyYWNrLT5zdHJlYW1UcmFjaygpLm11
dGVkKCkpOworICAgICAgICBpZiAoaXNQbGF5aW5nKQorICAgICAgICAgICAgbV9hdWRpb1RyYWNr
LT5wbGF5KCk7CisgICAgfQorCiAgICAgdm9pZCBwdXNoU2FtcGxlKEdzdFNhbXBsZSogc2FtcGxl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fc3JjKTsKQEAgLTIzNSwxMiArMjIxLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGdzdF9wYWRfc2V0X29mZnNldChwYWQuZ2V0KCksIC1tX2ZpcnN0
QnVmZmVyUHRzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX3R5cGUgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8gJiYgZHJvcCkKKyAgICAgICAgaWYgKG1fdHJhY2sudHlw
ZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvICYmIGRyb3ApCiAgICAgICAg
ICAgICBkcm9wID0gZG9DYXBzSGF2ZVR5cGUoY2FwcywgInZpZGVvL3gtcmF3IikgfHwgR1NUX0JV
RkZFUl9GTEFHX0lTX1NFVChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKIAog
ICAgICAgICBpZiAoZHJvcCkgewogICAgICAgICAgICAgbV9uZWVkc0Rpc2NvbnQgPSB0cnVlOwot
ICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKG1fc3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBh
bHJlYWR5Li4uIG5vdCBwdXNoaW5nIiwgbV90eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGU6OlZpZGVvID8gIlZpZGVvIiA6ICJBdWRpbyIpOworICAgICAgICAgICAgR1NUX0lORk9fT0JK
RUNUKG1fc3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBhbHJlYWR5Li4uIG5vdCBwdXNoaW5nIiwg
bV90cmFjay50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8gPyAiVmlk
ZW8iIDogIkF1ZGlvIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjUy
LDI0ICsyMzgsNjEgQEAgcHVibGljOgogICAgICAgICBnc3RfYXBwX3NyY19wdXNoX3NhbXBsZShH
U1RfQVBQX1NSQyhtX3NyYy5nZXQoKSksIHNhbXBsZSk7CiAgICAgfQogCisgICAgdm9pZCB0cmFj
a1N0YXJ0ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH07CisgICAgdm9pZCB0
cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWw7CisKKyAgICB2b2lkIHRy
YWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHRyYWNrKSBmaW5hbAor
ICAgIHsKKyAgICAgICAgbV9lbmFibGVkID0gdHJhY2suZW5hYmxlZCgpOworICAgIH0KKworICAg
IHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7
IH07CisgICAgdm9pZCB0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZSYpIGZpbmFsIHsgfTsKKyAgICB2b2lkIHJlYWR5U3RhdGVDaGFuZ2VkKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJikgZmluYWwgeyB9OworCisgICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShN
ZWRpYVNhbXBsZSYgc2FtcGxlKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKCFtX2VuYWJsZWQg
fHwgIW1fcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8qIGdzdFNh
bXBsZSA9IHN0YXRpY19jYXN0PE1lZGlhU2FtcGxlR1N0cmVhbWVyKj4oJnNhbXBsZSktPnBsYXRm
b3JtU2FtcGxlKCkuc2FtcGxlLmdzdFNhbXBsZTsKKyAgICAgICAgcHVzaFNhbXBsZShnc3RTYW1w
bGUpOworICAgIH0KKworICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IE1lZGlh
VGltZSYsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0IEF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpIGZpbmFsCisgICAgeworICAgICAgICBpZiAoIW1fZW5h
YmxlZCB8fCAhbV9wYXJlbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3Qg
YXV0byYgZGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IEdTdHJlYW1lckF1ZGlvRGF0YSY+KGF1ZGlv
RGF0YSk7CisgICAgICAgIGF1dG8gc2FtcGxlID0gZGF0YS5nZXRTYW1wbGUoKTsKKyAgICAgICAg
cHVzaFNhbXBsZShzYW1wbGUuZ2V0KCkpOworICAgIH0KKwogcHJpdmF0ZToKLSAgICBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlIG1fdHlwZSB7IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5v
bmUgfTsKKyAgICBHc3RFbGVtZW50KiBtX3BhcmVudCB7IG51bGxwdHIgfTsKKyAgICBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYgbV90cmFjazsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc3Jj
OworICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OwogICAgIEdzdENsb2NrVGltZSBtX2ZpcnN0
QnVmZmVyUHRzIHsgR1NUX0NMT0NLX1RJTUVfTk9ORSB9OwogICAgIGJvb2wgbV9lbm91Z2hEYXRh
IHsgZmFsc2UgfTsKICAgICBib29sIG1fbmVlZHNEaXNjb250IHsgZmFsc2UgfTsKKyAgICBTdHJp
bmcgbV9wYWROYW1lOworICAgIGJvb2wgbV9pc09ic2VydmluZyB7IGZhbHNlIH07CisgICAgUmVm
UHRyPEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0+IG1fYXVkaW9UcmFjazsKKyAgICBSZWZQ
dHI8VmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbT4gbV92aWRlb1RyYWNrOwogfTsKIAogc3Ry
dWN0IF9XZWJLaXRNZWRpYVN0cmVhbVNyY1ByaXZhdGUgewogICAgIENTdHJpbmcgdXJpOwotICAg
IE9wdGlvbmFsPEludGVybmFsU291cmNlPiBhdWRpb1NyYzsKLSAgICBPcHRpb25hbDxJbnRlcm5h
bFNvdXJjZT4gdmlkZW9TcmM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdE1lZGlhU3RyZWFt
VHJhY2tPYnNlcnZlcj4gbWVkaWFTdHJlYW1UcmFja09ic2VydmVyOworICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxTb3VyY2U+PiBzb3VyY2VzOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJLaXRNZWRpYVN0cmVhbU9ic2VydmVyPiBtZWRpYVN0cmVhbU9ic2VydmVyOwogICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbVByaXZhdGU+IHN0cmVhbTsKICAgICBWZWN0b3I8UmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPj4gdHJhY2tzOwogICAgIEdVbmlxdWVQdHI8R3N0Rmxvd0NvbWJp
bmVyPiBmbG93Q29tYmluZXI7CiAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBzdHJl
YW1Db2xsZWN0aW9uOworICAgIEF0b21pYzx1bnNpZ25lZD4gYXVkaW9QYWRDb3VudGVyOworICAg
IEF0b21pYzx1bnNpZ25lZD4gdmlkZW9QYWRDb3VudGVyOwogfTsKIAogZW51bSB7CkBAIC0yNzgs
NiArMzAxLDE3IEBAIGVudW0gewogICAgIFBST1BfTEFTVAogfTsKIAordm9pZCBXZWJLaXRNZWRp
YVN0cmVhbU9ic2VydmVyOjpkaWRSZW1vdmVUcmFjayhNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYg
dHJhY2spCit7CisgICAgaWYgKCFtX3NyYykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byog
ZWxlbWVudCA9IFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG1fc3JjKTsKKyAgICBlbGVtZW50LT5w
cml2LT5zb3VyY2VzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZdKGF1dG8mIGl0ZW0pIHsKKyAgICAg
ICAgcmV0dXJuIGl0ZW0tPnRyYWNrKCkuaWQoKSA9PSB0cmFjay5pZCgpOworICAgIH0pOworfQor
CiBzdGF0aWMgR3N0VVJJVHlwZSB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaUdldFR5cGUoR1R5cGUp
CiB7CiAgICAgcmV0dXJuIEdTVF9VUklfU1JDOwpAQCAtMzQ4LDcgKzM4Miw2IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQ29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAg
IFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lUX01FRElBX1NUUkVBTV9TUkMob2Jq
ZWN0KTsKICAgICBhdXRvKiBwcml2ID0gc2VsZi0+cHJpdjsKIAotICAgIHByaXYtPm1lZGlhU3Ry
ZWFtVHJhY2tPYnNlcnZlciA9IG1ha2VVbmlxdWU8V2ViS2l0TWVkaWFTdHJlYW1UcmFja09ic2Vy
dmVyPihHU1RfRUxFTUVOVF9DQVNUKHNlbGYpKTsKICAgICBwcml2LT5tZWRpYVN0cmVhbU9ic2Vy
dmVyID0gbWFrZVVuaXF1ZTxXZWJLaXRNZWRpYVN0cmVhbU9ic2VydmVyPihHU1RfRUxFTUVOVF9D
QVNUKHNlbGYpKTsKICAgICBwcml2LT5mbG93Q29tYmluZXIgPSBHVW5pcXVlUHRyPEdzdEZsb3dD
b21iaW5lcj4oZ3N0X2Zsb3dfY29tYmluZXJfbmV3KCkpOwogCkBAIC0zNTcsMzcgKzM5MCwxMCBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0NvbnN0cnVjdGVkKEdPYmplY3QqIG9i
amVjdCkKICAgICBBU1NFUlQoZ19vYmplY3RfaXNfZmxvYXRpbmcoc2VsZikpOwogfQogCi1zdGF0
aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1JlbW92ZVRyYWNrT2JzZXJ2ZXIoV2ViS2l0TWVk
aWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykKLXsKLSAg
ICBhdXRvKiBwcml2ID0gc2VsZi0+cHJpdjsKLSAgICBzd2l0Y2ggKHRyYWNrLnR5cGUoKSkgewot
ICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86Ci0gICAgICAgIHRyYWNr
LnNvdXJjZSgpLnJlbW92ZVZpZGVvU2FtcGxlT2JzZXJ2ZXIoKnByaXYtPm1lZGlhU3RyZWFtVHJh
Y2tPYnNlcnZlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZTo6QXVkaW86Ci0gICAgICAgIHRyYWNrLnNvdXJjZSgpLnJlbW92ZUF1ZGlvU2FtcGxl
T2JzZXJ2ZXIoKnByaXYtPm1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHRyYWNrLnJlbW92ZU9ic2VydmVyKCpwcml2
LT5tZWRpYVN0cmVhbVRyYWNrT2JzZXJ2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBzdG9wT2JzZXJ2
aW5nVHJhY2tzKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmKQotewotICAgIEdTVF9PQkpFQ1Rf
TE9DSyhzZWxmKTsKLSAgICBhdXRvKiBwcml2ID0gc2VsZi0+cHJpdjsKLSAgICBmb3IgKGF1dG8m
IHRyYWNrIDogcHJpdi0+dHJhY2tzKQotICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1JlbW92
ZVRyYWNrT2JzZXJ2ZXIoc2VsZiwgKnRyYWNrKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzZWxm
KTsKLX0KLQogc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNEaXNwb3NlKEdPYmplY3Qq
IG9iamVjdCkKIHsKICAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiA9IFdFQktJVF9NRURJ
QV9TVFJFQU1fU1JDKG9iamVjdCk7CiAKLSAgICBzdG9wT2JzZXJ2aW5nVHJhY2tzKHNlbGYpOwot
CiAgICAgR1NUX09CSkVDVF9MT0NLKHNlbGYpOwogICAgIGF1dG8qIHByaXYgPSBzZWxmLT5wcml2
OwogICAgIGlmIChwcml2LT5zdHJlYW0pIHsKQEAgLTQwMiwxNCArNDA4LDI0IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiBzdGF0aWMg
R3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2Via2l0TWVkaWFTdHJlYW1TcmNDaGFuZ2VTdGF0ZShHc3RF
bGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQogewogICAgIEdTVF9E
RUJVR19PQkpFQ1QoZWxlbWVudCwgIiVzIiwgZ3N0X3N0YXRlX2NoYW5nZV9nZXRfbmFtZSh0cmFu
c2l0aW9uKSk7CisgICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYgPSBXRUJLSVRfTUVESUFf
U1RSRUFNX1NSQyhlbGVtZW50KTsKIAotICAgIGlmICh0cmFuc2l0aW9uID09IEdTVF9TVEFURV9D
SEFOR0VfUEFVU0VEX1RPX1JFQURZKQotICAgICAgICBzdG9wT2JzZXJ2aW5nVHJhY2tzKFdFQktJ
VF9NRURJQV9TVFJFQU1fU1JDKGVsZW1lbnQpKTsKKyAgICBpZiAodHJhbnNpdGlvbiA9PSBHU1Rf
U1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSkgeworICAgICAgICBHU1RfT0JKRUNUX0xPQ0so
c2VsZik7CisgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IHNlbGYtPnByaXYtPnNvdXJjZXMpCisg
ICAgICAgICAgICBpdGVtLT5zdG9wT2JzZXJ2aW5nKCk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKHNlbGYpOworICAgIH0KIAogICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJlc3VsdCA9IEdT
VF9FTEVNRU5UX0NMQVNTKHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3BhcmVudF9jbGFzcyktPmNo
YW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKIAotICAgIGlmICh0cmFuc2l0aW9uID09
IEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEKQorICAgIGlmICh0cmFuc2l0aW9uID09
IEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEKSB7CisgICAgICAgIEdTVF9PQkpFQ1Rf
TE9DSyhzZWxmKTsKKyAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogc2VsZi0+cHJpdi0+c291cmNl
cykKKyAgICAgICAgICAgIGl0ZW0tPnN0YXJ0T2JzZXJ2aW5nKCk7CisgICAgICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNlbGYpOwogICAgICAgICByZXN1bHQgPSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BS
RVJPTEw7CisgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ0NSwxMiArNDYxLDM5
IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdE1lZGlhU3RyZWFtU3JjQ2hhaW4oR3N0UGFk
KiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRQYWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMq
IHNlbGYsIEdzdFBhZCogdGFyZ2V0LCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGUs
IEdSZWZQdHI8R3N0VGFnTGlzdD4mJiB0YWdzLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHNv
dXJjZVR5cGUpCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xs
ZWN0aW9uKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmKQogeworICAgIGF1dG8qIHByaXYgPSBz
ZWxmLT5wcml2OworCisgICAgR1NUX09CSkVDVF9MT0NLKHNlbGYpOworICAgIGlmIChwcml2LT5z
dHJlYW0gJiYgKCFwcml2LT5zdHJlYW0tPmFjdGl2ZSgpIHx8ICFwcml2LT5zdHJlYW0tPmhhc1Ry
YWNrcygpKSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzZWxmKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8gdXBzdHJlYW1JZCA9IHByaXYtPnN0cmVhbSA/IHByaXYt
PnN0cmVhbS0+aWQoKSA6IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICBwcml2LT5z
dHJlYW1Db2xsZWN0aW9uID0gYWRvcHRHUmVmKGdzdF9zdHJlYW1fY29sbGVjdGlvbl9uZXcodXBz
dHJlYW1JZC5hc2NpaSgpLmRhdGEoKSkpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBwcml2LT50
cmFja3MpIHsKKyAgICAgICAgaWYgKCF0cmFjay0+aXNBY3RpdmUoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbShwcml2LT5z
dHJlYW1Db2xsZWN0aW9uLmdldCgpLCB3ZWJraXRNZWRpYVN0cmVhbU5ldyh0cmFjay5nZXQoKSkp
OworICAgIH0KKworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOworCisgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAiUG9zdGluZyBzdHJlYW0gY29sbGVjdGlvbiIpOworICAgIGdzdF9lbGVt
ZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdf
c3RyZWFtX2NvbGxlY3Rpb24oR1NUX09CSkVDVF9DQVNUKHNlbGYpLCBwcml2LT5zdHJlYW1Db2xs
ZWN0aW9uLmdldCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRk
UGFkKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RQYWQqIHRhcmdldCwgR3N0U3RhdGlj
UGFkVGVtcGxhdGUqIHBhZFRlbXBsYXRlLCBHUmVmUHRyPEdzdFRhZ0xpc3Q+JiYgdGFncywgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlLCBjb25zdCBTdHJpbmcmIHBhZE5hbWUp
Cit7CisgICAgQVNTRVJUKHNvdXJjZVR5cGUgIT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
Tm9uZSk7CisgICAgaWYgKHNvdXJjZVR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiJXMg
R2hvc3RpbmcgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nKEdT
VF9PQkpFQ1RfQ0FTVChzZWxmKSksIHRhcmdldCk7CiAKLSAgICBjb25zdCBjaGFyKiBwYWROYW1l
ID0gc291cmNlVHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA/ICJhdWRp
b19zcmMiIDogInZpZGVvX3NyYyI7Ci0gICAgYXV0byogZ2hvc3RQYWQgPSB3ZWJraXRHc3RHaG9z
dFBhZEZyb21TdGF0aWNUZW1wbGF0ZShwYWRUZW1wbGF0ZSwgcGFkTmFtZSwgdGFyZ2V0KTsKKyAg
ICBhdXRvKiBnaG9zdFBhZCA9IHdlYmtpdEdzdEdob3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKHBh
ZFRlbXBsYXRlLCBwYWROYW1lLmFzY2lpKCkuZGF0YSgpLCB0YXJnZXQpOwogICAgIGdzdF9wYWRf
c2V0X2FjdGl2ZShnaG9zdFBhZCwgVFJVRSk7CiAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1Rf
RUxFTUVOVF9DQVNUKHNlbGYpLCBnaG9zdFBhZCk7CiAKQEAgLTQ2MSwyNyArNTA0LDE0IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKFdlYktpdE1lZGlhU3RyZWFtU3Jj
KiBzZWxmLCBHc3RQYWQqIHRhcmdlCiAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHRhcmdldCwgZ3N0
X2V2ZW50X25ld190YWcodGFncy5sZWFrUmVmKCkpKTsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0
TWVkaWFTdHJlYW1TcmNSZW1vdmVQYWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIGNvbnN0
IGNoYXIqIHBhZE5hbWUpCi17Ci0gICAgYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgcGFkTmFtZSkpOwotICAgIGlm
ICghcGFkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByb3h5UGFkID0gYWRvcHRHUmVm
KEdTVF9QQURfQ0FTVChnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbChHU1RfUFJPWFlfUEFEKHBh
ZC5nZXQoKSkpKSk7Ci0gICAgaWYgKHByb3h5UGFkKQotICAgICAgICBnc3RfZmxvd19jb21iaW5l
cl9yZW1vdmVfcGFkKHNlbGYtPnByaXYtPmZsb3dDb21iaW5lci5nZXQoKSwgcHJveHlQYWQuZ2V0
KCkpOwotCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlKHBhZC5nZXQoKSwgRkFMU0UpOwotICAgIGdz
dF9lbGVtZW50X3JlbW92ZV9wYWQoR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgcGFkLmdldCgpKTsK
LX0KLQogc3RydWN0IFByb2JlRGF0YSB7Ci0gICAgUHJvYmVEYXRhKEdzdEVsZW1lbnQqIGVsZW1l
bnQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSwgR1JlZlB0cjxHc3RUYWdMaXN0
PiYmIHRhZ3MsIGNvbnN0IGNoYXIqIHRyYWNrSWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUg
c291cmNlVHlwZSkKKyAgICBQcm9iZURhdGEoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGlj
UGFkVGVtcGxhdGUqIHBhZFRlbXBsYXRlLCBHUmVmUHRyPEdzdFRhZ0xpc3Q+JiYgdGFncywgY29u
c3QgY2hhciogdHJhY2tJZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlLCBj
b25zdCBTdHJpbmcmIHBhZE5hbWUpCiAgICAgICAgIDogZWxlbWVudChlbGVtZW50KQogICAgICAg
ICAsIHBhZFRlbXBsYXRlKHBhZFRlbXBsYXRlKQogICAgICAgICAsIHRhZ3MoV1RGTW92ZSh0YWdz
KSkKICAgICAgICAgLCB0cmFja0lkKGdfc3RyZHVwKHRyYWNrSWQpKQogICAgICAgICAsIHNvdXJj
ZVR5cGUoc291cmNlVHlwZSkKKyAgICAgICAgLCBwYWROYW1lKHBhZE5hbWUpCiAgICAgewogICAg
IH0KIApAQCAtNDkwLDYgKzUyMCw3IEBAIHN0cnVjdCBQcm9iZURhdGEgewogICAgIEdSZWZQdHI8
R3N0VGFnTGlzdD4gdGFnczsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHRyYWNrSWQ7CiAgICAgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlOworICAgIGNvbnN0IFN0cmluZyYgcGFk
TmFtZTsKIH07CiAKIHN0YXRpYyBHc3RQYWRQcm9iZVJldHVybiB3ZWJraXRNZWRpYVN0cmVhbVNy
Y1BhZFByb2JlQ2IoR3N0UGFkKiBwYWQsIEdzdFBhZFByb2JlSW5mbyogaW5mbywgUHJvYmVEYXRh
KiBkYXRhKQpAQCAtNTExLDcgKzU0Miw3IEBAIHN0YXRpYyBHc3RQYWRQcm9iZVJldHVybiB3ZWJr
aXRNZWRpYVN0cmVhbVNyY1BhZFByb2JlQ2IoR3N0UGFkKiBwYWQsIEdzdFBhZFByb2JlCiAgICAg
ICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQoc3RyZWFtU3RhcnQsIDEpOwogICAgICAgICBnc3Rf
cGFkX3B1c2hfZXZlbnQocGFkLCBzdHJlYW1TdGFydCk7CiAKLSAgICAgICAgd2Via2l0TWVkaWFT
dHJlYW1TcmNBZGRQYWQoc2VsZiwgcGFkLCBkYXRhLT5wYWRUZW1wbGF0ZSwgV1RGTW92ZShkYXRh
LT50YWdzKSwgZGF0YS0+c291cmNlVHlwZSk7CisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3Jj
QWRkUGFkKHNlbGYsIHBhZCwgZGF0YS0+cGFkVGVtcGxhdGUsIFdURk1vdmUoZGF0YS0+dGFncyks
IGRhdGEtPnNvdXJjZVR5cGUsIGRhdGEtPnBhZE5hbWUpOwogICAgICAgICBjYWxsT25NYWluVGhy
ZWFkQW5kV2FpdChbZWxlbWVudCA9IGRhdGEtPmVsZW1lbnRdIHsKICAgICAgICAgICAgIHdlYmtp
dE1lZGlhU3RyZWFtU3JjUG9zdFN0cmVhbUNvbGxlY3Rpb24oV0VCS0lUX01FRElBX1NUUkVBTV9T
UkMoZWxlbWVudC5nZXQoKSkpOwogICAgICAgICB9KTsKQEAgLTUyNCwxMDAgKzU1NSw1MyBAQCBz
dGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gd2Via2l0TWVkaWFTdHJlYW1TcmNQYWRQcm9iZUNiKEdz
dFBhZCogcGFkLCBHc3RQYWRQcm9iZQogICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwogfQog
Ci1zdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVwU3JjKFdlYktpdE1lZGlhU3Ry
ZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogdHJhY2ssIEdzdEVsZW1lbnQq
IGVsZW1lbnQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSwgYm9vbCBvbmx5VHJh
Y2spCit2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soV2ViS2l0TWVkaWFTdHJlYW1T
cmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiB0cmFjaywgYm9vbCBvbmx5VHJhY2sp
CiB7CiAgICAgY29uc3QgY2hhciogc291cmNlVHlwZSA9ICJ1bmtub3duIjsKLSAgICBzd2l0Y2gg
KHRyYWNrLT5zb3VyY2UoKS50eXBlKCkpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGU6OkF1ZGlvOgorICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworICAgIEdzdFN0YXRpY1Bh
ZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSA9IG51bGxwdHI7CisgICAgaWYgKHRyYWNrLT50eXBlKCkg
PT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pIHsKKyAgICAgICAgcGFkVGVtcGxh
dGUgPSAmYXVkaW9TcmNUZW1wbGF0ZTsKICAgICAgICAgc291cmNlVHlwZSA9ICJhdWRpbyI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW86
CisgICAgICAgIGNvdW50ZXIgPSBzZWxmLT5wcml2LT5hdWRpb1BhZENvdW50ZXIuZXhjaGFuZ2VB
ZGQoMSk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGU6OlZpZGVvKSB7CisgICAgICAgIHBhZFRlbXBsYXRlID0gJnZpZGVvU3JjVGVtcGxh
dGU7CiAgICAgICAgIHNvdXJjZVR5cGUgPSAidmlkZW8iOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6Ok5vbmU6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBjb3VudGVyID0gc2VsZi0+cHJpdi0+dmlkZW9QYWRDb3VudGVy
LmV4Y2hhbmdlQWRkKDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVD
VChzZWxmLCAiVW5zdXBwb3J0ZWQgdHJhY2sgdHlwZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHRy
YWNrLT50eXBlKCkpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFN0cmluZ0J1aWxk
ZXIgcGFkTmFtZTsKKyAgICBwYWROYW1lLmFwcGVuZChzb3VyY2VUeXBlKTsKKyAgICBwYWROYW1l
LmFwcGVuZCgiX3NyYyIpOworICAgIHBhZE5hbWUuYXBwZW5kKGNvdW50ZXIpOworCiAgICAgR1NU
X0RFQlVHX09CSkVDVChzZWxmLCAiU2V0dXAgJXMgc291cmNlIGZvciB0cmFjayAlcywgb25seSB0
cmFjazogJXMiLCBzb3VyY2VUeXBlLCB0cmFjay0+aWQoKS51dGY4KCkuZGF0YSgpLCBib29sRm9y
UHJpbnRpbmcob25seVRyYWNrKSk7CisKKyAgICBhdXRvIHNvdXJjZSA9IG1ha2VVbmlxdWU8SW50
ZXJuYWxTb3VyY2U+KEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksICp0cmFjaywgcGFkTmFtZS50b1N0
cmluZygpKTsKKyAgICBhdXRvKiBlbGVtZW50ID0gc291cmNlLT5nZXQoKTsKICAgICBnc3RfYmlu
X2FkZChHU1RfQklOX0NBU1Qoc2VsZiksIGVsZW1lbnQpOwogCiAgICAgYXV0byBwYWQgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNyYyIpKTsKICAgICBh
dXRvIHRhZ3MgPSBtZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUdldFRhZ3ModHJhY2spOwogICAgIGlm
ICghb25seVRyYWNrKSB7Ci0gICAgICAgIGF1dG8qIGRhdGEgPSBuZXcgUHJvYmVEYXRhKEdTVF9F
TEVNRU5UX0NBU1Qoc2VsZiksIHBhZFRlbXBsYXRlLCBXVEZNb3ZlKHRhZ3MpLCB0cmFjay0+aWQo
KS51dGY4KCkuZGF0YSgpLCB0cmFjay0+c291cmNlKCkudHlwZSgpKTsKKyAgICAgICAgYXV0byog
ZGF0YSA9IG5ldyBQcm9iZURhdGEoR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgcGFkVGVtcGxhdGUs
IFdURk1vdmUodGFncyksIHRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCksIHRyYWNrLT5zb3VyY2Uo
KS50eXBlKCksIHNvdXJjZS0+cGFkTmFtZSgpKTsKICAgICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUo
cGFkLmdldCgpLCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgcmVpbnRlcnBy
ZXRfY2FzdDxHc3RQYWRQcm9iZUNhbGxiYWNrPih3ZWJraXRNZWRpYVN0cmVhbVNyY1BhZFByb2Jl
Q2IpLCBkYXRhLCBbXShncG9pbnRlciBkYXRhKSB7CiAgICAgICAgICAgICBkZWxldGUgcmVpbnRl
cnByZXRfY2FzdDxQcm9iZURhdGEqPihkYXRhKTsKICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgZ3N0X3BhZF9zZXRfYWN0aXZlKHBhZC5nZXQoKSwgVFJVRSk7Ci0gICAgICAgIHdl
YmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKHNlbGYsIHBhZC5nZXQoKSwgcGFkVGVtcGxhdGUsIFdU
Rk1vdmUodGFncyksIHRyYWNrLT5zb3VyY2UoKS50eXBlKCkpOworICAgICAgICB3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFBhZChzZWxmLCBwYWQuZ2V0KCksIHBhZFRlbXBsYXRlLCBXVEZNb3ZlKHRh
Z3MpLCB0cmFjay0+c291cmNlKCkudHlwZSgpLCBzb3VyY2UtPnBhZE5hbWUoKSk7CiAgICAgfQot
Ci0gICAgYXV0byogcHJpdiA9IHNlbGYtPnByaXY7Ci0gICAgdHJhY2stPmFkZE9ic2VydmVyKCpw
cml2LT5tZWRpYVN0cmVhbVRyYWNrT2JzZXJ2ZXIpOwotICAgIHN3aXRjaCAodHJhY2stPnR5cGUo
KSkgewotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86Ci0gICAgICAg
IHRyYWNrLT5zb3VyY2UoKS5hZGRBdWRpb1NhbXBsZU9ic2VydmVyKCpwcml2LT5tZWRpYVN0cmVh
bVRyYWNrT2JzZXJ2ZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvOgotICAgICAgICB0cmFjay0+c291cmNlKCkuYWRkVmlkZW9TYW1w
bGVPYnNlcnZlcigqcHJpdi0+bWVkaWFTdHJlYW1UcmFja09ic2VydmVyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpOb25lOgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRl
X3dpdGhfcGFyZW50KGVsZW1lbnQpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVh
bVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmKQotewot
ICAgIGF1dG8qIHByaXYgPSBzZWxmLT5wcml2OwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNlbGYp
OwotICAgIGlmIChwcml2LT5zdHJlYW0gJiYgKCFwcml2LT5zdHJlYW0tPmFjdGl2ZSgpIHx8ICFw
cml2LT5zdHJlYW0tPmhhc1RyYWNrcygpKSkgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
ZWxmKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gdXBzdHJlYW1JZCA9IHBy
aXYtPnN0cmVhbSA/IHByaXYtPnN0cmVhbS0+aWQoKSA6IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJp
bmcoKTsKLSAgICBwcml2LT5zdHJlYW1Db2xsZWN0aW9uID0gYWRvcHRHUmVmKGdzdF9zdHJlYW1f
Y29sbGVjdGlvbl9uZXcodXBzdHJlYW1JZC5hc2NpaSgpLmRhdGEoKSkpOwotICAgIGZvciAoYXV0
byYgdHJhY2sgOiBwcml2LT50cmFja3MpIHsKLSAgICAgICAgaWYgKCF0cmFjay0+aXNBY3RpdmUo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25f
YWRkX3N0cmVhbShwcml2LT5zdHJlYW1Db2xsZWN0aW9uLmdldCgpLCB3ZWJraXRNZWRpYVN0cmVh
bU5ldyh0cmFjay5nZXQoKSkpOwotICAgIH0KLQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYp
OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiUG9zdGluZyBzdHJlYW0gY29sbGVjdGlv
biIpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNlbGYp
LCBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb24oR1NUX09CSkVDVF9DQVNUKHNlbGYp
LCBwcml2LT5zdHJlYW1Db2xsZWN0aW9uLmdldCgpKSk7Ci19Ci0KLXZvaWQgd2Via2l0TWVkaWFT
dHJlYW1TcmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUqIHRyYWNrLCBib29sIG9ubHlUcmFjaykKLXsKLSAgICBhdXRvKiBwcml2ID0g
c2VsZi0+cHJpdjsKLSAgICBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlOjpBdWRpbykgewotICAgICAgICBwcml2LT5hdWRpb1NyYy5lbXBsYWNlKHRyYWNrLT5p
c0NhcHR1cmVUcmFjaygpLCB0cmFjay0+dHlwZSgpKTsKLSAgICAgICAgd2Via2l0TWVkaWFTdHJl
YW1TcmNTZXR1cFNyYyhzZWxmLCB0cmFjaywgcHJpdi0+YXVkaW9TcmMtPmdldCgpLCAmYXVkaW9T
cmNUZW1wbGF0ZSwgb25seVRyYWNrKTsKLSAgICB9IGVsc2UgaWYgKHRyYWNrLT50eXBlKCkgPT0g
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pIHsKLSAgICAgICAgcHJpdi0+dmlkZW9T
cmMuZW1wbGFjZSh0cmFjay0+aXNDYXB0dXJlVHJhY2soKSwgdHJhY2stPnR5cGUoKSk7Ci0gICAg
ICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0dXBTcmMoc2VsZiwgdHJhY2ssIHByaXYtPnZpZGVv
U3JjLT5nZXQoKSwgJnZpZGVvU3JjVGVtcGxhdGUsIG9ubHlUcmFjayk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIEdTVF9JTkZPX09CSkVDVChzZWxmLCAiVW5zdXBwb3J0ZWQgdHJhY2sgdHlwZTogJWQi
LCBzdGF0aWNfY2FzdDxpbnQ+KHRyYWNrLT50eXBlKCkpKTsKIAorICAgIHNvdXJjZS0+c3RhcnRP
YnNlcnZpbmcoKTsKKyAgICBzZWxmLT5wcml2LT5zb3VyY2VzLmFwcGVuZChXVEZNb3ZlKHNvdXJj
ZSkpOwogICAgIHNlbGYtPnByaXYtPnRyYWNrcy5hcHBlbmQodHJhY2spOwogfQogCi1zdGF0aWMg
dm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1JlbW92ZVRyYWNrQnlUeXBlKFdlYktpdE1lZGlhU3Ry
ZWFtU3JjKiBzZWxmLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHRyYWNrVHlwZSkKLXsKLSAg
ICBpZiAodHJhY2tUeXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvKQotICAg
ICAgICBzZWxmLT5wcml2LT5hdWRpb1NyYy5yZXNldCgpOwotICAgIGVsc2UgaWYgKHRyYWNrVHlw
ZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbykKLSAgICAgICAgc2VsZi0+cHJp
di0+dmlkZW9TcmMucmVzZXQoKTsKLSAgICBlbHNlCi0gICAgICAgIEdTVF9JTkZPX09CSkVDVChz
ZWxmLCAiVW5zdXBwb3J0ZWQgdHJhY2sgdHlwZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHRyYWNr
VHlwZSkpOwotfQotCiB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0U3RyZWFtKFdlYktpdE1l
ZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVhbVByaXZhdGUqIHN0cmVhbSwgYm9vbCBpc1Zp
ZGVvUGxheWVyKQogewogICAgIEFTU0VSVChXRUJLSVRfSVNfTUVESUFfU1RSRUFNX1NSQyhzZWxm
KSk7CkBAIC02MzMsMjUgKzYxNywxMyBAQCB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0U3Ry
ZWFtKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVhbVByaXZhdAogICAgICAg
ICB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKHNlbGYsIHRyYWNrLmdldCgpLCBvbmx5VHJh
Y2spOwogICAgIH0KICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9u
KHNlbGYpOwotICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVOVF9DQVNUKHNl
bGYpKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoVmlkZW9TYW1w
bGUoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIEdzdFNhbXBsZSogc2FtcGxlKQotewotICAg
IGlmIChzZWxmLT5wcml2LT52aWRlb1NyYykKLSAgICAgICAgc2VsZi0+cHJpdi0+dmlkZW9TcmMt
PnB1c2hTYW1wbGUoc2FtcGxlKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1T
cmNQdXNoQXVkaW9TYW1wbGUoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIGNvbnN0IEdSZWZQ
dHI8R3N0U2FtcGxlPiYgc2FtcGxlKQotewotICAgIGlmIChzZWxmLT5wcml2LT5hdWRpb1NyYykK
LSAgICAgICAgc2VsZi0+cHJpdi0+YXVkaW9TcmMtPnB1c2hTYW1wbGUoc2FtcGxlLmdldCgpKTsK
IH0KIAotc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNUcmFja0VuZGVkKFdlYktpdE1l
ZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2spCitzdGF0
aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1RyYWNrRW5kZWQoV2ViS2l0TWVkaWFTdHJlYW1T
cmMqIHNlbGYsIEludGVybmFsU291cmNlJiBzb3VyY2UpCiB7CiAgICAgR1JlZlB0cjxHc3RQYWQ+
IHBhZDsKIAorICAgIGF1dG8mIHRyYWNrID0gc291cmNlLnRyYWNrKCk7CiAgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAiVHJhY2sgJXMgZW5kZWQiLCB0cmFjay5sYWJlbCgpLnV0ZjgoKS5kYXRh
KCkpOwogICAgIEdTVF9PQkpFQ1RfTE9DSyhzZWxmKTsKICAgICBHc3RFbGVtZW50KiBlbGVtZW50
ID0gR1NUX0VMRU1FTlRfQ0FTVChzZWxmKTsKQEAgLTY4NCw2ICs2NTYsMzYgQEAgc3RhdGljIHZv
aWQgd2Via2l0TWVkaWFTdHJlYW1TcmNUcmFja0VuZGVkKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBz
ZWxmLCBNZWRpYVN0cmUKICAgICBhdXRvIHRhZ3MgPSBtZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUdl
dFRhZ3MoJnRyYWNrKTsKICAgICBnc3RfcGFkX3B1c2hfZXZlbnQocGFkLmdldCgpLCBnc3RfZXZl
bnRfbmV3X3RhZyh0YWdzLmxlYWtSZWYoKSkpOwogICAgIGdzdF9wYWRfcHVzaF9ldmVudChwYWQu
Z2V0KCksIGdzdF9ldmVudF9uZXdfZW9zKCkpOworCisgICAgR1NUX1NUQVRFX0xPQ0soR1NUX0VM
RU1FTlRfQ0FTVChzZWxmKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZShzb3Vy
Y2UuZ2V0KCksIHRydWUpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShzb3VyY2UuZ2V0KCks
IEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1Qoc2VsZiks
IHNvdXJjZS5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZShzb3VyY2Uu
Z2V0KCksIGZhbHNlKTsKKyAgICBHU1RfU1RBVEVfVU5MT0NLKEdTVF9FTEVNRU5UX0NBU1Qoc2Vs
ZikpOworCisgICAgYXV0byBwcm94eVBhZCA9IGFkb3B0R1JlZihHU1RfUEFEX0NBU1QoZ3N0X3By
b3h5X3BhZF9nZXRfaW50ZXJuYWwoR1NUX1BST1hZX1BBRChwYWQuZ2V0KCkpKSkpOworICAgIGlm
IChwcm94eVBhZCkKKyAgICAgICAgZ3N0X2Zsb3dfY29tYmluZXJfcmVtb3ZlX3BhZChzZWxmLT5w
cml2LT5mbG93Q29tYmluZXIuZ2V0KCksIHByb3h5UGFkLmdldCgpKTsKKworICAgIGdzdF9wYWRf
c2V0X2FjdGl2ZShwYWQuZ2V0KCksIEZBTFNFKTsKKyAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFk
KEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksIHBhZC5nZXQoKSk7Cit9CisKK3ZvaWQgSW50ZXJuYWxT
b3VyY2U6OnRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKQoreworICAgIGlmICht
X3BhcmVudCkKKyAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNUcmFja0VuZGVkKFdFQktJVF9N
RURJQV9TVFJFQU1fU1JDKG1fcGFyZW50KSwgKnRoaXMpOworCisgICAgc3RvcE9ic2VydmluZygp
OworfQorCit2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQ29uZmlndXJlQXVkaW9UcmFja3MoV2Vi
S2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIGZsb2F0IHZvbHVtZSwgYm9vbCBpc011dGVkLCBib29s
IGlzUGxheWluZykKK3sKKyAgICBmb3IgKGF1dG8mIHNvdXJjZSA6IHNlbGYtPnByaXYtPnNvdXJj
ZXMpIHsKKyAgICAgICAgaWYgKHNvdXJjZS0+dHJhY2soKS50eXBlKCkgPT0gUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZTo6QXVkaW8pCisgICAgICAgICAgICBzb3VyY2UtPmNvbmZpZ3VyZUF1ZGlv
VHJhY2sodm9sdW1lLCBpc011dGVkLCBpc1BsYXlpbmcpOworICAgIH0KIH0KIAogR3N0RWxlbWVu
dCogd2Via2l0TWVkaWFTdHJlYW1TcmNOZXcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuaAppbmRleCBiZjFjMDMyN2JiNDIwNzEyOWZkZGYwYTNhMmQ3
NzY4MDA2ODc0YWFmLi5lNDBlZjYxOWE3OTA2OTM5MjljMjdjMzRkYjQwNDljZmNmZjBlYzFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaApAQCAt
MzAsOCArMzAsNiBAQCBjbGFzcyBNZWRpYVN0cmVhbVByaXZhdGU7CiBjbGFzcyBNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZTsKIH0KIAotR19CRUdJTl9ERUNMUwotCiAjZGVmaW5lIFdFQktJVF9NRURJ
QV9UUkFDS19UQUdfV0lEVEggIndlYmtpdC1tZWRpYS1zdHJlYW0td2lkdGgiCiAjZGVmaW5lIFdF
QktJVF9NRURJQV9UUkFDS19UQUdfSEVJR0hUICJ3ZWJraXQtbWVkaWEtc3RyZWFtLWhlaWdodCIK
ICNkZWZpbmUgV0VCS0lUX01FRElBX1RSQUNLX1RBR19LSU5EICJ3ZWJraXQtbWVkaWEtc3RyZWFt
LWtpbmQiCkBAIC01NCwxMCArNTIsOSBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhU3RyZWFtU3JjQ2xh
c3MgewogICAgIEdzdEJpbkNsYXNzIHBhcmVudENsYXNzOwogfTsKIAorR3N0RWxlbWVudCogd2Vi
a2l0TWVkaWFTdHJlYW1TcmNOZXcoKTsKIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNTZXRTdHJl
YW0oV2ViS2l0TWVkaWFTdHJlYW1TcmMqLCBXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGUqLCBi
b29sIGlzVmlkZW9QbGF5ZXIpOwogdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKFdl
YktpdE1lZGlhU3RyZWFtU3JjKiwgV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqLCBi
b29sIG9ubHlUcmFjayk7Ci1Hc3RFbGVtZW50KiB3ZWJraXRNZWRpYVN0cmVhbVNyY05ldygpOwot
Ci1HX0VORF9ERUNMUwordm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0NvbmZpZ3VyZUF1ZGlvVHJh
Y2tzKFdlYktpdE1lZGlhU3RyZWFtU3JjKiwgZmxvYXQgdm9sdW1lLCBib29sIGlzTXV0ZWQsIGJv
b2wgaXNQbGF5aW5nKTsKIAogI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3MTI1ZTMzNDQ3MTExZWE4NTg5YjE3
NzliYWQyODhhNjExNGIxMDc2Li41NzJlY2UxZjQ2MzE5MWJjYTdmNzQxODE5ZWRjOTY3NDI2NzEx
NGIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDQtMTYgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdW01lZGlhU3RyZWFt
XSBmYXN0L21lZGlhc3RyZWFtL3BsYXktbmV3bHktYWRkZWQtYXVkaW8tdHJhY2suaHRtbCBpcyBm
YWlsaW5nIHNpbmNlIGFkZGVkIGluIHIyNjAzODAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDg0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBmbGFreW5lc3MgZnJvbSB0ZXN0IGFuZCB1bmZs
YWcgaXQgb24gR1RLLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9wbGF5LW5ld2x5LWFk
ZGVkLWF1ZGlvLXRyYWNrLmh0bWw6IGFkZFRyYWNrIG1pZ2h0IGhhdmUgYXN5bmNocm9ub3VzCisg
ICAgICAgIGVmZmVjdHMsIHNvIGl0J3MgYmV0dGVyIHRvIHJlbHkgb24gdGhlIHRyYWNrYWRkZWQg
ZXZlbnQgd2hlbiB0ZXN0aW5nIGl0cyByZXN1bHQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnM6CisKIDIwMjEtMDQtMTYgIE1hbnVlbCBSZWdvIENhc2Fzbm92YXMgIDxy
ZWdvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW3NlbGVjdG9yc10gVXBkYXRlIDpmb2N1cy12aXNp
YmxlIHRlc3RzIGZyb20gV1BUCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL3BsYXktbmV3bHktYWRkZWQtYXVkaW8tdHJhY2suaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vcGxheS1uZXdseS1hZGRlZC1hdWRpby10cmFjay5odG1sCmluZGV4IDdmZTll
MmE2N2FhM2JlMTJhMTU2MTllMTdiZTY2OWM5NDUzZGQ4ZjcuLjNhMzVkMzk5ZDQyYjBjNDYxY2E5
NGQ0Y2RmMjJlMTExMjA3MTY3MmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFz
dHJlYW0vcGxheS1uZXdseS1hZGRlZC1hdWRpby10cmFjay5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvbWVkaWFzdHJlYW0vcGxheS1uZXdseS1hZGRlZC1hdWRpby10cmFjay5odG1sCkBAIC0x
MSwxMSArMTEsMTQgQEAgcHJvbWlzZV90ZXN0KGFzeW5jICgpID0+IHsKIAogICAgIGF3YWl0IHZp
ZGVvLnBsYXkoKTsKIAorICAgIHZpZGVvLnNyY09iamVjdC5vbnRyYWNrYWRkZWQgPSAoKSA9PiB7
CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgYXNzZXJ0X3RydWUo
aW50ZXJuYWxzLnNob3VsZEF1ZGlvVHJhY2tQbGF5KHZpZGVvLmF1ZGlvVHJhY2tzWzBdKSk7Cisg
ICAgfTsKKwogICAgIGxldCBzdHJlYW0yID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5n
ZXRVc2VyTWVkaWEoeyBhdWRpbyA6IHRydWUgfSk7CiAgICAgdmlkZW8uc3JjT2JqZWN0LmFkZFRy
YWNrKHN0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKVswXSk7Ci0KLSAgICBpZiAod2luZG93LmludGVy
bmFscykKLSAgICAgICAgYXNzZXJ0X3RydWUoaW50ZXJuYWxzLnNob3VsZEF1ZGlvVHJhY2tQbGF5
KHZpZGVvLmF1ZGlvVHJhY2tzWzBdKSk7CisgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9
PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwKSk7CiB9LCAiQWRkIGFuIGF1ZGlvIHRyYWNrIHdoaWxl
IHBsYXlpbmcgdmlkZW8iKTsKIAogcHJvbWlzZV90ZXN0KGFzeW5jICgpID0+IHsKQEAgLTI0LDEw
ICsyNywxMyBAQCBwcm9taXNlX3Rlc3QoYXN5bmMgKCkgPT4gewogCiAgICAgYXdhaXQgdmlkZW8u
cGxheSgpOwogCisgICAgdmlkZW8uc3JjT2JqZWN0Lm9udHJhY2thZGRlZCA9ICgpID0+IHsKKyAg
ICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShpbnRl
cm5hbHMuc2hvdWxkQXVkaW9UcmFja1BsYXkodmlkZW8uYXVkaW9UcmFja3NbMV0pKTsKKyAgICB9
OworCiAgICAgdmlkZW8uc3JjT2JqZWN0LmFkZFRyYWNrKHN0cmVhbS5nZXRBdWRpb1RyYWNrcygp
WzBdKTsKICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2
ZSwgNTApKTsKLSAgICBpZiAod2luZG93LmludGVybmFscykKLSAgICAgICAgYXNzZXJ0X3RydWUo
aW50ZXJuYWxzLnNob3VsZEF1ZGlvVHJhY2tQbGF5KHZpZGVvLmF1ZGlvVHJhY2tzWzFdKSk7CiB9
LCAiQWRkIGFuIGF1ZGlvIHRyYWNrIHdoaWxlIHBsYXlpbmcgYXVkaW8iKTsKICAgICAgICAgPC9z
Y3JpcHQ+CiAgICAgPC9oZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0
aW9ucwppbmRleCA3M2QyZjk5ZWFkZmExMzI5MmY3MzZjM2YxZjE0OWI4N2U5NGI2ZDdkLi40NDU2
MGMzNTBiYmZlMDI5YTYyODhkYjU5ZDdjZDhhYjkxOWUxMGIwIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTYxLDcgKzE2MSw2IEBAIHdlYmtpdC5vcmcv
Yi8yMTk1MzAgZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQtc2V0
Lmh0bWwgWyBGYWlsCiAKICMgR1N0cmVhbWVyIC0gR1RLLU9ubHkuIE1vc3QgR1N0cmVhbWVyIGlz
c3VlcyBwcm9iYWJseSB3aWxsIGdvIGluIHRoZSBnbGliIGV4cGVjdGF0aW9ucwogd2Via2l0Lm9y
Zy9iLzIxMDUyOCBtZWRpYS92aWRlby1zdXBwb3J0cy1mdWxsc2NyZWVuLmh0bWwgWyBQYXNzIF0K
LXdlYmtpdC5vcmcvYi8yMTA4NDAgZmFzdC9tZWRpYXN0cmVhbS9wbGF5LW5ld2x5LWFkZGVkLWF1
ZGlvLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBMYXlvdXQKIHdlYmtpdC5vcmcvYi8yMTg1
MTAgZmFzdC9kb20vUmFuZ2UvZ2V0Qm91bmRpbmdDbGllbnRSZWN0Lmh0bWwgWyBGYWlsdXJlIF0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426328</attachid>
            <date>2021-04-17 03:22:53 -0700</date>
            <delta_ts>2021-04-17 07:00:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210840-20210417032251.patch</filename>
            <type>text/plain</type>
            <size>46036</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjhiMmFjMjNkNTg2ODdk
NjNhM2E4NDA3M2RjNTVmZGEzMTI1MjRkMy4uODRiODEzNDkxMTRjOGQwMGI1YTlhNjMzMjQwMmQz
NGVhZGFhNjcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIxLTA0LTE3ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XVtNZWRpYVN0cmVhbV0gZmFzdC9tZWRpYXN0cmVhbS9wbGF5LW5ld2x5LWFkZGVkLWF1ZGlvLXRy
YWNrLmh0bWwgaXMgZmFpbGluZyBzaW5jZSBhZGRlZCBpbiByMjYwMzgwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA4NDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBYYWJpZXIgUm9kcmlndWV6LUNhbHZhci4KKworICAgICAgICBUaGUgdGVzdCB3YXMg
ZmFpbGluZyBtYWlubHkgYmVjYXVzZSBvdXIgbWVkaWFzdHJlYW1zcmMgR1N0cmVhbWVyIGVsZW1l
bnQgd2Fzbid0IGNyZWF0aW5nIHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTdHJlYW0gb2JqZWN0LiBUaGUgbWVkaWEgcGxheWVyIHNob3VsZCBwcm9wYWdh
dGUgaXRzCisgICAgICAgIHZvbHVtZS9tdXRlL2lzLXBsYXlpbmcgc3RhdGVzIHRvIHRoZSBzb3Vy
Y2UgZWxlbWVudC4gQW5kIGFsc28gdW50aWwgbm93IG91ciBtZWRpYXN0cmVhbXNyYworICAgICAg
ICBlbGVtZW50IHdhcyBoYW5kbGluZyBhdCBtb3N0IG9uZSBhdWRpbyB0cmFjayBhbmQgYXQgbW9z
dCBvbmUgYXVkaW8gdHJhY2ssIGJ1dCBpdCB0dXJucyBvdXQKKyAgICAgICAgbXVsdGlwbGUgYXVk
aW8gdHJhY2tzIGNhbiBiZSBhZGRlZCBhY3R1YWxseS4gU28gSSByZWZhY3RvcmVkIHRoZSBlbGVt
ZW50IGludGVybmFscworICAgICAgICBhY2NvcmRpbmdseS4gVGhlIEludGVybmFsU291cmNlIGlz
IG5vdyBkaXJlY3RseSBvYnNlcnZpbmcgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgUmVhbHRp
bWVNZWRpYVNvdXJjZSwgd2hpY2ggc2ltcGxpZmllZCBzb21lIGNvZGUuIE9ic2VydmluZyBpcyBh
bHNvIG5vdyBzdXNwZW5kZWQvcmVzdW1lZAorICAgICAgICBkZXBlbmRpbmcgb24gdGhlIGVsZW1l
bnQgc3RhdGUuCisKKyAgICAgICAgV2UgZG9uJ3QgaW1wbGVtZW50IGEgR1N0cmVhbWVyIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyIGNsYXNzIHlldCwgYmVjYXVzZSBhY3R1YWwKKyAgICAg
ICAgcmVuZGVyaW5nIGlzIHN0aWxsIHBlcmZvcm1lZCBmcm9tIHRoZSBXZWJQcm9jZXNzLCBzbyBl
YXJseSByZXR1cm5zIHdlcmUgYWRkZWQgaW4KKyAgICAgICAgQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVN0cmVhbSB0byBoYW5kbGUgdGhpcyBjYXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbmZpZ3VyZU1lZGlh
U3RyZWFtQXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzZXRWb2x1bWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6Y3JlYXRlUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c2V0
TG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06
OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3Ry
ZWFtOjpzZXRBdWRpb091dHB1dERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNr
UHJpdmF0ZU1lZGlhU3RyZWFtOjp2b2x1bWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6YXVkaW9TYW1wbGVzQXZhaWxhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OnN0YXJ0UmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c3RvcFJl
bmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06
OmNyZWF0ZU5ld1JlbmRlcmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAobWVkaWFTdHJl
YW1UcmFja1ByaXZhdGVHZXRUYWdzKToKKyAgICAgICAgKFdlYktpdE1lZGlhU3RyZWFtT2JzZXJ2
ZXI6OmRpZFJlbW92ZVRyYWNrKToKKyAgICAgICAgKHdlYmtpdE1lZGlhU3RyZWFtU3JjQ29uc3Ry
dWN0ZWQpOgorICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1TcmNEaXNwb3NlKToKKyAgICAgICAg
KHdlYmtpdE1lZGlhU3RyZWFtU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAod2Via2l0TWVkaWFT
dHJlYW1TcmNQb3N0U3RyZWFtQ29sbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVh
bVNyY0FkZFBhZCk6CisgICAgICAgIChQcm9iZURhdGE6OlByb2JlRGF0YSk6CisgICAgICAgICh3
ZWJraXRNZWRpYVN0cmVhbVNyY1BhZFByb2JlQ2IpOgorICAgICAgICAod2Via2l0TWVkaWFTdHJl
YW1TcmNBZGRUcmFjayk6CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbSk6
CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVhbVNyY1RyYWNrRW5kZWQpOgorICAgICAgICAoSW50
ZXJuYWxTb3VyY2U6OnRyYWNrRW5kZWQpOgorICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1TcmND
b25maWd1cmVBdWRpb1RyYWNrcyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmg6CisKIDIwMjEtMDQtMTYgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUGVyZm9ybSBwb3J0IGJs
b2NraW5nIGVhcmxpZXIgaW4gdGhlIGxvYWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggOWQ2NjRiNTdiNjRjOTM5NGJmOGNlN2Q1YTFhYzU1
MGM4NWUzZjEyYi4uZTgyZTM2ODU2ODliOWRkZDhlN2E1MGE2YTc2MTUzYWQxM2ExNmExMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE1
MTEsOSArMTUxMSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
VHJhY2tzKGNvbnN0IEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbgogCiAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkluc3BlY3RpbmcgJXMgdHJhY2sgd2l0aCBJRCAlcyIs
IGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7
CiAKLSAgICAgICAgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfQVVESU8pCisgICAgICAgIGlm
ICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX0FVRElPKSB7CiAgICAgICAgICAgICBDUkVBVEVfVFJB
Q0soYXVkaW8sIEF1ZGlvKTsKLSAgICAgICAgZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQ
RV9WSURFTyAmJiBtX3BsYXllci0+aXNWaWRlb1BsYXllcigpKQorICAgICAgICAgICAgY29uZmln
dXJlTWVkaWFTdHJlYW1BdWRpb1RyYWNrcygpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgJiBH
U1RfU1RSRUFNX1RZUEVfVklERU8gJiYgbV9wbGF5ZXItPmlzVmlkZW9QbGF5ZXIoKSkKICAgICAg
ICAgICAgIENSRUFURV9UUkFDSyh2aWRlbywgVmlkZW8pOwogICAgICAgICBlbHNlIGlmICh0eXBl
ICYgR1NUX1NUUkVBTV9UWVBFX1RFWFQgJiYgIXVzZU1lZGlhU291cmNlKSB7CiAgICAgICAgICAg
ICBhdXRvIHRyYWNrID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKHRl
eHRUcmFja0luZGV4KyssIHN0cmVhbSk7CkBAIC0xNjUzLDYgKzE2NTQsMTIgQEAgRmxvYXRTaXpl
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAogICAgIHJl
dHVybiBtX3ZpZGVvU2l6ZTsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNvbmZpZ3VyZU1lZGlhU3RyZWFtQXVkaW9UcmFja3MoKQoreworICAgIGlmIChXRUJLSVRfSVNf
TUVESUFfU1RSRUFNX1NSQyhtX3NvdXJjZS5nZXQoKSkpCisgICAgICAgIHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjQ29uZmlndXJlQXVkaW9UcmFja3MoV0VCS0lUX01FRElBX1NUUkVBTV9TUkMobV9zb3Vy
Y2UuZ2V0KCkpLCB2b2x1bWUoKSwgaXNNdXRlZCgpLCAhbV9pc1BhdXNlZCk7Cit9CisKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQogewog
ICAgIGlmICghbV92b2x1bWVFbGVtZW50KQpAQCAtMTY2MCw2ICsxNjY3LDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCiAKICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5nIHZvbHVtZTogJWYiLCB2b2x1bWUp
OwogICAgIGdzdF9zdHJlYW1fdm9sdW1lX3NldF92b2x1bWUobV92b2x1bWVFbGVtZW50LmdldCgp
LCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSLCBzdGF0aWNfY2FzdDxkb3VibGU+KHZv
bHVtZSkpOworICAgIGNvbmZpZ3VyZU1lZGlhU3RyZWFtQXVkaW9UcmFja3MoKTsKIH0KIAogZmxv
YXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2b2x1bWUoKSBjb25zdApAQCAtMTcxNyw2
ICsxNzI1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldE11dGVkKGJv
b2wgc2hvdWxkTXV0ZSkKIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGlu
ZyBtdXRlZCBzdGF0ZSB0byAlcyIsIGJvb2xGb3JQcmludGluZyhzaG91bGRNdXRlKSk7CiAgICAg
Z19vYmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCBzaG91bGRNdXRlLCBu
dWxscHRyKTsKKyAgICBjb25maWd1cmVNZWRpYVN0cmVhbUF1ZGlvVHJhY2tzKCk7CiB9CiAKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZk11dGUoKQpAQCAt
MjI1OCw2ICsyMjY3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0
ZVN0YXRlcygpCiAKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0
ZSA9IG1fbmV0d29ya1N0YXRlOwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5
U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisgICAgYm9vbCBvbGRJc1BhdXNlZCA9IG1faXNQYXVzZWQ7
CiAgICAgR3N0U3RhdGUgcGVuZGluZywgc3RhdGU7CiAgICAgYm9vbCBzdGF0ZVJlYWxseUNoYW5n
ZWQgPSBmYWxzZTsKIApAQCAtMjQyNCw2ICsyNDM0LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CisKKyAgICBpZiAob2xkSXNQYXVzZWQgIT0gbV9pc1BhdXNlZCkKKyAgICAgICAgY29uZmln
dXJlTWVkaWFTdHJlYW1BdWRpb1RyYWNrcygpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bWVkaWFMb2NhdGlvbkNoYW5nZWQoR3N0TWVzc2FnZSogbWVzc2FnZSkKQEAg
LTI1NTksNiArMjU3Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRF
bmQoKQogICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgY2hhbmdlUGlwZWxpbmVT
dGF0ZShHU1RfU1RBVEVfUkVBRFkpOwogICAgICAgICBtX2RpZERvd25sb2FkRmluaXNoID0gZmFs
c2U7CisgICAgICAgIGNvbmZpZ3VyZU1lZGlhU3RyZWFtQXVkaW9UcmFja3MoKTsKIAogI2lmIFVT
RShXUEVfVklERU9fUExBTkVfRElTUExBWV9ETUFCVUYpCiAgICAgICAgIHdwZV92aWRlb19wbGFu
ZV9kaXNwbGF5X2RtYWJ1Zl9zb3VyY2VfZW5kX29mX3N0cmVhbShtX3dwZVZpZGVvUGxhbmVEaXNw
bGF5RG1hQnVmLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuaAppbmRleCAwMDA5NGFjYzg5YjE3MzJkZTY1YTk3ZmVkMDFhNzgzODU1YmUwYjFjLi5m
ZDdmZjQxNmVkYjYxZmZkNjI0ODA1NzM3NzI5NjE3MjM4MjBhNjA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC00NTgsNiArNDU4LDggQEAgcHJp
dmF0ZToKICAgICBib29sIHdhaXRGb3JDRE1BdHRhY2htZW50KCk7CiAjZW5kaWYKIAorICAgIHZv
aWQgY29uZmlndXJlTWVkaWFTdHJlYW1BdWRpb1RyYWNrcygpOworCiAgICAgQXRvbWljPGJvb2w+
IG1faXNQbGF5ZXJTaHV0dGluZ0Rvd247CiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3RleHRT
aW5rOwogICAgIEdzdFN0cnVjdHVyZSogbV9tZWRpYUxvY2F0aW9ucyB7IG51bGxwdHIgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0F1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5jcHAKaW5kZXggMmU5NTQ3NGZjYjY4MDU4
OTc0MmUxMDJkYjEyZTFlYWI1MjFkYzQ1My4uMDkxZmQ3MmM3OTVkMjMxNGMzYjQ5YTcxMjEzZDNk
MWIzZDk0ODRmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5jcHAKQEAg
LTUxLDYgKzUxLDggQEAgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6fkF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTdHJlYW0oKQogc3RkOjp1bmlxdWVfcHRyPEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyPiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpjcmVhdGVSZW5kZXJlcihB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtJiBzdHJlYW0pCiB7CiAgICAgYXV0byByZW5kZXJl
ciA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyOjpjcmVhdGUoKTsKKyAgICBpZiAoIXJl
bmRlcmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZW5kZXJlci0+c2V0Q3Jhc2hD
YWxsYmFjayhbc3RyZWFtID0gbWFrZVdlYWtQdHIoc3RyZWFtKV0gewogICAgICAgICBpZiAoc3Ry
ZWFtKQogICAgICAgICAgICAgc3RyZWFtLT5jcmVhdGVOZXdSZW5kZXJlcigpOwpAQCAtNjIsNyAr
NjQsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI+IEF1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OmNyZQogdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1l
ZGlhU3RyZWFtOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBsb2dnZXIsIGNvbnN0IHZvaWQqIGlk
ZW50aWZpZXIpCiB7CiAgICAgVHJhY2tQcml2YXRlQmFzZTo6c2V0TG9nZ2VyKGxvZ2dlciwgaWRl
bnRpZmllcik7Ci0gICAgbV9yZW5kZXJlci0+c2V0TG9nZ2VyKGxvZ2dlciwgaWRlbnRpZmllcik7
CisgICAgaWYgKG1fcmVuZGVyZXIpCisgICAgICAgIG1fcmVuZGVyZXItPnNldExvZ2dlcihsb2dn
ZXIsIGlkZW50aWZpZXIpOwogfQogI2VuZGlmCiAKQEAgLTc3LDcgKzgwLDggQEAgdm9pZCBBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpjbGVhcigpCiAgICAgICAgIG1fYXVkaW9Tb3VyY2Ut
PnJlbW92ZUF1ZGlvU2FtcGxlT2JzZXJ2ZXIoKnRoaXMpOwogCiAgICAgc3RyZWFtVHJhY2soKS5y
ZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0gICAgbV9yZW5kZXJlci0+Y2xlYXIoKTsKKyAgICBpZiAo
bV9yZW5kZXJlcikKKyAgICAgICAgbV9yZW5kZXJlci0+Y2xlYXIoKTsKIH0KIAogdm9pZCBBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpwbGF5KCkKQEAgLTEwMywyNCArMTA3LDI5IEBAIHZv
aWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKIAog
dm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1l
KQogewotICAgIG1fcmVuZGVyZXItPnNldFZvbHVtZSh2b2x1bWUpOworICAgIGlmIChtX3JlbmRl
cmVyKQorICAgICAgICBtX3JlbmRlcmVyLT5zZXRWb2x1bWUodm9sdW1lKTsKICAgICB1cGRhdGVS
ZW5kZXJlcigpOwogfQogCiB2b2lkIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OnNldEF1
ZGlvT3V0cHV0RGV2aWNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSWQpCiB7Ci0gICAgbV9yZW5kZXJl
ci0+c2V0QXVkaW9PdXRwdXREZXZpY2UoZGV2aWNlSWQpOworICAgIGlmIChtX3JlbmRlcmVyKQor
ICAgICAgICBtX3JlbmRlcmVyLT5zZXRBdWRpb091dHB1dERldmljZShkZXZpY2VJZCk7CiB9CiAK
IGZsb2F0IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OnZvbHVtZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fcmVuZGVyZXItPnZvbHVtZSgpOworICAgIGlmIChtX3JlbmRlcmVyKQorICAg
ICAgICByZXR1cm4gbV9yZW5kZXJlci0+dm9sdW1lKCk7CisgICAgcmV0dXJuIDE7CiB9CiAKIC8v
IE1heSBnZXQgY2FsbGVkIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuCiB2b2lkIEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTdHJlYW06OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZShjb25zdCBNZWRpYVRpbWUm
IHNhbXBsZVRpbWUsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0IEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3Qgc2FtcGxlQ291bnQpCiB7
Ci0gICAgbV9yZW5kZXJlci0+cHVzaFNhbXBsZXMoc2FtcGxlVGltZSwgYXVkaW9EYXRhLCBkZXNj
cmlwdGlvbiwgc2FtcGxlQ291bnQpOworICAgIGlmIChtX3JlbmRlcmVyKQorICAgICAgICBtX3Jl
bmRlcmVyLT5wdXNoU2FtcGxlcyhzYW1wbGVUaW1lLCBhdWRpb0RhdGEsIGRlc2NyaXB0aW9uLCBz
YW1wbGVDb3VudCk7CiB9CiAKIHZvaWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6dHJh
Y2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKQpAQCAtMTU0LDcgKzE2Myw4
IEBAIHZvaWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c3RhcnRSZW5kZXJlcigpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKLSAgICBtX3JlbmRlcmVy
LT5zdGFydCgpOworICAgIGlmIChtX3JlbmRlcmVyKQorICAgICAgICBtX3JlbmRlcmVyLT5zdGFy
dCgpOwogICAgIG1fYXVkaW9Tb3VyY2UtPmFkZEF1ZGlvU2FtcGxlT2JzZXJ2ZXIoKnRoaXMpOwog
fQogCkBAIC0xNjYsNyArMTc2LDggQEAgdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFt
OjpzdG9wUmVuZGVyZXIoKQogCiAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKICAgICBtX2F1ZGlv
U291cmNlLT5yZW1vdmVBdWRpb1NhbXBsZU9ic2VydmVyKCp0aGlzKTsKLSAgICBtX3JlbmRlcmVy
LT5zdG9wKCk7CisgICAgaWYgKG1fcmVuZGVyZXIpCisgICAgICAgIG1fcmVuZGVyZXItPnN0b3Ao
KTsKIH0KIAogdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpjcmVhdGVOZXdSZW5k
ZXJlcigpCkBAIC0xNzYsNyArMTg3LDggQEAgdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3Ry
ZWFtOjpjcmVhdGVOZXdSZW5kZXJlcigpCiAKICAgICBmbG9hdCB2b2x1bWUgPSB0aGlzLT52b2x1
bWUoKTsKICAgICBtX3JlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIoKnRoaXMpOwotICAgIG1fcmVu
ZGVyZXItPnNldFZvbHVtZSh2b2x1bWUpOworICAgIGlmIChtX3JlbmRlcmVyKQorICAgICAgICBt
X3JlbmRlcmVyLT5zZXRWb2x1bWUodm9sdW1lKTsKIAogICAgIGlmIChpc1BsYXlpbmcpCiAgICAg
ICAgIHN0YXJ0UmVuZGVyZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVk
aWFTdHJlYW1Tb3VyY2UuY3BwCmluZGV4IDYzYTZjN2FjMzI1YWU4OTg5MjIxNDI3YzZiMDM1ZjIy
NzRjNDExMWQuLmM2ZDQxYjFhNGIzNjAwYjUzNWJjM2Q2ODdiMDRjNDdmZjBkOGE3OTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAt
MjYsMTMgKzI2LDEyIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShHU1RSRUFNRVIpCiAKLSNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRlICJHU3Ry
ZWFtZXJBdWRpb0RhdGEuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRl
ICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtUHJpdmF0ZS5o
IgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCi0jaW5jbHVkZSAiVmlkZW9U
cmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgi
CiAKICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgogI2luY2x1ZGUgPHd0Zi9VVUlELmg+
CkBAIC00MCwyNCArMzksMTYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRp
YyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVzaFZpZGVvU2FtcGxlKFdlYktpdE1lZGlhU3Ry
ZWFtU3JjKiwgR3N0U2FtcGxlKik7Ci1zdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1B1
c2hBdWRpb1NhbXBsZShXZWJLaXRNZWRpYVN0cmVhbVNyYyosIGNvbnN0IEdSZWZQdHI8R3N0U2Ft
cGxlPiYpOwotc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNUcmFja0VuZGVkKFdlYktp
dE1lZGlhU3RyZWFtU3JjKiwgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKTsKLXN0YXRpYyB2b2lk
IHdlYmtpdE1lZGlhU3RyZWFtU3JjUmVtb3ZlVHJhY2tCeVR5cGUoV2ViS2l0TWVkaWFTdHJlYW1T
cmMqLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKTsKLXN0YXRpYyB2b2lkIHdlYmtpdE1lZGlh
U3RyZWFtU3JjUmVtb3ZlVHJhY2tPYnNlcnZlcihXZWJLaXRNZWRpYVN0cmVhbVNyYyosIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlJik7Ci1zdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bv
c3RTdHJlYW1Db2xsZWN0aW9uKFdlYktpdE1lZGlhU3RyZWFtU3JjKik7Ci1zdGF0aWMgdm9pZCB3
ZWJraXRNZWRpYVN0cmVhbVNyY1JlbW92ZVBhZChXZWJLaXRNZWRpYVN0cmVhbVNyYyosIGNvbnN0
IGNoYXIqIHBhZE5hbWUpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9TcmNU
ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19zcmMiLCBHU1RfUEFEX1NS
QywgR1NUX1BBRF9TT01FVElNRVMsCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9T
cmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19zcmMldSIsIEdTVF9Q
QURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKICAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gt
cmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwOCIpKTsKIAotc3RhdGljIEdzdFN0YXRpY1BhZFRl
bXBsYXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgiYXVkaW9f
c3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfU09NRVRJTUVTLAorc3RhdGljIEdzdFN0YXRpY1Bh
ZFRlbXBsYXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgiYXVk
aW9fc3JjJXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsCiAgICAgR1NUX1NUQVRJ
Q19DQVBTKCJhdWRpby94LXJhdyhBTlkpOyIpKTsKIAogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJ
Qyh3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnKTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdE1lZGlhU3RyZWFtU3JjRGVidWcKIAotR1JlZlB0cjxHc3RUYWdMaXN0PiBtZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZUdldFRhZ3MoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrKQorR1Jl
ZlB0cjxHc3RUYWdMaXN0PiBtZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUdldFRhZ3MoY29uc3QgTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrKQogewogICAgIGF1dG8gdGFnTGlzdCA9IGFkb3B0
R1JlZihnc3RfdGFnX2xpc3RfbmV3X2VtcHR5KCkpOwogCkBAIC0xMDAsNTUgKzkxLDYgQEAgR3N0
U3RyZWFtKiB3ZWJraXRNZWRpYVN0cmVhbU5ldyhNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogdHJh
Y2spCiAgICAgcmV0dXJuIHN0cmVhbTsKIH0KIAotY2xhc3MgV2ViS2l0TWVkaWFTdHJlYW1UcmFj
a09ic2VydmVyCi0gICAgOiBwdWJsaWMgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVy
Ci0gICAgLCBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9TYW1wbGVPYnNlcnZlcgot
ICAgICwgcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvU2FtcGxlT2JzZXJ2ZXIgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfldlYktp
dE1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcigpIHsgfTsKLSAgICBXZWJLaXRNZWRpYVN0cmVhbVRy
YWNrT2JzZXJ2ZXIoR3N0RWxlbWVudCogc3JjKQotICAgICAgICA6IG1fc3JjKHNyYykgeyB9Ci0g
ICAgdm9pZCB0cmFja1N0YXJ0ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH07
Ci0KLSAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHRyYWNrKSBm
aW5hbAotICAgIHsKLSAgICAgICAgaWYgKG1fc3JjKQotICAgICAgICAgICAgd2Via2l0TWVkaWFT
dHJlYW1TcmNUcmFja0VuZGVkKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG1fc3JjKSwgdHJhY2sp
OwotICAgIH0KLQotICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYgdHJhY2spIGZpbmFsCi0gICAgewotICAgICAgICBtX2VuYWJsZWQgPSB0cmFjay5l
bmFibGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZChNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfTsKLSAgICB2b2lkIHRyYWNrU2V0dGluZ3NDaGFuZ2Vk
KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9OwotICAgIHZvaWQgcmVhZHlTdGF0
ZUNoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH07Ci0KLSAgICB2b2lk
IHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJiBzYW1wbGUpIGZpbmFsCi0gICAgewot
ICAgICAgICBpZiAoIW1fZW5hYmxlZCB8fCAhbV9zcmMpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgYXV0byogZ3N0U2FtcGxlID0gc3RhdGljX2Nhc3Q8TWVkaWFTYW1wbGVHU3RyZWFt
ZXIqPigmc2FtcGxlKS0+cGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuZ3N0U2FtcGxlOwotICAgICAg
ICB3ZWJraXRNZWRpYVN0cmVhbVNyY1B1c2hWaWRlb1NhbXBsZShXRUJLSVRfTUVESUFfU1RSRUFN
X1NSQyhtX3NyYyksIGdzdFNhbXBsZSk7Ci0gICAgfQotCi0gICAgdm9pZCBhdWRpb1NhbXBsZXNB
dmFpbGFibGUoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlv
RGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCkgZmluYWwKLSAgICB7
Ci0gICAgICAgIGlmICghbV9lbmFibGVkIHx8ICFtX3NyYykKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBhdXRvIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBHU3RyZWFtZXJBdWRpb0Rh
dGEmPihhdWRpb0RhdGEpOwotICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1B1c2hBdWRpb1Nh
bXBsZShXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhtX3NyYyksIGRhdGEuZ2V0U2FtcGxlKCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBHc3RFbGVtZW50KiBtX3NyYyB7IG51bGxwdHIgfTsKLSAg
ICBib29sIG1fZW5hYmxlZCB7IHRydWUgfTsKLX07Ci0KIGNsYXNzIFdlYktpdE1lZGlhU3RyZWFt
T2JzZXJ2ZXIgOiBwdWJsaWMgTWVkaWFTdHJlYW1Qcml2YXRlOjpPYnNlcnZlciB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNjYsMjggKzEwOCwzMSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkaWRBZGRUcmFjayhNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2sp
IGZpbmFsCiAgICAgewogICAgICAgICBpZiAobV9zcmMpCi0gICAgICAgICAgICB3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFRyYWNrKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG1fc3JjKSwgJnRyYWNr
LCBmYWxzZSk7CisgICAgICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKFdFQktJ
VF9NRURJQV9TVFJFQU1fU1JDX0NBU1QobV9zcmMpLCAmdHJhY2ssIGZhbHNlKTsKICAgICB9CiAK
LSAgICB2b2lkIGRpZFJlbW92ZVRyYWNrKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykg
ZmluYWwKLSAgICB7Ci0gICAgICAgIGlmICghbV9zcmMpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNSZW1vdmVUcmFja09ic2VydmVyKFdFQktJVF9N
RURJQV9TVFJFQU1fU1JDKG1fc3JjKSwgdHJhY2spOwotICAgICAgICB3ZWJraXRNZWRpYVN0cmVh
bVNyY1JlbW92ZVRyYWNrQnlUeXBlKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG1fc3JjKSwgdHJh
Y2sudHlwZSgpKTsKLSAgICB9CisgICAgdm9pZCBkaWRSZW1vdmVUcmFjayhNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZSYpIGZpbmFsOwogCiBwcml2YXRlOgogICAgIEdzdEVsZW1lbnQqIG1fc3JjOwog
fTsKIAotY2xhc3MgSW50ZXJuYWxTb3VyY2UgeworY2xhc3MgSW50ZXJuYWxTb3VyY2UgZmluYWwg
OiBwdWJsaWMgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyLAorICAgIHB1YmxpYyBS
ZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb1NhbXBsZU9ic2VydmVyLAorICAgIHB1YmxpYyBSZWFs
dGltZU1lZGlhU291cmNlOjpWaWRlb1NhbXBsZU9ic2VydmVyIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBJbnRlcm5hbFNvdXJjZShib29sIGlzQ2FwdHVyZVRy
YWNrLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5
cGUpCisgICAgSW50ZXJuYWxTb3VyY2UoR3N0RWxlbWVudCogcGFyZW50LCBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZSYgdHJhY2ssIGNvbnN0IFN0cmluZyYgcGFkTmFtZSkKKyAgICAgICAgOiBtX3Bh
cmVudChwYXJlbnQpCisgICAgICAgICwgbV90cmFjayh0cmFjaykKKyAgICAgICAgLCBtX3BhZE5h
bWUocGFkTmFtZSkKICAgICB7CisgICAgICAgIGlmICh0cmFjay50eXBlKCkgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pCisgICAgICAgICAgICBtX2F1ZGlvVHJhY2sgPSBBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpjcmVhdGUodHJhY2spOworICAgICAgICBlbHNlIGlm
ICh0cmFjay50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pCisgICAg
ICAgICAgICBtX3ZpZGVvVHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpjcmVh
dGUodHJhY2spOworCisgICAgICAgIGJvb2wgaXNDYXB0dXJlVHJhY2sgPSB0cmFjay5pc0NhcHR1
cmVUcmFjaygpOwogICAgICAgICBtX3NyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBw
c3JjIiwgbnVsbHB0cik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShHU1Rf
SVNfQVBQX1NSQyhtX3NyYy5nZXQoKSksICJHU3RyZWFtZXIgYXBwc3JjIGVsZW1lbnQgbm90IGZv
dW5kLiBQbGVhc2UgbWFrZSBzdXJlIHRvIGluc3RhbGwgZ3N0LXBsdWdpbnMtYmFzZSIpOwogCkBA
IC0yMDEsMjUgKzE0Niw2NiBAQCBwdWJsaWM6CiAgICAgICAgIH0pLCB0aGlzKTsKICAgICB9CiAK
LSAgICB+SW50ZXJuYWxTb3VyY2UoKQorICAgIHZpcnR1YWwgfkludGVybmFsU291cmNlKCkKICAg
ICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3NyYy5n
ZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7
Ci0KLSAgICAgICAgaWYgKGF1dG8gcGFyZW50ID0gYWRvcHRHUmVmKGdzdF9vYmplY3RfZ2V0X3Bh
cmVudChHU1RfT0JKRUNUX0NBU1QobV9zcmMuZ2V0KCkpKSkpIHsKLSAgICAgICAgICAgIEdTVF9T
VEFURV9MT0NLKEdTVF9FTEVNRU5UX0NBU1QocGFyZW50LmdldCgpKSk7Ci0gICAgICAgICAgICBn
c3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fc3JjLmdldCgpLCB0cnVlKTsKLSAgICAgICAg
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3NyYy5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOwot
ICAgICAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKHBhcmVudC5nZXQoKSksIG1f
c3JjLmdldCgpKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9z
cmMuZ2V0KCksIGZhbHNlKTsKLSAgICAgICAgICAgIEdTVF9TVEFURV9VTkxPQ0soR1NUX0VMRU1F
TlRfQ0FTVChwYXJlbnQuZ2V0KCkpKTsKLQotICAgICAgICAgICAgY29uc3QgY2hhciogcGFkTmFt
ZSA9IG1fdHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbyA/ICJ2aWRlb19z
cmMiIDogImF1ZGlvX3NyYyI7Ci0gICAgICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1JlbW92
ZVBhZChXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhwYXJlbnQuZ2V0KCkpLCBwYWROYW1lKTsKLSAg
ICAgICAgfQorICAgICAgICBzdG9wT2JzZXJ2aW5nKCk7CisKKyAgICAgICAgaWYgKG1fc3JjKQor
ICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fc3JjLmdl
dCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsK
ICAgICB9CiAKKyAgICBjb25zdCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2soKSBjb25z
dCB7IHJldHVybiBtX3RyYWNrOyB9CisgICAgY29uc3QgU3RyaW5nJiBwYWROYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9wYWROYW1lOyB9CiAgICAgR3N0RWxlbWVudCogZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zcmMuZ2V0KCk7IH0KIAorICAgIHZvaWQgc3RhcnRPYnNlcnZpbmcoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1faXNPYnNlcnZpbmcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
bV90cmFjay5hZGRPYnNlcnZlcigqdGhpcyk7CisgICAgICAgIHN3aXRjaCAobV90cmFjay50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbzoKKyAg
ICAgICAgICAgIG1fdHJhY2suc291cmNlKCkuYWRkQXVkaW9TYW1wbGVPYnNlcnZlcigqdGhpcyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpWaWRlbzoKKyAgICAgICAgICAgIG1fdHJhY2suc291cmNlKCkuYWRkVmlkZW9TYW1wbGVP
YnNlcnZlcigqdGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlOjpOb25lOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICAgICAgbV9pc09ic2VydmluZyA9IHRydWU7CisgICAgfQorCisg
ICAgdm9pZCBzdG9wT2JzZXJ2aW5nKCkKKyAgICB7CisgICAgICAgIGlmICghbV9pc09ic2Vydmlu
ZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2lzT2JzZXJ2aW5nID0gZmFsc2U7
CisgICAgICAgIHN3aXRjaCAobV90cmFjay50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbzoKKyAgICAgICAgICAgIG1fdHJhY2suc291cmNlKCku
cmVtb3ZlQXVkaW9TYW1wbGVPYnNlcnZlcigqdGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzoKKyAgICAgICAgICAg
IG1fdHJhY2suc291cmNlKCkucmVtb3ZlVmlkZW9TYW1wbGVPYnNlcnZlcigqdGhpcyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpO
b25lOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAg
ICAgbV90cmFjay5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBjb25m
aWd1cmVBdWRpb1RyYWNrKGZsb2F0IHZvbHVtZSwgYm9vbCBpc011dGVkLCBib29sIGlzUGxheWlu
ZykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RyYWNrLnR5cGUoKSA9PSBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlOjpBdWRpbyk7CisgICAgICAgIG1fYXVkaW9UcmFjay0+c2V0Vm9sdW1lKHZv
bHVtZSk7CisgICAgICAgIG1fYXVkaW9UcmFjay0+c2V0TXV0ZWQoaXNNdXRlZCk7CisgICAgICAg
IG1fYXVkaW9UcmFjay0+c2V0RW5hYmxlZChtX2F1ZGlvVHJhY2stPnN0cmVhbVRyYWNrKCkuZW5h
YmxlZCgpICYmICFtX2F1ZGlvVHJhY2stPnN0cmVhbVRyYWNrKCkubXV0ZWQoKSk7CisgICAgICAg
IGlmIChpc1BsYXlpbmcpCisgICAgICAgICAgICBtX2F1ZGlvVHJhY2stPnBsYXkoKTsKKyAgICB9
CisKICAgICB2b2lkIHB1c2hTYW1wbGUoR3N0U2FtcGxlKiBzYW1wbGUpCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9zcmMpOwpAQCAtMjM1LDEyICsyMjEsMTIgQEAgcHVibGljOgogICAgICAgICAg
ICAgZ3N0X3BhZF9zZXRfb2Zmc2V0KHBhZC5nZXQoKSwgLW1fZmlyc3RCdWZmZXJQdHMpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1fdHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBl
OjpWaWRlbyAmJiBkcm9wKQorICAgICAgICBpZiAobV90cmFjay50eXBlKCkgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8gJiYgZHJvcCkKICAgICAgICAgICAgIGRyb3AgPSBkb0Nh
cHNIYXZlVHlwZShjYXBzLCAidmlkZW8veC1yYXciKSB8fCBHU1RfQlVGRkVSX0ZMQUdfSVNfU0VU
KGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwogCiAgICAgICAgIGlmIChkcm9w
KSB7CiAgICAgICAgICAgICBtX25lZWRzRGlzY29udCA9IHRydWU7Ci0gICAgICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QobV9zcmMuZ2V0KCksICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1
c2hpbmciLCBtX3R5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8gPyAiVmlk
ZW8iIDogIkF1ZGlvIik7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9zcmMuZ2V0KCks
ICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3RyYWNrLnR5cGUoKSA9
PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbyA/ICJWaWRlbyIgOiAiQXVkaW8iKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yNTIsMjQgKzIzOCw2MSBAQCBw
dWJsaWM6CiAgICAgICAgIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKEdTVF9BUFBfU1JDKG1fc3Jj
LmdldCgpKSwgc2FtcGxlKTsKICAgICB9CiAKKyAgICB2b2lkIHRyYWNrU3RhcnRlZChNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfTsKKyAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbDsKKworICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2spIGZpbmFsCisgICAgeworICAgICAgICBt
X2VuYWJsZWQgPSB0cmFjay5lbmFibGVkKCk7CisgICAgfQorCisgICAgdm9pZCB0cmFja011dGVk
Q2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfTsKKyAgICB2b2lkIHRy
YWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9Owor
ICAgIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5h
bCB7IH07CisKKyAgICB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJiBzYW1w
bGUpIGZpbmFsCisgICAgeworICAgICAgICBpZiAoIW1fZW5hYmxlZCB8fCAhbV9wYXJlbnQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byogZ3N0U2FtcGxlID0gc3RhdGljX2Nh
c3Q8TWVkaWFTYW1wbGVHU3RyZWFtZXIqPigmc2FtcGxlKS0+cGxhdGZvcm1TYW1wbGUoKS5zYW1w
bGUuZ3N0U2FtcGxlOworICAgICAgICBwdXNoU2FtcGxlKGdzdFNhbXBsZSk7CisgICAgfQorCisg
ICAgdm9pZCBhdWRpb1NhbXBsZXNBdmFpbGFibGUoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgUGxh
dGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYs
IHNpemVfdCkgZmluYWwKKyAgICB7CisgICAgICAgIGlmICghbV9lbmFibGVkIHx8ICFtX3BhcmVu
dCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBhdXRvJiBkYXRhID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR1N0cmVhbWVyQXVkaW9EYXRhJj4oYXVkaW9EYXRhKTsKKyAgICAgICAg
YXV0byBzYW1wbGUgPSBkYXRhLmdldFNhbXBsZSgpOworICAgICAgICBwdXNoU2FtcGxlKHNhbXBs
ZS5nZXQoKSk7CisgICAgfQorCiBwcml2YXRlOgotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGUgbV90eXBlIHsgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZSB9OworICAgIEdzdEVs
ZW1lbnQqIG1fcGFyZW50IHsgbnVsbHB0ciB9OworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
JiBtX3RyYWNrOwogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zcmM7CisgICAgYm9vbCBtX2Vu
YWJsZWQgeyB0cnVlIH07CiAgICAgR3N0Q2xvY2tUaW1lIG1fZmlyc3RCdWZmZXJQdHMgeyBHU1Rf
Q0xPQ0tfVElNRV9OT05FIH07CiAgICAgYm9vbCBtX2Vub3VnaERhdGEgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9uZWVkc0Rpc2NvbnQgeyBmYWxzZSB9OworICAgIFN0cmluZyBtX3BhZE5hbWU7Cisg
ICAgYm9vbCBtX2lzT2JzZXJ2aW5nIHsgZmFsc2UgfTsKKyAgICBSZWZQdHI8QXVkaW9UcmFja1By
aXZhdGVNZWRpYVN0cmVhbT4gbV9hdWRpb1RyYWNrOworICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU3RyZWFtPiBtX3ZpZGVvVHJhY2s7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdE1lZGlh
U3RyZWFtU3JjUHJpdmF0ZSB7CiAgICAgQ1N0cmluZyB1cmk7Ci0gICAgT3B0aW9uYWw8SW50ZXJu
YWxTb3VyY2U+IGF1ZGlvU3JjOwotICAgIE9wdGlvbmFsPEludGVybmFsU291cmNlPiB2aWRlb1Ny
YzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0TWVkaWFTdHJlYW1UcmFja09ic2VydmVyPiBt
ZWRpYVN0cmVhbVRyYWNrT2JzZXJ2ZXI7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbFNvdXJjZT4+IHNvdXJjZXM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdE1lZGlhU3Ry
ZWFtT2JzZXJ2ZXI+IG1lZGlhU3RyZWFtT2JzZXJ2ZXI7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFt
UHJpdmF0ZT4gc3RyZWFtOwogICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+PiB0cmFja3M7CiAgICAgR1VuaXF1ZVB0cjxHc3RGbG93Q29tYmluZXI+IGZsb3dDb21iaW5l
cjsKICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IHN0cmVhbUNvbGxlY3Rpb247Cisg
ICAgQXRvbWljPHVuc2lnbmVkPiBhdWRpb1BhZENvdW50ZXI7CisgICAgQXRvbWljPHVuc2lnbmVk
PiB2aWRlb1BhZENvdW50ZXI7CiB9OwogCiBlbnVtIHsKQEAgLTI3OCw2ICszMDEsMTcgQEAgZW51
bSB7CiAgICAgUFJPUF9MQVNUCiB9OwogCit2b2lkIFdlYktpdE1lZGlhU3RyZWFtT2JzZXJ2ZXI6
OmRpZFJlbW92ZVRyYWNrKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykKK3sKKyAgICBp
ZiAoIW1fc3JjKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBlbGVtZW50ID0gV0VCS0lU
X01FRElBX1NUUkVBTV9TUkNfQ0FTVChtX3NyYyk7CisgICAgZWxlbWVudC0+cHJpdi0+c291cmNl
cy5yZW1vdmVGaXJzdE1hdGNoaW5nKFsmXShhdXRvJiBpdGVtKSB7CisgICAgICAgIHJldHVybiBp
dGVtLT50cmFjaygpLmlkKCkgPT0gdHJhY2suaWQoKTsKKyAgICB9KTsKK30KKwogc3RhdGljIEdz
dFVSSVR5cGUgd2Via2l0TWVkaWFTdHJlYW1TcmNVcmlHZXRUeXBlKEdUeXBlKQogewogICAgIHJl
dHVybiBHU1RfVVJJX1NSQzsKQEAgLTI5MSwxMyArMzI1LDEzIEBAIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCogd2Via2l0TWVkaWFTdHJlYW1TcmNVcmlHZXRQcm90b2NvbHMoR1R5cGUpCiAKIHN0
YXRpYyBjaGFyKiB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaUdldFVyaShHc3RVUklIYW5kbGVyKiBo
YW5kbGVyKQogewotICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lUX01FRElB
X1NUUkVBTV9TUkMoaGFuZGxlcik7CisgICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYgPSBX
RUJLSVRfTUVESUFfU1RSRUFNX1NSQ19DQVNUKGhhbmRsZXIpOwogICAgIHJldHVybiBnX3N0cmR1
cChzZWxmLT5wcml2LT51cmkuZGF0YSgpKTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYmtpdE1l
ZGlhU3RyZWFtU3JjVXJpU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGNoYXIq
IHVyaSwgR0Vycm9yKiopCiB7Ci0gICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYgPSBXRUJL
SVRfTUVESUFfU1RSRUFNX1NSQyhoYW5kbGVyKTsKKyAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyog
c2VsZiA9IFdFQktJVF9NRURJQV9TVFJFQU1fU1JDX0NBU1QoaGFuZGxlcik7CiAgICAgc2VsZi0+
cHJpdi0+dXJpID0gQ1N0cmluZyh1cmkpOwogICAgIHJldHVybiBUUlVFOwogfQpAQCAtMzQ1LDEw
ICszNzksOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0dldFByb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgRwogc3RhdGljIHZvaWQgd2Via2l0TWVk
aWFTdHJlYW1TcmNDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgR1NUX0NBTExf
UEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBjb25zdHJ1Y3RlZCwgKG9iamVjdCkpOwotICAgIFdlYktp
dE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lUX01FRElBX1NUUkVBTV9TUkMob2JqZWN0KTsK
KyAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiA9IFdFQktJVF9NRURJQV9TVFJFQU1fU1JD
X0NBU1Qob2JqZWN0KTsKICAgICBhdXRvKiBwcml2ID0gc2VsZi0+cHJpdjsKIAotICAgIHByaXYt
Pm1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlciA9IG1ha2VVbmlxdWU8V2ViS2l0TWVkaWFTdHJlYW1U
cmFja09ic2VydmVyPihHU1RfRUxFTUVOVF9DQVNUKHNlbGYpKTsKICAgICBwcml2LT5tZWRpYVN0
cmVhbU9ic2VydmVyID0gbWFrZVVuaXF1ZTxXZWJLaXRNZWRpYVN0cmVhbU9ic2VydmVyPihHU1Rf
RUxFTUVOVF9DQVNUKHNlbGYpKTsKICAgICBwcml2LT5mbG93Q29tYmluZXIgPSBHVW5pcXVlUHRy
PEdzdEZsb3dDb21iaW5lcj4oZ3N0X2Zsb3dfY29tYmluZXJfbmV3KCkpOwogCkBAIC0zNTcsMzYg
KzM5MCw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQ29uc3RydWN0ZWQoR09i
amVjdCogb2JqZWN0KQogICAgIEFTU0VSVChnX29iamVjdF9pc19mbG9hdGluZyhzZWxmKSk7CiB9
CiAKLXN0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUmVtb3ZlVHJhY2tPYnNlcnZlcihX
ZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHRyYWNr
KQotewotICAgIGF1dG8qIHByaXYgPSBzZWxmLT5wcml2OwotICAgIHN3aXRjaCAodHJhY2sudHlw
ZSgpKSB7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzoKLSAgICAg
ICAgdHJhY2suc291cmNlKCkucmVtb3ZlVmlkZW9TYW1wbGVPYnNlcnZlcigqcHJpdi0+bWVkaWFT
dHJlYW1UcmFja09ic2VydmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpBdWRpbzoKLSAgICAgICAgdHJhY2suc291cmNlKCkucmVtb3ZlQXVk
aW9TYW1wbGVPYnNlcnZlcigqcHJpdi0+bWVkaWFTdHJlYW1UcmFja09ic2VydmVyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpOb25lOgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgdHJhY2sucmVtb3ZlT2JzZXJ2
ZXIoKnByaXYtPm1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0
b3BPYnNlcnZpbmdUcmFja3MoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYpCi17Ci0gICAgR1NU
X09CSkVDVF9MT0NLKHNlbGYpOwotICAgIGF1dG8qIHByaXYgPSBzZWxmLT5wcml2OwotICAgIGZv
ciAoYXV0byYgdHJhY2sgOiBwcml2LT50cmFja3MpCi0gICAgICAgIHdlYmtpdE1lZGlhU3RyZWFt
U3JjUmVtb3ZlVHJhY2tPYnNlcnZlcihzZWxmLCAqdHJhY2spOwotICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKHNlbGYpOwotfQotCiBzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0Rpc3Bvc2Uo
R09iamVjdCogb2JqZWN0KQogewotICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VC
S0lUX01FRElBX1NUUkVBTV9TUkMob2JqZWN0KTsKLQotICAgIHN0b3BPYnNlcnZpbmdUcmFja3Mo
c2VsZik7CisgICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYgPSBXRUJLSVRfTUVESUFfU1RS
RUFNX1NSQ19DQVNUKG9iamVjdCk7CiAKICAgICBHU1RfT0JKRUNUX0xPQ0soc2VsZik7CiAgICAg
YXV0byogcHJpdiA9IHNlbGYtPnByaXY7CkBAIC00MDIsMTQgKzQwOCwyNCBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogc3RhdGljIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIHdlYmtpdE1lZGlhU3RyZWFtU3JjQ2hhbmdlU3RhdGUoR3N0RWxl
bWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKIHsKICAgICBHU1RfREVC
VUdfT0JKRUNUKGVsZW1lbnQsICIlcyIsIGdzdF9zdGF0ZV9jaGFuZ2VfZ2V0X25hbWUodHJhbnNp
dGlvbikpOworICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lUX01FRElBX1NU
UkVBTV9TUkNfQ0FTVChlbGVtZW50KTsKIAotICAgIGlmICh0cmFuc2l0aW9uID09IEdTVF9TVEFU
RV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZKQotICAgICAgICBzdG9wT2JzZXJ2aW5nVHJhY2tzKFdF
QktJVF9NRURJQV9TVFJFQU1fU1JDKGVsZW1lbnQpKTsKKyAgICBpZiAodHJhbnNpdGlvbiA9PSBH
U1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSkgeworICAgICAgICBHU1RfT0JKRUNUX0xP
Q0soc2VsZik7CisgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IHNlbGYtPnByaXYtPnNvdXJjZXMp
CisgICAgICAgICAgICBpdGVtLT5zdG9wT2JzZXJ2aW5nKCk7CisgICAgICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHNlbGYpOworICAgIH0KIAogICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJlc3VsdCA9
IEdTVF9FTEVNRU5UX0NMQVNTKHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3BhcmVudF9jbGFzcykt
PmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKIAotICAgIGlmICh0cmFuc2l0aW9u
ID09IEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEKQorICAgIGlmICh0cmFuc2l0aW9u
ID09IEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEKSB7CisgICAgICAgIEdTVF9PQkpF
Q1RfTE9DSyhzZWxmKTsKKyAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogc2VsZi0+cHJpdi0+c291
cmNlcykKKyAgICAgICAgICAgIGl0ZW0tPnN0YXJ0T2JzZXJ2aW5nKCk7CisgICAgICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKHNlbGYpOwogICAgICAgICByZXN1bHQgPSBHU1RfU1RBVEVfQ0hBTkdFX05P
X1BSRVJPTEw7CisgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQzNiw3ICs0NTIs
NyBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRNZWRpYVN0cmVhbVNyY0NoYWluKEdzdFBh
ZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgRwogewogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
ZWxlbWVudCA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVF9DQVNUKGdzdF9vYmplY3RfZ2V0X3BhcmVu
dChwYXJlbnQpKSk7CiAgICAgR3N0Rmxvd1JldHVybiBjaGFpblJlc3VsdCA9IGdzdF9wcm94eV9w
YWRfY2hhaW5fZGVmYXVsdChwYWQsIEdTVF9PQkpFQ1RfQ0FTVChlbGVtZW50LmdldCgpKSwgYnVm
ZmVyKTsKLSAgICBhdXRvKiBzZWxmID0gV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoZWxlbWVudC5n
ZXQoKSk7CisgICAgYXV0byogc2VsZiA9IFdFQktJVF9NRURJQV9TVFJFQU1fU1JDX0NBU1QoZWxl
bWVudC5nZXQoKSk7CiAgICAgR3N0Rmxvd1JldHVybiByZXN1bHQgPSBnc3RfZmxvd19jb21iaW5l
cl91cGRhdGVfcGFkX2Zsb3coc2VsZi0+cHJpdi0+Zmxvd0NvbWJpbmVyLmdldCgpLCBwYWQsIGNo
YWluUmVzdWx0KTsKIAogICAgIGlmIChyZXN1bHQgPT0gR1NUX0ZMT1dfRkxVU0hJTkcpCkBAIC00
NDUsMTIgKzQ2MSwzOSBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRNZWRpYVN0cmVhbVNy
Y0NoYWluKEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgRwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKFdlYktpdE1l
ZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RQYWQqIHRhcmdldCwgR3N0U3RhdGljUGFkVGVtcGxhdGUq
IHBhZFRlbXBsYXRlLCBHUmVmUHRyPEdzdFRhZ0xpc3Q+JiYgdGFncywgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZSBzb3VyY2VUeXBlKQorc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQ
b3N0U3RyZWFtQ29sbGVjdGlvbihXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZikKIHsKKyAgICBh
dXRvKiBwcml2ID0gc2VsZi0+cHJpdjsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzZWxmKTsKKyAg
ICBpZiAocHJpdi0+c3RyZWFtICYmICghcHJpdi0+c3RyZWFtLT5hY3RpdmUoKSB8fCAhcHJpdi0+
c3RyZWFtLT5oYXNUcmFja3MoKSkpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc2VsZik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHVwc3RyZWFtSWQgPSBwcml2LT5z
dHJlYW0gPyBwcml2LT5zdHJlYW0tPmlkKCkgOiBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7
CisgICAgcHJpdi0+c3RyZWFtQ29sbGVjdGlvbiA9IGFkb3B0R1JlZihnc3Rfc3RyZWFtX2NvbGxl
Y3Rpb25fbmV3KHVwc3RyZWFtSWQuYXNjaWkoKS5kYXRhKCkpKTsKKyAgICBmb3IgKGF1dG8mIHRy
YWNrIDogcHJpdi0+dHJhY2tzKSB7CisgICAgICAgIGlmICghdHJhY2stPmlzQWN0aXZlKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9z
dHJlYW0ocHJpdi0+c3RyZWFtQ29sbGVjdGlvbi5nZXQoKSwgd2Via2l0TWVkaWFTdHJlYW1OZXco
dHJhY2suZ2V0KCkpKTsKKyAgICB9CisKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzZWxmKTsKKwor
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIlBvc3Rpbmcgc3RyZWFtIGNvbGxlY3Rpb24iKTsK
KyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgZ3N0
X21lc3NhZ2VfbmV3X3N0cmVhbV9jb2xsZWN0aW9uKEdTVF9PQkpFQ1RfQ0FTVChzZWxmKSwgcHJp
di0+c3RyZWFtQ29sbGVjdGlvbi5nZXQoKSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFBhZChXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgR3N0UGFkKiB0YXJn
ZXQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSwgR1JlZlB0cjxHc3RUYWdMaXN0
PiYmIHRhZ3MsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgc291cmNlVHlwZSwgY29uc3QgU3Ry
aW5nJiBwYWROYW1lKQoreworICAgIEFTU0VSVChzb3VyY2VUeXBlICE9IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6Ok5vbmUpOworICAgIGlmIChzb3VyY2VUeXBlID09IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKwogICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgIiVzIEdob3N0aW5nICUiIEdTVF9QVFJfRk9STUFULCBnc3Rfb2JqZWN0X2dldF9w
YXRoX3N0cmluZyhHU1RfT0JKRUNUX0NBU1Qoc2VsZikpLCB0YXJnZXQpOwogCi0gICAgY29uc3Qg
Y2hhciogcGFkTmFtZSA9IHNvdXJjZVR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
QXVkaW8gPyAiYXVkaW9fc3JjIiA6ICJ2aWRlb19zcmMiOwotICAgIGF1dG8qIGdob3N0UGFkID0g
d2Via2l0R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxhdGUocGFkVGVtcGxhdGUsIHBhZE5hbWUs
IHRhcmdldCk7CisgICAgYXV0byogZ2hvc3RQYWQgPSB3ZWJraXRHc3RHaG9zdFBhZEZyb21TdGF0
aWNUZW1wbGF0ZShwYWRUZW1wbGF0ZSwgcGFkTmFtZS5hc2NpaSgpLmRhdGEoKSwgdGFyZ2V0KTsK
ICAgICBnc3RfcGFkX3NldF9hY3RpdmUoZ2hvc3RQYWQsIFRSVUUpOwogICAgIGdzdF9lbGVtZW50
X2FkZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgZ2hvc3RQYWQpOwogCkBAIC00NjEsMjcg
KzUwNCwxNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFBhZChXZWJLaXRN
ZWRpYVN0cmVhbVNyYyogc2VsZiwgR3N0UGFkKiB0YXJnZQogICAgIGdzdF9wYWRfcHVzaF9ldmVu
dCh0YXJnZXQsIGdzdF9ldmVudF9uZXdfdGFnKHRhZ3MubGVha1JlZigpKSk7CiB9CiAKLXN0YXRp
YyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUmVtb3ZlUGFkKFdlYktpdE1lZGlhU3RyZWFtU3Jj
KiBzZWxmLCBjb25zdCBjaGFyKiBwYWROYW1lKQotewotICAgIGF1dG8gcGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksIHBhZE5h
bWUpKTsKLSAgICBpZiAoIXBhZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcm94eVBh
ZCA9IGFkb3B0R1JlZihHU1RfUEFEX0NBU1QoZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwoR1NU
X1BST1hZX1BBRChwYWQuZ2V0KCkpKSkpOwotICAgIGlmIChwcm94eVBhZCkKLSAgICAgICAgZ3N0
X2Zsb3dfY29tYmluZXJfcmVtb3ZlX3BhZChzZWxmLT5wcml2LT5mbG93Q29tYmluZXIuZ2V0KCks
IHByb3h5UGFkLmdldCgpKTsKLQotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShwYWQuZ2V0KCksIEZB
TFNFKTsKLSAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkKEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiks
IHBhZC5nZXQoKSk7Ci19Ci0KIHN0cnVjdCBQcm9iZURhdGEgewotICAgIFByb2JlRGF0YShHc3RF
bGVtZW50KiBlbGVtZW50LCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGUsIEdSZWZQ
dHI8R3N0VGFnTGlzdD4mJiB0YWdzLCBjb25zdCBjaGFyKiB0cmFja0lkLCBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlIHNvdXJjZVR5cGUpCisgICAgUHJvYmVEYXRhKEdzdEVsZW1lbnQqIGVsZW1l
bnQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSwgR1JlZlB0cjxHc3RUYWdMaXN0
PiYmIHRhZ3MsIGNvbnN0IGNoYXIqIHRyYWNrSWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUg
c291cmNlVHlwZSwgY29uc3QgU3RyaW5nJiBwYWROYW1lKQogICAgICAgICA6IGVsZW1lbnQoZWxl
bWVudCkKICAgICAgICAgLCBwYWRUZW1wbGF0ZShwYWRUZW1wbGF0ZSkKICAgICAgICAgLCB0YWdz
KFdURk1vdmUodGFncykpCiAgICAgICAgICwgdHJhY2tJZChnX3N0cmR1cCh0cmFja0lkKSkKICAg
ICAgICAgLCBzb3VyY2VUeXBlKHNvdXJjZVR5cGUpCisgICAgICAgICwgcGFkTmFtZShwYWROYW1l
KQogICAgIHsKICAgICB9CiAKQEAgLTQ5MCwxMiArNTIwLDEzIEBAIHN0cnVjdCBQcm9iZURhdGEg
ewogICAgIEdSZWZQdHI8R3N0VGFnTGlzdD4gdGFnczsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHRy
YWNrSWQ7CiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlOworICAgIFN0
cmluZyBwYWROYW1lOwogfTsKIAogc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIHdlYmtpdE1lZGlh
U3RyZWFtU3JjUGFkUHJvYmVDYihHc3RQYWQqIHBhZCwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCBQ
cm9iZURhdGEqIGRhdGEpCiB7CiAgICAgR3N0RXZlbnQqIGV2ZW50ID0gR1NUX1BBRF9QUk9CRV9J
TkZPX0VWRU5UKGluZm8pOwotICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lU
X01FRElBX1NUUkVBTV9TUkMoZGF0YS0+ZWxlbWVudC5nZXQoKSk7CisgICAgV2ViS2l0TWVkaWFT
dHJlYW1TcmMqIHNlbGYgPSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQ19DQVNUKGRhdGEtPmVsZW1l
bnQuZ2V0KCkpOwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiRXZlbnQgJSIgR1NUX1BU
Ul9GT1JNQVQsIGV2ZW50KTsKICAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2ZW50KSkgewpA
QCAtNTExLDkgKzU0Miw5IEBAIHN0YXRpYyBHc3RQYWRQcm9iZVJldHVybiB3ZWJraXRNZWRpYVN0
cmVhbVNyY1BhZFByb2JlQ2IoR3N0UGFkKiBwYWQsIEdzdFBhZFByb2JlCiAgICAgICAgIGdzdF9l
dmVudF9zZXRfZ3JvdXBfaWQoc3RyZWFtU3RhcnQsIDEpOwogICAgICAgICBnc3RfcGFkX3B1c2hf
ZXZlbnQocGFkLCBzdHJlYW1TdGFydCk7CiAKLSAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNB
ZGRQYWQoc2VsZiwgcGFkLCBkYXRhLT5wYWRUZW1wbGF0ZSwgV1RGTW92ZShkYXRhLT50YWdzKSwg
ZGF0YS0+c291cmNlVHlwZSk7CisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKHNl
bGYsIHBhZCwgZGF0YS0+cGFkVGVtcGxhdGUsIFdURk1vdmUoZGF0YS0+dGFncyksIGRhdGEtPnNv
dXJjZVR5cGUsIGRhdGEtPnBhZE5hbWUpOwogICAgICAgICBjYWxsT25NYWluVGhyZWFkQW5kV2Fp
dChbZWxlbWVudCA9IGRhdGEtPmVsZW1lbnRdIHsKLSAgICAgICAgICAgIHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjUG9zdFN0cmVhbUNvbGxlY3Rpb24oV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoZWxlbWVu
dC5nZXQoKSkpOworICAgICAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNQb3N0U3RyZWFtQ29s
bGVjdGlvbihXRUJLSVRfTUVESUFfU1RSRUFNX1NSQ19DQVNUKGVsZW1lbnQuZ2V0KCkpKTsKICAg
ICAgICAgfSk7CiAgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX1JFTU9WRTsKICAgICB9CkBA
IC01MjQsMTAwICs1NTUsNTMgQEAgc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIHdlYmtpdE1lZGlh
U3RyZWFtU3JjUGFkUHJvYmVDYihHc3RQYWQqIHBhZCwgR3N0UGFkUHJvYmUKICAgICByZXR1cm4g
R1NUX1BBRF9QUk9CRV9PSzsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNT
ZXR1cFNyYyhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUqIHRyYWNrLCBHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFk
VGVtcGxhdGUsIGJvb2wgb25seVRyYWNrKQordm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRy
YWNrKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSog
dHJhY2ssIGJvb2wgb25seVRyYWNrKQogewogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVR5cGUgPSAi
dW5rbm93biI7Ci0gICAgc3dpdGNoICh0cmFjay0+c291cmNlKCkudHlwZSgpKSB7Ci0gICAgY2Fz
ZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbzoKKyAgICB1bnNpZ25lZCBjb3VudGVy
ID0gMDsKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGUgPSBudWxscHRyOwor
ICAgIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlv
KSB7CisgICAgICAgIHBhZFRlbXBsYXRlID0gJmF1ZGlvU3JjVGVtcGxhdGU7CiAgICAgICAgIHNv
dXJjZVR5cGUgPSAiYXVkaW8iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGU6OlZpZGVvOgorICAgICAgICBjb3VudGVyID0gc2VsZi0+cHJpdi0+YXVk
aW9QYWRDb3VudGVyLmV4Y2hhbmdlQWRkKDEpOworICAgIH0gZWxzZSBpZiAodHJhY2stPnR5cGUo
KSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbykgeworICAgICAgICBwYWRUZW1w
bGF0ZSA9ICZ2aWRlb1NyY1RlbXBsYXRlOwogICAgICAgICBzb3VyY2VUeXBlID0gInZpZGVvIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpOb25l
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY291bnRlciA9IHNlbGYt
PnByaXYtPnZpZGVvUGFkQ291bnRlci5leGNoYW5nZUFkZCgxKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBHU1RfV0FSTklOR19PQkpFQ1Qoc2VsZiwgIlVuc3VwcG9ydGVkIHRyYWNrIHR5cGU6ICVk
Iiwgc3RhdGljX2Nhc3Q8aW50Pih0cmFjay0+dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKKyAgICBTdHJpbmdCdWlsZGVyIHBhZE5hbWU7CisgICAgcGFkTmFtZS5hcHBlbmQoc291
cmNlVHlwZSk7CisgICAgcGFkTmFtZS5hcHBlbmQoIl9zcmMiKTsKKyAgICBwYWROYW1lLmFwcGVu
ZChjb3VudGVyKTsKKwogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIlNldHVwICVzIHNvdXJj
ZSBmb3IgdHJhY2sgJXMsIG9ubHkgdHJhY2s6ICVzIiwgc291cmNlVHlwZSwgdHJhY2stPmlkKCku
dXRmOCgpLmRhdGEoKSwgYm9vbEZvclByaW50aW5nKG9ubHlUcmFjaykpOworCisgICAgYXV0byBz
b3VyY2UgPSBtYWtlVW5pcXVlPEludGVybmFsU291cmNlPihHU1RfRUxFTUVOVF9DQVNUKHNlbGYp
LCAqdHJhY2ssIHBhZE5hbWUudG9TdHJpbmcoKSk7CisgICAgYXV0byogZWxlbWVudCA9IHNvdXJj
ZS0+Z2V0KCk7CiAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKHNlbGYpLCBlbGVtZW50KTsK
IAogICAgIGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGVs
ZW1lbnQsICJzcmMiKSk7CiAgICAgYXV0byB0YWdzID0gbWVkaWFTdHJlYW1UcmFja1ByaXZhdGVH
ZXRUYWdzKHRyYWNrKTsKICAgICBpZiAoIW9ubHlUcmFjaykgewotICAgICAgICBhdXRvKiBkYXRh
ID0gbmV3IFByb2JlRGF0YShHU1RfRUxFTUVOVF9DQVNUKHNlbGYpLCBwYWRUZW1wbGF0ZSwgV1RG
TW92ZSh0YWdzKSwgdHJhY2stPmlkKCkudXRmOCgpLmRhdGEoKSwgdHJhY2stPnNvdXJjZSgpLnR5
cGUoKSk7CisgICAgICAgIGF1dG8qIGRhdGEgPSBuZXcgUHJvYmVEYXRhKEdTVF9FTEVNRU5UX0NB
U1Qoc2VsZiksIHBhZFRlbXBsYXRlLCBXVEZNb3ZlKHRhZ3MpLCB0cmFjay0+aWQoKS51dGY4KCku
ZGF0YSgpLCB0cmFjay0+c291cmNlKCkudHlwZSgpLCBzb3VyY2UtPnBhZE5hbWUoKSk7CiAgICAg
ICAgIGdzdF9wYWRfYWRkX3Byb2JlKHBhZC5nZXQoKSwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5U
X0RPV05TVFJFQU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4od2Via2l0
TWVkaWFTdHJlYW1TcmNQYWRQcm9iZUNiKSwgZGF0YSwgW10oZ3BvaW50ZXIgZGF0YSkgewogICAg
ICAgICAgICAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8UHJvYmVEYXRhKj4oZGF0YSk7CiAgICAg
ICAgIH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShwYWQuZ2V0
KCksIFRSVUUpOwotICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFBhZChzZWxmLCBwYWQu
Z2V0KCksIHBhZFRlbXBsYXRlLCBXVEZNb3ZlKHRhZ3MpLCB0cmFjay0+c291cmNlKCkudHlwZSgp
KTsKKyAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRQYWQoc2VsZiwgcGFkLmdldCgpLCBw
YWRUZW1wbGF0ZSwgV1RGTW92ZSh0YWdzKSwgdHJhY2stPnNvdXJjZSgpLnR5cGUoKSwgc291cmNl
LT5wYWROYW1lKCkpOwogICAgIH0KLQotICAgIGF1dG8qIHByaXYgPSBzZWxmLT5wcml2OwotICAg
IHRyYWNrLT5hZGRPYnNlcnZlcigqcHJpdi0+bWVkaWFTdHJlYW1UcmFja09ic2VydmVyKTsKLSAg
ICBzd2l0Y2ggKHRyYWNrLT50eXBlKCkpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGU6OkF1ZGlvOgotICAgICAgICB0cmFjay0+c291cmNlKCkuYWRkQXVkaW9TYW1wbGVPYnNl
cnZlcigqcHJpdi0+bWVkaWFTdHJlYW1UcmFja09ic2VydmVyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzoKLSAgICAgICAgdHJhY2st
PnNvdXJjZSgpLmFkZFZpZGVvU2FtcGxlT2JzZXJ2ZXIoKnByaXYtPm1lZGlhU3RyZWFtVHJhY2tP
YnNlcnZlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6Tm9uZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCiAgICAg
Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChlbGVtZW50KTsKLX0KLQotc3RhdGlj
IHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQb3N0U3RyZWFtQ29sbGVjdGlvbihXZWJLaXRNZWRp
YVN0cmVhbVNyYyogc2VsZikKLXsKLSAgICBhdXRvKiBwcml2ID0gc2VsZi0+cHJpdjsKLQotICAg
IEdTVF9PQkpFQ1RfTE9DSyhzZWxmKTsKLSAgICBpZiAocHJpdi0+c3RyZWFtICYmICghcHJpdi0+
c3RyZWFtLT5hY3RpdmUoKSB8fCAhcHJpdi0+c3RyZWFtLT5oYXNUcmFja3MoKSkpIHsKLSAgICAg
ICAgR1NUX09CSkVDVF9VTkxPQ0soc2VsZik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBhdXRvIHVwc3RyZWFtSWQgPSBwcml2LT5zdHJlYW0gPyBwcml2LT5zdHJlYW0tPmlkKCkgOiBj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0gICAgcHJpdi0+c3RyZWFtQ29sbGVjdGlvbiA9
IGFkb3B0R1JlZihnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3KHVwc3RyZWFtSWQuYXNjaWkoKS5k
YXRhKCkpKTsKLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogcHJpdi0+dHJhY2tzKSB7Ci0gICAgICAg
IGlmICghdHJhY2stPmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0ocHJpdi0+c3RyZWFtQ29sbGVjdGlvbi5n
ZXQoKSwgd2Via2l0TWVkaWFTdHJlYW1OZXcodHJhY2suZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBH
U1RfT0JKRUNUX1VOTE9DSyhzZWxmKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIlBv
c3Rpbmcgc3RyZWFtIGNvbGxlY3Rpb24iKTsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2Uo
R1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9jb2xsZWN0aW9u
KEdTVF9PQkpFQ1RfQ0FTVChzZWxmKSwgcHJpdi0+c3RyZWFtQ29sbGVjdGlvbi5nZXQoKSkpOwot
fQotCi12b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soV2ViS2l0TWVkaWFTdHJlYW1T
cmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiB0cmFjaywgYm9vbCBvbmx5VHJhY2sp
Ci17Ci0gICAgYXV0byogcHJpdiA9IHNlbGYtPnByaXY7Ci0gICAgaWYgKHRyYWNrLT50eXBlKCkg
PT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pIHsKLSAgICAgICAgcHJpdi0+YXVk
aW9TcmMuZW1wbGFjZSh0cmFjay0+aXNDYXB0dXJlVHJhY2soKSwgdHJhY2stPnR5cGUoKSk7Ci0g
ICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0dXBTcmMoc2VsZiwgdHJhY2ssIHByaXYtPmF1
ZGlvU3JjLT5nZXQoKSwgJmF1ZGlvU3JjVGVtcGxhdGUsIG9ubHlUcmFjayk7Ci0gICAgfSBlbHNl
IGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKSB7
Ci0gICAgICAgIHByaXYtPnZpZGVvU3JjLmVtcGxhY2UodHJhY2stPmlzQ2FwdHVyZVRyYWNrKCks
IHRyYWNrLT50eXBlKCkpOwotICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVwU3JjKHNl
bGYsIHRyYWNrLCBwcml2LT52aWRlb1NyYy0+Z2V0KCksICZ2aWRlb1NyY1RlbXBsYXRlLCBvbmx5
VHJhY2spOwotICAgIH0gZWxzZQotICAgICAgICBHU1RfSU5GT19PQkpFQ1Qoc2VsZiwgIlVuc3Vw
cG9ydGVkIHRyYWNrIHR5cGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pih0cmFjay0+dHlwZSgpKSk7
CiAKKyAgICBzb3VyY2UtPnN0YXJ0T2JzZXJ2aW5nKCk7CisgICAgc2VsZi0+cHJpdi0+c291cmNl
cy5hcHBlbmQoV1RGTW92ZShzb3VyY2UpKTsKICAgICBzZWxmLT5wcml2LT50cmFja3MuYXBwZW5k
KHRyYWNrKTsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNSZW1vdmVUcmFj
a0J5VHlwZShXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZSB0cmFja1R5cGUpCi17Ci0gICAgaWYgKHRyYWNrVHlwZSA9PSBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlOjpBdWRpbykKLSAgICAgICAgc2VsZi0+cHJpdi0+YXVkaW9TcmMucmVzZXQoKTsK
LSAgICBlbHNlIGlmICh0cmFja1R5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Vmlk
ZW8pCi0gICAgICAgIHNlbGYtPnByaXYtPnZpZGVvU3JjLnJlc2V0KCk7Ci0gICAgZWxzZQotICAg
ICAgICBHU1RfSU5GT19PQkpFQ1Qoc2VsZiwgIlVuc3VwcG9ydGVkIHRyYWNrIHR5cGU6ICVkIiwg
c3RhdGljX2Nhc3Q8aW50Pih0cmFja1R5cGUpKTsKLX0KLQogdm9pZCB3ZWJraXRNZWRpYVN0cmVh
bVNyY1NldFN0cmVhbShXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1Qcml2
YXRlKiBzdHJlYW0sIGJvb2wgaXNWaWRlb1BsYXllcikKIHsKICAgICBBU1NFUlQoV0VCS0lUX0lT
X01FRElBX1NUUkVBTV9TUkMoc2VsZikpOwpAQCAtNjMzLDI1ICs2MTcsMTMgQEAgdm9pZCB3ZWJr
aXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbShXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVk
aWFTdHJlYW1Qcml2YXQKICAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhzZWxm
LCB0cmFjay5nZXQoKSwgb25seVRyYWNrKTsKICAgICB9CiAgICAgd2Via2l0TWVkaWFTdHJlYW1T
cmNQb3N0U3RyZWFtQ29sbGVjdGlvbihzZWxmKTsKLSAgICBnc3RfZWxlbWVudF9ub19tb3JlX3Bh
ZHMoR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdE1lZGlh
U3RyZWFtU3JjUHVzaFZpZGVvU2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RT
YW1wbGUqIHNhbXBsZSkKLXsKLSAgICBpZiAoc2VsZi0+cHJpdi0+dmlkZW9TcmMpCi0gICAgICAg
IHNlbGYtPnByaXYtPnZpZGVvU3JjLT5wdXNoU2FtcGxlKHNhbXBsZSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVzaEF1ZGlvU2FtcGxlKFdlYktpdE1lZGlhU3RyZWFt
U3JjKiBzZWxmLCBjb25zdCBHUmVmUHRyPEdzdFNhbXBsZT4mIHNhbXBsZSkKLXsKLSAgICBpZiAo
c2VsZi0+cHJpdi0+YXVkaW9TcmMpCi0gICAgICAgIHNlbGYtPnByaXYtPmF1ZGlvU3JjLT5wdXNo
U2FtcGxlKHNhbXBsZS5nZXQoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFt
U3JjVHJhY2tFbmRlZChXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUmIHRyYWNrKQorc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNUcmFja0Vu
ZGVkKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBJbnRlcm5hbFNvdXJjZSYgc291cmNlKQog
ewogICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CiAKKyAgICBhdXRvJiB0cmFjayA9IHNvdXJjZS50
cmFjaygpOwogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIlRyYWNrICVzIGVuZGVkIiwgdHJh
Y2subGFiZWwoKS51dGY4KCkuZGF0YSgpKTsKICAgICBHU1RfT0JKRUNUX0xPQ0soc2VsZik7CiAg
ICAgR3N0RWxlbWVudCogZWxlbWVudCA9IEdTVF9FTEVNRU5UX0NBU1Qoc2VsZik7CkBAIC02ODQs
NiArNjU2LDM2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjVHJhY2tFbmRlZChX
ZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlCiAgICAgYXV0byB0YWdzID0gbWVk
aWFTdHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKCZ0cmFjayk7CiAgICAgZ3N0X3BhZF9wdXNoX2V2
ZW50KHBhZC5nZXQoKSwgZ3N0X2V2ZW50X25ld190YWcodGFncy5sZWFrUmVmKCkpKTsKICAgICBn
c3RfcGFkX3B1c2hfZXZlbnQocGFkLmdldCgpLCBnc3RfZXZlbnRfbmV3X2VvcygpKTsKKworICAg
IEdTVF9TVEFURV9MT0NLKEdTVF9FTEVNRU5UX0NBU1Qoc2VsZikpOworICAgIGdzdF9lbGVtZW50
X3NldF9sb2NrZWRfc3RhdGUoc291cmNlLmdldCgpLCB0cnVlKTsKKyAgICBnc3RfZWxlbWVudF9z
ZXRfc3RhdGUoc291cmNlLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgZ3N0X2Jpbl9yZW1v
dmUoR1NUX0JJTl9DQVNUKHNlbGYpLCBzb3VyY2UuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3Nl
dF9sb2NrZWRfc3RhdGUoc291cmNlLmdldCgpLCBmYWxzZSk7CisgICAgR1NUX1NUQVRFX1VOTE9D
SyhHU1RfRUxFTUVOVF9DQVNUKHNlbGYpKTsKKworICAgIGF1dG8gcHJveHlQYWQgPSBhZG9wdEdS
ZWYoR1NUX1BBRF9DQVNUKGdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsKEdTVF9QUk9YWV9QQUQo
cGFkLmdldCgpKSkpKTsKKyAgICBpZiAocHJveHlQYWQpCisgICAgICAgIGdzdF9mbG93X2NvbWJp
bmVyX3JlbW92ZV9wYWQoc2VsZi0+cHJpdi0+Zmxvd0NvbWJpbmVyLmdldCgpLCBwcm94eVBhZC5n
ZXQoKSk7CisKKyAgICBnc3RfcGFkX3NldF9hY3RpdmUocGFkLmdldCgpLCBGQUxTRSk7CisgICAg
Z3N0X2VsZW1lbnRfcmVtb3ZlX3BhZChHU1RfRUxFTUVOVF9DQVNUKHNlbGYpLCBwYWQuZ2V0KCkp
OworfQorCit2b2lkIEludGVybmFsU291cmNlOjp0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJikKK3sKKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFt
U3JjVHJhY2tFbmRlZChXRUJLSVRfTUVESUFfU1RSRUFNX1NSQ19DQVNUKG1fcGFyZW50KSwgKnRo
aXMpOworCisgICAgc3RvcE9ic2VydmluZygpOworfQorCit2b2lkIHdlYmtpdE1lZGlhU3RyZWFt
U3JjQ29uZmlndXJlQXVkaW9UcmFja3MoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIGZsb2F0
IHZvbHVtZSwgYm9vbCBpc011dGVkLCBib29sIGlzUGxheWluZykKK3sKKyAgICBmb3IgKGF1dG8m
IHNvdXJjZSA6IHNlbGYtPnByaXYtPnNvdXJjZXMpIHsKKyAgICAgICAgaWYgKHNvdXJjZS0+dHJh
Y2soKS50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pCisgICAgICAg
ICAgICBzb3VyY2UtPmNvbmZpZ3VyZUF1ZGlvVHJhY2sodm9sdW1lLCBpc011dGVkLCBpc1BsYXlp
bmcpOworICAgIH0KIH0KIAogR3N0RWxlbWVudCogd2Via2l0TWVkaWFTdHJlYW1TcmNOZXcoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaAppbmRleCBi
ZjFjMDMyN2JiNDIwNzEyOWZkZGYwYTNhMmQ3NzY4MDA2ODc0YWFmLi42MmFhZmY3OGI5YmExNjI4
OGM5OTY3NzZiNTVjODRmYmI2ZWFiMTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuaApAQCAtMzAsMTQgKzMwLDE0IEBAIGNsYXNzIE1lZGlhU3Ry
ZWFtUHJpdmF0ZTsKIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOwogfQogCi1HX0JFR0lO
X0RFQ0xTCi0KICNkZWZpbmUgV0VCS0lUX01FRElBX1RSQUNLX1RBR19XSURUSCAid2Via2l0LW1l
ZGlhLXN0cmVhbS13aWR0aCIKICNkZWZpbmUgV0VCS0lUX01FRElBX1RSQUNLX1RBR19IRUlHSFQg
IndlYmtpdC1tZWRpYS1zdHJlYW0taGVpZ2h0IgogI2RlZmluZSBXRUJLSVRfTUVESUFfVFJBQ0tf
VEFHX0tJTkQgIndlYmtpdC1tZWRpYS1zdHJlYW0ta2luZCIKIAogI2RlZmluZSBXRUJLSVRfTUVE
SUFfU1RSRUFNX1NSQyhvKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG8pLCBXRUJLSVRf
VFlQRV9NRURJQV9TVFJFQU1fU1JDLCBXZWJLaXRNZWRpYVN0cmVhbVNyYykpCiAjZGVmaW5lIFdF
QktJVF9JU19NRURJQV9TVFJFQU1fU1JDKG8pIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
byksIFdFQktJVF9UWVBFX01FRElBX1NUUkVBTV9TUkMpKQorI2RlZmluZSBXRUJLSVRfTUVESUFf
U1RSRUFNX1NSQ19DQVNUKG8pICgoV2ViS2l0TWVkaWFTdHJlYW1TcmMqKSBvKQorCiAjZGVmaW5l
IFdFQktJVF9UWVBFX01FRElBX1NUUkVBTV9TUkMgKHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX2dl
dF90eXBlKCkpCiBHVHlwZSB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY19nZXRfdHlwZSh2b2lkKTsK
IApAQCAtNTQsMTAgKzU0LDkgQEAgc3RydWN0IF9XZWJLaXRNZWRpYVN0cmVhbVNyY0NsYXNzIHsK
ICAgICBHc3RCaW5DbGFzcyBwYXJlbnRDbGFzczsKIH07CiAKK0dzdEVsZW1lbnQqIHdlYmtpdE1l
ZGlhU3RyZWFtU3JjTmV3KCk7CiB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0U3RyZWFtKFdl
YktpdE1lZGlhU3RyZWFtU3JjKiwgV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlKiwgYm9vbCBp
c1ZpZGVvUGxheWVyKTsKIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXZWJLaXRN
ZWRpYVN0cmVhbVNyYyosIFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiwgYm9vbCBv
bmx5VHJhY2spOwotR3N0RWxlbWVudCogd2Via2l0TWVkaWFTdHJlYW1TcmNOZXcoKTsKLQotR19F
TkRfREVDTFMKK3ZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNDb25maWd1cmVBdWRpb1RyYWNrcyhX
ZWJLaXRNZWRpYVN0cmVhbVNyYyosIGZsb2F0IHZvbHVtZSwgYm9vbCBpc011dGVkLCBib29sIGlz
UGxheWluZyk7CiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmJiMmE5NGEzNDRiMWZmYTliZGNhNDQ0ZGNh
MmU1YmJhZTRmMGQ0ZC4uOWE5ODBmN2YwZjM4NTIzOGJhYTlmNWMwNGIxNDUzOTA4YTM0OTQ1MiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA0LTE3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5v
cm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXVtNZWRpYVN0cmVhbV0gZmFz
dC9tZWRpYXN0cmVhbS9wbGF5LW5ld2x5LWFkZGVkLWF1ZGlvLXRyYWNrLmh0bWwgaXMgZmFpbGlu
ZyBzaW5jZSBhZGRlZCBpbiByMjYwMzgwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTA4NDAKKworICAgICAgICBSZXZpZXdlZCBieSBYYWJpZXIgUm9k
cmlndWV6LUNhbHZhci4KKworICAgICAgICBSZW1vdmUgZmxha3luZXNzIGZyb20gdGVzdCBhbmQg
dW5mbGFnIGl0IG9uIEdUSy4KKworICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vcGxheS1uZXds
eS1hZGRlZC1hdWRpby10cmFjay5odG1sOiBhZGRUcmFjayBtaWdodCBoYXZlIGFzeW5jaHJvbm91
cworICAgICAgICBlZmZlY3RzLCBzbyBpdCdzIGJldHRlciB0byByZWx5IG9uIHRoZSB0cmFja2Fk
ZGVkIGV2ZW50IHdoZW4gdGVzdGluZyBpdHMgcmVzdWx0LgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIxLTA0LTE2ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRw
aW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdIFVucmV2aWV3ZWQgdGVzdCBnYXJkZW5p
bmcuIFVwZGF0ZSBmb2N1cy12aXNpYmxlIHRlc3RzIGJhc2VsaW5lcyBhZnRlciByMjc2MTI3Lgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9wbGF5LW5ld2x5LWFkZGVk
LWF1ZGlvLXRyYWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL3BsYXktbmV3
bHktYWRkZWQtYXVkaW8tdHJhY2suaHRtbAppbmRleCA3ZmU5ZTJhNjdhYTNiZTEyYTE1NjE5ZTE3
YmU2NjljOTQ1M2RkOGY3Li4zYTM1ZDM5OWQ0MmIwYzQ2MWNhOTRkNGNkZjIyZTExMTIwNzE2NzJm
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL3BsYXktbmV3bHktYWRk
ZWQtYXVkaW8tdHJhY2suaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL3Bs
YXktbmV3bHktYWRkZWQtYXVkaW8tdHJhY2suaHRtbApAQCAtMTEsMTEgKzExLDE0IEBAIHByb21p
c2VfdGVzdChhc3luYyAoKSA9PiB7CiAKICAgICBhd2FpdCB2aWRlby5wbGF5KCk7CiAKKyAgICB2
aWRlby5zcmNPYmplY3Qub250cmFja2FkZGVkID0gKCkgPT4geworICAgICAgICBpZiAod2luZG93
LmludGVybmFscykKKyAgICAgICAgICAgIGFzc2VydF90cnVlKGludGVybmFscy5zaG91bGRBdWRp
b1RyYWNrUGxheSh2aWRlby5hdWRpb1RyYWNrc1swXSkpOworICAgIH07CisKICAgICBsZXQgc3Ry
ZWFtMiA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW8g
OiB0cnVlIH0pOwogICAgIHZpZGVvLnNyY09iamVjdC5hZGRUcmFjayhzdHJlYW0yLmdldEF1ZGlv
VHJhY2tzKClbMF0pOwotCi0gICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0gICAgICAgIGFzc2Vy
dF90cnVlKGludGVybmFscy5zaG91bGRBdWRpb1RyYWNrUGxheSh2aWRlby5hdWRpb1RyYWNrc1sw
XSkpOworICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZl
LCA1MCkpOwogfSwgIkFkZCBhbiBhdWRpbyB0cmFjayB3aGlsZSBwbGF5aW5nIHZpZGVvIik7CiAK
IHByb21pc2VfdGVzdChhc3luYyAoKSA9PiB7CkBAIC0yNCwxMCArMjcsMTMgQEAgcHJvbWlzZV90
ZXN0KGFzeW5jICgpID0+IHsKIAogICAgIGF3YWl0IHZpZGVvLnBsYXkoKTsKIAorICAgIHZpZGVv
LnNyY09iamVjdC5vbnRyYWNrYWRkZWQgPSAoKSA9PiB7CisgICAgICAgIGlmICh3aW5kb3cuaW50
ZXJuYWxzKQorICAgICAgICAgICAgYXNzZXJ0X3RydWUoaW50ZXJuYWxzLnNob3VsZEF1ZGlvVHJh
Y2tQbGF5KHZpZGVvLmF1ZGlvVHJhY2tzWzFdKSk7CisgICAgfTsKKwogICAgIHZpZGVvLnNyY09i
amVjdC5hZGRUcmFjayhzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSk7CiAgICAgYXdhaXQgbmV3
IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwKSk7Ci0gICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMpCi0gICAgICAgIGFzc2VydF90cnVlKGludGVybmFscy5zaG91bGRBdWRp
b1RyYWNrUGxheSh2aWRlby5hdWRpb1RyYWNrc1sxXSkpOwogfSwgIkFkZCBhbiBhdWRpbyB0cmFj
ayB3aGlsZSBwbGF5aW5nIGF1ZGlvIik7CiAgICAgICAgIDwvc2NyaXB0PgogICAgIDwvaGVhZD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNjUyMTU4Njgz
YWJkOTVmYjc4MzU1MjIxOTg0OWRkMTllNDkyNjFlYi4uNWNlYzc5MTA2Zjg3ZDdmNjU3YmE3MTRh
YWEyOGRlYWE4YWUyNGM0YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTE2MSw3ICsxNjEsNiBAQCB3ZWJraXQub3JnL2IvMjE5NTMwIGZhc3QvZG9tL0hU
TUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLXNldC5odG1sIFsgRmFpbAogCiAjIEdT
dHJlYW1lciAtIEdUSy1Pbmx5LiBNb3N0IEdTdHJlYW1lciBpc3N1ZXMgcHJvYmFibHkgd2lsbCBn
byBpbiB0aGUgZ2xpYiBleHBlY3RhdGlvbnMKIHdlYmtpdC5vcmcvYi8yMTA1MjggbWVkaWEvdmlk
ZW8tc3VwcG9ydHMtZnVsbHNjcmVlbi5odG1sIFsgUGFzcyBdCi13ZWJraXQub3JnL2IvMjEwODQw
IGZhc3QvbWVkaWFzdHJlYW0vcGxheS1uZXdseS1hZGRlZC1hdWRpby10cmFjay5odG1sIFsgRmFp
bHVyZSBdCiAKICMgTGF5b3V0CiB3ZWJraXQub3JnL2IvMjE4NTEwIGZhc3QvZG9tL1JhbmdlL2dl
dEJvdW5kaW5nQ2xpZW50UmVjdC5odG1sIFsgRmFpbHVyZSBdCg==
</data>
<flag name="commit-queue"
          id="446585"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>